@samitouri / QOSamiQemu / commits / 50299d16c8

target/arm: Implement SVE2 integer unary operations (predicated, zeroing)

This includes URECPE, URSQRTE, SQABS, SQNEG. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20260604234852.573178-10-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Richard Henderson committed Jun 4, 2026 at 16:48 UTC 50299d16c8168c95f18bddf8a282ee49d8f6c90f
2 files changed +11
target/arm/tcg/sve.decode
+5
@@ -1545,6 +1545,11 @@ URSQRTE_m 01000100 .. 000 001 101 ... ..... ..... @rd_pg_rn
1545 SQABS_m 01000100 .. 001 000 101 ... ..... ..... @rd_pg_rn
1546 SQNEG_m 01000100 .. 001 001 101 ... ..... ..... @rd_pg_rn
1547
1548 +URECPE_z 01000100 .. 000 010 101 ... ..... ..... @rd_pg_rn
1549 +URSQRTE_z 01000100 .. 000 011 101 ... ..... ..... @rd_pg_rn
1550 +SQABS_z 01000100 .. 001 010 101 ... ..... ..... @rd_pg_rn
1551 +SQNEG_z 01000100 .. 001 011 101 ... ..... ..... @rd_pg_rn
1552 +
1553 ### SVE2 saturating/rounding bitwise shift left (predicated)
1554
1555 SRSHL 01000100 .. 000 010 100 ... ..... ..... @rdn_pg_rm
target/arm/tcg/translate-sve.c
+6
@@ -6791,21 +6791,27 @@ TRANS_FEAT(UADALP_zpzz, aa64_sme_or_sve2, gen_gvec_ool_arg_zpzz,
6791
6792 TRANS_FEAT(URECPE_m, aa64_sme_or_sve2, gen_gvec_ool_arg_zpz,
6793 a->esz == 2 ? gen_helper_sve2_urecpe_s : NULL, a, 0)
6794 +TRANS_FEAT(URECPE_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz,
6795 + a->esz == 2 ? gen_helper_sve2_urecpe_s : NULL, a, 1)
6796
6797 TRANS_FEAT(URSQRTE_m, aa64_sme_or_sve2, gen_gvec_ool_arg_zpz,
6798 a->esz == 2 ? gen_helper_sve2_ursqrte_s : NULL, a, 0)
6799 +TRANS_FEAT(URSQRTE_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz,
6800 + a->esz == 2 ? gen_helper_sve2_ursqrte_s : NULL, a, 1)
6801
6802 static gen_helper_gvec_3 * const sqabs_fns[4] = {
6803 gen_helper_sve2_sqabs_b, gen_helper_sve2_sqabs_h,
6804 gen_helper_sve2_sqabs_s, gen_helper_sve2_sqabs_d,
6805 };
6806 TRANS_FEAT(SQABS_m, aa64_sme_or_sve2, gen_gvec_ool_arg_zpz, sqabs_fns[a->esz], a, 0)
6807 +TRANS_FEAT(SQABS_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz, sqabs_fns[a->esz], a, 1)
6808
6809 static gen_helper_gvec_3 * const sqneg_fns[4] = {
6810 gen_helper_sve2_sqneg_b, gen_helper_sve2_sqneg_h,
6811 gen_helper_sve2_sqneg_s, gen_helper_sve2_sqneg_d,
6812 };
6813 TRANS_FEAT(SQNEG_m, aa64_sme_or_sve2, gen_gvec_ool_arg_zpz, sqneg_fns[a->esz], a, 0)
6814 +TRANS_FEAT(SQNEG_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz, sqneg_fns[a->esz], a, 1)
6815
6816 DO_ZPZZ(SQSHL, aa64_sme_or_sve2, sve2_sqshl)
6817 DO_ZPZZ(SQRSHL, aa64_sme_or_sve2, sve2_sqrshl)