162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * include/asm-generic/xor.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Generic optimized RAID-5 checksumming functions.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <linux/prefetch.h>
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cistatic void
1162306a36Sopenharmony_cixor_8regs_2(unsigned long bytes, unsigned long * __restrict p1,
1262306a36Sopenharmony_ci	    const unsigned long * __restrict p2)
1362306a36Sopenharmony_ci{
1462306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8;
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci	do {
1762306a36Sopenharmony_ci		p1[0] ^= p2[0];
1862306a36Sopenharmony_ci		p1[1] ^= p2[1];
1962306a36Sopenharmony_ci		p1[2] ^= p2[2];
2062306a36Sopenharmony_ci		p1[3] ^= p2[3];
2162306a36Sopenharmony_ci		p1[4] ^= p2[4];
2262306a36Sopenharmony_ci		p1[5] ^= p2[5];
2362306a36Sopenharmony_ci		p1[6] ^= p2[6];
2462306a36Sopenharmony_ci		p1[7] ^= p2[7];
2562306a36Sopenharmony_ci		p1 += 8;
2662306a36Sopenharmony_ci		p2 += 8;
2762306a36Sopenharmony_ci	} while (--lines > 0);
2862306a36Sopenharmony_ci}
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_cistatic void
3162306a36Sopenharmony_cixor_8regs_3(unsigned long bytes, unsigned long * __restrict p1,
3262306a36Sopenharmony_ci	    const unsigned long * __restrict p2,
3362306a36Sopenharmony_ci	    const unsigned long * __restrict p3)
3462306a36Sopenharmony_ci{
3562306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8;
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	do {
3862306a36Sopenharmony_ci		p1[0] ^= p2[0] ^ p3[0];
3962306a36Sopenharmony_ci		p1[1] ^= p2[1] ^ p3[1];
4062306a36Sopenharmony_ci		p1[2] ^= p2[2] ^ p3[2];
4162306a36Sopenharmony_ci		p1[3] ^= p2[3] ^ p3[3];
4262306a36Sopenharmony_ci		p1[4] ^= p2[4] ^ p3[4];
4362306a36Sopenharmony_ci		p1[5] ^= p2[5] ^ p3[5];
4462306a36Sopenharmony_ci		p1[6] ^= p2[6] ^ p3[6];
4562306a36Sopenharmony_ci		p1[7] ^= p2[7] ^ p3[7];
4662306a36Sopenharmony_ci		p1 += 8;
4762306a36Sopenharmony_ci		p2 += 8;
4862306a36Sopenharmony_ci		p3 += 8;
4962306a36Sopenharmony_ci	} while (--lines > 0);
5062306a36Sopenharmony_ci}
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cistatic void
5362306a36Sopenharmony_cixor_8regs_4(unsigned long bytes, unsigned long * __restrict p1,
5462306a36Sopenharmony_ci	    const unsigned long * __restrict p2,
5562306a36Sopenharmony_ci	    const unsigned long * __restrict p3,
5662306a36Sopenharmony_ci	    const unsigned long * __restrict p4)
5762306a36Sopenharmony_ci{
5862306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8;
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci	do {
6162306a36Sopenharmony_ci		p1[0] ^= p2[0] ^ p3[0] ^ p4[0];
6262306a36Sopenharmony_ci		p1[1] ^= p2[1] ^ p3[1] ^ p4[1];
6362306a36Sopenharmony_ci		p1[2] ^= p2[2] ^ p3[2] ^ p4[2];
6462306a36Sopenharmony_ci		p1[3] ^= p2[3] ^ p3[3] ^ p4[3];
6562306a36Sopenharmony_ci		p1[4] ^= p2[4] ^ p3[4] ^ p4[4];
6662306a36Sopenharmony_ci		p1[5] ^= p2[5] ^ p3[5] ^ p4[5];
6762306a36Sopenharmony_ci		p1[6] ^= p2[6] ^ p3[6] ^ p4[6];
6862306a36Sopenharmony_ci		p1[7] ^= p2[7] ^ p3[7] ^ p4[7];
6962306a36Sopenharmony_ci		p1 += 8;
7062306a36Sopenharmony_ci		p2 += 8;
7162306a36Sopenharmony_ci		p3 += 8;
7262306a36Sopenharmony_ci		p4 += 8;
7362306a36Sopenharmony_ci	} while (--lines > 0);
7462306a36Sopenharmony_ci}
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_cistatic void
7762306a36Sopenharmony_cixor_8regs_5(unsigned long bytes, unsigned long * __restrict p1,
7862306a36Sopenharmony_ci	    const unsigned long * __restrict p2,
7962306a36Sopenharmony_ci	    const unsigned long * __restrict p3,
8062306a36Sopenharmony_ci	    const unsigned long * __restrict p4,
8162306a36Sopenharmony_ci	    const unsigned long * __restrict p5)
8262306a36Sopenharmony_ci{
8362306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8;
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci	do {
8662306a36Sopenharmony_ci		p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0];
8762306a36Sopenharmony_ci		p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1];
8862306a36Sopenharmony_ci		p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2];
8962306a36Sopenharmony_ci		p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3];
9062306a36Sopenharmony_ci		p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4];
9162306a36Sopenharmony_ci		p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5];
9262306a36Sopenharmony_ci		p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6];
9362306a36Sopenharmony_ci		p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7];
9462306a36Sopenharmony_ci		p1 += 8;
9562306a36Sopenharmony_ci		p2 += 8;
9662306a36Sopenharmony_ci		p3 += 8;
9762306a36Sopenharmony_ci		p4 += 8;
9862306a36Sopenharmony_ci		p5 += 8;
9962306a36Sopenharmony_ci	} while (--lines > 0);
10062306a36Sopenharmony_ci}
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_cistatic void
10362306a36Sopenharmony_cixor_32regs_2(unsigned long bytes, unsigned long * __restrict p1,
10462306a36Sopenharmony_ci	     const unsigned long * __restrict p2)
10562306a36Sopenharmony_ci{
10662306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8;
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci	do {
10962306a36Sopenharmony_ci		register long d0, d1, d2, d3, d4, d5, d6, d7;
11062306a36Sopenharmony_ci		d0 = p1[0];	/* Pull the stuff into registers	*/
11162306a36Sopenharmony_ci		d1 = p1[1];	/*  ... in bursts, if possible.		*/
11262306a36Sopenharmony_ci		d2 = p1[2];
11362306a36Sopenharmony_ci		d3 = p1[3];
11462306a36Sopenharmony_ci		d4 = p1[4];
11562306a36Sopenharmony_ci		d5 = p1[5];
11662306a36Sopenharmony_ci		d6 = p1[6];
11762306a36Sopenharmony_ci		d7 = p1[7];
11862306a36Sopenharmony_ci		d0 ^= p2[0];
11962306a36Sopenharmony_ci		d1 ^= p2[1];
12062306a36Sopenharmony_ci		d2 ^= p2[2];
12162306a36Sopenharmony_ci		d3 ^= p2[3];
12262306a36Sopenharmony_ci		d4 ^= p2[4];
12362306a36Sopenharmony_ci		d5 ^= p2[5];
12462306a36Sopenharmony_ci		d6 ^= p2[6];
12562306a36Sopenharmony_ci		d7 ^= p2[7];
12662306a36Sopenharmony_ci		p1[0] = d0;	/* Store the result (in bursts)		*/
12762306a36Sopenharmony_ci		p1[1] = d1;
12862306a36Sopenharmony_ci		p1[2] = d2;
12962306a36Sopenharmony_ci		p1[3] = d3;
13062306a36Sopenharmony_ci		p1[4] = d4;
13162306a36Sopenharmony_ci		p1[5] = d5;
13262306a36Sopenharmony_ci		p1[6] = d6;
13362306a36Sopenharmony_ci		p1[7] = d7;
13462306a36Sopenharmony_ci		p1 += 8;
13562306a36Sopenharmony_ci		p2 += 8;
13662306a36Sopenharmony_ci	} while (--lines > 0);
13762306a36Sopenharmony_ci}
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_cistatic void
14062306a36Sopenharmony_cixor_32regs_3(unsigned long bytes, unsigned long * __restrict p1,
14162306a36Sopenharmony_ci	     const unsigned long * __restrict p2,
14262306a36Sopenharmony_ci	     const unsigned long * __restrict p3)
14362306a36Sopenharmony_ci{
14462306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8;
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci	do {
14762306a36Sopenharmony_ci		register long d0, d1, d2, d3, d4, d5, d6, d7;
14862306a36Sopenharmony_ci		d0 = p1[0];	/* Pull the stuff into registers	*/
14962306a36Sopenharmony_ci		d1 = p1[1];	/*  ... in bursts, if possible.		*/
15062306a36Sopenharmony_ci		d2 = p1[2];
15162306a36Sopenharmony_ci		d3 = p1[3];
15262306a36Sopenharmony_ci		d4 = p1[4];
15362306a36Sopenharmony_ci		d5 = p1[5];
15462306a36Sopenharmony_ci		d6 = p1[6];
15562306a36Sopenharmony_ci		d7 = p1[7];
15662306a36Sopenharmony_ci		d0 ^= p2[0];
15762306a36Sopenharmony_ci		d1 ^= p2[1];
15862306a36Sopenharmony_ci		d2 ^= p2[2];
15962306a36Sopenharmony_ci		d3 ^= p2[3];
16062306a36Sopenharmony_ci		d4 ^= p2[4];
16162306a36Sopenharmony_ci		d5 ^= p2[5];
16262306a36Sopenharmony_ci		d6 ^= p2[6];
16362306a36Sopenharmony_ci		d7 ^= p2[7];
16462306a36Sopenharmony_ci		d0 ^= p3[0];
16562306a36Sopenharmony_ci		d1 ^= p3[1];
16662306a36Sopenharmony_ci		d2 ^= p3[2];
16762306a36Sopenharmony_ci		d3 ^= p3[3];
16862306a36Sopenharmony_ci		d4 ^= p3[4];
16962306a36Sopenharmony_ci		d5 ^= p3[5];
17062306a36Sopenharmony_ci		d6 ^= p3[6];
17162306a36Sopenharmony_ci		d7 ^= p3[7];
17262306a36Sopenharmony_ci		p1[0] = d0;	/* Store the result (in bursts)		*/
17362306a36Sopenharmony_ci		p1[1] = d1;
17462306a36Sopenharmony_ci		p1[2] = d2;
17562306a36Sopenharmony_ci		p1[3] = d3;
17662306a36Sopenharmony_ci		p1[4] = d4;
17762306a36Sopenharmony_ci		p1[5] = d5;
17862306a36Sopenharmony_ci		p1[6] = d6;
17962306a36Sopenharmony_ci		p1[7] = d7;
18062306a36Sopenharmony_ci		p1 += 8;
18162306a36Sopenharmony_ci		p2 += 8;
18262306a36Sopenharmony_ci		p3 += 8;
18362306a36Sopenharmony_ci	} while (--lines > 0);
18462306a36Sopenharmony_ci}
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_cistatic void
18762306a36Sopenharmony_cixor_32regs_4(unsigned long bytes, unsigned long * __restrict p1,
18862306a36Sopenharmony_ci	     const unsigned long * __restrict p2,
18962306a36Sopenharmony_ci	     const unsigned long * __restrict p3,
19062306a36Sopenharmony_ci	     const unsigned long * __restrict p4)
19162306a36Sopenharmony_ci{
19262306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8;
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci	do {
19562306a36Sopenharmony_ci		register long d0, d1, d2, d3, d4, d5, d6, d7;
19662306a36Sopenharmony_ci		d0 = p1[0];	/* Pull the stuff into registers	*/
19762306a36Sopenharmony_ci		d1 = p1[1];	/*  ... in bursts, if possible.		*/
19862306a36Sopenharmony_ci		d2 = p1[2];
19962306a36Sopenharmony_ci		d3 = p1[3];
20062306a36Sopenharmony_ci		d4 = p1[4];
20162306a36Sopenharmony_ci		d5 = p1[5];
20262306a36Sopenharmony_ci		d6 = p1[6];
20362306a36Sopenharmony_ci		d7 = p1[7];
20462306a36Sopenharmony_ci		d0 ^= p2[0];
20562306a36Sopenharmony_ci		d1 ^= p2[1];
20662306a36Sopenharmony_ci		d2 ^= p2[2];
20762306a36Sopenharmony_ci		d3 ^= p2[3];
20862306a36Sopenharmony_ci		d4 ^= p2[4];
20962306a36Sopenharmony_ci		d5 ^= p2[5];
21062306a36Sopenharmony_ci		d6 ^= p2[6];
21162306a36Sopenharmony_ci		d7 ^= p2[7];
21262306a36Sopenharmony_ci		d0 ^= p3[0];
21362306a36Sopenharmony_ci		d1 ^= p3[1];
21462306a36Sopenharmony_ci		d2 ^= p3[2];
21562306a36Sopenharmony_ci		d3 ^= p3[3];
21662306a36Sopenharmony_ci		d4 ^= p3[4];
21762306a36Sopenharmony_ci		d5 ^= p3[5];
21862306a36Sopenharmony_ci		d6 ^= p3[6];
21962306a36Sopenharmony_ci		d7 ^= p3[7];
22062306a36Sopenharmony_ci		d0 ^= p4[0];
22162306a36Sopenharmony_ci		d1 ^= p4[1];
22262306a36Sopenharmony_ci		d2 ^= p4[2];
22362306a36Sopenharmony_ci		d3 ^= p4[3];
22462306a36Sopenharmony_ci		d4 ^= p4[4];
22562306a36Sopenharmony_ci		d5 ^= p4[5];
22662306a36Sopenharmony_ci		d6 ^= p4[6];
22762306a36Sopenharmony_ci		d7 ^= p4[7];
22862306a36Sopenharmony_ci		p1[0] = d0;	/* Store the result (in bursts)		*/
22962306a36Sopenharmony_ci		p1[1] = d1;
23062306a36Sopenharmony_ci		p1[2] = d2;
23162306a36Sopenharmony_ci		p1[3] = d3;
23262306a36Sopenharmony_ci		p1[4] = d4;
23362306a36Sopenharmony_ci		p1[5] = d5;
23462306a36Sopenharmony_ci		p1[6] = d6;
23562306a36Sopenharmony_ci		p1[7] = d7;
23662306a36Sopenharmony_ci		p1 += 8;
23762306a36Sopenharmony_ci		p2 += 8;
23862306a36Sopenharmony_ci		p3 += 8;
23962306a36Sopenharmony_ci		p4 += 8;
24062306a36Sopenharmony_ci	} while (--lines > 0);
24162306a36Sopenharmony_ci}
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_cistatic void
24462306a36Sopenharmony_cixor_32regs_5(unsigned long bytes, unsigned long * __restrict p1,
24562306a36Sopenharmony_ci	     const unsigned long * __restrict p2,
24662306a36Sopenharmony_ci	     const unsigned long * __restrict p3,
24762306a36Sopenharmony_ci	     const unsigned long * __restrict p4,
24862306a36Sopenharmony_ci	     const unsigned long * __restrict p5)
24962306a36Sopenharmony_ci{
25062306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8;
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ci	do {
25362306a36Sopenharmony_ci		register long d0, d1, d2, d3, d4, d5, d6, d7;
25462306a36Sopenharmony_ci		d0 = p1[0];	/* Pull the stuff into registers	*/
25562306a36Sopenharmony_ci		d1 = p1[1];	/*  ... in bursts, if possible.		*/
25662306a36Sopenharmony_ci		d2 = p1[2];
25762306a36Sopenharmony_ci		d3 = p1[3];
25862306a36Sopenharmony_ci		d4 = p1[4];
25962306a36Sopenharmony_ci		d5 = p1[5];
26062306a36Sopenharmony_ci		d6 = p1[6];
26162306a36Sopenharmony_ci		d7 = p1[7];
26262306a36Sopenharmony_ci		d0 ^= p2[0];
26362306a36Sopenharmony_ci		d1 ^= p2[1];
26462306a36Sopenharmony_ci		d2 ^= p2[2];
26562306a36Sopenharmony_ci		d3 ^= p2[3];
26662306a36Sopenharmony_ci		d4 ^= p2[4];
26762306a36Sopenharmony_ci		d5 ^= p2[5];
26862306a36Sopenharmony_ci		d6 ^= p2[6];
26962306a36Sopenharmony_ci		d7 ^= p2[7];
27062306a36Sopenharmony_ci		d0 ^= p3[0];
27162306a36Sopenharmony_ci		d1 ^= p3[1];
27262306a36Sopenharmony_ci		d2 ^= p3[2];
27362306a36Sopenharmony_ci		d3 ^= p3[3];
27462306a36Sopenharmony_ci		d4 ^= p3[4];
27562306a36Sopenharmony_ci		d5 ^= p3[5];
27662306a36Sopenharmony_ci		d6 ^= p3[6];
27762306a36Sopenharmony_ci		d7 ^= p3[7];
27862306a36Sopenharmony_ci		d0 ^= p4[0];
27962306a36Sopenharmony_ci		d1 ^= p4[1];
28062306a36Sopenharmony_ci		d2 ^= p4[2];
28162306a36Sopenharmony_ci		d3 ^= p4[3];
28262306a36Sopenharmony_ci		d4 ^= p4[4];
28362306a36Sopenharmony_ci		d5 ^= p4[5];
28462306a36Sopenharmony_ci		d6 ^= p4[6];
28562306a36Sopenharmony_ci		d7 ^= p4[7];
28662306a36Sopenharmony_ci		d0 ^= p5[0];
28762306a36Sopenharmony_ci		d1 ^= p5[1];
28862306a36Sopenharmony_ci		d2 ^= p5[2];
28962306a36Sopenharmony_ci		d3 ^= p5[3];
29062306a36Sopenharmony_ci		d4 ^= p5[4];
29162306a36Sopenharmony_ci		d5 ^= p5[5];
29262306a36Sopenharmony_ci		d6 ^= p5[6];
29362306a36Sopenharmony_ci		d7 ^= p5[7];
29462306a36Sopenharmony_ci		p1[0] = d0;	/* Store the result (in bursts)		*/
29562306a36Sopenharmony_ci		p1[1] = d1;
29662306a36Sopenharmony_ci		p1[2] = d2;
29762306a36Sopenharmony_ci		p1[3] = d3;
29862306a36Sopenharmony_ci		p1[4] = d4;
29962306a36Sopenharmony_ci		p1[5] = d5;
30062306a36Sopenharmony_ci		p1[6] = d6;
30162306a36Sopenharmony_ci		p1[7] = d7;
30262306a36Sopenharmony_ci		p1 += 8;
30362306a36Sopenharmony_ci		p2 += 8;
30462306a36Sopenharmony_ci		p3 += 8;
30562306a36Sopenharmony_ci		p4 += 8;
30662306a36Sopenharmony_ci		p5 += 8;
30762306a36Sopenharmony_ci	} while (--lines > 0);
30862306a36Sopenharmony_ci}
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_cistatic void
31162306a36Sopenharmony_cixor_8regs_p_2(unsigned long bytes, unsigned long * __restrict p1,
31262306a36Sopenharmony_ci	      const unsigned long * __restrict p2)
31362306a36Sopenharmony_ci{
31462306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8 - 1;
31562306a36Sopenharmony_ci	prefetchw(p1);
31662306a36Sopenharmony_ci	prefetch(p2);
31762306a36Sopenharmony_ci
31862306a36Sopenharmony_ci	do {
31962306a36Sopenharmony_ci		prefetchw(p1+8);
32062306a36Sopenharmony_ci		prefetch(p2+8);
32162306a36Sopenharmony_ci once_more:
32262306a36Sopenharmony_ci		p1[0] ^= p2[0];
32362306a36Sopenharmony_ci		p1[1] ^= p2[1];
32462306a36Sopenharmony_ci		p1[2] ^= p2[2];
32562306a36Sopenharmony_ci		p1[3] ^= p2[3];
32662306a36Sopenharmony_ci		p1[4] ^= p2[4];
32762306a36Sopenharmony_ci		p1[5] ^= p2[5];
32862306a36Sopenharmony_ci		p1[6] ^= p2[6];
32962306a36Sopenharmony_ci		p1[7] ^= p2[7];
33062306a36Sopenharmony_ci		p1 += 8;
33162306a36Sopenharmony_ci		p2 += 8;
33262306a36Sopenharmony_ci	} while (--lines > 0);
33362306a36Sopenharmony_ci	if (lines == 0)
33462306a36Sopenharmony_ci		goto once_more;
33562306a36Sopenharmony_ci}
33662306a36Sopenharmony_ci
33762306a36Sopenharmony_cistatic void
33862306a36Sopenharmony_cixor_8regs_p_3(unsigned long bytes, unsigned long * __restrict p1,
33962306a36Sopenharmony_ci	      const unsigned long * __restrict p2,
34062306a36Sopenharmony_ci	      const unsigned long * __restrict p3)
34162306a36Sopenharmony_ci{
34262306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8 - 1;
34362306a36Sopenharmony_ci	prefetchw(p1);
34462306a36Sopenharmony_ci	prefetch(p2);
34562306a36Sopenharmony_ci	prefetch(p3);
34662306a36Sopenharmony_ci
34762306a36Sopenharmony_ci	do {
34862306a36Sopenharmony_ci		prefetchw(p1+8);
34962306a36Sopenharmony_ci		prefetch(p2+8);
35062306a36Sopenharmony_ci		prefetch(p3+8);
35162306a36Sopenharmony_ci once_more:
35262306a36Sopenharmony_ci		p1[0] ^= p2[0] ^ p3[0];
35362306a36Sopenharmony_ci		p1[1] ^= p2[1] ^ p3[1];
35462306a36Sopenharmony_ci		p1[2] ^= p2[2] ^ p3[2];
35562306a36Sopenharmony_ci		p1[3] ^= p2[3] ^ p3[3];
35662306a36Sopenharmony_ci		p1[4] ^= p2[4] ^ p3[4];
35762306a36Sopenharmony_ci		p1[5] ^= p2[5] ^ p3[5];
35862306a36Sopenharmony_ci		p1[6] ^= p2[6] ^ p3[6];
35962306a36Sopenharmony_ci		p1[7] ^= p2[7] ^ p3[7];
36062306a36Sopenharmony_ci		p1 += 8;
36162306a36Sopenharmony_ci		p2 += 8;
36262306a36Sopenharmony_ci		p3 += 8;
36362306a36Sopenharmony_ci	} while (--lines > 0);
36462306a36Sopenharmony_ci	if (lines == 0)
36562306a36Sopenharmony_ci		goto once_more;
36662306a36Sopenharmony_ci}
36762306a36Sopenharmony_ci
36862306a36Sopenharmony_cistatic void
36962306a36Sopenharmony_cixor_8regs_p_4(unsigned long bytes, unsigned long * __restrict p1,
37062306a36Sopenharmony_ci	      const unsigned long * __restrict p2,
37162306a36Sopenharmony_ci	      const unsigned long * __restrict p3,
37262306a36Sopenharmony_ci	      const unsigned long * __restrict p4)
37362306a36Sopenharmony_ci{
37462306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8 - 1;
37562306a36Sopenharmony_ci
37662306a36Sopenharmony_ci	prefetchw(p1);
37762306a36Sopenharmony_ci	prefetch(p2);
37862306a36Sopenharmony_ci	prefetch(p3);
37962306a36Sopenharmony_ci	prefetch(p4);
38062306a36Sopenharmony_ci
38162306a36Sopenharmony_ci	do {
38262306a36Sopenharmony_ci		prefetchw(p1+8);
38362306a36Sopenharmony_ci		prefetch(p2+8);
38462306a36Sopenharmony_ci		prefetch(p3+8);
38562306a36Sopenharmony_ci		prefetch(p4+8);
38662306a36Sopenharmony_ci once_more:
38762306a36Sopenharmony_ci		p1[0] ^= p2[0] ^ p3[0] ^ p4[0];
38862306a36Sopenharmony_ci		p1[1] ^= p2[1] ^ p3[1] ^ p4[1];
38962306a36Sopenharmony_ci		p1[2] ^= p2[2] ^ p3[2] ^ p4[2];
39062306a36Sopenharmony_ci		p1[3] ^= p2[3] ^ p3[3] ^ p4[3];
39162306a36Sopenharmony_ci		p1[4] ^= p2[4] ^ p3[4] ^ p4[4];
39262306a36Sopenharmony_ci		p1[5] ^= p2[5] ^ p3[5] ^ p4[5];
39362306a36Sopenharmony_ci		p1[6] ^= p2[6] ^ p3[6] ^ p4[6];
39462306a36Sopenharmony_ci		p1[7] ^= p2[7] ^ p3[7] ^ p4[7];
39562306a36Sopenharmony_ci		p1 += 8;
39662306a36Sopenharmony_ci		p2 += 8;
39762306a36Sopenharmony_ci		p3 += 8;
39862306a36Sopenharmony_ci		p4 += 8;
39962306a36Sopenharmony_ci	} while (--lines > 0);
40062306a36Sopenharmony_ci	if (lines == 0)
40162306a36Sopenharmony_ci		goto once_more;
40262306a36Sopenharmony_ci}
40362306a36Sopenharmony_ci
40462306a36Sopenharmony_cistatic void
40562306a36Sopenharmony_cixor_8regs_p_5(unsigned long bytes, unsigned long * __restrict p1,
40662306a36Sopenharmony_ci	      const unsigned long * __restrict p2,
40762306a36Sopenharmony_ci	      const unsigned long * __restrict p3,
40862306a36Sopenharmony_ci	      const unsigned long * __restrict p4,
40962306a36Sopenharmony_ci	      const unsigned long * __restrict p5)
41062306a36Sopenharmony_ci{
41162306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8 - 1;
41262306a36Sopenharmony_ci
41362306a36Sopenharmony_ci	prefetchw(p1);
41462306a36Sopenharmony_ci	prefetch(p2);
41562306a36Sopenharmony_ci	prefetch(p3);
41662306a36Sopenharmony_ci	prefetch(p4);
41762306a36Sopenharmony_ci	prefetch(p5);
41862306a36Sopenharmony_ci
41962306a36Sopenharmony_ci	do {
42062306a36Sopenharmony_ci		prefetchw(p1+8);
42162306a36Sopenharmony_ci		prefetch(p2+8);
42262306a36Sopenharmony_ci		prefetch(p3+8);
42362306a36Sopenharmony_ci		prefetch(p4+8);
42462306a36Sopenharmony_ci		prefetch(p5+8);
42562306a36Sopenharmony_ci once_more:
42662306a36Sopenharmony_ci		p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0];
42762306a36Sopenharmony_ci		p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1];
42862306a36Sopenharmony_ci		p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2];
42962306a36Sopenharmony_ci		p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3];
43062306a36Sopenharmony_ci		p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4];
43162306a36Sopenharmony_ci		p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5];
43262306a36Sopenharmony_ci		p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6];
43362306a36Sopenharmony_ci		p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7];
43462306a36Sopenharmony_ci		p1 += 8;
43562306a36Sopenharmony_ci		p2 += 8;
43662306a36Sopenharmony_ci		p3 += 8;
43762306a36Sopenharmony_ci		p4 += 8;
43862306a36Sopenharmony_ci		p5 += 8;
43962306a36Sopenharmony_ci	} while (--lines > 0);
44062306a36Sopenharmony_ci	if (lines == 0)
44162306a36Sopenharmony_ci		goto once_more;
44262306a36Sopenharmony_ci}
44362306a36Sopenharmony_ci
44462306a36Sopenharmony_cistatic void
44562306a36Sopenharmony_cixor_32regs_p_2(unsigned long bytes, unsigned long * __restrict p1,
44662306a36Sopenharmony_ci	       const unsigned long * __restrict p2)
44762306a36Sopenharmony_ci{
44862306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8 - 1;
44962306a36Sopenharmony_ci
45062306a36Sopenharmony_ci	prefetchw(p1);
45162306a36Sopenharmony_ci	prefetch(p2);
45262306a36Sopenharmony_ci
45362306a36Sopenharmony_ci	do {
45462306a36Sopenharmony_ci		register long d0, d1, d2, d3, d4, d5, d6, d7;
45562306a36Sopenharmony_ci
45662306a36Sopenharmony_ci		prefetchw(p1+8);
45762306a36Sopenharmony_ci		prefetch(p2+8);
45862306a36Sopenharmony_ci once_more:
45962306a36Sopenharmony_ci		d0 = p1[0];	/* Pull the stuff into registers	*/
46062306a36Sopenharmony_ci		d1 = p1[1];	/*  ... in bursts, if possible.		*/
46162306a36Sopenharmony_ci		d2 = p1[2];
46262306a36Sopenharmony_ci		d3 = p1[3];
46362306a36Sopenharmony_ci		d4 = p1[4];
46462306a36Sopenharmony_ci		d5 = p1[5];
46562306a36Sopenharmony_ci		d6 = p1[6];
46662306a36Sopenharmony_ci		d7 = p1[7];
46762306a36Sopenharmony_ci		d0 ^= p2[0];
46862306a36Sopenharmony_ci		d1 ^= p2[1];
46962306a36Sopenharmony_ci		d2 ^= p2[2];
47062306a36Sopenharmony_ci		d3 ^= p2[3];
47162306a36Sopenharmony_ci		d4 ^= p2[4];
47262306a36Sopenharmony_ci		d5 ^= p2[5];
47362306a36Sopenharmony_ci		d6 ^= p2[6];
47462306a36Sopenharmony_ci		d7 ^= p2[7];
47562306a36Sopenharmony_ci		p1[0] = d0;	/* Store the result (in bursts)		*/
47662306a36Sopenharmony_ci		p1[1] = d1;
47762306a36Sopenharmony_ci		p1[2] = d2;
47862306a36Sopenharmony_ci		p1[3] = d3;
47962306a36Sopenharmony_ci		p1[4] = d4;
48062306a36Sopenharmony_ci		p1[5] = d5;
48162306a36Sopenharmony_ci		p1[6] = d6;
48262306a36Sopenharmony_ci		p1[7] = d7;
48362306a36Sopenharmony_ci		p1 += 8;
48462306a36Sopenharmony_ci		p2 += 8;
48562306a36Sopenharmony_ci	} while (--lines > 0);
48662306a36Sopenharmony_ci	if (lines == 0)
48762306a36Sopenharmony_ci		goto once_more;
48862306a36Sopenharmony_ci}
48962306a36Sopenharmony_ci
49062306a36Sopenharmony_cistatic void
49162306a36Sopenharmony_cixor_32regs_p_3(unsigned long bytes, unsigned long * __restrict p1,
49262306a36Sopenharmony_ci	       const unsigned long * __restrict p2,
49362306a36Sopenharmony_ci	       const unsigned long * __restrict p3)
49462306a36Sopenharmony_ci{
49562306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8 - 1;
49662306a36Sopenharmony_ci
49762306a36Sopenharmony_ci	prefetchw(p1);
49862306a36Sopenharmony_ci	prefetch(p2);
49962306a36Sopenharmony_ci	prefetch(p3);
50062306a36Sopenharmony_ci
50162306a36Sopenharmony_ci	do {
50262306a36Sopenharmony_ci		register long d0, d1, d2, d3, d4, d5, d6, d7;
50362306a36Sopenharmony_ci
50462306a36Sopenharmony_ci		prefetchw(p1+8);
50562306a36Sopenharmony_ci		prefetch(p2+8);
50662306a36Sopenharmony_ci		prefetch(p3+8);
50762306a36Sopenharmony_ci once_more:
50862306a36Sopenharmony_ci		d0 = p1[0];	/* Pull the stuff into registers	*/
50962306a36Sopenharmony_ci		d1 = p1[1];	/*  ... in bursts, if possible.		*/
51062306a36Sopenharmony_ci		d2 = p1[2];
51162306a36Sopenharmony_ci		d3 = p1[3];
51262306a36Sopenharmony_ci		d4 = p1[4];
51362306a36Sopenharmony_ci		d5 = p1[5];
51462306a36Sopenharmony_ci		d6 = p1[6];
51562306a36Sopenharmony_ci		d7 = p1[7];
51662306a36Sopenharmony_ci		d0 ^= p2[0];
51762306a36Sopenharmony_ci		d1 ^= p2[1];
51862306a36Sopenharmony_ci		d2 ^= p2[2];
51962306a36Sopenharmony_ci		d3 ^= p2[3];
52062306a36Sopenharmony_ci		d4 ^= p2[4];
52162306a36Sopenharmony_ci		d5 ^= p2[5];
52262306a36Sopenharmony_ci		d6 ^= p2[6];
52362306a36Sopenharmony_ci		d7 ^= p2[7];
52462306a36Sopenharmony_ci		d0 ^= p3[0];
52562306a36Sopenharmony_ci		d1 ^= p3[1];
52662306a36Sopenharmony_ci		d2 ^= p3[2];
52762306a36Sopenharmony_ci		d3 ^= p3[3];
52862306a36Sopenharmony_ci		d4 ^= p3[4];
52962306a36Sopenharmony_ci		d5 ^= p3[5];
53062306a36Sopenharmony_ci		d6 ^= p3[6];
53162306a36Sopenharmony_ci		d7 ^= p3[7];
53262306a36Sopenharmony_ci		p1[0] = d0;	/* Store the result (in bursts)		*/
53362306a36Sopenharmony_ci		p1[1] = d1;
53462306a36Sopenharmony_ci		p1[2] = d2;
53562306a36Sopenharmony_ci		p1[3] = d3;
53662306a36Sopenharmony_ci		p1[4] = d4;
53762306a36Sopenharmony_ci		p1[5] = d5;
53862306a36Sopenharmony_ci		p1[6] = d6;
53962306a36Sopenharmony_ci		p1[7] = d7;
54062306a36Sopenharmony_ci		p1 += 8;
54162306a36Sopenharmony_ci		p2 += 8;
54262306a36Sopenharmony_ci		p3 += 8;
54362306a36Sopenharmony_ci	} while (--lines > 0);
54462306a36Sopenharmony_ci	if (lines == 0)
54562306a36Sopenharmony_ci		goto once_more;
54662306a36Sopenharmony_ci}
54762306a36Sopenharmony_ci
54862306a36Sopenharmony_cistatic void
54962306a36Sopenharmony_cixor_32regs_p_4(unsigned long bytes, unsigned long * __restrict p1,
55062306a36Sopenharmony_ci	       const unsigned long * __restrict p2,
55162306a36Sopenharmony_ci	       const unsigned long * __restrict p3,
55262306a36Sopenharmony_ci	       const unsigned long * __restrict p4)
55362306a36Sopenharmony_ci{
55462306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8 - 1;
55562306a36Sopenharmony_ci
55662306a36Sopenharmony_ci	prefetchw(p1);
55762306a36Sopenharmony_ci	prefetch(p2);
55862306a36Sopenharmony_ci	prefetch(p3);
55962306a36Sopenharmony_ci	prefetch(p4);
56062306a36Sopenharmony_ci
56162306a36Sopenharmony_ci	do {
56262306a36Sopenharmony_ci		register long d0, d1, d2, d3, d4, d5, d6, d7;
56362306a36Sopenharmony_ci
56462306a36Sopenharmony_ci		prefetchw(p1+8);
56562306a36Sopenharmony_ci		prefetch(p2+8);
56662306a36Sopenharmony_ci		prefetch(p3+8);
56762306a36Sopenharmony_ci		prefetch(p4+8);
56862306a36Sopenharmony_ci once_more:
56962306a36Sopenharmony_ci		d0 = p1[0];	/* Pull the stuff into registers	*/
57062306a36Sopenharmony_ci		d1 = p1[1];	/*  ... in bursts, if possible.		*/
57162306a36Sopenharmony_ci		d2 = p1[2];
57262306a36Sopenharmony_ci		d3 = p1[3];
57362306a36Sopenharmony_ci		d4 = p1[4];
57462306a36Sopenharmony_ci		d5 = p1[5];
57562306a36Sopenharmony_ci		d6 = p1[6];
57662306a36Sopenharmony_ci		d7 = p1[7];
57762306a36Sopenharmony_ci		d0 ^= p2[0];
57862306a36Sopenharmony_ci		d1 ^= p2[1];
57962306a36Sopenharmony_ci		d2 ^= p2[2];
58062306a36Sopenharmony_ci		d3 ^= p2[3];
58162306a36Sopenharmony_ci		d4 ^= p2[4];
58262306a36Sopenharmony_ci		d5 ^= p2[5];
58362306a36Sopenharmony_ci		d6 ^= p2[6];
58462306a36Sopenharmony_ci		d7 ^= p2[7];
58562306a36Sopenharmony_ci		d0 ^= p3[0];
58662306a36Sopenharmony_ci		d1 ^= p3[1];
58762306a36Sopenharmony_ci		d2 ^= p3[2];
58862306a36Sopenharmony_ci		d3 ^= p3[3];
58962306a36Sopenharmony_ci		d4 ^= p3[4];
59062306a36Sopenharmony_ci		d5 ^= p3[5];
59162306a36Sopenharmony_ci		d6 ^= p3[6];
59262306a36Sopenharmony_ci		d7 ^= p3[7];
59362306a36Sopenharmony_ci		d0 ^= p4[0];
59462306a36Sopenharmony_ci		d1 ^= p4[1];
59562306a36Sopenharmony_ci		d2 ^= p4[2];
59662306a36Sopenharmony_ci		d3 ^= p4[3];
59762306a36Sopenharmony_ci		d4 ^= p4[4];
59862306a36Sopenharmony_ci		d5 ^= p4[5];
59962306a36Sopenharmony_ci		d6 ^= p4[6];
60062306a36Sopenharmony_ci		d7 ^= p4[7];
60162306a36Sopenharmony_ci		p1[0] = d0;	/* Store the result (in bursts)		*/
60262306a36Sopenharmony_ci		p1[1] = d1;
60362306a36Sopenharmony_ci		p1[2] = d2;
60462306a36Sopenharmony_ci		p1[3] = d3;
60562306a36Sopenharmony_ci		p1[4] = d4;
60662306a36Sopenharmony_ci		p1[5] = d5;
60762306a36Sopenharmony_ci		p1[6] = d6;
60862306a36Sopenharmony_ci		p1[7] = d7;
60962306a36Sopenharmony_ci		p1 += 8;
61062306a36Sopenharmony_ci		p2 += 8;
61162306a36Sopenharmony_ci		p3 += 8;
61262306a36Sopenharmony_ci		p4 += 8;
61362306a36Sopenharmony_ci	} while (--lines > 0);
61462306a36Sopenharmony_ci	if (lines == 0)
61562306a36Sopenharmony_ci		goto once_more;
61662306a36Sopenharmony_ci}
61762306a36Sopenharmony_ci
61862306a36Sopenharmony_cistatic void
61962306a36Sopenharmony_cixor_32regs_p_5(unsigned long bytes, unsigned long * __restrict p1,
62062306a36Sopenharmony_ci	       const unsigned long * __restrict p2,
62162306a36Sopenharmony_ci	       const unsigned long * __restrict p3,
62262306a36Sopenharmony_ci	       const unsigned long * __restrict p4,
62362306a36Sopenharmony_ci	       const unsigned long * __restrict p5)
62462306a36Sopenharmony_ci{
62562306a36Sopenharmony_ci	long lines = bytes / (sizeof (long)) / 8 - 1;
62662306a36Sopenharmony_ci
62762306a36Sopenharmony_ci	prefetchw(p1);
62862306a36Sopenharmony_ci	prefetch(p2);
62962306a36Sopenharmony_ci	prefetch(p3);
63062306a36Sopenharmony_ci	prefetch(p4);
63162306a36Sopenharmony_ci	prefetch(p5);
63262306a36Sopenharmony_ci
63362306a36Sopenharmony_ci	do {
63462306a36Sopenharmony_ci		register long d0, d1, d2, d3, d4, d5, d6, d7;
63562306a36Sopenharmony_ci
63662306a36Sopenharmony_ci		prefetchw(p1+8);
63762306a36Sopenharmony_ci		prefetch(p2+8);
63862306a36Sopenharmony_ci		prefetch(p3+8);
63962306a36Sopenharmony_ci		prefetch(p4+8);
64062306a36Sopenharmony_ci		prefetch(p5+8);
64162306a36Sopenharmony_ci once_more:
64262306a36Sopenharmony_ci		d0 = p1[0];	/* Pull the stuff into registers	*/
64362306a36Sopenharmony_ci		d1 = p1[1];	/*  ... in bursts, if possible.		*/
64462306a36Sopenharmony_ci		d2 = p1[2];
64562306a36Sopenharmony_ci		d3 = p1[3];
64662306a36Sopenharmony_ci		d4 = p1[4];
64762306a36Sopenharmony_ci		d5 = p1[5];
64862306a36Sopenharmony_ci		d6 = p1[6];
64962306a36Sopenharmony_ci		d7 = p1[7];
65062306a36Sopenharmony_ci		d0 ^= p2[0];
65162306a36Sopenharmony_ci		d1 ^= p2[1];
65262306a36Sopenharmony_ci		d2 ^= p2[2];
65362306a36Sopenharmony_ci		d3 ^= p2[3];
65462306a36Sopenharmony_ci		d4 ^= p2[4];
65562306a36Sopenharmony_ci		d5 ^= p2[5];
65662306a36Sopenharmony_ci		d6 ^= p2[6];
65762306a36Sopenharmony_ci		d7 ^= p2[7];
65862306a36Sopenharmony_ci		d0 ^= p3[0];
65962306a36Sopenharmony_ci		d1 ^= p3[1];
66062306a36Sopenharmony_ci		d2 ^= p3[2];
66162306a36Sopenharmony_ci		d3 ^= p3[3];
66262306a36Sopenharmony_ci		d4 ^= p3[4];
66362306a36Sopenharmony_ci		d5 ^= p3[5];
66462306a36Sopenharmony_ci		d6 ^= p3[6];
66562306a36Sopenharmony_ci		d7 ^= p3[7];
66662306a36Sopenharmony_ci		d0 ^= p4[0];
66762306a36Sopenharmony_ci		d1 ^= p4[1];
66862306a36Sopenharmony_ci		d2 ^= p4[2];
66962306a36Sopenharmony_ci		d3 ^= p4[3];
67062306a36Sopenharmony_ci		d4 ^= p4[4];
67162306a36Sopenharmony_ci		d5 ^= p4[5];
67262306a36Sopenharmony_ci		d6 ^= p4[6];
67362306a36Sopenharmony_ci		d7 ^= p4[7];
67462306a36Sopenharmony_ci		d0 ^= p5[0];
67562306a36Sopenharmony_ci		d1 ^= p5[1];
67662306a36Sopenharmony_ci		d2 ^= p5[2];
67762306a36Sopenharmony_ci		d3 ^= p5[3];
67862306a36Sopenharmony_ci		d4 ^= p5[4];
67962306a36Sopenharmony_ci		d5 ^= p5[5];
68062306a36Sopenharmony_ci		d6 ^= p5[6];
68162306a36Sopenharmony_ci		d7 ^= p5[7];
68262306a36Sopenharmony_ci		p1[0] = d0;	/* Store the result (in bursts)		*/
68362306a36Sopenharmony_ci		p1[1] = d1;
68462306a36Sopenharmony_ci		p1[2] = d2;
68562306a36Sopenharmony_ci		p1[3] = d3;
68662306a36Sopenharmony_ci		p1[4] = d4;
68762306a36Sopenharmony_ci		p1[5] = d5;
68862306a36Sopenharmony_ci		p1[6] = d6;
68962306a36Sopenharmony_ci		p1[7] = d7;
69062306a36Sopenharmony_ci		p1 += 8;
69162306a36Sopenharmony_ci		p2 += 8;
69262306a36Sopenharmony_ci		p3 += 8;
69362306a36Sopenharmony_ci		p4 += 8;
69462306a36Sopenharmony_ci		p5 += 8;
69562306a36Sopenharmony_ci	} while (--lines > 0);
69662306a36Sopenharmony_ci	if (lines == 0)
69762306a36Sopenharmony_ci		goto once_more;
69862306a36Sopenharmony_ci}
69962306a36Sopenharmony_ci
70062306a36Sopenharmony_cistatic struct xor_block_template xor_block_8regs = {
70162306a36Sopenharmony_ci	.name = "8regs",
70262306a36Sopenharmony_ci	.do_2 = xor_8regs_2,
70362306a36Sopenharmony_ci	.do_3 = xor_8regs_3,
70462306a36Sopenharmony_ci	.do_4 = xor_8regs_4,
70562306a36Sopenharmony_ci	.do_5 = xor_8regs_5,
70662306a36Sopenharmony_ci};
70762306a36Sopenharmony_ci
70862306a36Sopenharmony_cistatic struct xor_block_template xor_block_32regs = {
70962306a36Sopenharmony_ci	.name = "32regs",
71062306a36Sopenharmony_ci	.do_2 = xor_32regs_2,
71162306a36Sopenharmony_ci	.do_3 = xor_32regs_3,
71262306a36Sopenharmony_ci	.do_4 = xor_32regs_4,
71362306a36Sopenharmony_ci	.do_5 = xor_32regs_5,
71462306a36Sopenharmony_ci};
71562306a36Sopenharmony_ci
71662306a36Sopenharmony_cistatic struct xor_block_template xor_block_8regs_p __maybe_unused = {
71762306a36Sopenharmony_ci	.name = "8regs_prefetch",
71862306a36Sopenharmony_ci	.do_2 = xor_8regs_p_2,
71962306a36Sopenharmony_ci	.do_3 = xor_8regs_p_3,
72062306a36Sopenharmony_ci	.do_4 = xor_8regs_p_4,
72162306a36Sopenharmony_ci	.do_5 = xor_8regs_p_5,
72262306a36Sopenharmony_ci};
72362306a36Sopenharmony_ci
72462306a36Sopenharmony_cistatic struct xor_block_template xor_block_32regs_p __maybe_unused = {
72562306a36Sopenharmony_ci	.name = "32regs_prefetch",
72662306a36Sopenharmony_ci	.do_2 = xor_32regs_p_2,
72762306a36Sopenharmony_ci	.do_3 = xor_32regs_p_3,
72862306a36Sopenharmony_ci	.do_4 = xor_32regs_p_4,
72962306a36Sopenharmony_ci	.do_5 = xor_32regs_p_5,
73062306a36Sopenharmony_ci};
73162306a36Sopenharmony_ci
73262306a36Sopenharmony_ci#define XOR_TRY_TEMPLATES			\
73362306a36Sopenharmony_ci	do {					\
73462306a36Sopenharmony_ci		xor_speed(&xor_block_8regs);	\
73562306a36Sopenharmony_ci		xor_speed(&xor_block_8regs_p);	\
73662306a36Sopenharmony_ci		xor_speed(&xor_block_32regs);	\
73762306a36Sopenharmony_ci		xor_speed(&xor_block_32regs_p);	\
73862306a36Sopenharmony_ci	} while (0)
739