2 * include/asm-alpha/xor.h
4 * Optimized RAID-5 checksumming functions for alpha EV5 and EV6
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2, or (at your option)
11 * You should have received a copy of the GNU General Public License
12 * (for example /usr/src/linux/COPYING); if not, write to the Free
13 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
16 extern void xor_alpha_2(unsigned long, unsigned long *, unsigned long *);
17 extern void xor_alpha_3(unsigned long, unsigned long *, unsigned long *,
19 extern void xor_alpha_4(unsigned long, unsigned long *, unsigned long *,
20 unsigned long *, unsigned long *);
21 extern void xor_alpha_5(unsigned long, unsigned long *, unsigned long *,
22 unsigned long *, unsigned long *, unsigned long *);
24 extern void xor_alpha_prefetch_2(unsigned long, unsigned long *,
26 extern void xor_alpha_prefetch_3(unsigned long, unsigned long *,
27 unsigned long *, unsigned long *);
28 extern void xor_alpha_prefetch_4(unsigned long, unsigned long *,
29 unsigned long *, unsigned long *,
31 extern void xor_alpha_prefetch_5(unsigned long, unsigned long *,
32 unsigned long *, unsigned long *,
33 unsigned long *, unsigned long *);
62 xor $0,$1,$0 # 7 cycles from $1 load
119 xor $0,$1,$1 # 8 cycles from $0 load
120 xor $3,$4,$4 # 6 cycles from $4 load
121 xor $6,$7,$7 # 6 cycles from $7 load
122 xor $21,$22,$22 # 5 cycles from $22 load
124 xor $1,$2,$2 # 9 cycles from $2 load
125 xor $24,$25,$25 # 5 cycles from $25 load
127 xor $4,$5,$5 # 6 cycles from $5 load
130 xor $7,$20,$20 # 7 cycles from $20 load
132 xor $22,$23,$23 # 7 cycles from $23 load
135 xor $25,$27,$27 # 7 cycles from $27 load
150 xor $0,$1,$1 # 4 cycles from $1 load
151 xor $3,$4,$4 # 5 cycles from $4 load
152 xor $6,$7,$7 # 5 cycles from $7 load
154 xor $1,$2,$2 # 4 cycles from $2 load
155 xor $4,$5,$5 # 5 cycles from $5 load
157 xor $7,$20,$20 # 4 cycles from $20 load
193 xor $0,$1,$1 # 6 cycles from $1 load
195 xor $2,$3,$3 # 6 cycles from $3 load
200 xor $4,$5,$5 # 7 cycles from $5 load
204 xor $21,$22,$22 # 7 cycles from $22 load
208 xor $23,$24,$24 # 7 cycles from $24 load
215 xor $25,$27,$27 # 8 cycles from $27 load
223 xor $0,$1,$1 # 9 cycles from $1 load
224 xor $2,$3,$3 # 5 cycles from $3 load
228 xor $4,$5,$5 # 5 cycles from $5 load
239 xor $6,$7,$7 # 8 cycles from $6 load
243 xor $21,$22,$22 # 8 cycles from $22 load
245 xor $23,$24,$24 # 5 cycles from $24 load
248 xor $25,$27,$27 # 5 cycles from $27 load
250 xor $0,$1,$1 # 5 cycles from $1 load
253 xor $2,$3,$3 # 4 cycles from $3 load
290 xor $0,$1,$1 # 6 cycles from $1 load
292 xor $2,$3,$3 # 6 cycles from $3 load
297 xor $3,$4,$4 # 7 cycles from $4 load
300 xor $5,$6,$6 # 7 cycles from $6 load
301 xor $7,$22,$22 # 7 cycles from $22 load
302 xor $6,$23,$23 # 7 cycles from $23 load
307 xor $24,$25,$25 # 8 cycles from $25 load
310 xor $25,$27,$27 # 8 cycles from $27 load
312 xor $28,$0,$0 # 7 cycles from $0 load
320 xor $1,$2,$2 # 6 cycles from $2 load
322 xor $3,$4,$4 # 4 cycles from $4 load
332 xor $4,$5,$5 # 7 cycles from $5 load
335 xor $6,$7,$7 # 7 cycles from $7 load
340 xor $7,$22,$22 # 7 cycles from $22 load
342 xor $23,$24,$24 # 6 cycles from $24 load
347 xor $25,$27,$27 # 7 cycles from $27 load
350 xor $27,$28,$28 # 8 cycles from $28 load
352 xor $0,$1,$1 # 6 cycles from $1 load
360 xor $2,$3,$3 # 9 cycles from $3 load
361 xor $3,$4,$4 # 9 cycles from $4 load
362 xor $5,$6,$6 # 8 cycles from $6 load
366 xor $7,$22,$22 # 7 cycles from $22 load
367 xor $23,$24,$24 # 6 cycles from $24 load
372 xor $24,$25,$25 # 8 cycles from $25 load
386 .ent xor_alpha_prefetch_2
387 xor_alpha_prefetch_2:
425 xor $0,$1,$0 # 8 cycles from $1 load
452 .end xor_alpha_prefetch_2
455 .ent xor_alpha_prefetch_3
456 xor_alpha_prefetch_3:
497 xor $0,$1,$1 # 8 cycles from $0 load
498 xor $3,$4,$4 # 7 cycles from $4 load
499 xor $6,$7,$7 # 6 cycles from $7 load
500 xor $21,$22,$22 # 5 cycles from $22 load
502 xor $1,$2,$2 # 9 cycles from $2 load
503 xor $24,$25,$25 # 5 cycles from $25 load
505 xor $4,$5,$5 # 6 cycles from $5 load
508 xor $7,$20,$20 # 7 cycles from $20 load
510 xor $22,$23,$23 # 7 cycles from $23 load
513 xor $25,$27,$27 # 7 cycles from $27 load
532 xor $0,$1,$1 # 6 cycles from $1 load
533 xor $3,$4,$4 # 5 cycles from $4 load
534 xor $6,$7,$7 # 5 cycles from $7 load
535 xor $1,$2,$2 # 4 cycles from $2 load
537 xor $4,$5,$5 # 5 cycles from $5 load
538 xor $7,$20,$20 # 4 cycles from $20 load
550 .end xor_alpha_prefetch_3
553 .ent xor_alpha_prefetch_4
554 xor_alpha_prefetch_4:
595 xor $0,$1,$1 # 6 cycles from $1 load
597 xor $2,$3,$3 # 6 cycles from $3 load
602 xor $4,$5,$5 # 7 cycles from $5 load
606 xor $21,$22,$22 # 7 cycles from $22 load
610 xor $23,$24,$24 # 7 cycles from $24 load
617 xor $25,$27,$27 # 8 cycles from $27 load
625 xor $0,$1,$1 # 9 cycles from $1 load
626 xor $2,$3,$3 # 5 cycles from $3 load
630 xor $4,$5,$5 # 5 cycles from $5 load
642 xor $6,$7,$7 # 8 cycles from $6 load
645 xor $21,$22,$22 # 8 cycles from $22 load
650 xor $23,$24,$24 # 6 cycles from $24 load
652 xor $25,$27,$27 # 6 cycles from $27 load
656 xor $0,$1,$1 # 7 cycles from $1 load
657 xor $2,$3,$3 # 6 cycles from $3 load
672 .end xor_alpha_prefetch_4
675 .ent xor_alpha_prefetch_5
676 xor_alpha_prefetch_5:
721 xor $0,$1,$1 # 6 cycles from $1 load
723 xor $2,$3,$3 # 6 cycles from $3 load
728 xor $3,$4,$4 # 7 cycles from $4 load
731 xor $5,$6,$6 # 7 cycles from $6 load
732 xor $7,$22,$22 # 7 cycles from $22 load
733 xor $6,$23,$23 # 7 cycles from $23 load
738 xor $24,$25,$25 # 8 cycles from $25 load
741 xor $25,$27,$27 # 8 cycles from $27 load
743 xor $28,$0,$0 # 7 cycles from $0 load
751 xor $1,$2,$2 # 6 cycles from $2 load
753 xor $3,$4,$4 # 4 cycles from $4 load
763 xor $4,$5,$5 # 7 cycles from $5 load
766 xor $6,$7,$7 # 7 cycles from $7 load
771 xor $7,$22,$22 # 7 cycles from $22 load
773 xor $23,$24,$24 # 6 cycles from $24 load
778 xor $25,$27,$27 # 7 cycles from $27 load
781 xor $27,$28,$28 # 8 cycles from $28 load
783 xor $0,$1,$1 # 6 cycles from $1 load
793 xor $2,$3,$3 # 9 cycles from $3 load
796 xor $3,$4,$4 # 9 cycles from $4 load
798 xor $5,$6,$6 # 8 cycles from $6 load
802 xor $7,$22,$22 # 7 cycles from $22 load
803 xor $23,$24,$24 # 6 cycles from $24 load
808 xor $24,$25,$25 # 8 cycles from $25 load
821 .end xor_alpha_prefetch_5
824 static struct xor_block_template xor_block_alpha = {
832 static struct xor_block_template xor_block_alpha_prefetch = {
833 name: "alpha prefetch",
834 do_2: xor_alpha_prefetch_2,
835 do_3: xor_alpha_prefetch_3,
836 do_4: xor_alpha_prefetch_4,
837 do_5: xor_alpha_prefetch_5,
840 /* For grins, also test the generic routines. */
841 #include <asm-generic/xor.h>
843 #undef XOR_TRY_TEMPLATES
844 #define XOR_TRY_TEMPLATES \
846 xor_speed(&xor_block_8regs); \
847 xor_speed(&xor_block_32regs); \
848 xor_speed(&xor_block_alpha); \
849 xor_speed(&xor_block_alpha_prefetch); \
852 /* Force the use of alpha_prefetch if EV6, as it is significantly
853 faster in the cold cache case. */
854 #define XOR_SELECT_TEMPLATE(FASTEST) \
855 (implver() == IMPLVER_EV6 ? &xor_block_alpha_prefetch : FASTEST)