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