Lines Matching +full:n +full:- +full:1
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
6 * Optimized RAID-5 checksumming functions for MMX.
10 * High-speed RAID5 checksumming functions utilizing MMX instructions.
14 #define LD(x, y) " movq 8*("#x")(%1), %%mm"#y" ;\n"
15 #define ST(x, y) " movq %%mm"#y", 8*("#x")(%1) ;\n"
16 #define XO1(x, y) " pxor 8*("#x")(%2), %%mm"#y" ;\n"
17 #define XO2(x, y) " pxor 8*("#x")(%3), %%mm"#y" ;\n"
18 #define XO3(x, y) " pxor 8*("#x")(%4), %%mm"#y" ;\n"
19 #define XO4(x, y) " pxor 8*("#x")(%5), %%mm"#y" ;\n"
35 LD(i + 1, 1) \ in xor_pII_mmx_2()
40 XO1(i+1, 1) \ in xor_pII_mmx_2()
41 ST(i+1, 1) \ in xor_pII_mmx_2()
47 " .align 32 ;\n" in xor_pII_mmx_2()
48 " 1: ;\n" in xor_pII_mmx_2()
55 " addl $128, %1 ;\n" in xor_pII_mmx_2()
56 " addl $128, %2 ;\n" in xor_pII_mmx_2()
57 " decl %0 ;\n" in xor_pII_mmx_2()
58 " jnz 1b ;\n" in xor_pII_mmx_2()
80 LD(i + 1, 1) \ in xor_pII_mmx_3()
84 XO1(i + 1, 1) \ in xor_pII_mmx_3()
89 XO2(i + 1, 1) \ in xor_pII_mmx_3()
90 ST(i + 1, 1) \ in xor_pII_mmx_3()
96 " .align 32 ;\n" in xor_pII_mmx_3()
97 " 1: ;\n" in xor_pII_mmx_3()
104 " addl $128, %1 ;\n" in xor_pII_mmx_3()
105 " addl $128, %2 ;\n" in xor_pII_mmx_3()
106 " addl $128, %3 ;\n" in xor_pII_mmx_3()
107 " decl %0 ;\n" in xor_pII_mmx_3()
108 " jnz 1b ;\n" in xor_pII_mmx_3()
131 LD(i + 1, 1) \ in xor_pII_mmx_4()
135 XO1(i + 1, 1) \ in xor_pII_mmx_4()
139 XO2(i + 1, 1) \ in xor_pII_mmx_4()
144 XO3(i + 1, 1) \ in xor_pII_mmx_4()
145 ST(i + 1, 1) \ in xor_pII_mmx_4()
151 " .align 32 ;\n" in xor_pII_mmx_4()
152 " 1: ;\n" in xor_pII_mmx_4()
159 " addl $128, %1 ;\n" in xor_pII_mmx_4()
160 " addl $128, %2 ;\n" in xor_pII_mmx_4()
161 " addl $128, %3 ;\n" in xor_pII_mmx_4()
162 " addl $128, %4 ;\n" in xor_pII_mmx_4()
163 " decl %0 ;\n" in xor_pII_mmx_4()
164 " jnz 1b ;\n" in xor_pII_mmx_4()
189 as read/write, otherwise we'd overflow the 10-asm-operands in xor_pII_mmx_5()
197 LD(i + 1, 1) \ in xor_pII_mmx_5()
201 XO1(i + 1, 1) \ in xor_pII_mmx_5()
205 XO2(i + 1, 1) \ in xor_pII_mmx_5()
209 XO3(i + 1, 1) \ in xor_pII_mmx_5()
214 XO4(i + 1, 1) \ in xor_pII_mmx_5()
215 ST(i + 1, 1) \ in xor_pII_mmx_5()
221 " .align 32 ;\n" in xor_pII_mmx_5()
222 " 1: ;\n" in xor_pII_mmx_5()
229 " addl $128, %1 ;\n" in xor_pII_mmx_5()
230 " addl $128, %2 ;\n" in xor_pII_mmx_5()
231 " addl $128, %3 ;\n" in xor_pII_mmx_5()
232 " addl $128, %4 ;\n" in xor_pII_mmx_5()
233 " addl $128, %5 ;\n" in xor_pII_mmx_5()
234 " decl %0 ;\n" in xor_pII_mmx_5()
235 " jnz 1b ;\n" in xor_pII_mmx_5()
266 " .align 32 ;\n" in xor_p5_mmx_2()
267 " 1: ;\n" in xor_p5_mmx_2()
268 " movq (%1), %%mm0 ;\n" in xor_p5_mmx_2()
269 " movq 8(%1), %%mm1 ;\n" in xor_p5_mmx_2()
270 " pxor (%2), %%mm0 ;\n" in xor_p5_mmx_2()
271 " movq 16(%1), %%mm2 ;\n" in xor_p5_mmx_2()
272 " movq %%mm0, (%1) ;\n" in xor_p5_mmx_2()
273 " pxor 8(%2), %%mm1 ;\n" in xor_p5_mmx_2()
274 " movq 24(%1), %%mm3 ;\n" in xor_p5_mmx_2()
275 " movq %%mm1, 8(%1) ;\n" in xor_p5_mmx_2()
276 " pxor 16(%2), %%mm2 ;\n" in xor_p5_mmx_2()
277 " movq 32(%1), %%mm4 ;\n" in xor_p5_mmx_2()
278 " movq %%mm2, 16(%1) ;\n" in xor_p5_mmx_2()
279 " pxor 24(%2), %%mm3 ;\n" in xor_p5_mmx_2()
280 " movq 40(%1), %%mm5 ;\n" in xor_p5_mmx_2()
281 " movq %%mm3, 24(%1) ;\n" in xor_p5_mmx_2()
282 " pxor 32(%2), %%mm4 ;\n" in xor_p5_mmx_2()
283 " movq 48(%1), %%mm6 ;\n" in xor_p5_mmx_2()
284 " movq %%mm4, 32(%1) ;\n" in xor_p5_mmx_2()
285 " pxor 40(%2), %%mm5 ;\n" in xor_p5_mmx_2()
286 " movq 56(%1), %%mm7 ;\n" in xor_p5_mmx_2()
287 " movq %%mm5, 40(%1) ;\n" in xor_p5_mmx_2()
288 " pxor 48(%2), %%mm6 ;\n" in xor_p5_mmx_2()
289 " pxor 56(%2), %%mm7 ;\n" in xor_p5_mmx_2()
290 " movq %%mm6, 48(%1) ;\n" in xor_p5_mmx_2()
291 " movq %%mm7, 56(%1) ;\n" in xor_p5_mmx_2()
293 " addl $64, %1 ;\n" in xor_p5_mmx_2()
294 " addl $64, %2 ;\n" in xor_p5_mmx_2()
295 " decl %0 ;\n" in xor_p5_mmx_2()
296 " jnz 1b ;\n" in xor_p5_mmx_2()
315 " .align 32,0x90 ;\n" in xor_p5_mmx_3()
316 " 1: ;\n" in xor_p5_mmx_3()
317 " movq (%1), %%mm0 ;\n" in xor_p5_mmx_3()
318 " movq 8(%1), %%mm1 ;\n" in xor_p5_mmx_3()
319 " pxor (%2), %%mm0 ;\n" in xor_p5_mmx_3()
320 " movq 16(%1), %%mm2 ;\n" in xor_p5_mmx_3()
321 " pxor 8(%2), %%mm1 ;\n" in xor_p5_mmx_3()
322 " pxor (%3), %%mm0 ;\n" in xor_p5_mmx_3()
323 " pxor 16(%2), %%mm2 ;\n" in xor_p5_mmx_3()
324 " movq %%mm0, (%1) ;\n" in xor_p5_mmx_3()
325 " pxor 8(%3), %%mm1 ;\n" in xor_p5_mmx_3()
326 " pxor 16(%3), %%mm2 ;\n" in xor_p5_mmx_3()
327 " movq 24(%1), %%mm3 ;\n" in xor_p5_mmx_3()
328 " movq %%mm1, 8(%1) ;\n" in xor_p5_mmx_3()
329 " movq 32(%1), %%mm4 ;\n" in xor_p5_mmx_3()
330 " movq 40(%1), %%mm5 ;\n" in xor_p5_mmx_3()
331 " pxor 24(%2), %%mm3 ;\n" in xor_p5_mmx_3()
332 " movq %%mm2, 16(%1) ;\n" in xor_p5_mmx_3()
333 " pxor 32(%2), %%mm4 ;\n" in xor_p5_mmx_3()
334 " pxor 24(%3), %%mm3 ;\n" in xor_p5_mmx_3()
335 " pxor 40(%2), %%mm5 ;\n" in xor_p5_mmx_3()
336 " movq %%mm3, 24(%1) ;\n" in xor_p5_mmx_3()
337 " pxor 32(%3), %%mm4 ;\n" in xor_p5_mmx_3()
338 " pxor 40(%3), %%mm5 ;\n" in xor_p5_mmx_3()
339 " movq 48(%1), %%mm6 ;\n" in xor_p5_mmx_3()
340 " movq %%mm4, 32(%1) ;\n" in xor_p5_mmx_3()
341 " movq 56(%1), %%mm7 ;\n" in xor_p5_mmx_3()
342 " pxor 48(%2), %%mm6 ;\n" in xor_p5_mmx_3()
343 " movq %%mm5, 40(%1) ;\n" in xor_p5_mmx_3()
344 " pxor 56(%2), %%mm7 ;\n" in xor_p5_mmx_3()
345 " pxor 48(%3), %%mm6 ;\n" in xor_p5_mmx_3()
346 " pxor 56(%3), %%mm7 ;\n" in xor_p5_mmx_3()
347 " movq %%mm6, 48(%1) ;\n" in xor_p5_mmx_3()
348 " movq %%mm7, 56(%1) ;\n" in xor_p5_mmx_3()
350 " addl $64, %1 ;\n" in xor_p5_mmx_3()
351 " addl $64, %2 ;\n" in xor_p5_mmx_3()
352 " addl $64, %3 ;\n" in xor_p5_mmx_3()
353 " decl %0 ;\n" in xor_p5_mmx_3()
354 " jnz 1b ;\n" in xor_p5_mmx_3()
374 " .align 32,0x90 ;\n" in xor_p5_mmx_4()
375 " 1: ;\n" in xor_p5_mmx_4()
376 " movq (%1), %%mm0 ;\n" in xor_p5_mmx_4()
377 " movq 8(%1), %%mm1 ;\n" in xor_p5_mmx_4()
378 " pxor (%2), %%mm0 ;\n" in xor_p5_mmx_4()
379 " movq 16(%1), %%mm2 ;\n" in xor_p5_mmx_4()
380 " pxor 8(%2), %%mm1 ;\n" in xor_p5_mmx_4()
381 " pxor (%3), %%mm0 ;\n" in xor_p5_mmx_4()
382 " pxor 16(%2), %%mm2 ;\n" in xor_p5_mmx_4()
383 " pxor 8(%3), %%mm1 ;\n" in xor_p5_mmx_4()
384 " pxor (%4), %%mm0 ;\n" in xor_p5_mmx_4()
385 " movq 24(%1), %%mm3 ;\n" in xor_p5_mmx_4()
386 " pxor 16(%3), %%mm2 ;\n" in xor_p5_mmx_4()
387 " pxor 8(%4), %%mm1 ;\n" in xor_p5_mmx_4()
388 " movq %%mm0, (%1) ;\n" in xor_p5_mmx_4()
389 " movq 32(%1), %%mm4 ;\n" in xor_p5_mmx_4()
390 " pxor 24(%2), %%mm3 ;\n" in xor_p5_mmx_4()
391 " pxor 16(%4), %%mm2 ;\n" in xor_p5_mmx_4()
392 " movq %%mm1, 8(%1) ;\n" in xor_p5_mmx_4()
393 " movq 40(%1), %%mm5 ;\n" in xor_p5_mmx_4()
394 " pxor 32(%2), %%mm4 ;\n" in xor_p5_mmx_4()
395 " pxor 24(%3), %%mm3 ;\n" in xor_p5_mmx_4()
396 " movq %%mm2, 16(%1) ;\n" in xor_p5_mmx_4()
397 " pxor 40(%2), %%mm5 ;\n" in xor_p5_mmx_4()
398 " pxor 32(%3), %%mm4 ;\n" in xor_p5_mmx_4()
399 " pxor 24(%4), %%mm3 ;\n" in xor_p5_mmx_4()
400 " movq %%mm3, 24(%1) ;\n" in xor_p5_mmx_4()
401 " movq 56(%1), %%mm7 ;\n" in xor_p5_mmx_4()
402 " movq 48(%1), %%mm6 ;\n" in xor_p5_mmx_4()
403 " pxor 40(%3), %%mm5 ;\n" in xor_p5_mmx_4()
404 " pxor 32(%4), %%mm4 ;\n" in xor_p5_mmx_4()
405 " pxor 48(%2), %%mm6 ;\n" in xor_p5_mmx_4()
406 " movq %%mm4, 32(%1) ;\n" in xor_p5_mmx_4()
407 " pxor 56(%2), %%mm7 ;\n" in xor_p5_mmx_4()
408 " pxor 40(%4), %%mm5 ;\n" in xor_p5_mmx_4()
409 " pxor 48(%3), %%mm6 ;\n" in xor_p5_mmx_4()
410 " pxor 56(%3), %%mm7 ;\n" in xor_p5_mmx_4()
411 " movq %%mm5, 40(%1) ;\n" in xor_p5_mmx_4()
412 " pxor 48(%4), %%mm6 ;\n" in xor_p5_mmx_4()
413 " pxor 56(%4), %%mm7 ;\n" in xor_p5_mmx_4()
414 " movq %%mm6, 48(%1) ;\n" in xor_p5_mmx_4()
415 " movq %%mm7, 56(%1) ;\n" in xor_p5_mmx_4()
417 " addl $64, %1 ;\n" in xor_p5_mmx_4()
418 " addl $64, %2 ;\n" in xor_p5_mmx_4()
419 " addl $64, %3 ;\n" in xor_p5_mmx_4()
420 " addl $64, %4 ;\n" in xor_p5_mmx_4()
421 " decl %0 ;\n" in xor_p5_mmx_4()
422 " jnz 1b ;\n" in xor_p5_mmx_4()
446 as read/write, otherwise we'd overflow the 10-asm-operands in xor_p5_mmx_5()
451 " .align 32,0x90 ;\n" in xor_p5_mmx_5()
452 " 1: ;\n" in xor_p5_mmx_5()
453 " movq (%1), %%mm0 ;\n" in xor_p5_mmx_5()
454 " movq 8(%1), %%mm1 ;\n" in xor_p5_mmx_5()
455 " pxor (%2), %%mm0 ;\n" in xor_p5_mmx_5()
456 " pxor 8(%2), %%mm1 ;\n" in xor_p5_mmx_5()
457 " movq 16(%1), %%mm2 ;\n" in xor_p5_mmx_5()
458 " pxor (%3), %%mm0 ;\n" in xor_p5_mmx_5()
459 " pxor 8(%3), %%mm1 ;\n" in xor_p5_mmx_5()
460 " pxor 16(%2), %%mm2 ;\n" in xor_p5_mmx_5()
461 " pxor (%4), %%mm0 ;\n" in xor_p5_mmx_5()
462 " pxor 8(%4), %%mm1 ;\n" in xor_p5_mmx_5()
463 " pxor 16(%3), %%mm2 ;\n" in xor_p5_mmx_5()
464 " movq 24(%1), %%mm3 ;\n" in xor_p5_mmx_5()
465 " pxor (%5), %%mm0 ;\n" in xor_p5_mmx_5()
466 " pxor 8(%5), %%mm1 ;\n" in xor_p5_mmx_5()
467 " movq %%mm0, (%1) ;\n" in xor_p5_mmx_5()
468 " pxor 16(%4), %%mm2 ;\n" in xor_p5_mmx_5()
469 " pxor 24(%2), %%mm3 ;\n" in xor_p5_mmx_5()
470 " movq %%mm1, 8(%1) ;\n" in xor_p5_mmx_5()
471 " pxor 16(%5), %%mm2 ;\n" in xor_p5_mmx_5()
472 " pxor 24(%3), %%mm3 ;\n" in xor_p5_mmx_5()
473 " movq 32(%1), %%mm4 ;\n" in xor_p5_mmx_5()
474 " movq %%mm2, 16(%1) ;\n" in xor_p5_mmx_5()
475 " pxor 24(%4), %%mm3 ;\n" in xor_p5_mmx_5()
476 " pxor 32(%2), %%mm4 ;\n" in xor_p5_mmx_5()
477 " movq 40(%1), %%mm5 ;\n" in xor_p5_mmx_5()
478 " pxor 24(%5), %%mm3 ;\n" in xor_p5_mmx_5()
479 " pxor 32(%3), %%mm4 ;\n" in xor_p5_mmx_5()
480 " pxor 40(%2), %%mm5 ;\n" in xor_p5_mmx_5()
481 " movq %%mm3, 24(%1) ;\n" in xor_p5_mmx_5()
482 " pxor 32(%4), %%mm4 ;\n" in xor_p5_mmx_5()
483 " pxor 40(%3), %%mm5 ;\n" in xor_p5_mmx_5()
484 " movq 48(%1), %%mm6 ;\n" in xor_p5_mmx_5()
485 " movq 56(%1), %%mm7 ;\n" in xor_p5_mmx_5()
486 " pxor 32(%5), %%mm4 ;\n" in xor_p5_mmx_5()
487 " pxor 40(%4), %%mm5 ;\n" in xor_p5_mmx_5()
488 " pxor 48(%2), %%mm6 ;\n" in xor_p5_mmx_5()
489 " pxor 56(%2), %%mm7 ;\n" in xor_p5_mmx_5()
490 " movq %%mm4, 32(%1) ;\n" in xor_p5_mmx_5()
491 " pxor 48(%3), %%mm6 ;\n" in xor_p5_mmx_5()
492 " pxor 56(%3), %%mm7 ;\n" in xor_p5_mmx_5()
493 " pxor 40(%5), %%mm5 ;\n" in xor_p5_mmx_5()
494 " pxor 48(%4), %%mm6 ;\n" in xor_p5_mmx_5()
495 " pxor 56(%4), %%mm7 ;\n" in xor_p5_mmx_5()
496 " movq %%mm5, 40(%1) ;\n" in xor_p5_mmx_5()
497 " pxor 48(%5), %%mm6 ;\n" in xor_p5_mmx_5()
498 " pxor 56(%5), %%mm7 ;\n" in xor_p5_mmx_5()
499 " movq %%mm6, 48(%1) ;\n" in xor_p5_mmx_5()
500 " movq %%mm7, 56(%1) ;\n" in xor_p5_mmx_5()
502 " addl $64, %1 ;\n" in xor_p5_mmx_5()
503 " addl $64, %2 ;\n" in xor_p5_mmx_5()
504 " addl $64, %3 ;\n" in xor_p5_mmx_5()
505 " addl $64, %4 ;\n" in xor_p5_mmx_5()
506 " addl $64, %5 ;\n" in xor_p5_mmx_5()
507 " decl %0 ;\n" in xor_p5_mmx_5()
508 " jnz 1b ;\n" in xor_p5_mmx_5()
550 #include <asm-generic/xor.h>