root/include/asm-generic/xor.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. xor_8regs_2
  2. xor_8regs_3
  3. xor_8regs_4
  4. xor_8regs_5
  5. xor_32regs_2
  6. xor_32regs_3
  7. xor_32regs_4
  8. xor_32regs_5
  9. xor_8regs_p_2
  10. xor_8regs_p_3
  11. xor_8regs_p_4
  12. xor_8regs_p_5
  13. xor_32regs_p_2
  14. xor_32regs_p_3
  15. xor_32regs_p_4
  16. xor_32regs_p_5

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

/* [<][>][^][v][top][bottom][index][help] */