Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
xor.h
Go to the documentation of this file.
1 /*
2  * include/asm-alpha/xor.h
3  *
4  * Optimized RAID-5 checksumming functions for alpha EV5 and EV6
5  *
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)
9  * any later version.
10  *
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.
14  */
15 
16 extern void xor_alpha_2(unsigned long, unsigned long *, unsigned long *);
17 extern void xor_alpha_3(unsigned long, unsigned long *, unsigned long *,
18  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 *);
23 
24 extern void xor_alpha_prefetch_2(unsigned long, unsigned long *,
25  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 *,
30  unsigned long *);
31 extern void xor_alpha_prefetch_5(unsigned long, unsigned long *,
32  unsigned long *, unsigned long *,
33  unsigned long *, unsigned long *);
34 
35 asm(" \n\
36  .text \n\
37  .align 3 \n\
38  .ent xor_alpha_2 \n\
39 xor_alpha_2: \n\
40  .prologue 0 \n\
41  srl $16, 6, $16 \n\
42  .align 4 \n\
43 2: \n\
44  ldq $0,0($17) \n\
45  ldq $1,0($18) \n\
46  ldq $2,8($17) \n\
47  ldq $3,8($18) \n\
48  \n\
49  ldq $4,16($17) \n\
50  ldq $5,16($18) \n\
51  ldq $6,24($17) \n\
52  ldq $7,24($18) \n\
53  \n\
54  ldq $19,32($17) \n\
55  ldq $20,32($18) \n\
56  ldq $21,40($17) \n\
57  ldq $22,40($18) \n\
58  \n\
59  ldq $23,48($17) \n\
60  ldq $24,48($18) \n\
61  ldq $25,56($17) \n\
62  xor $0,$1,$0 # 7 cycles from $1 load \n\
63  \n\
64  ldq $27,56($18) \n\
65  xor $2,$3,$2 \n\
66  stq $0,0($17) \n\
67  xor $4,$5,$4 \n\
68  \n\
69  stq $2,8($17) \n\
70  xor $6,$7,$6 \n\
71  stq $4,16($17) \n\
72  xor $19,$20,$19 \n\
73  \n\
74  stq $6,24($17) \n\
75  xor $21,$22,$21 \n\
76  stq $19,32($17) \n\
77  xor $23,$24,$23 \n\
78  \n\
79  stq $21,40($17) \n\
80  xor $25,$27,$25 \n\
81  stq $23,48($17) \n\
82  subq $16,1,$16 \n\
83  \n\
84  stq $25,56($17) \n\
85  addq $17,64,$17 \n\
86  addq $18,64,$18 \n\
87  bgt $16,2b \n\
88  \n\
89  ret \n\
90  .end xor_alpha_2 \n\
91  \n\
92  .align 3 \n\
93  .ent xor_alpha_3 \n\
94 xor_alpha_3: \n\
95  .prologue 0 \n\
96  srl $16, 6, $16 \n\
97  .align 4 \n\
98 3: \n\
99  ldq $0,0($17) \n\
100  ldq $1,0($18) \n\
101  ldq $2,0($19) \n\
102  ldq $3,8($17) \n\
103  \n\
104  ldq $4,8($18) \n\
105  ldq $6,16($17) \n\
106  ldq $7,16($18) \n\
107  ldq $21,24($17) \n\
108  \n\
109  ldq $22,24($18) \n\
110  ldq $24,32($17) \n\
111  ldq $25,32($18) \n\
112  ldq $5,8($19) \n\
113  \n\
114  ldq $20,16($19) \n\
115  ldq $23,24($19) \n\
116  ldq $27,32($19) \n\
117  nop \n\
118  \n\
119  xor $0,$1,$1 # 8 cycles from $0 load \n\
120  xor $3,$4,$4 # 6 cycles from $4 load \n\
121  xor $6,$7,$7 # 6 cycles from $7 load \n\
122  xor $21,$22,$22 # 5 cycles from $22 load \n\
123  \n\
124  xor $1,$2,$2 # 9 cycles from $2 load \n\
125  xor $24,$25,$25 # 5 cycles from $25 load \n\
126  stq $2,0($17) \n\
127  xor $4,$5,$5 # 6 cycles from $5 load \n\
128  \n\
129  stq $5,8($17) \n\
130  xor $7,$20,$20 # 7 cycles from $20 load \n\
131  stq $20,16($17) \n\
132  xor $22,$23,$23 # 7 cycles from $23 load \n\
133  \n\
134  stq $23,24($17) \n\
135  xor $25,$27,$27 # 7 cycles from $27 load \n\
136  stq $27,32($17) \n\
137  nop \n\
138  \n\
139  ldq $0,40($17) \n\
140  ldq $1,40($18) \n\
141  ldq $3,48($17) \n\
142  ldq $4,48($18) \n\
143  \n\
144  ldq $6,56($17) \n\
145  ldq $7,56($18) \n\
146  ldq $2,40($19) \n\
147  ldq $5,48($19) \n\
148  \n\
149  ldq $20,56($19) \n\
150  xor $0,$1,$1 # 4 cycles from $1 load \n\
151  xor $3,$4,$4 # 5 cycles from $4 load \n\
152  xor $6,$7,$7 # 5 cycles from $7 load \n\
153  \n\
154  xor $1,$2,$2 # 4 cycles from $2 load \n\
155  xor $4,$5,$5 # 5 cycles from $5 load \n\
156  stq $2,40($17) \n\
157  xor $7,$20,$20 # 4 cycles from $20 load \n\
158  \n\
159  stq $5,48($17) \n\
160  subq $16,1,$16 \n\
161  stq $20,56($17) \n\
162  addq $19,64,$19 \n\
163  \n\
164  addq $18,64,$18 \n\
165  addq $17,64,$17 \n\
166  bgt $16,3b \n\
167  ret \n\
168  .end xor_alpha_3 \n\
169  \n\
170  .align 3 \n\
171  .ent xor_alpha_4 \n\
172 xor_alpha_4: \n\
173  .prologue 0 \n\
174  srl $16, 6, $16 \n\
175  .align 4 \n\
176 4: \n\
177  ldq $0,0($17) \n\
178  ldq $1,0($18) \n\
179  ldq $2,0($19) \n\
180  ldq $3,0($20) \n\
181  \n\
182  ldq $4,8($17) \n\
183  ldq $5,8($18) \n\
184  ldq $6,8($19) \n\
185  ldq $7,8($20) \n\
186  \n\
187  ldq $21,16($17) \n\
188  ldq $22,16($18) \n\
189  ldq $23,16($19) \n\
190  ldq $24,16($20) \n\
191  \n\
192  ldq $25,24($17) \n\
193  xor $0,$1,$1 # 6 cycles from $1 load \n\
194  ldq $27,24($18) \n\
195  xor $2,$3,$3 # 6 cycles from $3 load \n\
196  \n\
197  ldq $0,24($19) \n\
198  xor $1,$3,$3 \n\
199  ldq $1,24($20) \n\
200  xor $4,$5,$5 # 7 cycles from $5 load \n\
201  \n\
202  stq $3,0($17) \n\
203  xor $6,$7,$7 \n\
204  xor $21,$22,$22 # 7 cycles from $22 load \n\
205  xor $5,$7,$7 \n\
206  \n\
207  stq $7,8($17) \n\
208  xor $23,$24,$24 # 7 cycles from $24 load \n\
209  ldq $2,32($17) \n\
210  xor $22,$24,$24 \n\
211  \n\
212  ldq $3,32($18) \n\
213  ldq $4,32($19) \n\
214  ldq $5,32($20) \n\
215  xor $25,$27,$27 # 8 cycles from $27 load \n\
216  \n\
217  ldq $6,40($17) \n\
218  ldq $7,40($18) \n\
219  ldq $21,40($19) \n\
220  ldq $22,40($20) \n\
221  \n\
222  stq $24,16($17) \n\
223  xor $0,$1,$1 # 9 cycles from $1 load \n\
224  xor $2,$3,$3 # 5 cycles from $3 load \n\
225  xor $27,$1,$1 \n\
226  \n\
227  stq $1,24($17) \n\
228  xor $4,$5,$5 # 5 cycles from $5 load \n\
229  ldq $23,48($17) \n\
230  ldq $24,48($18) \n\
231  \n\
232  ldq $25,48($19) \n\
233  xor $3,$5,$5 \n\
234  ldq $27,48($20) \n\
235  ldq $0,56($17) \n\
236  \n\
237  ldq $1,56($18) \n\
238  ldq $2,56($19) \n\
239  xor $6,$7,$7 # 8 cycles from $6 load \n\
240  ldq $3,56($20) \n\
241  \n\
242  stq $5,32($17) \n\
243  xor $21,$22,$22 # 8 cycles from $22 load \n\
244  xor $7,$22,$22 \n\
245  xor $23,$24,$24 # 5 cycles from $24 load \n\
246  \n\
247  stq $22,40($17) \n\
248  xor $25,$27,$27 # 5 cycles from $27 load \n\
249  xor $24,$27,$27 \n\
250  xor $0,$1,$1 # 5 cycles from $1 load \n\
251  \n\
252  stq $27,48($17) \n\
253  xor $2,$3,$3 # 4 cycles from $3 load \n\
254  xor $1,$3,$3 \n\
255  subq $16,1,$16 \n\
256  \n\
257  stq $3,56($17) \n\
258  addq $20,64,$20 \n\
259  addq $19,64,$19 \n\
260  addq $18,64,$18 \n\
261  \n\
262  addq $17,64,$17 \n\
263  bgt $16,4b \n\
264  ret \n\
265  .end xor_alpha_4 \n\
266  \n\
267  .align 3 \n\
268  .ent xor_alpha_5 \n\
269 xor_alpha_5: \n\
270  .prologue 0 \n\
271  srl $16, 6, $16 \n\
272  .align 4 \n\
273 5: \n\
274  ldq $0,0($17) \n\
275  ldq $1,0($18) \n\
276  ldq $2,0($19) \n\
277  ldq $3,0($20) \n\
278  \n\
279  ldq $4,0($21) \n\
280  ldq $5,8($17) \n\
281  ldq $6,8($18) \n\
282  ldq $7,8($19) \n\
283  \n\
284  ldq $22,8($20) \n\
285  ldq $23,8($21) \n\
286  ldq $24,16($17) \n\
287  ldq $25,16($18) \n\
288  \n\
289  ldq $27,16($19) \n\
290  xor $0,$1,$1 # 6 cycles from $1 load \n\
291  ldq $28,16($20) \n\
292  xor $2,$3,$3 # 6 cycles from $3 load \n\
293  \n\
294  ldq $0,16($21) \n\
295  xor $1,$3,$3 \n\
296  ldq $1,24($17) \n\
297  xor $3,$4,$4 # 7 cycles from $4 load \n\
298  \n\
299  stq $4,0($17) \n\
300  xor $5,$6,$6 # 7 cycles from $6 load \n\
301  xor $7,$22,$22 # 7 cycles from $22 load \n\
302  xor $6,$23,$23 # 7 cycles from $23 load \n\
303  \n\
304  ldq $2,24($18) \n\
305  xor $22,$23,$23 \n\
306  ldq $3,24($19) \n\
307  xor $24,$25,$25 # 8 cycles from $25 load \n\
308  \n\
309  stq $23,8($17) \n\
310  xor $25,$27,$27 # 8 cycles from $27 load \n\
311  ldq $4,24($20) \n\
312  xor $28,$0,$0 # 7 cycles from $0 load \n\
313  \n\
314  ldq $5,24($21) \n\
315  xor $27,$0,$0 \n\
316  ldq $6,32($17) \n\
317  ldq $7,32($18) \n\
318  \n\
319  stq $0,16($17) \n\
320  xor $1,$2,$2 # 6 cycles from $2 load \n\
321  ldq $22,32($19) \n\
322  xor $3,$4,$4 # 4 cycles from $4 load \n\
323  \n\
324  ldq $23,32($20) \n\
325  xor $2,$4,$4 \n\
326  ldq $24,32($21) \n\
327  ldq $25,40($17) \n\
328  \n\
329  ldq $27,40($18) \n\
330  ldq $28,40($19) \n\
331  ldq $0,40($20) \n\
332  xor $4,$5,$5 # 7 cycles from $5 load \n\
333  \n\
334  stq $5,24($17) \n\
335  xor $6,$7,$7 # 7 cycles from $7 load \n\
336  ldq $1,40($21) \n\
337  ldq $2,48($17) \n\
338  \n\
339  ldq $3,48($18) \n\
340  xor $7,$22,$22 # 7 cycles from $22 load \n\
341  ldq $4,48($19) \n\
342  xor $23,$24,$24 # 6 cycles from $24 load \n\
343  \n\
344  ldq $5,48($20) \n\
345  xor $22,$24,$24 \n\
346  ldq $6,48($21) \n\
347  xor $25,$27,$27 # 7 cycles from $27 load \n\
348  \n\
349  stq $24,32($17) \n\
350  xor $27,$28,$28 # 8 cycles from $28 load \n\
351  ldq $7,56($17) \n\
352  xor $0,$1,$1 # 6 cycles from $1 load \n\
353  \n\
354  ldq $22,56($18) \n\
355  ldq $23,56($19) \n\
356  ldq $24,56($20) \n\
357  ldq $25,56($21) \n\
358  \n\
359  xor $28,$1,$1 \n\
360  xor $2,$3,$3 # 9 cycles from $3 load \n\
361  xor $3,$4,$4 # 9 cycles from $4 load \n\
362  xor $5,$6,$6 # 8 cycles from $6 load \n\
363  \n\
364  stq $1,40($17) \n\
365  xor $4,$6,$6 \n\
366  xor $7,$22,$22 # 7 cycles from $22 load \n\
367  xor $23,$24,$24 # 6 cycles from $24 load \n\
368  \n\
369  stq $6,48($17) \n\
370  xor $22,$24,$24 \n\
371  subq $16,1,$16 \n\
372  xor $24,$25,$25 # 8 cycles from $25 load \n\
373  \n\
374  stq $25,56($17) \n\
375  addq $21,64,$21 \n\
376  addq $20,64,$20 \n\
377  addq $19,64,$19 \n\
378  \n\
379  addq $18,64,$18 \n\
380  addq $17,64,$17 \n\
381  bgt $16,5b \n\
382  ret \n\
383  .end xor_alpha_5 \n\
384  \n\
385  .align 3 \n\
386  .ent xor_alpha_prefetch_2 \n\
387 xor_alpha_prefetch_2: \n\
388  .prologue 0 \n\
389  srl $16, 6, $16 \n\
390  \n\
391  ldq $31, 0($17) \n\
392  ldq $31, 0($18) \n\
393  \n\
394  ldq $31, 64($17) \n\
395  ldq $31, 64($18) \n\
396  \n\
397  ldq $31, 128($17) \n\
398  ldq $31, 128($18) \n\
399  \n\
400  ldq $31, 192($17) \n\
401  ldq $31, 192($18) \n\
402  .align 4 \n\
403 2: \n\
404  ldq $0,0($17) \n\
405  ldq $1,0($18) \n\
406  ldq $2,8($17) \n\
407  ldq $3,8($18) \n\
408  \n\
409  ldq $4,16($17) \n\
410  ldq $5,16($18) \n\
411  ldq $6,24($17) \n\
412  ldq $7,24($18) \n\
413  \n\
414  ldq $19,32($17) \n\
415  ldq $20,32($18) \n\
416  ldq $21,40($17) \n\
417  ldq $22,40($18) \n\
418  \n\
419  ldq $23,48($17) \n\
420  ldq $24,48($18) \n\
421  ldq $25,56($17) \n\
422  ldq $27,56($18) \n\
423  \n\
424  ldq $31,256($17) \n\
425  xor $0,$1,$0 # 8 cycles from $1 load \n\
426  ldq $31,256($18) \n\
427  xor $2,$3,$2 \n\
428  \n\
429  stq $0,0($17) \n\
430  xor $4,$5,$4 \n\
431  stq $2,8($17) \n\
432  xor $6,$7,$6 \n\
433  \n\
434  stq $4,16($17) \n\
435  xor $19,$20,$19 \n\
436  stq $6,24($17) \n\
437  xor $21,$22,$21 \n\
438  \n\
439  stq $19,32($17) \n\
440  xor $23,$24,$23 \n\
441  stq $21,40($17) \n\
442  xor $25,$27,$25 \n\
443  \n\
444  stq $23,48($17) \n\
445  subq $16,1,$16 \n\
446  stq $25,56($17) \n\
447  addq $17,64,$17 \n\
448  \n\
449  addq $18,64,$18 \n\
450  bgt $16,2b \n\
451  ret \n\
452  .end xor_alpha_prefetch_2 \n\
453  \n\
454  .align 3 \n\
455  .ent xor_alpha_prefetch_3 \n\
456 xor_alpha_prefetch_3: \n\
457  .prologue 0 \n\
458  srl $16, 6, $16 \n\
459  \n\
460  ldq $31, 0($17) \n\
461  ldq $31, 0($18) \n\
462  ldq $31, 0($19) \n\
463  \n\
464  ldq $31, 64($17) \n\
465  ldq $31, 64($18) \n\
466  ldq $31, 64($19) \n\
467  \n\
468  ldq $31, 128($17) \n\
469  ldq $31, 128($18) \n\
470  ldq $31, 128($19) \n\
471  \n\
472  ldq $31, 192($17) \n\
473  ldq $31, 192($18) \n\
474  ldq $31, 192($19) \n\
475  .align 4 \n\
476 3: \n\
477  ldq $0,0($17) \n\
478  ldq $1,0($18) \n\
479  ldq $2,0($19) \n\
480  ldq $3,8($17) \n\
481  \n\
482  ldq $4,8($18) \n\
483  ldq $6,16($17) \n\
484  ldq $7,16($18) \n\
485  ldq $21,24($17) \n\
486  \n\
487  ldq $22,24($18) \n\
488  ldq $24,32($17) \n\
489  ldq $25,32($18) \n\
490  ldq $5,8($19) \n\
491  \n\
492  ldq $20,16($19) \n\
493  ldq $23,24($19) \n\
494  ldq $27,32($19) \n\
495  nop \n\
496  \n\
497  xor $0,$1,$1 # 8 cycles from $0 load \n\
498  xor $3,$4,$4 # 7 cycles from $4 load \n\
499  xor $6,$7,$7 # 6 cycles from $7 load \n\
500  xor $21,$22,$22 # 5 cycles from $22 load \n\
501  \n\
502  xor $1,$2,$2 # 9 cycles from $2 load \n\
503  xor $24,$25,$25 # 5 cycles from $25 load \n\
504  stq $2,0($17) \n\
505  xor $4,$5,$5 # 6 cycles from $5 load \n\
506  \n\
507  stq $5,8($17) \n\
508  xor $7,$20,$20 # 7 cycles from $20 load \n\
509  stq $20,16($17) \n\
510  xor $22,$23,$23 # 7 cycles from $23 load \n\
511  \n\
512  stq $23,24($17) \n\
513  xor $25,$27,$27 # 7 cycles from $27 load \n\
514  stq $27,32($17) \n\
515  nop \n\
516  \n\
517  ldq $0,40($17) \n\
518  ldq $1,40($18) \n\
519  ldq $3,48($17) \n\
520  ldq $4,48($18) \n\
521  \n\
522  ldq $6,56($17) \n\
523  ldq $7,56($18) \n\
524  ldq $2,40($19) \n\
525  ldq $5,48($19) \n\
526  \n\
527  ldq $20,56($19) \n\
528  ldq $31,256($17) \n\
529  ldq $31,256($18) \n\
530  ldq $31,256($19) \n\
531  \n\
532  xor $0,$1,$1 # 6 cycles from $1 load \n\
533  xor $3,$4,$4 # 5 cycles from $4 load \n\
534  xor $6,$7,$7 # 5 cycles from $7 load \n\
535  xor $1,$2,$2 # 4 cycles from $2 load \n\
536  \n\
537  xor $4,$5,$5 # 5 cycles from $5 load \n\
538  xor $7,$20,$20 # 4 cycles from $20 load \n\
539  stq $2,40($17) \n\
540  subq $16,1,$16 \n\
541  \n\
542  stq $5,48($17) \n\
543  addq $19,64,$19 \n\
544  stq $20,56($17) \n\
545  addq $18,64,$18 \n\
546  \n\
547  addq $17,64,$17 \n\
548  bgt $16,3b \n\
549  ret \n\
550  .end xor_alpha_prefetch_3 \n\
551  \n\
552  .align 3 \n\
553  .ent xor_alpha_prefetch_4 \n\
554 xor_alpha_prefetch_4: \n\
555  .prologue 0 \n\
556  srl $16, 6, $16 \n\
557  \n\
558  ldq $31, 0($17) \n\
559  ldq $31, 0($18) \n\
560  ldq $31, 0($19) \n\
561  ldq $31, 0($20) \n\
562  \n\
563  ldq $31, 64($17) \n\
564  ldq $31, 64($18) \n\
565  ldq $31, 64($19) \n\
566  ldq $31, 64($20) \n\
567  \n\
568  ldq $31, 128($17) \n\
569  ldq $31, 128($18) \n\
570  ldq $31, 128($19) \n\
571  ldq $31, 128($20) \n\
572  \n\
573  ldq $31, 192($17) \n\
574  ldq $31, 192($18) \n\
575  ldq $31, 192($19) \n\
576  ldq $31, 192($20) \n\
577  .align 4 \n\
578 4: \n\
579  ldq $0,0($17) \n\
580  ldq $1,0($18) \n\
581  ldq $2,0($19) \n\
582  ldq $3,0($20) \n\
583  \n\
584  ldq $4,8($17) \n\
585  ldq $5,8($18) \n\
586  ldq $6,8($19) \n\
587  ldq $7,8($20) \n\
588  \n\
589  ldq $21,16($17) \n\
590  ldq $22,16($18) \n\
591  ldq $23,16($19) \n\
592  ldq $24,16($20) \n\
593  \n\
594  ldq $25,24($17) \n\
595  xor $0,$1,$1 # 6 cycles from $1 load \n\
596  ldq $27,24($18) \n\
597  xor $2,$3,$3 # 6 cycles from $3 load \n\
598  \n\
599  ldq $0,24($19) \n\
600  xor $1,$3,$3 \n\
601  ldq $1,24($20) \n\
602  xor $4,$5,$5 # 7 cycles from $5 load \n\
603  \n\
604  stq $3,0($17) \n\
605  xor $6,$7,$7 \n\
606  xor $21,$22,$22 # 7 cycles from $22 load \n\
607  xor $5,$7,$7 \n\
608  \n\
609  stq $7,8($17) \n\
610  xor $23,$24,$24 # 7 cycles from $24 load \n\
611  ldq $2,32($17) \n\
612  xor $22,$24,$24 \n\
613  \n\
614  ldq $3,32($18) \n\
615  ldq $4,32($19) \n\
616  ldq $5,32($20) \n\
617  xor $25,$27,$27 # 8 cycles from $27 load \n\
618  \n\
619  ldq $6,40($17) \n\
620  ldq $7,40($18) \n\
621  ldq $21,40($19) \n\
622  ldq $22,40($20) \n\
623  \n\
624  stq $24,16($17) \n\
625  xor $0,$1,$1 # 9 cycles from $1 load \n\
626  xor $2,$3,$3 # 5 cycles from $3 load \n\
627  xor $27,$1,$1 \n\
628  \n\
629  stq $1,24($17) \n\
630  xor $4,$5,$5 # 5 cycles from $5 load \n\
631  ldq $23,48($17) \n\
632  xor $3,$5,$5 \n\
633  \n\
634  ldq $24,48($18) \n\
635  ldq $25,48($19) \n\
636  ldq $27,48($20) \n\
637  ldq $0,56($17) \n\
638  \n\
639  ldq $1,56($18) \n\
640  ldq $2,56($19) \n\
641  ldq $3,56($20) \n\
642  xor $6,$7,$7 # 8 cycles from $6 load \n\
643  \n\
644  ldq $31,256($17) \n\
645  xor $21,$22,$22 # 8 cycles from $22 load \n\
646  ldq $31,256($18) \n\
647  xor $7,$22,$22 \n\
648  \n\
649  ldq $31,256($19) \n\
650  xor $23,$24,$24 # 6 cycles from $24 load \n\
651  ldq $31,256($20) \n\
652  xor $25,$27,$27 # 6 cycles from $27 load \n\
653  \n\
654  stq $5,32($17) \n\
655  xor $24,$27,$27 \n\
656  xor $0,$1,$1 # 7 cycles from $1 load \n\
657  xor $2,$3,$3 # 6 cycles from $3 load \n\
658  \n\
659  stq $22,40($17) \n\
660  xor $1,$3,$3 \n\
661  stq $27,48($17) \n\
662  subq $16,1,$16 \n\
663  \n\
664  stq $3,56($17) \n\
665  addq $20,64,$20 \n\
666  addq $19,64,$19 \n\
667  addq $18,64,$18 \n\
668  \n\
669  addq $17,64,$17 \n\
670  bgt $16,4b \n\
671  ret \n\
672  .end xor_alpha_prefetch_4 \n\
673  \n\
674  .align 3 \n\
675  .ent xor_alpha_prefetch_5 \n\
676 xor_alpha_prefetch_5: \n\
677  .prologue 0 \n\
678  srl $16, 6, $16 \n\
679  \n\
680  ldq $31, 0($17) \n\
681  ldq $31, 0($18) \n\
682  ldq $31, 0($19) \n\
683  ldq $31, 0($20) \n\
684  ldq $31, 0($21) \n\
685  \n\
686  ldq $31, 64($17) \n\
687  ldq $31, 64($18) \n\
688  ldq $31, 64($19) \n\
689  ldq $31, 64($20) \n\
690  ldq $31, 64($21) \n\
691  \n\
692  ldq $31, 128($17) \n\
693  ldq $31, 128($18) \n\
694  ldq $31, 128($19) \n\
695  ldq $31, 128($20) \n\
696  ldq $31, 128($21) \n\
697  \n\
698  ldq $31, 192($17) \n\
699  ldq $31, 192($18) \n\
700  ldq $31, 192($19) \n\
701  ldq $31, 192($20) \n\
702  ldq $31, 192($21) \n\
703  .align 4 \n\
704 5: \n\
705  ldq $0,0($17) \n\
706  ldq $1,0($18) \n\
707  ldq $2,0($19) \n\
708  ldq $3,0($20) \n\
709  \n\
710  ldq $4,0($21) \n\
711  ldq $5,8($17) \n\
712  ldq $6,8($18) \n\
713  ldq $7,8($19) \n\
714  \n\
715  ldq $22,8($20) \n\
716  ldq $23,8($21) \n\
717  ldq $24,16($17) \n\
718  ldq $25,16($18) \n\
719  \n\
720  ldq $27,16($19) \n\
721  xor $0,$1,$1 # 6 cycles from $1 load \n\
722  ldq $28,16($20) \n\
723  xor $2,$3,$3 # 6 cycles from $3 load \n\
724  \n\
725  ldq $0,16($21) \n\
726  xor $1,$3,$3 \n\
727  ldq $1,24($17) \n\
728  xor $3,$4,$4 # 7 cycles from $4 load \n\
729  \n\
730  stq $4,0($17) \n\
731  xor $5,$6,$6 # 7 cycles from $6 load \n\
732  xor $7,$22,$22 # 7 cycles from $22 load \n\
733  xor $6,$23,$23 # 7 cycles from $23 load \n\
734  \n\
735  ldq $2,24($18) \n\
736  xor $22,$23,$23 \n\
737  ldq $3,24($19) \n\
738  xor $24,$25,$25 # 8 cycles from $25 load \n\
739  \n\
740  stq $23,8($17) \n\
741  xor $25,$27,$27 # 8 cycles from $27 load \n\
742  ldq $4,24($20) \n\
743  xor $28,$0,$0 # 7 cycles from $0 load \n\
744  \n\
745  ldq $5,24($21) \n\
746  xor $27,$0,$0 \n\
747  ldq $6,32($17) \n\
748  ldq $7,32($18) \n\
749  \n\
750  stq $0,16($17) \n\
751  xor $1,$2,$2 # 6 cycles from $2 load \n\
752  ldq $22,32($19) \n\
753  xor $3,$4,$4 # 4 cycles from $4 load \n\
754  \n\
755  ldq $23,32($20) \n\
756  xor $2,$4,$4 \n\
757  ldq $24,32($21) \n\
758  ldq $25,40($17) \n\
759  \n\
760  ldq $27,40($18) \n\
761  ldq $28,40($19) \n\
762  ldq $0,40($20) \n\
763  xor $4,$5,$5 # 7 cycles from $5 load \n\
764  \n\
765  stq $5,24($17) \n\
766  xor $6,$7,$7 # 7 cycles from $7 load \n\
767  ldq $1,40($21) \n\
768  ldq $2,48($17) \n\
769  \n\
770  ldq $3,48($18) \n\
771  xor $7,$22,$22 # 7 cycles from $22 load \n\
772  ldq $4,48($19) \n\
773  xor $23,$24,$24 # 6 cycles from $24 load \n\
774  \n\
775  ldq $5,48($20) \n\
776  xor $22,$24,$24 \n\
777  ldq $6,48($21) \n\
778  xor $25,$27,$27 # 7 cycles from $27 load \n\
779  \n\
780  stq $24,32($17) \n\
781  xor $27,$28,$28 # 8 cycles from $28 load \n\
782  ldq $7,56($17) \n\
783  xor $0,$1,$1 # 6 cycles from $1 load \n\
784  \n\
785  ldq $22,56($18) \n\
786  ldq $23,56($19) \n\
787  ldq $24,56($20) \n\
788  ldq $25,56($21) \n\
789  \n\
790  ldq $31,256($17) \n\
791  xor $28,$1,$1 \n\
792  ldq $31,256($18) \n\
793  xor $2,$3,$3 # 9 cycles from $3 load \n\
794  \n\
795  ldq $31,256($19) \n\
796  xor $3,$4,$4 # 9 cycles from $4 load \n\
797  ldq $31,256($20) \n\
798  xor $5,$6,$6 # 8 cycles from $6 load \n\
799  \n\
800  stq $1,40($17) \n\
801  xor $4,$6,$6 \n\
802  xor $7,$22,$22 # 7 cycles from $22 load \n\
803  xor $23,$24,$24 # 6 cycles from $24 load \n\
804  \n\
805  stq $6,48($17) \n\
806  xor $22,$24,$24 \n\
807  ldq $31,256($21) \n\
808  xor $24,$25,$25 # 8 cycles from $25 load \n\
809  \n\
810  stq $25,56($17) \n\
811  subq $16,1,$16 \n\
812  addq $21,64,$21 \n\
813  addq $20,64,$20 \n\
814  \n\
815  addq $19,64,$19 \n\
816  addq $18,64,$18 \n\
817  addq $17,64,$17 \n\
818  bgt $16,5b \n\
819  \n\
820  ret \n\
821  .end xor_alpha_prefetch_5 \n\
822 ");
823 
824 static struct xor_block_template xor_block_alpha = {
825  .name = "alpha",
826  .do_2 = xor_alpha_2,
827  .do_3 = xor_alpha_3,
828  .do_4 = xor_alpha_4,
829  .do_5 = xor_alpha_5,
830 };
831 
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,
838 };
839 
840 /* For grins, also test the generic routines. */
841 #include <asm-generic/xor.h>
842 
843 #undef XOR_TRY_TEMPLATES
844 #define XOR_TRY_TEMPLATES \
845  do { \
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); \
850  } while (0)
851 
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)