forked from weaselab/conflict-set
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:
+2
-1
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user