1 // SPDX-License-Identifier: GPL-2.0-or-later 2 #include "xor_impl.h" 3 4 static void 5 xor_8regs_2(unsigned long bytes, unsigned long * __restrict p1, 6 const unsigned long * __restrict p2) 7 { 8 long lines = bytes / (sizeof (long)) / 8; 9 10 do { 11 p1[0] ^= p2[0]; 12 p1[1] ^= p2[1]; 13 p1[2] ^= p2[2]; 14 p1[3] ^= p2[3]; 15 p1[4] ^= p2[4]; 16 p1[5] ^= p2[5]; 17 p1[6] ^= p2[6]; 18 p1[7] ^= p2[7]; 19 p1 += 8; 20 p2 += 8; 21 } while (--lines > 0); 22 } 23 24 static void 25 xor_8regs_3(unsigned long bytes, unsigned long * __restrict p1, 26 const unsigned long * __restrict p2, 27 const unsigned long * __restrict p3) 28 { 29 long lines = bytes / (sizeof (long)) / 8; 30 31 do { 32 p1[0] ^= p2[0] ^ p3[0]; 33 p1[1] ^= p2[1] ^ p3[1]; 34 p1[2] ^= p2[2] ^ p3[2]; 35 p1[3] ^= p2[3] ^ p3[3]; 36 p1[4] ^= p2[4] ^ p3[4]; 37 p1[5] ^= p2[5] ^ p3[5]; 38 p1[6] ^= p2[6] ^ p3[6]; 39 p1[7] ^= p2[7] ^ p3[7]; 40 p1 += 8; 41 p2 += 8; 42 p3 += 8; 43 } while (--lines > 0); 44 } 45 46 static void 47 xor_8regs_4(unsigned long bytes, unsigned long * __restrict p1, 48 const unsigned long * __restrict p2, 49 const unsigned long * __restrict p3, 50 const unsigned long * __restrict p4) 51 { 52 long lines = bytes / (sizeof (long)) / 8; 53 54 do { 55 p1[0] ^= p2[0] ^ p3[0] ^ p4[0]; 56 p1[1] ^= p2[1] ^ p3[1] ^ p4[1]; 57 p1[2] ^= p2[2] ^ p3[2] ^ p4[2]; 58 p1[3] ^= p2[3] ^ p3[3] ^ p4[3]; 59 p1[4] ^= p2[4] ^ p3[4] ^ p4[4]; 60 p1[5] ^= p2[5] ^ p3[5] ^ p4[5]; 61 p1[6] ^= p2[6] ^ p3[6] ^ p4[6]; 62 p1[7] ^= p2[7] ^ p3[7] ^ p4[7]; 63 p1 += 8; 64 p2 += 8; 65 p3 += 8; 66 p4 += 8; 67 } while (--lines > 0); 68 } 69 70 static void 71 xor_8regs_5(unsigned long bytes, unsigned long * __restrict p1, 72 const unsigned long * __restrict p2, 73 const unsigned long * __restrict p3, 74 const unsigned long * __restrict p4, 75 const unsigned long * __restrict p5) 76 { 77 long lines = bytes / (sizeof (long)) / 8; 78 79 do { 80 p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0]; 81 p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1]; 82 p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2]; 83 p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3]; 84 p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4]; 85 p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5]; 86 p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6]; 87 p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7]; 88 p1 += 8; 89 p2 += 8; 90 p3 += 8; 91 p4 += 8; 92 p5 += 8; 93 } while (--lines > 0); 94 } 95 96 #ifndef NO_TEMPLATE 97 DO_XOR_BLOCKS(8regs, xor_8regs_2, xor_8regs_3, xor_8regs_4, xor_8regs_5); 98 99 struct xor_block_template xor_block_8regs = { 100 .name = "8regs", 101 .xor_gen = xor_gen_8regs, 102 }; 103 #endif /* NO_TEMPLATE */ 104