@@ -151,7 +151,7 @@ static bool trans_ZERO_zt0(DisasContext *s, arg_ZERO_zt0 *a)
return true;
}
-static bool trans_MOVA(DisasContext *s, arg_MOVA *a)
+static bool do_mova_tile(DisasContext *s, arg_mova_p *a, bool to_vec)
{
static gen_helper_gvec_4 * const h_fns[5] = {
gen_helper_sve_sel_zpzz_b, gen_helper_sve_sel_zpzz_h,
@@ -173,9 +173,6 @@ static bool trans_MOVA(DisasContext *s, arg_MOVA *a)
TCGv_i32 t_desc;
int svl;
- if (!dc_isar_feature(aa64_sme, s)) {
- return false;
- }
if (!sme_smza_enabled_check(s)) {
return true;
}
@@ -189,14 +186,14 @@ static bool trans_MOVA(DisasContext *s, arg_MOVA *a)
if (a->v) {
/* Vertical slice -- use sme mova helpers. */
- if (a->to_vec) {
+ if (to_vec) {
zc_fns[a->esz](t_zr, t_za, t_pg, t_desc);
} else {
cz_fns[a->esz](t_za, t_zr, t_pg, t_desc);
}
} else {
/* Horizontal slice -- reuse sve sel helpers. */
- if (a->to_vec) {
+ if (to_vec) {
h_fns[a->esz](t_zr, t_za, t_zr, t_pg, t_desc);
} else {
h_fns[a->esz](t_za, t_zr, t_za, t_pg, t_desc);
@@ -205,6 +202,9 @@ static bool trans_MOVA(DisasContext *s, arg_MOVA *a)
return true;
}
+TRANS_FEAT(MOVA_tz, aa64_sme, do_mova_tile, a, false)
+TRANS_FEAT(MOVA_zt, aa64_sme, do_mova_tile, a, true)
+
static bool do_movt(DisasContext *s, arg_MOVT_rzt *a,
void (*func)(TCGv_i64, TCGv_ptr, tcg_target_long))
{
@@ -27,29 +27,29 @@ ZERO_zt0 11000000 01 001 00000000000 00000001
### SME Move into/from Array
%mova_rs 13:2 !function=plus_12
-&mova esz rs pg zr za off v:bool to_vec:bool
+&mova_p esz rs pg zr za off v:bool
-MOVA 11000000 00 00000 0 v:1 .. pg:3 zr:5 0 off:4 \
- &mova to_vec=0 rs=%mova_rs esz=0 za=0
-MOVA 11000000 01 00000 0 v:1 .. pg:3 zr:5 0 za:1 off:3 \
- &mova to_vec=0 rs=%mova_rs esz=1
-MOVA 11000000 10 00000 0 v:1 .. pg:3 zr:5 0 za:2 off:2 \
- &mova to_vec=0 rs=%mova_rs esz=2
-MOVA 11000000 11 00000 0 v:1 .. pg:3 zr:5 0 za:3 off:1 \
- &mova to_vec=0 rs=%mova_rs esz=3
-MOVA 11000000 11 00000 1 v:1 .. pg:3 zr:5 0 za:4 \
- &mova to_vec=0 rs=%mova_rs esz=4 off=0
+MOVA_tz 11000000 00 00000 0 v:1 .. pg:3 zr:5 0 off:4 \
+ &mova_p rs=%mova_rs esz=0 za=0
+MOVA_tz 11000000 01 00000 0 v:1 .. pg:3 zr:5 0 za:1 off:3 \
+ &mova_p rs=%mova_rs esz=1
+MOVA_tz 11000000 10 00000 0 v:1 .. pg:3 zr:5 0 za:2 off:2 \
+ &mova_p rs=%mova_rs esz=2
+MOVA_tz 11000000 11 00000 0 v:1 .. pg:3 zr:5 0 za:3 off:1 \
+ &mova_p rs=%mova_rs esz=3
+MOVA_tz 11000000 11 00000 1 v:1 .. pg:3 zr:5 0 za:4 \
+ &mova_p rs=%mova_rs esz=4 off=0
-MOVA 11000000 00 00001 0 v:1 .. pg:3 0 off:4 zr:5 \
- &mova to_vec=1 rs=%mova_rs esz=0 za=0
-MOVA 11000000 01 00001 0 v:1 .. pg:3 0 za:1 off:3 zr:5 \
- &mova to_vec=1 rs=%mova_rs esz=1
-MOVA 11000000 10 00001 0 v:1 .. pg:3 0 za:2 off:2 zr:5 \
- &mova to_vec=1 rs=%mova_rs esz=2
-MOVA 11000000 11 00001 0 v:1 .. pg:3 0 za:3 off:1 zr:5 \
- &mova to_vec=1 rs=%mova_rs esz=3
-MOVA 11000000 11 00001 1 v:1 .. pg:3 0 za:4 zr:5 \
- &mova to_vec=1 rs=%mova_rs esz=4 off=0
+MOVA_zt 11000000 00 00001 0 v:1 .. pg:3 0 off:4 zr:5 \
+ &mova_p rs=%mova_rs esz=0 za=0
+MOVA_zt 11000000 01 00001 0 v:1 .. pg:3 0 za:1 off:3 zr:5 \
+ &mova_p rs=%mova_rs esz=1
+MOVA_zt 11000000 10 00001 0 v:1 .. pg:3 0 za:2 off:2 zr:5 \
+ &mova_p rs=%mova_rs esz=2
+MOVA_zt 11000000 11 00001 0 v:1 .. pg:3 0 za:3 off:1 zr:5 \
+ &mova_p rs=%mova_rs esz=3
+MOVA_zt 11000000 11 00001 1 v:1 .. pg:3 0 za:4 zr:5 \
+ &mova_p rs=%mova_rs esz=4 off=0
### SME Move into/from ZT0
Prepare for more kinds of MOVA from SME2 by renaming the existing SME1 MOVA to indicate tile to/from vector. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/tcg/translate-sme.c | 12 +++++----- target/arm/tcg/sme.decode | 42 +++++++++++++++++----------------- 2 files changed, 27 insertions(+), 27 deletions(-)