^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * include/asm-generic/xor.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Generic optimized RAID-5 checksumming functions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <linux/prefetch.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) xor_8regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) long lines = bytes / (sizeof (long)) / 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) p1[0] ^= p2[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) p1[1] ^= p2[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) p1[2] ^= p2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) p1[3] ^= p2[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) p1[4] ^= p2[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) p1[5] ^= p2[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) p1[6] ^= p2[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) p1[7] ^= p2[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) xor_8regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) unsigned long *p3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) long lines = bytes / (sizeof (long)) / 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) p1[0] ^= p2[0] ^ p3[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) p1[1] ^= p2[1] ^ p3[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) p1[2] ^= p2[2] ^ p3[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) p1[3] ^= p2[3] ^ p3[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) p1[4] ^= p2[4] ^ p3[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) p1[5] ^= p2[5] ^ p3[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) p1[6] ^= p2[6] ^ p3[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) p1[7] ^= p2[7] ^ p3[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) p3 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) xor_8regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) unsigned long *p3, unsigned long *p4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) long lines = bytes / (sizeof (long)) / 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) p1[0] ^= p2[0] ^ p3[0] ^ p4[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) p1[1] ^= p2[1] ^ p3[1] ^ p4[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) p1[2] ^= p2[2] ^ p3[2] ^ p4[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) p1[3] ^= p2[3] ^ p3[3] ^ p4[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) p1[4] ^= p2[4] ^ p3[4] ^ p4[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) p1[5] ^= p2[5] ^ p3[5] ^ p4[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) p1[6] ^= p2[6] ^ p3[6] ^ p4[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) p1[7] ^= p2[7] ^ p3[7] ^ p4[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) p3 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) p4 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) xor_8regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) unsigned long *p3, unsigned long *p4, unsigned long *p5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) long lines = bytes / (sizeof (long)) / 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) p3 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) p4 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) p5 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) xor_32regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) long lines = bytes / (sizeof (long)) / 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) register long d0, d1, d2, d3, d4, d5, d6, d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) d0 = p1[0]; /* Pull the stuff into registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) d1 = p1[1]; /* ... in bursts, if possible. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) d2 = p1[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) d3 = p1[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) d4 = p1[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) d5 = p1[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) d6 = p1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) d7 = p1[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) d0 ^= p2[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) d1 ^= p2[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) d2 ^= p2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) d3 ^= p2[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) d4 ^= p2[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) d5 ^= p2[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) d6 ^= p2[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) d7 ^= p2[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) p1[0] = d0; /* Store the result (in bursts) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) p1[1] = d1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) p1[2] = d2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) p1[3] = d3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) p1[4] = d4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) p1[5] = d5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) p1[6] = d6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) p1[7] = d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) xor_32regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) unsigned long *p3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) long lines = bytes / (sizeof (long)) / 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) register long d0, d1, d2, d3, d4, d5, d6, d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) d0 = p1[0]; /* Pull the stuff into registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) d1 = p1[1]; /* ... in bursts, if possible. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) d2 = p1[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) d3 = p1[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) d4 = p1[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) d5 = p1[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) d6 = p1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) d7 = p1[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) d0 ^= p2[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) d1 ^= p2[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) d2 ^= p2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) d3 ^= p2[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) d4 ^= p2[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) d5 ^= p2[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) d6 ^= p2[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) d7 ^= p2[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) d0 ^= p3[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) d1 ^= p3[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) d2 ^= p3[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) d3 ^= p3[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) d4 ^= p3[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) d5 ^= p3[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) d6 ^= p3[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) d7 ^= p3[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) p1[0] = d0; /* Store the result (in bursts) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) p1[1] = d1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) p1[2] = d2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) p1[3] = d3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) p1[4] = d4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) p1[5] = d5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) p1[6] = d6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) p1[7] = d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) p3 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) xor_32regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) unsigned long *p3, unsigned long *p4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) long lines = bytes / (sizeof (long)) / 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) register long d0, d1, d2, d3, d4, d5, d6, d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) d0 = p1[0]; /* Pull the stuff into registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) d1 = p1[1]; /* ... in bursts, if possible. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) d2 = p1[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) d3 = p1[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) d4 = p1[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) d5 = p1[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) d6 = p1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) d7 = p1[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) d0 ^= p2[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) d1 ^= p2[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) d2 ^= p2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) d3 ^= p2[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) d4 ^= p2[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) d5 ^= p2[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) d6 ^= p2[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) d7 ^= p2[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) d0 ^= p3[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) d1 ^= p3[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) d2 ^= p3[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) d3 ^= p3[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) d4 ^= p3[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) d5 ^= p3[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) d6 ^= p3[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) d7 ^= p3[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) d0 ^= p4[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) d1 ^= p4[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) d2 ^= p4[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) d3 ^= p4[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) d4 ^= p4[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) d5 ^= p4[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) d6 ^= p4[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) d7 ^= p4[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) p1[0] = d0; /* Store the result (in bursts) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) p1[1] = d1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) p1[2] = d2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) p1[3] = d3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) p1[4] = d4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) p1[5] = d5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) p1[6] = d6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) p1[7] = d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) p3 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) p4 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) xor_32regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) unsigned long *p3, unsigned long *p4, unsigned long *p5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) long lines = bytes / (sizeof (long)) / 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) register long d0, d1, d2, d3, d4, d5, d6, d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) d0 = p1[0]; /* Pull the stuff into registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) d1 = p1[1]; /* ... in bursts, if possible. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) d2 = p1[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) d3 = p1[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) d4 = p1[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) d5 = p1[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) d6 = p1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) d7 = p1[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) d0 ^= p2[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) d1 ^= p2[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) d2 ^= p2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) d3 ^= p2[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) d4 ^= p2[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) d5 ^= p2[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) d6 ^= p2[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) d7 ^= p2[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) d0 ^= p3[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) d1 ^= p3[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) d2 ^= p3[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) d3 ^= p3[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) d4 ^= p3[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) d5 ^= p3[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) d6 ^= p3[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) d7 ^= p3[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) d0 ^= p4[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) d1 ^= p4[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) d2 ^= p4[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) d3 ^= p4[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) d4 ^= p4[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) d5 ^= p4[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) d6 ^= p4[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) d7 ^= p4[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) d0 ^= p5[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) d1 ^= p5[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) d2 ^= p5[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) d3 ^= p5[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) d4 ^= p5[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) d5 ^= p5[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) d6 ^= p5[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) d7 ^= p5[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) p1[0] = d0; /* Store the result (in bursts) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) p1[1] = d1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) p1[2] = d2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) p1[3] = d3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) p1[4] = d4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) p1[5] = d5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) p1[6] = d6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) p1[7] = d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) p3 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) p4 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) p5 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) xor_8regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) long lines = bytes / (sizeof (long)) / 8 - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) prefetchw(p1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) prefetch(p2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) prefetchw(p1+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) prefetch(p2+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) once_more:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) p1[0] ^= p2[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) p1[1] ^= p2[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) p1[2] ^= p2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) p1[3] ^= p2[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) p1[4] ^= p2[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) p1[5] ^= p2[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) p1[6] ^= p2[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) p1[7] ^= p2[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) if (lines == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) goto once_more;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) xor_8regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) unsigned long *p3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) long lines = bytes / (sizeof (long)) / 8 - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) prefetchw(p1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) prefetch(p2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) prefetch(p3);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) prefetchw(p1+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) prefetch(p2+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) prefetch(p3+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) once_more:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) p1[0] ^= p2[0] ^ p3[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) p1[1] ^= p2[1] ^ p3[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) p1[2] ^= p2[2] ^ p3[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) p1[3] ^= p2[3] ^ p3[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) p1[4] ^= p2[4] ^ p3[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) p1[5] ^= p2[5] ^ p3[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) p1[6] ^= p2[6] ^ p3[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) p1[7] ^= p2[7] ^ p3[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) p3 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) if (lines == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) goto once_more;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) xor_8regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) unsigned long *p3, unsigned long *p4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) long lines = bytes / (sizeof (long)) / 8 - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) prefetchw(p1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) prefetch(p2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) prefetch(p3);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) prefetch(p4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) prefetchw(p1+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) prefetch(p2+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) prefetch(p3+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) prefetch(p4+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) once_more:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) p1[0] ^= p2[0] ^ p3[0] ^ p4[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) p1[1] ^= p2[1] ^ p3[1] ^ p4[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) p1[2] ^= p2[2] ^ p3[2] ^ p4[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) p1[3] ^= p2[3] ^ p3[3] ^ p4[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) p1[4] ^= p2[4] ^ p3[4] ^ p4[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) p1[5] ^= p2[5] ^ p3[5] ^ p4[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) p1[6] ^= p2[6] ^ p3[6] ^ p4[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) p1[7] ^= p2[7] ^ p3[7] ^ p4[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) p3 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) p4 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) if (lines == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) goto once_more;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) xor_8regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) unsigned long *p3, unsigned long *p4, unsigned long *p5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) long lines = bytes / (sizeof (long)) / 8 - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) prefetchw(p1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) prefetch(p2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) prefetch(p3);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) prefetch(p4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) prefetch(p5);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) prefetchw(p1+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) prefetch(p2+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) prefetch(p3+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) prefetch(p4+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) prefetch(p5+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) once_more:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) p3 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) p4 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) p5 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) if (lines == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) goto once_more;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) xor_32regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) long lines = bytes / (sizeof (long)) / 8 - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) prefetchw(p1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) prefetch(p2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) register long d0, d1, d2, d3, d4, d5, d6, d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) prefetchw(p1+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) prefetch(p2+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) once_more:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) d0 = p1[0]; /* Pull the stuff into registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) d1 = p1[1]; /* ... in bursts, if possible. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) d2 = p1[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) d3 = p1[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) d4 = p1[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) d5 = p1[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) d6 = p1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) d7 = p1[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) d0 ^= p2[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) d1 ^= p2[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) d2 ^= p2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) d3 ^= p2[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) d4 ^= p2[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) d5 ^= p2[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) d6 ^= p2[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) d7 ^= p2[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) p1[0] = d0; /* Store the result (in bursts) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) p1[1] = d1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) p1[2] = d2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) p1[3] = d3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) p1[4] = d4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) p1[5] = d5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) p1[6] = d6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) p1[7] = d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) if (lines == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) goto once_more;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) xor_32regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) unsigned long *p3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) long lines = bytes / (sizeof (long)) / 8 - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) prefetchw(p1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) prefetch(p2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) prefetch(p3);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) register long d0, d1, d2, d3, d4, d5, d6, d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) prefetchw(p1+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) prefetch(p2+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) prefetch(p3+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) once_more:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) d0 = p1[0]; /* Pull the stuff into registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) d1 = p1[1]; /* ... in bursts, if possible. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) d2 = p1[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) d3 = p1[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) d4 = p1[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) d5 = p1[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) d6 = p1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) d7 = p1[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) d0 ^= p2[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) d1 ^= p2[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) d2 ^= p2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) d3 ^= p2[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) d4 ^= p2[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) d5 ^= p2[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) d6 ^= p2[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) d7 ^= p2[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) d0 ^= p3[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) d1 ^= p3[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) d2 ^= p3[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) d3 ^= p3[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) d4 ^= p3[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) d5 ^= p3[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) d6 ^= p3[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) d7 ^= p3[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) p1[0] = d0; /* Store the result (in bursts) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) p1[1] = d1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) p1[2] = d2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) p1[3] = d3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) p1[4] = d4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) p1[5] = d5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) p1[6] = d6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) p1[7] = d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) p3 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) if (lines == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) goto once_more;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) xor_32regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) unsigned long *p3, unsigned long *p4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) long lines = bytes / (sizeof (long)) / 8 - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) prefetchw(p1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) prefetch(p2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) prefetch(p3);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) prefetch(p4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) register long d0, d1, d2, d3, d4, d5, d6, d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) prefetchw(p1+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) prefetch(p2+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) prefetch(p3+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) prefetch(p4+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) once_more:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) d0 = p1[0]; /* Pull the stuff into registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) d1 = p1[1]; /* ... in bursts, if possible. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) d2 = p1[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) d3 = p1[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) d4 = p1[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) d5 = p1[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) d6 = p1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) d7 = p1[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) d0 ^= p2[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) d1 ^= p2[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) d2 ^= p2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) d3 ^= p2[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) d4 ^= p2[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) d5 ^= p2[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) d6 ^= p2[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) d7 ^= p2[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) d0 ^= p3[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) d1 ^= p3[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) d2 ^= p3[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) d3 ^= p3[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) d4 ^= p3[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) d5 ^= p3[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) d6 ^= p3[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) d7 ^= p3[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) d0 ^= p4[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) d1 ^= p4[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) d2 ^= p4[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) d3 ^= p4[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) d4 ^= p4[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) d5 ^= p4[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) d6 ^= p4[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) d7 ^= p4[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) p1[0] = d0; /* Store the result (in bursts) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) p1[1] = d1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) p1[2] = d2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) p1[3] = d3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) p1[4] = d4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) p1[5] = d5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) p1[6] = d6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) p1[7] = d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) p3 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) p4 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) if (lines == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) goto once_more;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) xor_32regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) unsigned long *p3, unsigned long *p4, unsigned long *p5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) long lines = bytes / (sizeof (long)) / 8 - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) prefetchw(p1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) prefetch(p2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) prefetch(p3);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) prefetch(p4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) prefetch(p5);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) register long d0, d1, d2, d3, d4, d5, d6, d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) prefetchw(p1+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) prefetch(p2+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) prefetch(p3+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) prefetch(p4+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) prefetch(p5+8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) once_more:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) d0 = p1[0]; /* Pull the stuff into registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) d1 = p1[1]; /* ... in bursts, if possible. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) d2 = p1[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) d3 = p1[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) d4 = p1[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) d5 = p1[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) d6 = p1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) d7 = p1[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) d0 ^= p2[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) d1 ^= p2[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) d2 ^= p2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) d3 ^= p2[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) d4 ^= p2[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) d5 ^= p2[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) d6 ^= p2[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) d7 ^= p2[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) d0 ^= p3[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) d1 ^= p3[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) d2 ^= p3[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) d3 ^= p3[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) d4 ^= p3[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) d5 ^= p3[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) d6 ^= p3[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) d7 ^= p3[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) d0 ^= p4[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) d1 ^= p4[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) d2 ^= p4[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) d3 ^= p4[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) d4 ^= p4[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) d5 ^= p4[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) d6 ^= p4[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) d7 ^= p4[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) d0 ^= p5[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) d1 ^= p5[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) d2 ^= p5[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) d3 ^= p5[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) d4 ^= p5[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) d5 ^= p5[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) d6 ^= p5[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) d7 ^= p5[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) p1[0] = d0; /* Store the result (in bursts) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) p1[1] = d1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) p1[2] = d2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) p1[3] = d3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) p1[4] = d4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) p1[5] = d5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) p1[6] = d6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) p1[7] = d7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) p1 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) p2 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) p3 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) p4 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) p5 += 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) } while (--lines > 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) if (lines == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) goto once_more;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) static struct xor_block_template xor_block_8regs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) .name = "8regs",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) .do_2 = xor_8regs_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) .do_3 = xor_8regs_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) .do_4 = xor_8regs_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) .do_5 = xor_8regs_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) static struct xor_block_template xor_block_32regs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) .name = "32regs",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) .do_2 = xor_32regs_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) .do_3 = xor_32regs_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) .do_4 = xor_32regs_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) .do_5 = xor_32regs_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) static struct xor_block_template xor_block_8regs_p __maybe_unused = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) .name = "8regs_prefetch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) .do_2 = xor_8regs_p_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) .do_3 = xor_8regs_p_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) .do_4 = xor_8regs_p_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) .do_5 = xor_8regs_p_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) static struct xor_block_template xor_block_32regs_p __maybe_unused = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) .name = "32regs_prefetch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) .do_2 = xor_32regs_p_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) .do_3 = xor_32regs_p_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) .do_4 = xor_32regs_p_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) .do_5 = xor_32regs_p_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) #define XOR_TRY_TEMPLATES \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) do { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) xor_speed(&xor_block_8regs); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) xor_speed(&xor_block_8regs_p); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) xor_speed(&xor_block_32regs); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) xor_speed(&xor_block_32regs_p); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) } while (0)