@samitouri / QOSamiQemu / commits / 0c33ec8e65

target/arm: Implement SVE reverse within elements (zeroing)

This includes REVB, REVH, REVW, RBIT. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20260604234852.573178-8-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Richard Henderson committed Jun 4, 2026 at 16:48 UTC 0c33ec8e65d2057120dfbca7c5840509f63deecc
2 files changed +12
target/arm/tcg/sve.decode
+5
@@ -730,6 +730,11 @@ REVW_m 00000101 .. 1001 10 100 ... ..... ..... @rd_pg_rn
730 RBIT_m 00000101 .. 1001 11 100 ... ..... ..... @rd_pg_rn
731 REVD_m 00000101 00 1011 10 100 ... ..... ..... @rd_pg_rn_e0
732
733 +REVB_z 00000101 .. 1001 00 101 ... ..... ..... @rd_pg_rn
734 +REVH_z 00000101 .. 1001 01 101 ... ..... ..... @rd_pg_rn
735 +REVW_z 00000101 .. 1001 10 101 ... ..... ..... @rd_pg_rn
736 +RBIT_z 00000101 .. 1001 11 101 ... ..... ..... @rd_pg_rn
737 +
738 # SVE vector splice (predicated, destructive)
739 SPLICE 00000101 .. 101 100 100 ... ..... ..... @rdn_pg_rm
740
target/arm/tcg/translate-sve.c
+7
@@ -836,6 +836,7 @@ static gen_helper_gvec_3 * const sve_rbit_fns[4] = {
836 gen_helper_sve_rbit_s, gen_helper_sve_rbit_d,
837 };
838 TRANS_FEAT(RBIT_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sve_rbit_fns[a->esz], a, 0)
839 +TRANS_FEAT(RBIT_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz, sve_rbit_fns[a->esz], a, 1)
840
841 static gen_helper_gvec_3 * const sve2p1_orqv_fns[4] = {
842 gen_helper_sve2p1_orqv_b, gen_helper_sve2p1_orqv_h,
@@ -3070,15 +3071,21 @@ static gen_helper_gvec_3 * const revb_fns[4] = {
3071 };
3072 TRANS_FEAT(REVB_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz,
3073 revb_fns[a->esz], a, 0)
3074 +TRANS_FEAT(REVB_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz,
3075 + revb_fns[a->esz], a, 1)
3076
3077 static gen_helper_gvec_3 * const revh_fns[4] = {
3078 NULL, NULL, gen_helper_sve_revh_s, gen_helper_sve_revh_d,
3079 };
3080 TRANS_FEAT(REVH_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz,
3081 revh_fns[a->esz], a, 0)
3082 +TRANS_FEAT(REVH_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz,
3083 + revh_fns[a->esz], a, 1)
3084
3085 TRANS_FEAT(REVW_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz,
3086 a->esz == 3 ? gen_helper_sve_revw_d : NULL, a, 0)
3087 +TRANS_FEAT(REVW_z, aa64_sme2p2_or_sve2p2, gen_gvec_ool_arg_zpz,
3088 + a->esz == 3 ? gen_helper_sve_revw_d : NULL, a, 1)
3089
3090 TRANS_FEAT(REVD_m, aa64_sme_or_sve2p1, gen_gvec_ool_arg_zpz,
3091 gen_helper_sme_revd_q, a, 0)