From: Sebastian Buchwald Date: Sat, 14 Jan 2023 15:09:31 +0000 (+0100) Subject: Fix asm modifiers in add_dpbusd_epi32x2 implementations X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=da5bcec481dc22ad2de2e2c8e5c6e8304a373445;p=stockfish Fix asm modifiers in add_dpbusd_epi32x2 implementations The accumulator should be an earlyclobber because it is written before all input operands are read. Otherwise, the asm code computes a wrong result if the accumulator shares a register with one of the other input operands (which happens if we pass in the same expression for the accumulator and the operand). Closes https://github.com/official-stockfish/Stockfish/pull/4339 No functional change --- diff --git a/src/nnue/layers/simd.h b/src/nnue/layers/simd.h index aeab39c4..231f7891 100644 --- a/src/nnue/layers/simd.h +++ b/src/nnue/layers/simd.h @@ -153,7 +153,7 @@ namespace Stockfish::Simd { asm( "vpdpbusd %[b0], %[a0], %[acc]\n\t" "vpdpbusd %[b1], %[a1], %[acc]\n\t" - : [acc]"+v"(acc) + : [acc]"+&v"(acc) : [a0]"v"(a0), [b0]"vm"(b0), [a1]"v"(a1), [b1]"vm"(b1) ); # else @@ -249,7 +249,7 @@ namespace Stockfish::Simd { asm( VNNI_PREFIX "vpdpbusd %[b0], %[a0], %[acc]\n\t" VNNI_PREFIX "vpdpbusd %[b1], %[a1], %[acc]\n\t" - : [acc]"+v"(acc) + : [acc]"+&v"(acc) : [a0]"v"(a0), [b0]"vm"(b0), [a1]"v"(a1), [b1]"vm"(b1) ); # else