From d67cdd8b9d7693a8bfceabfbf7543e6527e2abdb Mon Sep 17 00:00:00 2001 From: Andrea Mazzoleni Date: Tue, 26 May 2026 23:39:59 +0200 Subject: [PATCH] Optimize AVX512 gen1 parity with the vpternlogq instruction --- raid/x86.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/raid/x86.c b/raid/x86.c index 4254a007..e3295178 100644 --- a/raid/x86.c +++ b/raid/x86.c @@ -208,9 +208,20 @@ void raid_gen1_avx512bw(int nd, size_t size, void **vv) for (i = 0; i < size; i += 64) { asm volatile ("vmovdqa64 %0,%%zmm0" : : "m" (v[l][i])); - for (d = l - 1; d >= 0; --d) { - asm volatile ("vpxorq %0,%%zmm0,%%zmm0" : : "m" (v[d][i])); + + for (d = l - 1; d >= 1; d -= 2) { + asm volatile ( + "vmovdqa64 %0,%%zmm1\n\t" + "vpternlogq $0x96,%1,%%zmm1,%%zmm0" + : + : "m" (v[d][i]), "m" (v[d-1][i]) + ); } + + if (d == 0) { + asm volatile ("vpxorq %0, %%zmm0,%%zmm0" : : "m" (v[0][i])); + } + asm volatile ("vmovntdq %%zmm0,%0" : "=m" (p[i])); }