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