1 // SPDX-License-Identifier: GPL-2.0
3 * Optimized xor_block operation for RAID4/5
5 * Copyright IBM Corp. 2016
6 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
9 #include <linux/types.h>
10 #include <linux/export.h>
11 #include <linux/raid/xor.h>
14 static void xor_xc_2(unsigned long bytes, unsigned long * __restrict p1,
15 const unsigned long * __restrict p2)
24 "0: xc 0(256,%1),0(%2)\n"
30 "2: xc 0(1,%1),0(%2)\n"
32 : : "d" (bytes), "a" (p1), "a" (p2)
33 : "0", "1", "cc", "memory");
36 static void xor_xc_3(unsigned long bytes, unsigned long * __restrict p1,
37 const unsigned long * __restrict p2,
38 const unsigned long * __restrict p3)
47 "0: xc 0(256,%1),0(%2)\n"
48 " xc 0(256,%1),0(%3)\n"
56 "2: xc 0(1,%1),0(%2)\n"
59 : "+d" (bytes), "+a" (p1), "+a" (p2), "+a" (p3)
60 : : "0", "1", "cc", "memory");
63 static void xor_xc_4(unsigned long bytes, unsigned long * __restrict p1,
64 const unsigned long * __restrict p2,
65 const unsigned long * __restrict p3,
66 const unsigned long * __restrict p4)
75 "0: xc 0(256,%1),0(%2)\n"
76 " xc 0(256,%1),0(%3)\n"
77 " xc 0(256,%1),0(%4)\n"
87 "2: xc 0(1,%1),0(%2)\n"
91 : "+d" (bytes), "+a" (p1), "+a" (p2), "+a" (p3), "+a" (p4)
92 : : "0", "1", "cc", "memory");
95 static void xor_xc_5(unsigned long bytes, unsigned long * __restrict p1,
96 const unsigned long * __restrict p2,
97 const unsigned long * __restrict p3,
98 const unsigned long * __restrict p4,
99 const unsigned long * __restrict p5)
108 "0: xc 0(256,%1),0(%2)\n"
109 " xc 0(256,%1),0(%3)\n"
110 " xc 0(256,%1),0(%4)\n"
111 " xc 0(256,%1),0(%5)\n"
123 "2: xc 0(1,%1),0(%2)\n"
124 " xc 0(1,%1),0(%3)\n"
125 " xc 0(1,%1),0(%4)\n"
126 " xc 0(1,%1),0(%5)\n"
128 : "+d" (bytes), "+a" (p1), "+a" (p2), "+a" (p3), "+a" (p4),
130 : : "0", "1", "cc", "memory");
133 struct xor_block_template xor_block_xc = {
140 EXPORT_SYMBOL(xor_block_xc);