1 /* 2 * include/asm-generic/xor.h 3 * 4 * Generic optimized RAID-5 checksumming functions. 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 #include <linux/prefetch.h> 17 18 static void 19 xor_8regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) 20 { 21 long lines = bytes / (sizeof (long)) / 8; 22 23 do { 24 p1[0] ^= p2[0]; 25 p1[1] ^= p2[1]; 26 p1[2] ^= p2[2]; 27 p1[3] ^= p2[3]; 28 p1[4] ^= p2[4]; 29 p1[5] ^= p2[5]; 30 p1[6] ^= p2[6]; 31 p1[7] ^= p2[7]; 32 p1 += 8; 33 p2 += 8; 34 } while (--lines > 0); 35 } 36 37 static void 38 xor_8regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, 39 unsigned long *p3) 40 { 41 long lines = bytes / (sizeof (long)) / 8; 42 43 do { 44 p1[0] ^= p2[0] ^ p3[0]; 45 p1[1] ^= p2[1] ^ p3[1]; 46 p1[2] ^= p2[2] ^ p3[2]; 47 p1[3] ^= p2[3] ^ p3[3]; 48 p1[4] ^= p2[4] ^ p3[4]; 49 p1[5] ^= p2[5] ^ p3[5]; 50 p1[6] ^= p2[6] ^ p3[6]; 51 p1[7] ^= p2[7] ^ p3[7]; 52 p1 += 8; 53 p2 += 8; 54 p3 += 8; 55 } while (--lines > 0); 56 } 57 58 static void 59 xor_8regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, 60 unsigned long *p3, unsigned long *p4) 61 { 62 long lines = bytes / (sizeof (long)) / 8; 63 64 do { 65 p1[0] ^= p2[0] ^ p3[0] ^ p4[0]; 66 p1[1] ^= p2[1] ^ p3[1] ^ p4[1]; 67 p1[2] ^= p2[2] ^ p3[2] ^ p4[2]; 68 p1[3] ^= p2[3] ^ p3[3] ^ p4[3]; 69 p1[4] ^= p2[4] ^ p3[4] ^ p4[4]; 70 p1[5] ^= p2[5] ^ p3[5] ^ p4[5]; 71 p1[6] ^= p2[6] ^ p3[6] ^ p4[6]; 72 p1[7] ^= p2[7] ^ p3[7] ^ p4[7]; 73 p1 += 8; 74 p2 += 8; 75 p3 += 8; 76 p4 += 8; 77 } while (--lines > 0); 78 } 79 80 static void 81 xor_8regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, 82 unsigned long *p3, unsigned long *p4, unsigned long *p5) 83 { 84 long lines = bytes / (sizeof (long)) / 8; 85 86 do { 87 p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0]; 88 p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1]; 89 p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2]; 90 p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3]; 91 p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4]; 92 p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5]; 93 p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6]; 94 p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7]; 95 p1 += 8; 96 p2 += 8; 97 p3 += 8; 98 p4 += 8; 99 p5 += 8; 100 } while (--lines > 0); 101 } 102 103 static void 104 xor_32regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) 105 { 106 long lines = bytes / (sizeof (long)) / 8; 107 108 do { 109 register long d0, d1, d2, d3, d4, d5, d6, d7; 110 d0 = p1[0]; /* Pull the stuff into registers */ 111 d1 = p1[1]; /* ... in bursts, if possible. */ 112 d2 = p1[2]; 113 d3 = p1[3]; 114 d4 = p1[4]; 115 d5 = p1[5]; 116 d6 = p1[6]; 117 d7 = p1[7]; 118 d0 ^= p2[0]; 119 d1 ^= p2[1]; 120 d2 ^= p2[2]; 121 d3 ^= p2[3]; 122 d4 ^= p2[4]; 123 d5 ^= p2[5]; 124 d6 ^= p2[6]; 125 d7 ^= p2[7]; 126 p1[0] = d0; /* Store the result (in bursts) */ 127 p1[1] = d1; 128 p1[2] = d2; 129 p1[3] = d3; 130 p1[4] = d4; 131 p1[5] = d5; 132 p1[6] = d6; 133 p1[7] = d7; 134 p1 += 8; 135 p2 += 8; 136 } while (--lines > 0); 137 } 138 139 static void 140 xor_32regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, 141 unsigned long *p3) 142 { 143 long lines = bytes / (sizeof (long)) / 8; 144 145 do { 146 register long d0, d1, d2, d3, d4, d5, d6, d7; 147 d0 = p1[0]; /* Pull the stuff into registers */ 148 d1 = p1[1]; /* ... in bursts, if possible. */ 149 d2 = p1[2]; 150 d3 = p1[3]; 151 d4 = p1[4]; 152 d5 = p1[5]; 153 d6 = p1[6]; 154 d7 = p1[7]; 155 d0 ^= p2[0]; 156 d1 ^= p2[1]; 157 d2 ^= p2[2]; 158 d3 ^= p2[3]; 159 d4 ^= p2[4]; 160 d5 ^= p2[5]; 161 d6 ^= p2[6]; 162 d7 ^= p2[7]; 163 d0 ^= p3[0]; 164 d1 ^= p3[1]; 165 d2 ^= p3[2]; 166 d3 ^= p3[3]; 167 d4 ^= p3[4]; 168 d5 ^= p3[5]; 169 d6 ^= p3[6]; 170 d7 ^= p3[7]; 171 p1[0] = d0; /* Store the result (in bursts) */ 172 p1[1] = d1; 173 p1[2] = d2; 174 p1[3] = d3; 175 p1[4] = d4; 176 p1[5] = d5; 177 p1[6] = d6; 178 p1[7] = d7; 179 p1 += 8; 180 p2 += 8; 181 p3 += 8; 182 } while (--lines > 0); 183 } 184 185 static void 186 xor_32regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, 187 unsigned long *p3, unsigned long *p4) 188 { 189 long lines = bytes / (sizeof (long)) / 8; 190 191 do { 192 register long d0, d1, d2, d3, d4, d5, d6, d7; 193 d0 = p1[0]; /* Pull the stuff into registers */ 194 d1 = p1[1]; /* ... in bursts, if possible. */ 195 d2 = p1[2]; 196 d3 = p1[3]; 197 d4 = p1[4]; 198 d5 = p1[5]; 199 d6 = p1[6]; 200 d7 = p1[7]; 201 d0 ^= p2[0]; 202 d1 ^= p2[1]; 203 d2 ^= p2[2]; 204 d3 ^= p2[3]; 205 d4 ^= p2[4]; 206 d5 ^= p2[5]; 207 d6 ^= p2[6]; 208 d7 ^= p2[7]; 209 d0 ^= p3[0]; 210 d1 ^= p3[1]; 211 d2 ^= p3[2]; 212 d3 ^= p3[3]; 213 d4 ^= p3[4]; 214 d5 ^= p3[5]; 215 d6 ^= p3[6]; 216 d7 ^= p3[7]; 217 d0 ^= p4[0]; 218 d1 ^= p4[1]; 219 d2 ^= p4[2]; 220 d3 ^= p4[3]; 221 d4 ^= p4[4]; 222 d5 ^= p4[5]; 223 d6 ^= p4[6]; 224 d7 ^= p4[7]; 225 p1[0] = d0; /* Store the result (in bursts) */ 226 p1[1] = d1; 227 p1[2] = d2; 228 p1[3] = d3; 229 p1[4] = d4; 230 p1[5] = d5; 231 p1[6] = d6; 232 p1[7] = d7; 233 p1 += 8; 234 p2 += 8; 235 p3 += 8; 236 p4 += 8; 237 } while (--lines > 0); 238 } 239 240 static void 241 xor_32regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, 242 unsigned long *p3, unsigned long *p4, unsigned long *p5) 243 { 244 long lines = bytes / (sizeof (long)) / 8; 245 246 do { 247 register long d0, d1, d2, d3, d4, d5, d6, d7; 248 d0 = p1[0]; /* Pull the stuff into registers */ 249 d1 = p1[1]; /* ... in bursts, if possible. */ 250 d2 = p1[2]; 251 d3 = p1[3]; 252 d4 = p1[4]; 253 d5 = p1[5]; 254 d6 = p1[6]; 255 d7 = p1[7]; 256 d0 ^= p2[0]; 257 d1 ^= p2[1]; 258 d2 ^= p2[2]; 259 d3 ^= p2[3]; 260 d4 ^= p2[4]; 261 d5 ^= p2[5]; 262 d6 ^= p2[6]; 263 d7 ^= p2[7]; 264 d0 ^= p3[0]; 265 d1 ^= p3[1]; 266 d2 ^= p3[2]; 267 d3 ^= p3[3]; 268 d4 ^= p3[4]; 269 d5 ^= p3[5]; 270 d6 ^= p3[6]; 271 d7 ^= p3[7]; 272 d0 ^= p4[0]; 273 d1 ^= p4[1]; 274 d2 ^= p4[2]; 275 d3 ^= p4[3]; 276 d4 ^= p4[4]; 277 d5 ^= p4[5]; 278 d6 ^= p4[6]; 279 d7 ^= p4[7]; 280 d0 ^= p5[0]; 281 d1 ^= p5[1]; 282 d2 ^= p5[2]; 283 d3 ^= p5[3]; 284 d4 ^= p5[4]; 285 d5 ^= p5[5]; 286 d6 ^= p5[6]; 287 d7 ^= p5[7]; 288 p1[0] = d0; /* Store the result (in bursts) */ 289 p1[1] = d1; 290 p1[2] = d2; 291 p1[3] = d3; 292 p1[4] = d4; 293 p1[5] = d5; 294 p1[6] = d6; 295 p1[7] = d7; 296 p1 += 8; 297 p2 += 8; 298 p3 += 8; 299 p4 += 8; 300 p5 += 8; 301 } while (--lines > 0); 302 } 303 304 static void 305 xor_8regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) 306 { 307 long lines = bytes / (sizeof (long)) / 8 - 1; 308 prefetchw(p1); 309 prefetch(p2); 310 311 do { 312 prefetchw(p1+8); 313 prefetch(p2+8); 314 once_more: 315 p1[0] ^= p2[0]; 316 p1[1] ^= p2[1]; 317 p1[2] ^= p2[2]; 318 p1[3] ^= p2[3]; 319 p1[4] ^= p2[4]; 320 p1[5] ^= p2[5]; 321 p1[6] ^= p2[6]; 322 p1[7] ^= p2[7]; 323 p1 += 8; 324 p2 += 8; 325 } while (--lines > 0); 326 if (lines == 0) 327 goto once_more; 328 } 329 330 static void 331 xor_8regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, 332 unsigned long *p3) 333 { 334 long lines = bytes / (sizeof (long)) / 8 - 1; 335 prefetchw(p1); 336 prefetch(p2); 337 prefetch(p3); 338 339 do { 340 prefetchw(p1+8); 341 prefetch(p2+8); 342 prefetch(p3+8); 343 once_more: 344 p1[0] ^= p2[0] ^ p3[0]; 345 p1[1] ^= p2[1] ^ p3[1]; 346 p1[2] ^= p2[2] ^ p3[2]; 347 p1[3] ^= p2[3] ^ p3[3]; 348 p1[4] ^= p2[4] ^ p3[4]; 349 p1[5] ^= p2[5] ^ p3[5]; 350 p1[6] ^= p2[6] ^ p3[6]; 351 p1[7] ^= p2[7] ^ p3[7]; 352 p1 += 8; 353 p2 += 8; 354 p3 += 8; 355 } while (--lines > 0); 356 if (lines == 0) 357 goto once_more; 358 } 359 360 static void 361 xor_8regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, 362 unsigned long *p3, unsigned long *p4) 363 { 364 long lines = bytes / (sizeof (long)) / 8 - 1; 365 366 prefetchw(p1); 367 prefetch(p2); 368 prefetch(p3); 369 prefetch(p4); 370 371 do { 372 prefetchw(p1+8); 373 prefetch(p2+8); 374 prefetch(p3+8); 375 prefetch(p4+8); 376 once_more: 377 p1[0] ^= p2[0] ^ p3[0] ^ p4[0]; 378 p1[1] ^= p2[1] ^ p3[1] ^ p4[1]; 379 p1[2] ^= p2[2] ^ p3[2] ^ p4[2]; 380 p1[3] ^= p2[3] ^ p3[3] ^ p4[3]; 381 p1[4] ^= p2[4] ^ p3[4] ^ p4[4]; 382 p1[5] ^= p2[5] ^ p3[5] ^ p4[5]; 383 p1[6] ^= p2[6] ^ p3[6] ^ p4[6]; 384 p1[7] ^= p2[7] ^ p3[7] ^ p4[7]; 385 p1 += 8; 386 p2 += 8; 387 p3 += 8; 388 p4 += 8; 389 } while (--lines > 0); 390 if (lines == 0) 391 goto once_more; 392 } 393 394 static void 395 xor_8regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, 396 unsigned long *p3, unsigned long *p4, unsigned long *p5) 397 { 398 long lines = bytes / (sizeof (long)) / 8 - 1; 399 400 prefetchw(p1); 401 prefetch(p2); 402 prefetch(p3); 403 prefetch(p4); 404 prefetch(p5); 405 406 do { 407 prefetchw(p1+8); 408 prefetch(p2+8); 409 prefetch(p3+8); 410 prefetch(p4+8); 411 prefetch(p5+8); 412 once_more: 413 p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0]; 414 p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1]; 415 p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2]; 416 p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3]; 417 p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4]; 418 p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5]; 419 p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6]; 420 p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7]; 421 p1 += 8; 422 p2 += 8; 423 p3 += 8; 424 p4 += 8; 425 p5 += 8; 426 } while (--lines > 0); 427 if (lines == 0) 428 goto once_more; 429 } 430 431 static void 432 xor_32regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) 433 { 434 long lines = bytes / (sizeof (long)) / 8 - 1; 435 436 prefetchw(p1); 437 prefetch(p2); 438 439 do { 440 register long d0, d1, d2, d3, d4, d5, d6, d7; 441 442 prefetchw(p1+8); 443 prefetch(p2+8); 444 once_more: 445 d0 = p1[0]; /* Pull the stuff into registers */ 446 d1 = p1[1]; /* ... in bursts, if possible. */ 447 d2 = p1[2]; 448 d3 = p1[3]; 449 d4 = p1[4]; 450 d5 = p1[5]; 451 d6 = p1[6]; 452 d7 = p1[7]; 453 d0 ^= p2[0]; 454 d1 ^= p2[1]; 455 d2 ^= p2[2]; 456 d3 ^= p2[3]; 457 d4 ^= p2[4]; 458 d5 ^= p2[5]; 459 d6 ^= p2[6]; 460 d7 ^= p2[7]; 461 p1[0] = d0; /* Store the result (in bursts) */ 462 p1[1] = d1; 463 p1[2] = d2; 464 p1[3] = d3; 465 p1[4] = d4; 466 p1[5] = d5; 467 p1[6] = d6; 468 p1[7] = d7; 469 p1 += 8; 470 p2 += 8; 471 } while (--lines > 0); 472 if (lines == 0) 473 goto once_more; 474 } 475 476 static void 477 xor_32regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, 478 unsigned long *p3) 479 { 480 long lines = bytes / (sizeof (long)) / 8 - 1; 481 482 prefetchw(p1); 483 prefetch(p2); 484 prefetch(p3); 485 486 do { 487 register long d0, d1, d2, d3, d4, d5, d6, d7; 488 489 prefetchw(p1+8); 490 prefetch(p2+8); 491 prefetch(p3+8); 492 once_more: 493 d0 = p1[0]; /* Pull the stuff into registers */ 494 d1 = p1[1]; /* ... in bursts, if possible. */ 495 d2 = p1[2]; 496 d3 = p1[3]; 497 d4 = p1[4]; 498 d5 = p1[5]; 499 d6 = p1[6]; 500 d7 = p1[7]; 501 d0 ^= p2[0]; 502 d1 ^= p2[1]; 503 d2 ^= p2[2]; 504 d3 ^= p2[3]; 505 d4 ^= p2[4]; 506 d5 ^= p2[5]; 507 d6 ^= p2[6]; 508 d7 ^= p2[7]; 509 d0 ^= p3[0]; 510 d1 ^= p3[1]; 511 d2 ^= p3[2]; 512 d3 ^= p3[3]; 513 d4 ^= p3[4]; 514 d5 ^= p3[5]; 515 d6 ^= p3[6]; 516 d7 ^= p3[7]; 517 p1[0] = d0; /* Store the result (in bursts) */ 518 p1[1] = d1; 519 p1[2] = d2; 520 p1[3] = d3; 521 p1[4] = d4; 522 p1[5] = d5; 523 p1[6] = d6; 524 p1[7] = d7; 525 p1 += 8; 526 p2 += 8; 527 p3 += 8; 528 } while (--lines > 0); 529 if (lines == 0) 530 goto once_more; 531 } 532 533 static void 534 xor_32regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, 535 unsigned long *p3, unsigned long *p4) 536 { 537 long lines = bytes / (sizeof (long)) / 8 - 1; 538 539 prefetchw(p1); 540 prefetch(p2); 541 prefetch(p3); 542 prefetch(p4); 543 544 do { 545 register long d0, d1, d2, d3, d4, d5, d6, d7; 546 547 prefetchw(p1+8); 548 prefetch(p2+8); 549 prefetch(p3+8); 550 prefetch(p4+8); 551 once_more: 552 d0 = p1[0]; /* Pull the stuff into registers */ 553 d1 = p1[1]; /* ... in bursts, if possible. */ 554 d2 = p1[2]; 555 d3 = p1[3]; 556 d4 = p1[4]; 557 d5 = p1[5]; 558 d6 = p1[6]; 559 d7 = p1[7]; 560 d0 ^= p2[0]; 561 d1 ^= p2[1]; 562 d2 ^= p2[2]; 563 d3 ^= p2[3]; 564 d4 ^= p2[4]; 565 d5 ^= p2[5]; 566 d6 ^= p2[6]; 567 d7 ^= p2[7]; 568 d0 ^= p3[0]; 569 d1 ^= p3[1]; 570 d2 ^= p3[2]; 571 d3 ^= p3[3]; 572 d4 ^= p3[4]; 573 d5 ^= p3[5]; 574 d6 ^= p3[6]; 575 d7 ^= p3[7]; 576 d0 ^= p4[0]; 577 d1 ^= p4[1]; 578 d2 ^= p4[2]; 579 d3 ^= p4[3]; 580 d4 ^= p4[4]; 581 d5 ^= p4[5]; 582 d6 ^= p4[6]; 583 d7 ^= p4[7]; 584 p1[0] = d0; /* Store the result (in bursts) */ 585 p1[1] = d1; 586 p1[2] = d2; 587 p1[3] = d3; 588 p1[4] = d4; 589 p1[5] = d5; 590 p1[6] = d6; 591 p1[7] = d7; 592 p1 += 8; 593 p2 += 8; 594 p3 += 8; 595 p4 += 8; 596 } while (--lines > 0); 597 if (lines == 0) 598 goto once_more; 599 } 600 601 static void 602 xor_32regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, 603 unsigned long *p3, unsigned long *p4, unsigned long *p5) 604 { 605 long lines = bytes / (sizeof (long)) / 8 - 1; 606 607 prefetchw(p1); 608 prefetch(p2); 609 prefetch(p3); 610 prefetch(p4); 611 prefetch(p5); 612 613 do { 614 register long d0, d1, d2, d3, d4, d5, d6, d7; 615 616 prefetchw(p1+8); 617 prefetch(p2+8); 618 prefetch(p3+8); 619 prefetch(p4+8); 620 prefetch(p5+8); 621 once_more: 622 d0 = p1[0]; /* Pull the stuff into registers */ 623 d1 = p1[1]; /* ... in bursts, if possible. */ 624 d2 = p1[2]; 625 d3 = p1[3]; 626 d4 = p1[4]; 627 d5 = p1[5]; 628 d6 = p1[6]; 629 d7 = p1[7]; 630 d0 ^= p2[0]; 631 d1 ^= p2[1]; 632 d2 ^= p2[2]; 633 d3 ^= p2[3]; 634 d4 ^= p2[4]; 635 d5 ^= p2[5]; 636 d6 ^= p2[6]; 637 d7 ^= p2[7]; 638 d0 ^= p3[0]; 639 d1 ^= p3[1]; 640 d2 ^= p3[2]; 641 d3 ^= p3[3]; 642 d4 ^= p3[4]; 643 d5 ^= p3[5]; 644 d6 ^= p3[6]; 645 d7 ^= p3[7]; 646 d0 ^= p4[0]; 647 d1 ^= p4[1]; 648 d2 ^= p4[2]; 649 d3 ^= p4[3]; 650 d4 ^= p4[4]; 651 d5 ^= p4[5]; 652 d6 ^= p4[6]; 653 d7 ^= p4[7]; 654 d0 ^= p5[0]; 655 d1 ^= p5[1]; 656 d2 ^= p5[2]; 657 d3 ^= p5[3]; 658 d4 ^= p5[4]; 659 d5 ^= p5[5]; 660 d6 ^= p5[6]; 661 d7 ^= p5[7]; 662 p1[0] = d0; /* Store the result (in bursts) */ 663 p1[1] = d1; 664 p1[2] = d2; 665 p1[3] = d3; 666 p1[4] = d4; 667 p1[5] = d5; 668 p1[6] = d6; 669 p1[7] = d7; 670 p1 += 8; 671 p2 += 8; 672 p3 += 8; 673 p4 += 8; 674 p5 += 8; 675 } while (--lines > 0); 676 if (lines == 0) 677 goto once_more; 678 } 679 680 static struct xor_block_template xor_block_8regs = { 681 .name = "8regs", 682 .do_2 = xor_8regs_2, 683 .do_3 = xor_8regs_3, 684 .do_4 = xor_8regs_4, 685 .do_5 = xor_8regs_5, 686 }; 687 688 static struct xor_block_template xor_block_32regs = { 689 .name = "32regs", 690 .do_2 = xor_32regs_2, 691 .do_3 = xor_32regs_3, 692 .do_4 = xor_32regs_4, 693 .do_5 = xor_32regs_5, 694 }; 695 696 static struct xor_block_template xor_block_8regs_p = { 697 .name = "8regs_prefetch", 698 .do_2 = xor_8regs_p_2, 699 .do_3 = xor_8regs_p_3, 700 .do_4 = xor_8regs_p_4, 701 .do_5 = xor_8regs_p_5, 702 }; 703 704 static struct xor_block_template xor_block_32regs_p = { 705 .name = "32regs_prefetch", 706 .do_2 = xor_32regs_p_2, 707 .do_3 = xor_32regs_p_3, 708 .do_4 = xor_32regs_p_4, 709 .do_5 = xor_32regs_p_5, 710 }; 711 712 #define XOR_TRY_TEMPLATES \ 713 do { \ 714 xor_speed(&xor_block_8regs); \ 715 xor_speed(&xor_block_8regs_p); \ 716 xor_speed(&xor_block_32regs); \ 717 xor_speed(&xor_block_32regs_p); \ 718 } while (0) 719