@samitouri / QOSamiQemu / commits / 75659d38ee

target/arm: Enable zeroing in DO_FCVT{N, L}T macros in sve_helper.c

Use the low bit of simd_data to hold a 'zeroing' bit. The simd_data field is currently unused and always 0. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20260604234852.573178-17-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Richard Henderson committed Jun 4, 2026 at 16:48 UTC 75659d38ee1dbdfcd7f33b51f5c006ebd668fdf8
1 file changed +6
target/arm/tcg/sve_helper.c
+6
@@ -8595,6 +8595,7 @@ void HELPER(NAME)(void *vd, void *vn, void *vg, \
8595 float_status *status, uint32_t desc) \
8596 { \
8597 intptr_t i = simd_oprsz(desc); \
8598 + bool zeroing = simd_data(desc) & 1; \
8599 uint64_t *g = vg; \
8600 do { \
8601 uint64_t pg = g[(i - 1) >> 6]; \
@@ -8603,6 +8604,8 @@ void HELPER(NAME)(void *vd, void *vn, void *vg, \
8604 if (likely((pg >> (i & 63)) & 1)) { \
8605 TYPEW nn = *(TYPEW *)(vn + HW(i)); \
8606 *(TYPEN *)(vd + HN(i + sizeof(TYPEN))) = OP(nn, status); \
8607 + } else if (zeroing) { \
8608 + *(TYPEN *)(vd + HN(i + sizeof(TYPEN))) = 0; \
8609 } \
8610 } while (i & 63); \
8611 } while (i != 0); \
@@ -8617,6 +8620,7 @@ void HELPER(NAME)(void *vd, void *vn, void *vg, \
8620 float_status *status, uint32_t desc) \
8621 { \
8622 intptr_t i = simd_oprsz(desc); \
8623 + bool zeroing = simd_data(desc) & 1; \
8624 uint64_t *g = vg; \
8625 do { \
8626 uint64_t pg = g[(i - 1) >> 6]; \
@@ -8625,6 +8629,8 @@ void HELPER(NAME)(void *vd, void *vn, void *vg, \
8629 if (likely((pg >> (i & 63)) & 1)) { \
8630 TYPEN nn = *(TYPEN *)(vn + HN(i + sizeof(TYPEN))); \
8631 *(TYPEW *)(vd + HW(i)) = OP(nn, status); \
8632 + } else if (zeroing) { \
8633 + *(TYPEW *)(vd + HW(i)) = 0; \
8634 } \
8635 } while (i & 63); \
8636 } while (i != 0); \