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); \