From: Richard Henderson <[email protected]> This includes ABS, NEG, SXT{B,H,W}.
Signed-off-by: Richard Henderson <[email protected]> Reviewed-by: Peter Maydell <[email protected]> Message-id: [email protected] Signed-off-by: Peter Maydell <[email protected]> --- target/arm/tcg/sve.decode | 9 +++++++++ target/arm/tcg/translate-sve.c | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index c7e633ec4f..31b65fab1b 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -411,6 +411,15 @@ UXTH_m 00000100 .. 010 011 101 ... ..... ..... @rd_pg_rn SXTW_m 00000100 .. 010 100 101 ... ..... ..... @rd_pg_rn UXTW_m 00000100 .. 010 101 101 ... ..... ..... @rd_pg_rn +ABS_z 00000100 .. 000 110 101 ... ..... ..... @rd_pg_rn +NEG_z 00000100 .. 000 111 101 ... ..... ..... @rd_pg_rn +SXTB_z 00000100 .. 000 000 101 ... ..... ..... @rd_pg_rn +UXTB_z 00000100 .. 000 001 101 ... ..... ..... @rd_pg_rn +SXTH_z 00000100 .. 000 010 101 ... ..... ..... @rd_pg_rn +UXTH_z 00000100 .. 000 011 101 ... ..... ..... @rd_pg_rn +SXTW_z 00000100 .. 000 100 101 ... ..... ..... @rd_pg_rn +UXTW_z 00000100 .. 000 101 101 ... ..... ..... @rd_pg_rn + ### SVE Floating Point Compare - Vectors Group # SVE floating-point compare vectors diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 8ab4526468..afbed77ec3 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -811,12 +811,14 @@ static gen_helper_gvec_3 * const sve_abs_fns[4] = { gen_helper_sve_abs_s, gen_helper_sve_abs_d, }; TRANS_FEAT(ABS_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sve_abs_fns[a->esz], a, 0) +TRANS_FEAT(ABS_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz, sve_abs_fns[a->esz], a, 1) static gen_helper_gvec_3 * const sve_neg_fns[4] = { gen_helper_sve_neg_b, gen_helper_sve_neg_h, gen_helper_sve_neg_s, gen_helper_sve_neg_d, }; TRANS_FEAT(NEG_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sve_neg_fns[a->esz], a, 0) +TRANS_FEAT(NEG_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz, sve_neg_fns[a->esz], a, 1) static gen_helper_gvec_3 * const sve_rbit_fns[4] = { gen_helper_sve_rbit_b, gen_helper_sve_rbit_h, @@ -873,6 +875,8 @@ static gen_helper_gvec_3 * const sxtb_fns[4] = { }; TRANS_FEAT(SXTB_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sxtb_fns[a->esz], a, 0) +TRANS_FEAT(SXTB_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz, + sxtb_fns[a->esz], a, 1) static gen_helper_gvec_3 * const uxtb_fns[4] = { NULL, gen_helper_sve_uxtb_h, @@ -880,23 +884,34 @@ static gen_helper_gvec_3 * const uxtb_fns[4] = { }; TRANS_FEAT(UXTB_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, uxtb_fns[a->esz], a, 0) +TRANS_FEAT(UXTB_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz, + uxtb_fns[a->esz], a, 1) static gen_helper_gvec_3 * const sxth_fns[4] = { NULL, NULL, gen_helper_sve_sxth_s, gen_helper_sve_sxth_d }; TRANS_FEAT(SXTH_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sxth_fns[a->esz], a, 0) +TRANS_FEAT(SXTH_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz, + sxth_fns[a->esz], a, 1) static gen_helper_gvec_3 * const uxth_fns[4] = { NULL, NULL, gen_helper_sve_uxth_s, gen_helper_sve_uxth_d }; TRANS_FEAT(UXTH_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, uxth_fns[a->esz], a, 0) +TRANS_FEAT(UXTH_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz, + uxth_fns[a->esz], a, 1) TRANS_FEAT(SXTW_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, a->esz == 3 ? gen_helper_sve_sxtw_d : NULL, a, 0) +TRANS_FEAT(SXTW_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz, + a->esz == 3 ? gen_helper_sve_sxtw_d : NULL, a, 1) + TRANS_FEAT(UXTW_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, a->esz == 3 ? gen_helper_sve_uxtw_d : NULL, a, 0) +TRANS_FEAT(UXTW_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz, + a->esz == 3 ? gen_helper_sve_uxtw_d : NULL, a, 1) static gen_helper_gvec_3 * const addqv_fns[4] = { gen_helper_sve2p1_addqv_b, gen_helper_sve2p1_addqv_h, -- 2.43.0
