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
This commit is contained in:
2026-08-16 21:16:23 -04:00
parent af76c4d623
commit 8c55e835c4
+2 -1
View File
@@ -2135,7 +2135,8 @@ inline uint8x16_t conflictMask16(const InternalVersionT *vs,
int32x2_t r32[8]; int32x2_t r32[8];
const auto *vsp = reinterpret_cast<const int64_t *>(vs); const auto *vsp = reinterpret_cast<const int64_t *>(vs);
for (int j = 0; j < 8; ++j) { 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]; uint32x4_t w4[4];
for (int k = 0; k < 4; ++k) { for (int k = 0; k < 4; ++k) {