mirror of
https://github.com/amadvance/snapraid.git
synced 2026-10-26 19:01:57 -04:00
Precalculate shuffle table pointers outside data loop in Cauchy recX
This commit is contained in:
parent
ac1797be96
commit
7d434954e8
4 changed files with 86 additions and 88 deletions
50
raid/avx2.c
50
raid/avx2.c
|
|
@ -1228,6 +1228,12 @@ void raid_recX_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
raid_avx_begin();
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
const uint8_t *T[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
|
||||
/* precompute shuffle table pointers */
|
||||
for (j = 0; j < N * N; ++j)
|
||||
T[j] = &raid_gfmulpshufb[V[j]][0][0];
|
||||
|
||||
asm volatile ("vpbroadcastb %0,%%ymm15" : : "m" (gfconst16.low4[0]));
|
||||
|
||||
for (i = 0; i < size; i += 32) {
|
||||
|
|
@ -1306,65 +1312,59 @@ void raid_recX_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
/* reconstruct */
|
||||
for (j = 0; j < N; ++j) {
|
||||
asm volatile (
|
||||
"movzbq 0(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"vbroadcasti128 0(%4, %%rcx), %%ymm13\n"
|
||||
"vbroadcasti128 16(%4, %%rcx), %%ymm14\n"
|
||||
"movq 0(%2), %%rcx\n"
|
||||
"vbroadcasti128 0(%%rcx), %%ymm13\n"
|
||||
"vbroadcasti128 16(%%rcx), %%ymm14\n"
|
||||
"vpshufb %%ymm0, %%ymm13, %%ymm13\n"
|
||||
"vpshufb %%ymm1, %%ymm14, %%ymm14\n"
|
||||
"cmpq $1, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 1(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"vbroadcasti128 0(%4, %%rcx), %%ymm12\n"
|
||||
"movq 8(%2), %%rcx\n"
|
||||
"vbroadcasti128 0(%%rcx), %%ymm12\n"
|
||||
"vpshufb %%ymm2, %%ymm12, %%ymm12\n"
|
||||
"vpxor %%ymm12, %%ymm13, %%ymm13\n"
|
||||
"vbroadcasti128 16(%4, %%rcx), %%ymm12\n"
|
||||
"vbroadcasti128 16(%%rcx), %%ymm12\n"
|
||||
"vpshufb %%ymm3, %%ymm12, %%ymm12\n"
|
||||
"vpxor %%ymm12, %%ymm14, %%ymm14\n"
|
||||
"cmpq $2, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 2(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"vbroadcasti128 0(%4, %%rcx), %%ymm12\n"
|
||||
"movq 16(%2), %%rcx\n"
|
||||
"vbroadcasti128 0(%%rcx), %%ymm12\n"
|
||||
"vpshufb %%ymm4, %%ymm12, %%ymm12\n"
|
||||
"vpxor %%ymm12, %%ymm13, %%ymm13\n"
|
||||
"vbroadcasti128 16(%4, %%rcx), %%ymm12\n"
|
||||
"vbroadcasti128 16(%%rcx), %%ymm12\n"
|
||||
"vpshufb %%ymm5, %%ymm12, %%ymm12\n"
|
||||
"vpxor %%ymm12, %%ymm14, %%ymm14\n"
|
||||
"cmpq $3, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 3(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"vbroadcasti128 0(%4, %%rcx), %%ymm12\n"
|
||||
"movq 24(%2), %%rcx\n"
|
||||
"vbroadcasti128 0(%%rcx), %%ymm12\n"
|
||||
"vpshufb %%ymm6, %%ymm12, %%ymm12\n"
|
||||
"vpxor %%ymm12, %%ymm13, %%ymm13\n"
|
||||
"vbroadcasti128 16(%4, %%rcx), %%ymm12\n"
|
||||
"vbroadcasti128 16(%%rcx), %%ymm12\n"
|
||||
"vpshufb %%ymm7, %%ymm12, %%ymm12\n"
|
||||
"vpxor %%ymm12, %%ymm14, %%ymm14\n"
|
||||
"cmpq $4, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 4(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"vbroadcasti128 0(%4, %%rcx), %%ymm12\n"
|
||||
"movq 32(%2), %%rcx\n"
|
||||
"vbroadcasti128 0(%%rcx), %%ymm12\n"
|
||||
"vpshufb %%ymm8, %%ymm12, %%ymm12\n"
|
||||
"vpxor %%ymm12, %%ymm13, %%ymm13\n"
|
||||
"vbroadcasti128 16(%4, %%rcx), %%ymm12\n"
|
||||
"vbroadcasti128 16(%%rcx), %%ymm12\n"
|
||||
"vpshufb %%ymm9, %%ymm12, %%ymm12\n"
|
||||
"vpxor %%ymm12, %%ymm14, %%ymm14\n"
|
||||
"cmpq $5, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 5(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"vbroadcasti128 0(%4, %%rcx), %%ymm12\n"
|
||||
"movq 40(%2), %%rcx\n"
|
||||
"vbroadcasti128 0(%%rcx), %%ymm12\n"
|
||||
"vpshufb %%ymm10, %%ymm12, %%ymm12\n"
|
||||
"vpxor %%ymm12, %%ymm13, %%ymm13\n"
|
||||
"vbroadcasti128 16(%4, %%rcx), %%ymm12\n"
|
||||
"vbroadcasti128 16(%%rcx), %%ymm12\n"
|
||||
"vpshufb %%ymm11, %%ymm12, %%ymm12\n"
|
||||
"vpxor %%ymm12, %%ymm14, %%ymm14\n"
|
||||
|
||||
|
|
@ -1373,7 +1373,7 @@ void raid_recX_avx2(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
"movq %3, %%rax\n"
|
||||
"vmovdqa %%ymm13, (%%rax, %1)\n"
|
||||
:
|
||||
: "r" ((uint64_t)N), "r" (i), "r" (&V[j * N]), "r" (pa[j]), "r" (raid_gfmulpshufb)
|
||||
: "r" ((uint64_t)N), "r" (i), "r" (&T[j * N]), "r" (pa[j])
|
||||
: "rax", "rcx", "cc", "memory"
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -369,6 +369,7 @@ void raid_recX_avx512bw(int nr, int *id, int *ip, int nd, size_t size, void **vv
|
|||
uint8_t *pa[RAID_PARITY_MAX];
|
||||
uint8_t G[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
uint8_t V[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
const uint8_t *T[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
size_t i;
|
||||
int j, k;
|
||||
|
||||
|
|
@ -380,6 +381,10 @@ void raid_recX_avx512bw(int nr, int *id, int *ip, int nd, size_t size, void **vv
|
|||
/* invert it to solve the system of linear equations */
|
||||
raid_invert(G, V, N);
|
||||
|
||||
/* precompute shuffle table pointers */
|
||||
for (j = 0; j < N * N; ++j)
|
||||
T[j] = &raid_gfmulpshufb[V[j]][0][0];
|
||||
|
||||
/* compute delta parity */
|
||||
raid_delta_gen(N, id, ip, nd, size, vv);
|
||||
|
||||
|
|
@ -468,19 +473,17 @@ void raid_recX_avx512bw(int nr, int *id, int *ip, int nd, size_t size, void **vv
|
|||
/* reconstruct */
|
||||
for (j = 0; j < N; ++j) {
|
||||
asm volatile (
|
||||
"movzbq 0(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"vbroadcasti32x4 0(%4, %%rcx), %%zmm14\n"
|
||||
"vbroadcasti32x4 16(%4, %%rcx), %%zmm15\n"
|
||||
"movq 0(%2), %%rcx\n"
|
||||
"vbroadcasti32x4 0(%%rcx), %%zmm14\n"
|
||||
"vbroadcasti32x4 16(%%rcx), %%zmm15\n"
|
||||
"vpshufb %%zmm0, %%zmm14, %%zmm14\n"
|
||||
"vpshufb %%zmm1, %%zmm15, %%zmm15\n"
|
||||
"cmpq $1, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 1(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"vbroadcasti32x4 0(%4, %%rcx), %%zmm12\n"
|
||||
"vbroadcasti32x4 16(%4, %%rcx), %%zmm13\n"
|
||||
"movq 8(%2), %%rcx\n"
|
||||
"vbroadcasti32x4 0(%%rcx), %%zmm12\n"
|
||||
"vbroadcasti32x4 16(%%rcx), %%zmm13\n"
|
||||
"vpshufb %%zmm2, %%zmm12, %%zmm12\n"
|
||||
"vpshufb %%zmm3, %%zmm13, %%zmm13\n"
|
||||
"vpxorq %%zmm12, %%zmm14, %%zmm14\n"
|
||||
|
|
@ -488,10 +491,9 @@ void raid_recX_avx512bw(int nr, int *id, int *ip, int nd, size_t size, void **vv
|
|||
"cmpq $2, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 2(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"vbroadcasti32x4 0(%4, %%rcx), %%zmm12\n"
|
||||
"vbroadcasti32x4 16(%4, %%rcx), %%zmm13\n"
|
||||
"movq 16(%2), %%rcx\n"
|
||||
"vbroadcasti32x4 0(%%rcx), %%zmm12\n"
|
||||
"vbroadcasti32x4 16(%%rcx), %%zmm13\n"
|
||||
"vpshufb %%zmm4, %%zmm12, %%zmm12\n"
|
||||
"vpshufb %%zmm5, %%zmm13, %%zmm13\n"
|
||||
"vpxorq %%zmm12, %%zmm14, %%zmm14\n"
|
||||
|
|
@ -499,10 +501,9 @@ void raid_recX_avx512bw(int nr, int *id, int *ip, int nd, size_t size, void **vv
|
|||
"cmpq $3, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 3(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"vbroadcasti32x4 0(%4, %%rcx), %%zmm12\n"
|
||||
"vbroadcasti32x4 16(%4, %%rcx), %%zmm13\n"
|
||||
"movq 24(%2), %%rcx\n"
|
||||
"vbroadcasti32x4 0(%%rcx), %%zmm12\n"
|
||||
"vbroadcasti32x4 16(%%rcx), %%zmm13\n"
|
||||
"vpshufb %%zmm6, %%zmm12, %%zmm12\n"
|
||||
"vpshufb %%zmm7, %%zmm13, %%zmm13\n"
|
||||
"vpxorq %%zmm12, %%zmm14, %%zmm14\n"
|
||||
|
|
@ -510,10 +511,9 @@ void raid_recX_avx512bw(int nr, int *id, int *ip, int nd, size_t size, void **vv
|
|||
"cmpq $4, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 4(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"vbroadcasti32x4 0(%4, %%rcx), %%zmm12\n"
|
||||
"vbroadcasti32x4 16(%4, %%rcx), %%zmm13\n"
|
||||
"movq 32(%2), %%rcx\n"
|
||||
"vbroadcasti32x4 0(%%rcx), %%zmm12\n"
|
||||
"vbroadcasti32x4 16(%%rcx), %%zmm13\n"
|
||||
"vpshufb %%zmm8, %%zmm12, %%zmm12\n"
|
||||
"vpshufb %%zmm9, %%zmm13, %%zmm13\n"
|
||||
"vpxorq %%zmm12, %%zmm14, %%zmm14\n"
|
||||
|
|
@ -521,10 +521,9 @@ void raid_recX_avx512bw(int nr, int *id, int *ip, int nd, size_t size, void **vv
|
|||
"cmpq $5, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 5(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"vbroadcasti32x4 0(%4, %%rcx), %%zmm12\n"
|
||||
"vbroadcasti32x4 16(%4, %%rcx), %%zmm13\n"
|
||||
"movq 40(%2), %%rcx\n"
|
||||
"vbroadcasti32x4 0(%%rcx), %%zmm12\n"
|
||||
"vbroadcasti32x4 16(%%rcx), %%zmm13\n"
|
||||
"vpshufb %%zmm10, %%zmm12, %%zmm12\n"
|
||||
"vpshufb %%zmm11, %%zmm13, %%zmm13\n"
|
||||
"vpxorq %%zmm12, %%zmm14, %%zmm14\n"
|
||||
|
|
@ -535,7 +534,7 @@ void raid_recX_avx512bw(int nr, int *id, int *ip, int nd, size_t size, void **vv
|
|||
"movq %3, %%rax\n"
|
||||
"vmovdqa64 %%zmm14, (%%rax, %1)\n"
|
||||
:
|
||||
: "r" ((uint64_t)N), "r" (i), "r" (&V[j * N]), "r" (pa[j]), "r" (raid_gfmulpshufb)
|
||||
: "r" ((uint64_t)N), "r" (i), "r" (&T[j * N]), "r" (pa[j])
|
||||
: "rax", "rcx", "cc", "memory"
|
||||
);
|
||||
}
|
||||
|
|
|
|||
25
raid/neon.c
25
raid/neon.c
|
|
@ -884,6 +884,7 @@ void raid_recX_neon(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
uint8_t *pa[RAID_PARITY_MAX];
|
||||
uint8_t G[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
uint8_t V[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
const uint8_t *T[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
size_t i;
|
||||
int j, k;
|
||||
|
||||
|
|
@ -895,6 +896,10 @@ void raid_recX_neon(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
/* invert it to solve the system of linear equations */
|
||||
raid_invert(G, V, N);
|
||||
|
||||
/* precompute shuffle table pointers */
|
||||
for (j = 0; j < N * N; ++j)
|
||||
T[j] = &raid_gfmulpshufb[V[j]][0][0];
|
||||
|
||||
/* compute delta parity */
|
||||
raid_delta_gen(N, id, ip, nd, size, vv);
|
||||
|
||||
|
|
@ -988,16 +993,14 @@ void raid_recX_neon(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
/* reconstruct */
|
||||
for (j = 0; j < N; ++j) {
|
||||
asm volatile (
|
||||
"ldrb w4, [%2, #0]\n"
|
||||
"add x5, %4, x4, lsl #5\n"
|
||||
"ldr x5, [%2, #0]\n"
|
||||
"ldp q24, q25, [x5]\n"
|
||||
"tbl v12.16b, {v24.16b}, v0.16b\n"
|
||||
"tbl v13.16b, {v25.16b}, v1.16b\n"
|
||||
"cmp %0, #1\n"
|
||||
"b.ls 1f\n"
|
||||
|
||||
"ldrb w4, [%2, #1]\n"
|
||||
"add x5, %4, x4, lsl #5\n"
|
||||
"ldr x5, [%2, #8]\n"
|
||||
"ldp q24, q25, [x5]\n"
|
||||
"tbl v14.16b, {v24.16b}, v2.16b\n"
|
||||
"tbl v15.16b, {v25.16b}, v3.16b\n"
|
||||
|
|
@ -1006,8 +1009,7 @@ void raid_recX_neon(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
"cmp %0, #2\n"
|
||||
"b.ls 1f\n"
|
||||
|
||||
"ldrb w4, [%2, #2]\n"
|
||||
"add x5, %4, x4, lsl #5\n"
|
||||
"ldr x5, [%2, #16]\n"
|
||||
"ldp q24, q25, [x5]\n"
|
||||
"tbl v14.16b, {v24.16b}, v4.16b\n"
|
||||
"tbl v15.16b, {v25.16b}, v5.16b\n"
|
||||
|
|
@ -1016,8 +1018,7 @@ void raid_recX_neon(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
"cmp %0, #3\n"
|
||||
"b.ls 1f\n"
|
||||
|
||||
"ldrb w4, [%2, #3]\n"
|
||||
"add x5, %4, x4, lsl #5\n"
|
||||
"ldr x5, [%2, #24]\n"
|
||||
"ldp q24, q25, [x5]\n"
|
||||
"tbl v14.16b, {v24.16b}, v6.16b\n"
|
||||
"tbl v15.16b, {v25.16b}, v7.16b\n"
|
||||
|
|
@ -1026,8 +1027,7 @@ void raid_recX_neon(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
"cmp %0, #4\n"
|
||||
"b.ls 1f\n"
|
||||
|
||||
"ldrb w4, [%2, #4]\n"
|
||||
"add x5, %4, x4, lsl #5\n"
|
||||
"ldr x5, [%2, #32]\n"
|
||||
"ldp q24, q25, [x5]\n"
|
||||
"tbl v14.16b, {v24.16b}, v8.16b\n"
|
||||
"tbl v15.16b, {v25.16b}, v9.16b\n"
|
||||
|
|
@ -1036,8 +1036,7 @@ void raid_recX_neon(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
"cmp %0, #5\n"
|
||||
"b.ls 1f\n"
|
||||
|
||||
"ldrb w4, [%2, #5]\n"
|
||||
"add x5, %4, x4, lsl #5\n"
|
||||
"ldr x5, [%2, #40]\n"
|
||||
"ldp q24, q25, [x5]\n"
|
||||
"tbl v14.16b, {v24.16b}, v10.16b\n"
|
||||
"tbl v15.16b, {v25.16b}, v11.16b\n"
|
||||
|
|
@ -1048,7 +1047,7 @@ void raid_recX_neon(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
"eor v12.16b, v12.16b, v13.16b\n"
|
||||
"str q12, [%3, %1]\n"
|
||||
:
|
||||
: "r" ((uint64_t)N), "r" (i), "r" (&V[j * N]), "r" (pa[j]), "r" (raid_gfmulpshufb)
|
||||
: "r" ((uint64_t)N), "r" (i), "r" (&T[j * N]), "r" (pa[j])
|
||||
: "x4", "x5", "cc", "memory"
|
||||
);
|
||||
}
|
||||
|
|
|
|||
50
raid/ssse3.c
50
raid/ssse3.c
|
|
@ -1570,6 +1570,12 @@ void raid_recX_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
raid_sse_begin();
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
const uint8_t *T[RAID_PARITY_MAX * RAID_PARITY_MAX];
|
||||
|
||||
/* precompute shuffle table pointers */
|
||||
for (j = 0; j < N * N; ++j)
|
||||
T[j] = &raid_gfmulpshufb[V[j]][0][0];
|
||||
|
||||
asm volatile ("movdqa %0,%%xmm15" : : "m" (gfconst16.low4[0]));
|
||||
|
||||
for (i = 0; i < size; i += 16) {
|
||||
|
|
@ -1660,65 +1666,59 @@ void raid_recX_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
/* reconstruct */
|
||||
for (j = 0; j < N; ++j) {
|
||||
asm volatile (
|
||||
"movzbq 0(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"movdqa 0(%4, %%rcx), %%xmm13\n"
|
||||
"movdqa 16(%4, %%rcx), %%xmm14\n"
|
||||
"movq 0(%2), %%rcx\n"
|
||||
"movdqa 0(%%rcx), %%xmm13\n"
|
||||
"movdqa 16(%%rcx), %%xmm14\n"
|
||||
"pshufb %%xmm0, %%xmm13\n"
|
||||
"pshufb %%xmm1, %%xmm14\n"
|
||||
"cmpq $1, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 1(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"movdqa 0(%4, %%rcx), %%xmm12\n"
|
||||
"movq 8(%2), %%rcx\n"
|
||||
"movdqa 0(%%rcx), %%xmm12\n"
|
||||
"pshufb %%xmm2, %%xmm12\n"
|
||||
"pxor %%xmm12, %%xmm13\n"
|
||||
"movdqa 16(%4, %%rcx), %%xmm12\n"
|
||||
"movdqa 16(%%rcx), %%xmm12\n"
|
||||
"pshufb %%xmm3, %%xmm12\n"
|
||||
"pxor %%xmm12, %%xmm14\n"
|
||||
"cmpq $2, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 2(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"movdqa 0(%4, %%rcx), %%xmm12\n"
|
||||
"movq 16(%2), %%rcx\n"
|
||||
"movdqa 0(%%rcx), %%xmm12\n"
|
||||
"pshufb %%xmm4, %%xmm12\n"
|
||||
"pxor %%xmm12, %%xmm13\n"
|
||||
"movdqa 16(%4, %%rcx), %%xmm12\n"
|
||||
"movdqa 16(%%rcx), %%xmm12\n"
|
||||
"pshufb %%xmm5, %%xmm12\n"
|
||||
"pxor %%xmm12, %%xmm14\n"
|
||||
"cmpq $3, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 3(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"movdqa 0(%4, %%rcx), %%xmm12\n"
|
||||
"movq 24(%2), %%rcx\n"
|
||||
"movdqa 0(%%rcx), %%xmm12\n"
|
||||
"pshufb %%xmm6, %%xmm12\n"
|
||||
"pxor %%xmm12, %%xmm13\n"
|
||||
"movdqa 16(%4, %%rcx), %%xmm12\n"
|
||||
"movdqa 16(%%rcx), %%xmm12\n"
|
||||
"pshufb %%xmm7, %%xmm12\n"
|
||||
"pxor %%xmm12, %%xmm14\n"
|
||||
"cmpq $4, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 4(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"movdqa 0(%4, %%rcx), %%xmm12\n"
|
||||
"movq 32(%2), %%rcx\n"
|
||||
"movdqa 0(%%rcx), %%xmm12\n"
|
||||
"pshufb %%xmm8, %%xmm12\n"
|
||||
"pxor %%xmm12, %%xmm13\n"
|
||||
"movdqa 16(%4, %%rcx), %%xmm12\n"
|
||||
"movdqa 16(%%rcx), %%xmm12\n"
|
||||
"pshufb %%xmm9, %%xmm12\n"
|
||||
"pxor %%xmm12, %%xmm14\n"
|
||||
"cmpq $5, %0\n"
|
||||
"jbe 1f\n"
|
||||
|
||||
"movzbq 5(%2), %%rcx\n"
|
||||
"shlq $5, %%rcx\n"
|
||||
"movdqa 0(%4, %%rcx), %%xmm12\n"
|
||||
"movq 40(%2), %%rcx\n"
|
||||
"movdqa 0(%%rcx), %%xmm12\n"
|
||||
"pshufb %%xmm10, %%xmm12\n"
|
||||
"pxor %%xmm12, %%xmm13\n"
|
||||
"movdqa 16(%4, %%rcx), %%xmm12\n"
|
||||
"movdqa 16(%%rcx), %%xmm12\n"
|
||||
"pshufb %%xmm11, %%xmm12\n"
|
||||
"pxor %%xmm12, %%xmm14\n"
|
||||
|
||||
|
|
@ -1727,7 +1727,7 @@ void raid_recX_ssse3(int nr, int *id, int *ip, int nd, size_t size, void **vv)
|
|||
"movq %3, %%rax\n"
|
||||
"movdqa %%xmm13, (%%rax, %1)\n"
|
||||
:
|
||||
: "r" ((uint64_t)N), "r" (i), "r" (&V[j * N]), "r" (pa[j]), "r" (raid_gfmulpshufb)
|
||||
: "r" ((uint64_t)N), "r" (i), "r" (&T[j * N]), "r" (pa[j])
|
||||
: "rax", "rcx", "cc", "memory"
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue