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