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)