Lines Matching +full:3 +full:- +full:n
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"
36 LD(i + 3, 3) \ in xor_pII_mmx_2()
43 XO1(i + 3, 3) \ in xor_pII_mmx_2()
44 ST(i + 3, 3) in xor_pII_mmx_2()
46 " .align 32 ;\n" in xor_pII_mmx_2()
47 " 1: ;\n" in xor_pII_mmx_2()
54 " addl $128, %1 ;\n" in xor_pII_mmx_2()
55 " addl $128, %2 ;\n" in xor_pII_mmx_2()
56 " decl %0 ;\n" in xor_pII_mmx_2()
57 " jnz 1b ;\n" in xor_pII_mmx_2()
80 LD(i + 3, 3) \ in xor_pII_mmx_3()
84 XO1(i + 3, 3) \ in xor_pII_mmx_3()
91 XO2(i + 3, 3) \ in xor_pII_mmx_3()
92 ST(i + 3, 3) in xor_pII_mmx_3()
94 " .align 32 ;\n" in xor_pII_mmx_3()
95 " 1: ;\n" in xor_pII_mmx_3()
102 " addl $128, %1 ;\n" in xor_pII_mmx_3()
103 " addl $128, %2 ;\n" in xor_pII_mmx_3()
104 " addl $128, %3 ;\n" in xor_pII_mmx_3()
105 " decl %0 ;\n" in xor_pII_mmx_3()
106 " jnz 1b ;\n" in xor_pII_mmx_3()
129 LD(i + 3, 3) \ in xor_pII_mmx_4()
133 XO1(i + 3, 3) \ in xor_pII_mmx_4()
137 XO2(i + 3, 3) \ in xor_pII_mmx_4()
144 XO3(i + 3, 3) \ in xor_pII_mmx_4()
145 ST(i + 3, 3) in xor_pII_mmx_4()
147 " .align 32 ;\n" in xor_pII_mmx_4()
148 " 1: ;\n" in xor_pII_mmx_4()
155 " addl $128, %1 ;\n" in xor_pII_mmx_4()
156 " addl $128, %2 ;\n" in xor_pII_mmx_4()
157 " addl $128, %3 ;\n" in xor_pII_mmx_4()
158 " addl $128, %4 ;\n" in xor_pII_mmx_4()
159 " decl %0 ;\n" in xor_pII_mmx_4()
160 " jnz 1b ;\n" in xor_pII_mmx_4()
182 as read/write, otherwise we'd overflow the 10-asm-operands in xor_pII_mmx_5()
192 LD(i + 3, 3) \ in xor_pII_mmx_5()
196 XO1(i + 3, 3) \ in xor_pII_mmx_5()
200 XO2(i + 3, 3) \ in xor_pII_mmx_5()
204 XO3(i + 3, 3) \ in xor_pII_mmx_5()
211 XO4(i + 3, 3) \ in xor_pII_mmx_5()
212 ST(i + 3, 3) in xor_pII_mmx_5()
214 " .align 32 ;\n" in xor_pII_mmx_5()
215 " 1: ;\n" in xor_pII_mmx_5()
222 " addl $128, %1 ;\n" in xor_pII_mmx_5()
223 " addl $128, %2 ;\n" in xor_pII_mmx_5()
224 " addl $128, %3 ;\n" in xor_pII_mmx_5()
225 " addl $128, %4 ;\n" in xor_pII_mmx_5()
226 " addl $128, %5 ;\n" in xor_pII_mmx_5()
227 " decl %0 ;\n" in xor_pII_mmx_5()
228 " jnz 1b ;\n" in xor_pII_mmx_5()
258 " .align 32 ;\n" in xor_p5_mmx_2()
259 " 1: ;\n" in xor_p5_mmx_2()
260 " movq (%1), %%mm0 ;\n" in xor_p5_mmx_2()
261 " movq 8(%1), %%mm1 ;\n" in xor_p5_mmx_2()
262 " pxor (%2), %%mm0 ;\n" in xor_p5_mmx_2()
263 " movq 16(%1), %%mm2 ;\n" in xor_p5_mmx_2()
264 " movq %%mm0, (%1) ;\n" in xor_p5_mmx_2()
265 " pxor 8(%2), %%mm1 ;\n" in xor_p5_mmx_2()
266 " movq 24(%1), %%mm3 ;\n" in xor_p5_mmx_2()
267 " movq %%mm1, 8(%1) ;\n" in xor_p5_mmx_2()
268 " pxor 16(%2), %%mm2 ;\n" in xor_p5_mmx_2()
269 " movq 32(%1), %%mm4 ;\n" in xor_p5_mmx_2()
270 " movq %%mm2, 16(%1) ;\n" in xor_p5_mmx_2()
271 " pxor 24(%2), %%mm3 ;\n" in xor_p5_mmx_2()
272 " movq 40(%1), %%mm5 ;\n" in xor_p5_mmx_2()
273 " movq %%mm3, 24(%1) ;\n" in xor_p5_mmx_2()
274 " pxor 32(%2), %%mm4 ;\n" in xor_p5_mmx_2()
275 " movq 48(%1), %%mm6 ;\n" in xor_p5_mmx_2()
276 " movq %%mm4, 32(%1) ;\n" in xor_p5_mmx_2()
277 " pxor 40(%2), %%mm5 ;\n" in xor_p5_mmx_2()
278 " movq 56(%1), %%mm7 ;\n" in xor_p5_mmx_2()
279 " movq %%mm5, 40(%1) ;\n" in xor_p5_mmx_2()
280 " pxor 48(%2), %%mm6 ;\n" in xor_p5_mmx_2()
281 " pxor 56(%2), %%mm7 ;\n" in xor_p5_mmx_2()
282 " movq %%mm6, 48(%1) ;\n" in xor_p5_mmx_2()
283 " movq %%mm7, 56(%1) ;\n" in xor_p5_mmx_2()
285 " addl $64, %1 ;\n" in xor_p5_mmx_2()
286 " addl $64, %2 ;\n" in xor_p5_mmx_2()
287 " decl %0 ;\n" in xor_p5_mmx_2()
288 " jnz 1b ;\n" in xor_p5_mmx_2()
306 " .align 32,0x90 ;\n" in xor_p5_mmx_3()
307 " 1: ;\n" in xor_p5_mmx_3()
308 " movq (%1), %%mm0 ;\n" in xor_p5_mmx_3()
309 " movq 8(%1), %%mm1 ;\n" in xor_p5_mmx_3()
310 " pxor (%2), %%mm0 ;\n" in xor_p5_mmx_3()
311 " movq 16(%1), %%mm2 ;\n" in xor_p5_mmx_3()
312 " pxor 8(%2), %%mm1 ;\n" in xor_p5_mmx_3()
313 " pxor (%3), %%mm0 ;\n" in xor_p5_mmx_3()
314 " pxor 16(%2), %%mm2 ;\n" in xor_p5_mmx_3()
315 " movq %%mm0, (%1) ;\n" in xor_p5_mmx_3()
316 " pxor 8(%3), %%mm1 ;\n" in xor_p5_mmx_3()
317 " pxor 16(%3), %%mm2 ;\n" in xor_p5_mmx_3()
318 " movq 24(%1), %%mm3 ;\n" in xor_p5_mmx_3()
319 " movq %%mm1, 8(%1) ;\n" in xor_p5_mmx_3()
320 " movq 32(%1), %%mm4 ;\n" in xor_p5_mmx_3()
321 " movq 40(%1), %%mm5 ;\n" in xor_p5_mmx_3()
322 " pxor 24(%2), %%mm3 ;\n" in xor_p5_mmx_3()
323 " movq %%mm2, 16(%1) ;\n" in xor_p5_mmx_3()
324 " pxor 32(%2), %%mm4 ;\n" in xor_p5_mmx_3()
325 " pxor 24(%3), %%mm3 ;\n" in xor_p5_mmx_3()
326 " pxor 40(%2), %%mm5 ;\n" in xor_p5_mmx_3()
327 " movq %%mm3, 24(%1) ;\n" in xor_p5_mmx_3()
328 " pxor 32(%3), %%mm4 ;\n" in xor_p5_mmx_3()
329 " pxor 40(%3), %%mm5 ;\n" in xor_p5_mmx_3()
330 " movq 48(%1), %%mm6 ;\n" in xor_p5_mmx_3()
331 " movq %%mm4, 32(%1) ;\n" in xor_p5_mmx_3()
332 " movq 56(%1), %%mm7 ;\n" in xor_p5_mmx_3()
333 " pxor 48(%2), %%mm6 ;\n" in xor_p5_mmx_3()
334 " movq %%mm5, 40(%1) ;\n" in xor_p5_mmx_3()
335 " pxor 56(%2), %%mm7 ;\n" in xor_p5_mmx_3()
336 " pxor 48(%3), %%mm6 ;\n" in xor_p5_mmx_3()
337 " pxor 56(%3), %%mm7 ;\n" in xor_p5_mmx_3()
338 " movq %%mm6, 48(%1) ;\n" in xor_p5_mmx_3()
339 " movq %%mm7, 56(%1) ;\n" in xor_p5_mmx_3()
341 " addl $64, %1 ;\n" in xor_p5_mmx_3()
342 " addl $64, %2 ;\n" in xor_p5_mmx_3()
343 " addl $64, %3 ;\n" in xor_p5_mmx_3()
344 " decl %0 ;\n" in xor_p5_mmx_3()
345 " jnz 1b ;\n" in xor_p5_mmx_3()
363 " .align 32,0x90 ;\n" in xor_p5_mmx_4()
364 " 1: ;\n" in xor_p5_mmx_4()
365 " movq (%1), %%mm0 ;\n" in xor_p5_mmx_4()
366 " movq 8(%1), %%mm1 ;\n" in xor_p5_mmx_4()
367 " pxor (%2), %%mm0 ;\n" in xor_p5_mmx_4()
368 " movq 16(%1), %%mm2 ;\n" in xor_p5_mmx_4()
369 " pxor 8(%2), %%mm1 ;\n" in xor_p5_mmx_4()
370 " pxor (%3), %%mm0 ;\n" in xor_p5_mmx_4()
371 " pxor 16(%2), %%mm2 ;\n" in xor_p5_mmx_4()
372 " pxor 8(%3), %%mm1 ;\n" in xor_p5_mmx_4()
373 " pxor (%4), %%mm0 ;\n" in xor_p5_mmx_4()
374 " movq 24(%1), %%mm3 ;\n" in xor_p5_mmx_4()
375 " pxor 16(%3), %%mm2 ;\n" in xor_p5_mmx_4()
376 " pxor 8(%4), %%mm1 ;\n" in xor_p5_mmx_4()
377 " movq %%mm0, (%1) ;\n" in xor_p5_mmx_4()
378 " movq 32(%1), %%mm4 ;\n" in xor_p5_mmx_4()
379 " pxor 24(%2), %%mm3 ;\n" in xor_p5_mmx_4()
380 " pxor 16(%4), %%mm2 ;\n" in xor_p5_mmx_4()
381 " movq %%mm1, 8(%1) ;\n" in xor_p5_mmx_4()
382 " movq 40(%1), %%mm5 ;\n" in xor_p5_mmx_4()
383 " pxor 32(%2), %%mm4 ;\n" in xor_p5_mmx_4()
384 " pxor 24(%3), %%mm3 ;\n" in xor_p5_mmx_4()
385 " movq %%mm2, 16(%1) ;\n" in xor_p5_mmx_4()
386 " pxor 40(%2), %%mm5 ;\n" in xor_p5_mmx_4()
387 " pxor 32(%3), %%mm4 ;\n" in xor_p5_mmx_4()
388 " pxor 24(%4), %%mm3 ;\n" in xor_p5_mmx_4()
389 " movq %%mm3, 24(%1) ;\n" in xor_p5_mmx_4()
390 " movq 56(%1), %%mm7 ;\n" in xor_p5_mmx_4()
391 " movq 48(%1), %%mm6 ;\n" in xor_p5_mmx_4()
392 " pxor 40(%3), %%mm5 ;\n" in xor_p5_mmx_4()
393 " pxor 32(%4), %%mm4 ;\n" in xor_p5_mmx_4()
394 " pxor 48(%2), %%mm6 ;\n" in xor_p5_mmx_4()
395 " movq %%mm4, 32(%1) ;\n" in xor_p5_mmx_4()
396 " pxor 56(%2), %%mm7 ;\n" in xor_p5_mmx_4()
397 " pxor 40(%4), %%mm5 ;\n" in xor_p5_mmx_4()
398 " pxor 48(%3), %%mm6 ;\n" in xor_p5_mmx_4()
399 " pxor 56(%3), %%mm7 ;\n" in xor_p5_mmx_4()
400 " movq %%mm5, 40(%1) ;\n" in xor_p5_mmx_4()
401 " pxor 48(%4), %%mm6 ;\n" in xor_p5_mmx_4()
402 " pxor 56(%4), %%mm7 ;\n" in xor_p5_mmx_4()
403 " movq %%mm6, 48(%1) ;\n" in xor_p5_mmx_4()
404 " movq %%mm7, 56(%1) ;\n" in xor_p5_mmx_4()
406 " addl $64, %1 ;\n" in xor_p5_mmx_4()
407 " addl $64, %2 ;\n" in xor_p5_mmx_4()
408 " addl $64, %3 ;\n" in xor_p5_mmx_4()
409 " addl $64, %4 ;\n" in xor_p5_mmx_4()
410 " decl %0 ;\n" in xor_p5_mmx_4()
411 " jnz 1b ;\n" in xor_p5_mmx_4()
432 as read/write, otherwise we'd overflow the 10-asm-operands in xor_p5_mmx_5()
437 " .align 32,0x90 ;\n" in xor_p5_mmx_5()
438 " 1: ;\n" in xor_p5_mmx_5()
439 " movq (%1), %%mm0 ;\n" in xor_p5_mmx_5()
440 " movq 8(%1), %%mm1 ;\n" in xor_p5_mmx_5()
441 " pxor (%2), %%mm0 ;\n" in xor_p5_mmx_5()
442 " pxor 8(%2), %%mm1 ;\n" in xor_p5_mmx_5()
443 " movq 16(%1), %%mm2 ;\n" in xor_p5_mmx_5()
444 " pxor (%3), %%mm0 ;\n" in xor_p5_mmx_5()
445 " pxor 8(%3), %%mm1 ;\n" in xor_p5_mmx_5()
446 " pxor 16(%2), %%mm2 ;\n" in xor_p5_mmx_5()
447 " pxor (%4), %%mm0 ;\n" in xor_p5_mmx_5()
448 " pxor 8(%4), %%mm1 ;\n" in xor_p5_mmx_5()
449 " pxor 16(%3), %%mm2 ;\n" in xor_p5_mmx_5()
450 " movq 24(%1), %%mm3 ;\n" in xor_p5_mmx_5()
451 " pxor (%5), %%mm0 ;\n" in xor_p5_mmx_5()
452 " pxor 8(%5), %%mm1 ;\n" in xor_p5_mmx_5()
453 " movq %%mm0, (%1) ;\n" in xor_p5_mmx_5()
454 " pxor 16(%4), %%mm2 ;\n" in xor_p5_mmx_5()
455 " pxor 24(%2), %%mm3 ;\n" in xor_p5_mmx_5()
456 " movq %%mm1, 8(%1) ;\n" in xor_p5_mmx_5()
457 " pxor 16(%5), %%mm2 ;\n" in xor_p5_mmx_5()
458 " pxor 24(%3), %%mm3 ;\n" in xor_p5_mmx_5()
459 " movq 32(%1), %%mm4 ;\n" in xor_p5_mmx_5()
460 " movq %%mm2, 16(%1) ;\n" in xor_p5_mmx_5()
461 " pxor 24(%4), %%mm3 ;\n" in xor_p5_mmx_5()
462 " pxor 32(%2), %%mm4 ;\n" in xor_p5_mmx_5()
463 " movq 40(%1), %%mm5 ;\n" in xor_p5_mmx_5()
464 " pxor 24(%5), %%mm3 ;\n" in xor_p5_mmx_5()
465 " pxor 32(%3), %%mm4 ;\n" in xor_p5_mmx_5()
466 " pxor 40(%2), %%mm5 ;\n" in xor_p5_mmx_5()
467 " movq %%mm3, 24(%1) ;\n" in xor_p5_mmx_5()
468 " pxor 32(%4), %%mm4 ;\n" in xor_p5_mmx_5()
469 " pxor 40(%3), %%mm5 ;\n" in xor_p5_mmx_5()
470 " movq 48(%1), %%mm6 ;\n" in xor_p5_mmx_5()
471 " movq 56(%1), %%mm7 ;\n" in xor_p5_mmx_5()
472 " pxor 32(%5), %%mm4 ;\n" in xor_p5_mmx_5()
473 " pxor 40(%4), %%mm5 ;\n" in xor_p5_mmx_5()
474 " pxor 48(%2), %%mm6 ;\n" in xor_p5_mmx_5()
475 " pxor 56(%2), %%mm7 ;\n" in xor_p5_mmx_5()
476 " movq %%mm4, 32(%1) ;\n" in xor_p5_mmx_5()
477 " pxor 48(%3), %%mm6 ;\n" in xor_p5_mmx_5()
478 " pxor 56(%3), %%mm7 ;\n" in xor_p5_mmx_5()
479 " pxor 40(%5), %%mm5 ;\n" in xor_p5_mmx_5()
480 " pxor 48(%4), %%mm6 ;\n" in xor_p5_mmx_5()
481 " pxor 56(%4), %%mm7 ;\n" in xor_p5_mmx_5()
482 " movq %%mm5, 40(%1) ;\n" in xor_p5_mmx_5()
483 " pxor 48(%5), %%mm6 ;\n" in xor_p5_mmx_5()
484 " pxor 56(%5), %%mm7 ;\n" in xor_p5_mmx_5()
485 " movq %%mm6, 48(%1) ;\n" in xor_p5_mmx_5()
486 " movq %%mm7, 56(%1) ;\n" in xor_p5_mmx_5()
488 " addl $64, %1 ;\n" in xor_p5_mmx_5()
489 " addl $64, %2 ;\n" in xor_p5_mmx_5()
490 " addl $64, %3 ;\n" in xor_p5_mmx_5()
491 " addl $64, %4 ;\n" in xor_p5_mmx_5()
492 " addl $64, %5 ;\n" in xor_p5_mmx_5()
493 " decl %0 ;\n" in xor_p5_mmx_5()
494 " jnz 1b ;\n" in xor_p5_mmx_5()
536 #include <asm-generic/xor.h>