From 8c55e835c49e03d51de2ff93c3677a09926ad897 Mon Sep 17 00:00:00 2001 From: Weaselbot Date: Sun, 16 Aug 2026 21:16:23 -0400 Subject: [PATCH] Fix NEON type mismatch in conflictMask16 for gcc/aarch64 + USE_64_BIT=1 vcgtq_s64 returns uint64x2_t but vmovn_s64 requires int64x2_t. clang accepts the implicit conversion via lax vector conversions, but gcc does not. Add an explicit vreinterpretq_s64_u64 so the code compiles with gcc on aarch64 when USE_64_BIT=1. This path is otherwise untested in CI (aarch64 matrices use USE_64_BIT=0; the 64-bit-versions matrix uses amd64 AVX compare16). Closes #80 --- ConflictSet.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 5572dd3..2ee75c9 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -2135,7 +2135,8 @@ inline uint8x16_t conflictMask16(const InternalVersionT *vs, int32x2_t r32[8]; const auto *vsp = reinterpret_cast(vs); for (int j = 0; j < 8; ++j) { - r32[j] = vmovn_s64(vcgtq_s64(vld1q_s64(vsp + 2 * j), rvVec)); + r32[j] = vmovn_s64( + vreinterpretq_s64_u64(vcgtq_s64(vld1q_s64(vsp + 2 * j), rvVec))); } uint32x4_t w4[4]; for (int k = 0; k < 4; ++k) { -- 2.43.0