WIP FPC-III support
[linux/fpc-iii.git] / arch / alpha / include / asm / xor.h
blob5aeb4fb3cb7cbfcdcf298cc6cc3b7df3539ecda4
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3 * include/asm-alpha/xor.h
5 * Optimized RAID-5 checksumming functions for alpha EV5 and EV6
6 */
8 extern void xor_alpha_2(unsigned long, unsigned long *, unsigned long *);
9 extern void xor_alpha_3(unsigned long, unsigned long *, unsigned long *,
10 unsigned long *);
11 extern void xor_alpha_4(unsigned long, unsigned long *, unsigned long *,
12 unsigned long *, unsigned long *);
13 extern void xor_alpha_5(unsigned long, unsigned long *, unsigned long *,
14 unsigned long *, unsigned long *, unsigned long *);
16 extern void xor_alpha_prefetch_2(unsigned long, unsigned long *,
17 unsigned long *);
18 extern void xor_alpha_prefetch_3(unsigned long, unsigned long *,
19 unsigned long *, unsigned long *);
20 extern void xor_alpha_prefetch_4(unsigned long, unsigned long *,
21 unsigned long *, unsigned long *,
22 unsigned long *);
23 extern void xor_alpha_prefetch_5(unsigned long, unsigned long *,
24 unsigned long *, unsigned long *,
25 unsigned long *, unsigned long *);
27 asm(" \n\
28 .text \n\
29 .align 3 \n\
30 .ent xor_alpha_2 \n\
31 xor_alpha_2: \n\
32 .prologue 0 \n\
33 srl $16, 6, $16 \n\
34 .align 4 \n\
35 2: \n\
36 ldq $0,0($17) \n\
37 ldq $1,0($18) \n\
38 ldq $2,8($17) \n\
39 ldq $3,8($18) \n\
40 \n\
41 ldq $4,16($17) \n\
42 ldq $5,16($18) \n\
43 ldq $6,24($17) \n\
44 ldq $7,24($18) \n\
45 \n\
46 ldq $19,32($17) \n\
47 ldq $20,32($18) \n\
48 ldq $21,40($17) \n\
49 ldq $22,40($18) \n\
50 \n\
51 ldq $23,48($17) \n\
52 ldq $24,48($18) \n\
53 ldq $25,56($17) \n\
54 xor $0,$1,$0 # 7 cycles from $1 load \n\
55 \n\
56 ldq $27,56($18) \n\
57 xor $2,$3,$2 \n\
58 stq $0,0($17) \n\
59 xor $4,$5,$4 \n\
60 \n\
61 stq $2,8($17) \n\
62 xor $6,$7,$6 \n\
63 stq $4,16($17) \n\
64 xor $19,$20,$19 \n\
65 \n\
66 stq $6,24($17) \n\
67 xor $21,$22,$21 \n\
68 stq $19,32($17) \n\
69 xor $23,$24,$23 \n\
70 \n\
71 stq $21,40($17) \n\
72 xor $25,$27,$25 \n\
73 stq $23,48($17) \n\
74 subq $16,1,$16 \n\
75 \n\
76 stq $25,56($17) \n\
77 addq $17,64,$17 \n\
78 addq $18,64,$18 \n\
79 bgt $16,2b \n\
80 \n\
81 ret \n\
82 .end xor_alpha_2 \n\
83 \n\
84 .align 3 \n\
85 .ent xor_alpha_3 \n\
86 xor_alpha_3: \n\
87 .prologue 0 \n\
88 srl $16, 6, $16 \n\
89 .align 4 \n\
90 3: \n\
91 ldq $0,0($17) \n\
92 ldq $1,0($18) \n\
93 ldq $2,0($19) \n\
94 ldq $3,8($17) \n\
95 \n\
96 ldq $4,8($18) \n\
97 ldq $6,16($17) \n\
98 ldq $7,16($18) \n\
99 ldq $21,24($17) \n\
101 ldq $22,24($18) \n\
102 ldq $24,32($17) \n\
103 ldq $25,32($18) \n\
104 ldq $5,8($19) \n\
106 ldq $20,16($19) \n\
107 ldq $23,24($19) \n\
108 ldq $27,32($19) \n\
109 nop \n\
111 xor $0,$1,$1 # 8 cycles from $0 load \n\
112 xor $3,$4,$4 # 6 cycles from $4 load \n\
113 xor $6,$7,$7 # 6 cycles from $7 load \n\
114 xor $21,$22,$22 # 5 cycles from $22 load \n\
116 xor $1,$2,$2 # 9 cycles from $2 load \n\
117 xor $24,$25,$25 # 5 cycles from $25 load \n\
118 stq $2,0($17) \n\
119 xor $4,$5,$5 # 6 cycles from $5 load \n\
121 stq $5,8($17) \n\
122 xor $7,$20,$20 # 7 cycles from $20 load \n\
123 stq $20,16($17) \n\
124 xor $22,$23,$23 # 7 cycles from $23 load \n\
126 stq $23,24($17) \n\
127 xor $25,$27,$27 # 7 cycles from $27 load \n\
128 stq $27,32($17) \n\
129 nop \n\
131 ldq $0,40($17) \n\
132 ldq $1,40($18) \n\
133 ldq $3,48($17) \n\
134 ldq $4,48($18) \n\
136 ldq $6,56($17) \n\
137 ldq $7,56($18) \n\
138 ldq $2,40($19) \n\
139 ldq $5,48($19) \n\
141 ldq $20,56($19) \n\
142 xor $0,$1,$1 # 4 cycles from $1 load \n\
143 xor $3,$4,$4 # 5 cycles from $4 load \n\
144 xor $6,$7,$7 # 5 cycles from $7 load \n\
146 xor $1,$2,$2 # 4 cycles from $2 load \n\
147 xor $4,$5,$5 # 5 cycles from $5 load \n\
148 stq $2,40($17) \n\
149 xor $7,$20,$20 # 4 cycles from $20 load \n\
151 stq $5,48($17) \n\
152 subq $16,1,$16 \n\
153 stq $20,56($17) \n\
154 addq $19,64,$19 \n\
156 addq $18,64,$18 \n\
157 addq $17,64,$17 \n\
158 bgt $16,3b \n\
159 ret \n\
160 .end xor_alpha_3 \n\
162 .align 3 \n\
163 .ent xor_alpha_4 \n\
164 xor_alpha_4: \n\
165 .prologue 0 \n\
166 srl $16, 6, $16 \n\
167 .align 4 \n\
168 4: \n\
169 ldq $0,0($17) \n\
170 ldq $1,0($18) \n\
171 ldq $2,0($19) \n\
172 ldq $3,0($20) \n\
174 ldq $4,8($17) \n\
175 ldq $5,8($18) \n\
176 ldq $6,8($19) \n\
177 ldq $7,8($20) \n\
179 ldq $21,16($17) \n\
180 ldq $22,16($18) \n\
181 ldq $23,16($19) \n\
182 ldq $24,16($20) \n\
184 ldq $25,24($17) \n\
185 xor $0,$1,$1 # 6 cycles from $1 load \n\
186 ldq $27,24($18) \n\
187 xor $2,$3,$3 # 6 cycles from $3 load \n\
189 ldq $0,24($19) \n\
190 xor $1,$3,$3 \n\
191 ldq $1,24($20) \n\
192 xor $4,$5,$5 # 7 cycles from $5 load \n\
194 stq $3,0($17) \n\
195 xor $6,$7,$7 \n\
196 xor $21,$22,$22 # 7 cycles from $22 load \n\
197 xor $5,$7,$7 \n\
199 stq $7,8($17) \n\
200 xor $23,$24,$24 # 7 cycles from $24 load \n\
201 ldq $2,32($17) \n\
202 xor $22,$24,$24 \n\
204 ldq $3,32($18) \n\
205 ldq $4,32($19) \n\
206 ldq $5,32($20) \n\
207 xor $25,$27,$27 # 8 cycles from $27 load \n\
209 ldq $6,40($17) \n\
210 ldq $7,40($18) \n\
211 ldq $21,40($19) \n\
212 ldq $22,40($20) \n\
214 stq $24,16($17) \n\
215 xor $0,$1,$1 # 9 cycles from $1 load \n\
216 xor $2,$3,$3 # 5 cycles from $3 load \n\
217 xor $27,$1,$1 \n\
219 stq $1,24($17) \n\
220 xor $4,$5,$5 # 5 cycles from $5 load \n\
221 ldq $23,48($17) \n\
222 ldq $24,48($18) \n\
224 ldq $25,48($19) \n\
225 xor $3,$5,$5 \n\
226 ldq $27,48($20) \n\
227 ldq $0,56($17) \n\
229 ldq $1,56($18) \n\
230 ldq $2,56($19) \n\
231 xor $6,$7,$7 # 8 cycles from $6 load \n\
232 ldq $3,56($20) \n\
234 stq $5,32($17) \n\
235 xor $21,$22,$22 # 8 cycles from $22 load \n\
236 xor $7,$22,$22 \n\
237 xor $23,$24,$24 # 5 cycles from $24 load \n\
239 stq $22,40($17) \n\
240 xor $25,$27,$27 # 5 cycles from $27 load \n\
241 xor $24,$27,$27 \n\
242 xor $0,$1,$1 # 5 cycles from $1 load \n\
244 stq $27,48($17) \n\
245 xor $2,$3,$3 # 4 cycles from $3 load \n\
246 xor $1,$3,$3 \n\
247 subq $16,1,$16 \n\
249 stq $3,56($17) \n\
250 addq $20,64,$20 \n\
251 addq $19,64,$19 \n\
252 addq $18,64,$18 \n\
254 addq $17,64,$17 \n\
255 bgt $16,4b \n\
256 ret \n\
257 .end xor_alpha_4 \n\
259 .align 3 \n\
260 .ent xor_alpha_5 \n\
261 xor_alpha_5: \n\
262 .prologue 0 \n\
263 srl $16, 6, $16 \n\
264 .align 4 \n\
265 5: \n\
266 ldq $0,0($17) \n\
267 ldq $1,0($18) \n\
268 ldq $2,0($19) \n\
269 ldq $3,0($20) \n\
271 ldq $4,0($21) \n\
272 ldq $5,8($17) \n\
273 ldq $6,8($18) \n\
274 ldq $7,8($19) \n\
276 ldq $22,8($20) \n\
277 ldq $23,8($21) \n\
278 ldq $24,16($17) \n\
279 ldq $25,16($18) \n\
281 ldq $27,16($19) \n\
282 xor $0,$1,$1 # 6 cycles from $1 load \n\
283 ldq $28,16($20) \n\
284 xor $2,$3,$3 # 6 cycles from $3 load \n\
286 ldq $0,16($21) \n\
287 xor $1,$3,$3 \n\
288 ldq $1,24($17) \n\
289 xor $3,$4,$4 # 7 cycles from $4 load \n\
291 stq $4,0($17) \n\
292 xor $5,$6,$6 # 7 cycles from $6 load \n\
293 xor $7,$22,$22 # 7 cycles from $22 load \n\
294 xor $6,$23,$23 # 7 cycles from $23 load \n\
296 ldq $2,24($18) \n\
297 xor $22,$23,$23 \n\
298 ldq $3,24($19) \n\
299 xor $24,$25,$25 # 8 cycles from $25 load \n\
301 stq $23,8($17) \n\
302 xor $25,$27,$27 # 8 cycles from $27 load \n\
303 ldq $4,24($20) \n\
304 xor $28,$0,$0 # 7 cycles from $0 load \n\
306 ldq $5,24($21) \n\
307 xor $27,$0,$0 \n\
308 ldq $6,32($17) \n\
309 ldq $7,32($18) \n\
311 stq $0,16($17) \n\
312 xor $1,$2,$2 # 6 cycles from $2 load \n\
313 ldq $22,32($19) \n\
314 xor $3,$4,$4 # 4 cycles from $4 load \n\
316 ldq $23,32($20) \n\
317 xor $2,$4,$4 \n\
318 ldq $24,32($21) \n\
319 ldq $25,40($17) \n\
321 ldq $27,40($18) \n\
322 ldq $28,40($19) \n\
323 ldq $0,40($20) \n\
324 xor $4,$5,$5 # 7 cycles from $5 load \n\
326 stq $5,24($17) \n\
327 xor $6,$7,$7 # 7 cycles from $7 load \n\
328 ldq $1,40($21) \n\
329 ldq $2,48($17) \n\
331 ldq $3,48($18) \n\
332 xor $7,$22,$22 # 7 cycles from $22 load \n\
333 ldq $4,48($19) \n\
334 xor $23,$24,$24 # 6 cycles from $24 load \n\
336 ldq $5,48($20) \n\
337 xor $22,$24,$24 \n\
338 ldq $6,48($21) \n\
339 xor $25,$27,$27 # 7 cycles from $27 load \n\
341 stq $24,32($17) \n\
342 xor $27,$28,$28 # 8 cycles from $28 load \n\
343 ldq $7,56($17) \n\
344 xor $0,$1,$1 # 6 cycles from $1 load \n\
346 ldq $22,56($18) \n\
347 ldq $23,56($19) \n\
348 ldq $24,56($20) \n\
349 ldq $25,56($21) \n\
351 xor $28,$1,$1 \n\
352 xor $2,$3,$3 # 9 cycles from $3 load \n\
353 xor $3,$4,$4 # 9 cycles from $4 load \n\
354 xor $5,$6,$6 # 8 cycles from $6 load \n\
356 stq $1,40($17) \n\
357 xor $4,$6,$6 \n\
358 xor $7,$22,$22 # 7 cycles from $22 load \n\
359 xor $23,$24,$24 # 6 cycles from $24 load \n\
361 stq $6,48($17) \n\
362 xor $22,$24,$24 \n\
363 subq $16,1,$16 \n\
364 xor $24,$25,$25 # 8 cycles from $25 load \n\
366 stq $25,56($17) \n\
367 addq $21,64,$21 \n\
368 addq $20,64,$20 \n\
369 addq $19,64,$19 \n\
371 addq $18,64,$18 \n\
372 addq $17,64,$17 \n\
373 bgt $16,5b \n\
374 ret \n\
375 .end xor_alpha_5 \n\
377 .align 3 \n\
378 .ent xor_alpha_prefetch_2 \n\
379 xor_alpha_prefetch_2: \n\
380 .prologue 0 \n\
381 srl $16, 6, $16 \n\
383 ldq $31, 0($17) \n\
384 ldq $31, 0($18) \n\
386 ldq $31, 64($17) \n\
387 ldq $31, 64($18) \n\
389 ldq $31, 128($17) \n\
390 ldq $31, 128($18) \n\
392 ldq $31, 192($17) \n\
393 ldq $31, 192($18) \n\
394 .align 4 \n\
395 2: \n\
396 ldq $0,0($17) \n\
397 ldq $1,0($18) \n\
398 ldq $2,8($17) \n\
399 ldq $3,8($18) \n\
401 ldq $4,16($17) \n\
402 ldq $5,16($18) \n\
403 ldq $6,24($17) \n\
404 ldq $7,24($18) \n\
406 ldq $19,32($17) \n\
407 ldq $20,32($18) \n\
408 ldq $21,40($17) \n\
409 ldq $22,40($18) \n\
411 ldq $23,48($17) \n\
412 ldq $24,48($18) \n\
413 ldq $25,56($17) \n\
414 ldq $27,56($18) \n\
416 ldq $31,256($17) \n\
417 xor $0,$1,$0 # 8 cycles from $1 load \n\
418 ldq $31,256($18) \n\
419 xor $2,$3,$2 \n\
421 stq $0,0($17) \n\
422 xor $4,$5,$4 \n\
423 stq $2,8($17) \n\
424 xor $6,$7,$6 \n\
426 stq $4,16($17) \n\
427 xor $19,$20,$19 \n\
428 stq $6,24($17) \n\
429 xor $21,$22,$21 \n\
431 stq $19,32($17) \n\
432 xor $23,$24,$23 \n\
433 stq $21,40($17) \n\
434 xor $25,$27,$25 \n\
436 stq $23,48($17) \n\
437 subq $16,1,$16 \n\
438 stq $25,56($17) \n\
439 addq $17,64,$17 \n\
441 addq $18,64,$18 \n\
442 bgt $16,2b \n\
443 ret \n\
444 .end xor_alpha_prefetch_2 \n\
446 .align 3 \n\
447 .ent xor_alpha_prefetch_3 \n\
448 xor_alpha_prefetch_3: \n\
449 .prologue 0 \n\
450 srl $16, 6, $16 \n\
452 ldq $31, 0($17) \n\
453 ldq $31, 0($18) \n\
454 ldq $31, 0($19) \n\
456 ldq $31, 64($17) \n\
457 ldq $31, 64($18) \n\
458 ldq $31, 64($19) \n\
460 ldq $31, 128($17) \n\
461 ldq $31, 128($18) \n\
462 ldq $31, 128($19) \n\
464 ldq $31, 192($17) \n\
465 ldq $31, 192($18) \n\
466 ldq $31, 192($19) \n\
467 .align 4 \n\
468 3: \n\
469 ldq $0,0($17) \n\
470 ldq $1,0($18) \n\
471 ldq $2,0($19) \n\
472 ldq $3,8($17) \n\
474 ldq $4,8($18) \n\
475 ldq $6,16($17) \n\
476 ldq $7,16($18) \n\
477 ldq $21,24($17) \n\
479 ldq $22,24($18) \n\
480 ldq $24,32($17) \n\
481 ldq $25,32($18) \n\
482 ldq $5,8($19) \n\
484 ldq $20,16($19) \n\
485 ldq $23,24($19) \n\
486 ldq $27,32($19) \n\
487 nop \n\
489 xor $0,$1,$1 # 8 cycles from $0 load \n\
490 xor $3,$4,$4 # 7 cycles from $4 load \n\
491 xor $6,$7,$7 # 6 cycles from $7 load \n\
492 xor $21,$22,$22 # 5 cycles from $22 load \n\
494 xor $1,$2,$2 # 9 cycles from $2 load \n\
495 xor $24,$25,$25 # 5 cycles from $25 load \n\
496 stq $2,0($17) \n\
497 xor $4,$5,$5 # 6 cycles from $5 load \n\
499 stq $5,8($17) \n\
500 xor $7,$20,$20 # 7 cycles from $20 load \n\
501 stq $20,16($17) \n\
502 xor $22,$23,$23 # 7 cycles from $23 load \n\
504 stq $23,24($17) \n\
505 xor $25,$27,$27 # 7 cycles from $27 load \n\
506 stq $27,32($17) \n\
507 nop \n\
509 ldq $0,40($17) \n\
510 ldq $1,40($18) \n\
511 ldq $3,48($17) \n\
512 ldq $4,48($18) \n\
514 ldq $6,56($17) \n\
515 ldq $7,56($18) \n\
516 ldq $2,40($19) \n\
517 ldq $5,48($19) \n\
519 ldq $20,56($19) \n\
520 ldq $31,256($17) \n\
521 ldq $31,256($18) \n\
522 ldq $31,256($19) \n\
524 xor $0,$1,$1 # 6 cycles from $1 load \n\
525 xor $3,$4,$4 # 5 cycles from $4 load \n\
526 xor $6,$7,$7 # 5 cycles from $7 load \n\
527 xor $1,$2,$2 # 4 cycles from $2 load \n\
529 xor $4,$5,$5 # 5 cycles from $5 load \n\
530 xor $7,$20,$20 # 4 cycles from $20 load \n\
531 stq $2,40($17) \n\
532 subq $16,1,$16 \n\
534 stq $5,48($17) \n\
535 addq $19,64,$19 \n\
536 stq $20,56($17) \n\
537 addq $18,64,$18 \n\
539 addq $17,64,$17 \n\
540 bgt $16,3b \n\
541 ret \n\
542 .end xor_alpha_prefetch_3 \n\
544 .align 3 \n\
545 .ent xor_alpha_prefetch_4 \n\
546 xor_alpha_prefetch_4: \n\
547 .prologue 0 \n\
548 srl $16, 6, $16 \n\
550 ldq $31, 0($17) \n\
551 ldq $31, 0($18) \n\
552 ldq $31, 0($19) \n\
553 ldq $31, 0($20) \n\
555 ldq $31, 64($17) \n\
556 ldq $31, 64($18) \n\
557 ldq $31, 64($19) \n\
558 ldq $31, 64($20) \n\
560 ldq $31, 128($17) \n\
561 ldq $31, 128($18) \n\
562 ldq $31, 128($19) \n\
563 ldq $31, 128($20) \n\
565 ldq $31, 192($17) \n\
566 ldq $31, 192($18) \n\
567 ldq $31, 192($19) \n\
568 ldq $31, 192($20) \n\
569 .align 4 \n\
570 4: \n\
571 ldq $0,0($17) \n\
572 ldq $1,0($18) \n\
573 ldq $2,0($19) \n\
574 ldq $3,0($20) \n\
576 ldq $4,8($17) \n\
577 ldq $5,8($18) \n\
578 ldq $6,8($19) \n\
579 ldq $7,8($20) \n\
581 ldq $21,16($17) \n\
582 ldq $22,16($18) \n\
583 ldq $23,16($19) \n\
584 ldq $24,16($20) \n\
586 ldq $25,24($17) \n\
587 xor $0,$1,$1 # 6 cycles from $1 load \n\
588 ldq $27,24($18) \n\
589 xor $2,$3,$3 # 6 cycles from $3 load \n\
591 ldq $0,24($19) \n\
592 xor $1,$3,$3 \n\
593 ldq $1,24($20) \n\
594 xor $4,$5,$5 # 7 cycles from $5 load \n\
596 stq $3,0($17) \n\
597 xor $6,$7,$7 \n\
598 xor $21,$22,$22 # 7 cycles from $22 load \n\
599 xor $5,$7,$7 \n\
601 stq $7,8($17) \n\
602 xor $23,$24,$24 # 7 cycles from $24 load \n\
603 ldq $2,32($17) \n\
604 xor $22,$24,$24 \n\
606 ldq $3,32($18) \n\
607 ldq $4,32($19) \n\
608 ldq $5,32($20) \n\
609 xor $25,$27,$27 # 8 cycles from $27 load \n\
611 ldq $6,40($17) \n\
612 ldq $7,40($18) \n\
613 ldq $21,40($19) \n\
614 ldq $22,40($20) \n\
616 stq $24,16($17) \n\
617 xor $0,$1,$1 # 9 cycles from $1 load \n\
618 xor $2,$3,$3 # 5 cycles from $3 load \n\
619 xor $27,$1,$1 \n\
621 stq $1,24($17) \n\
622 xor $4,$5,$5 # 5 cycles from $5 load \n\
623 ldq $23,48($17) \n\
624 xor $3,$5,$5 \n\
626 ldq $24,48($18) \n\
627 ldq $25,48($19) \n\
628 ldq $27,48($20) \n\
629 ldq $0,56($17) \n\
631 ldq $1,56($18) \n\
632 ldq $2,56($19) \n\
633 ldq $3,56($20) \n\
634 xor $6,$7,$7 # 8 cycles from $6 load \n\
636 ldq $31,256($17) \n\
637 xor $21,$22,$22 # 8 cycles from $22 load \n\
638 ldq $31,256($18) \n\
639 xor $7,$22,$22 \n\
641 ldq $31,256($19) \n\
642 xor $23,$24,$24 # 6 cycles from $24 load \n\
643 ldq $31,256($20) \n\
644 xor $25,$27,$27 # 6 cycles from $27 load \n\
646 stq $5,32($17) \n\
647 xor $24,$27,$27 \n\
648 xor $0,$1,$1 # 7 cycles from $1 load \n\
649 xor $2,$3,$3 # 6 cycles from $3 load \n\
651 stq $22,40($17) \n\
652 xor $1,$3,$3 \n\
653 stq $27,48($17) \n\
654 subq $16,1,$16 \n\
656 stq $3,56($17) \n\
657 addq $20,64,$20 \n\
658 addq $19,64,$19 \n\
659 addq $18,64,$18 \n\
661 addq $17,64,$17 \n\
662 bgt $16,4b \n\
663 ret \n\
664 .end xor_alpha_prefetch_4 \n\
666 .align 3 \n\
667 .ent xor_alpha_prefetch_5 \n\
668 xor_alpha_prefetch_5: \n\
669 .prologue 0 \n\
670 srl $16, 6, $16 \n\
672 ldq $31, 0($17) \n\
673 ldq $31, 0($18) \n\
674 ldq $31, 0($19) \n\
675 ldq $31, 0($20) \n\
676 ldq $31, 0($21) \n\
678 ldq $31, 64($17) \n\
679 ldq $31, 64($18) \n\
680 ldq $31, 64($19) \n\
681 ldq $31, 64($20) \n\
682 ldq $31, 64($21) \n\
684 ldq $31, 128($17) \n\
685 ldq $31, 128($18) \n\
686 ldq $31, 128($19) \n\
687 ldq $31, 128($20) \n\
688 ldq $31, 128($21) \n\
690 ldq $31, 192($17) \n\
691 ldq $31, 192($18) \n\
692 ldq $31, 192($19) \n\
693 ldq $31, 192($20) \n\
694 ldq $31, 192($21) \n\
695 .align 4 \n\
696 5: \n\
697 ldq $0,0($17) \n\
698 ldq $1,0($18) \n\
699 ldq $2,0($19) \n\
700 ldq $3,0($20) \n\
702 ldq $4,0($21) \n\
703 ldq $5,8($17) \n\
704 ldq $6,8($18) \n\
705 ldq $7,8($19) \n\
707 ldq $22,8($20) \n\
708 ldq $23,8($21) \n\
709 ldq $24,16($17) \n\
710 ldq $25,16($18) \n\
712 ldq $27,16($19) \n\
713 xor $0,$1,$1 # 6 cycles from $1 load \n\
714 ldq $28,16($20) \n\
715 xor $2,$3,$3 # 6 cycles from $3 load \n\
717 ldq $0,16($21) \n\
718 xor $1,$3,$3 \n\
719 ldq $1,24($17) \n\
720 xor $3,$4,$4 # 7 cycles from $4 load \n\
722 stq $4,0($17) \n\
723 xor $5,$6,$6 # 7 cycles from $6 load \n\
724 xor $7,$22,$22 # 7 cycles from $22 load \n\
725 xor $6,$23,$23 # 7 cycles from $23 load \n\
727 ldq $2,24($18) \n\
728 xor $22,$23,$23 \n\
729 ldq $3,24($19) \n\
730 xor $24,$25,$25 # 8 cycles from $25 load \n\
732 stq $23,8($17) \n\
733 xor $25,$27,$27 # 8 cycles from $27 load \n\
734 ldq $4,24($20) \n\
735 xor $28,$0,$0 # 7 cycles from $0 load \n\
737 ldq $5,24($21) \n\
738 xor $27,$0,$0 \n\
739 ldq $6,32($17) \n\
740 ldq $7,32($18) \n\
742 stq $0,16($17) \n\
743 xor $1,$2,$2 # 6 cycles from $2 load \n\
744 ldq $22,32($19) \n\
745 xor $3,$4,$4 # 4 cycles from $4 load \n\
747 ldq $23,32($20) \n\
748 xor $2,$4,$4 \n\
749 ldq $24,32($21) \n\
750 ldq $25,40($17) \n\
752 ldq $27,40($18) \n\
753 ldq $28,40($19) \n\
754 ldq $0,40($20) \n\
755 xor $4,$5,$5 # 7 cycles from $5 load \n\
757 stq $5,24($17) \n\
758 xor $6,$7,$7 # 7 cycles from $7 load \n\
759 ldq $1,40($21) \n\
760 ldq $2,48($17) \n\
762 ldq $3,48($18) \n\
763 xor $7,$22,$22 # 7 cycles from $22 load \n\
764 ldq $4,48($19) \n\
765 xor $23,$24,$24 # 6 cycles from $24 load \n\
767 ldq $5,48($20) \n\
768 xor $22,$24,$24 \n\
769 ldq $6,48($21) \n\
770 xor $25,$27,$27 # 7 cycles from $27 load \n\
772 stq $24,32($17) \n\
773 xor $27,$28,$28 # 8 cycles from $28 load \n\
774 ldq $7,56($17) \n\
775 xor $0,$1,$1 # 6 cycles from $1 load \n\
777 ldq $22,56($18) \n\
778 ldq $23,56($19) \n\
779 ldq $24,56($20) \n\
780 ldq $25,56($21) \n\
782 ldq $31,256($17) \n\
783 xor $28,$1,$1 \n\
784 ldq $31,256($18) \n\
785 xor $2,$3,$3 # 9 cycles from $3 load \n\
787 ldq $31,256($19) \n\
788 xor $3,$4,$4 # 9 cycles from $4 load \n\
789 ldq $31,256($20) \n\
790 xor $5,$6,$6 # 8 cycles from $6 load \n\
792 stq $1,40($17) \n\
793 xor $4,$6,$6 \n\
794 xor $7,$22,$22 # 7 cycles from $22 load \n\
795 xor $23,$24,$24 # 6 cycles from $24 load \n\
797 stq $6,48($17) \n\
798 xor $22,$24,$24 \n\
799 ldq $31,256($21) \n\
800 xor $24,$25,$25 # 8 cycles from $25 load \n\
802 stq $25,56($17) \n\
803 subq $16,1,$16 \n\
804 addq $21,64,$21 \n\
805 addq $20,64,$20 \n\
807 addq $19,64,$19 \n\
808 addq $18,64,$18 \n\
809 addq $17,64,$17 \n\
810 bgt $16,5b \n\
812 ret \n\
813 .end xor_alpha_prefetch_5 \n\
816 static struct xor_block_template xor_block_alpha = {
817 .name = "alpha",
818 .do_2 = xor_alpha_2,
819 .do_3 = xor_alpha_3,
820 .do_4 = xor_alpha_4,
821 .do_5 = xor_alpha_5,
824 static struct xor_block_template xor_block_alpha_prefetch = {
825 .name = "alpha prefetch",
826 .do_2 = xor_alpha_prefetch_2,
827 .do_3 = xor_alpha_prefetch_3,
828 .do_4 = xor_alpha_prefetch_4,
829 .do_5 = xor_alpha_prefetch_5,
832 /* For grins, also test the generic routines. */
833 #include <asm-generic/xor.h>
835 #undef XOR_TRY_TEMPLATES
836 #define XOR_TRY_TEMPLATES \
837 do { \
838 xor_speed(&xor_block_8regs); \
839 xor_speed(&xor_block_32regs); \
840 xor_speed(&xor_block_alpha); \
841 xor_speed(&xor_block_alpha_prefetch); \
842 } while (0)
844 /* Force the use of alpha_prefetch if EV6, as it is significantly
845 faster in the cold cache case. */
846 #define XOR_SELECT_TEMPLATE(FASTEST) \
847 (implver() == IMPLVER_EV6 ? &xor_block_alpha_prefetch : FASTEST)