target/arm: Implement {S,SU,US,U}TMOPA (4-way)
Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20260713230244.70174-10-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Richard Henderson committed
Aug 11, 2026 at 20:14 UTC
e56b670ea130b05c6abd3218357996a14c88338d
4 files changed
+33
target/arm/tcg/helper-sme-defs.h
+5
@@ -414,3 +414,8 @@ DEF_HELPER_FLAGS_6(sme_ftmopa_sh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, env
414
415
DEF_HELPER_FLAGS_5(sme_stmopa_sh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32)
416
DEF_HELPER_FLAGS_5(sme_utmopa_sh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32)
417
+
418
+DEF_HELPER_FLAGS_5(sme_stmopa_sb, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32)
419
+DEF_HELPER_FLAGS_5(sme_sutmopa_sb, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32)
420
+DEF_HELPER_FLAGS_5(sme_utmopa_sb, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32)
421
+DEF_HELPER_FLAGS_5(sme_ustmopa_sb, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32)
target/arm/tcg/sme.decode
+5
@@ -1154,3 +1154,8 @@ FTMOPA_sb 1000 0000 011 ..... 000 ... .... .. 00 .. @tmop_o2
1154
1155
STMOPA_sh 1000 0000 010 ..... 100 ... .... .. 10 .. @tmop_o2
1156
UTMOPA_sh 1000 0001 010 ..... 100 ... .... .. 10 .. @tmop_o2
1157
+
1158
+STMOPA_sb 1000 0000 010 ..... 100 ... .... .. 00 .. @tmop_o2
1159
+SUTMOPA_sb 1000 0000 011 ..... 100 ... .... .. 00 .. @tmop_o2
1160
+USTMOPA_sb 1000 0001 010 ..... 100 ... .... .. 00 .. @tmop_o2
1161
+UTMOPA_sb 1000 0001 011 ..... 100 ... .... .. 00 .. @tmop_o2
target/arm/tcg/sme_helper.c
+14
@@ -3168,3 +3168,17 @@ IMOP4_4WAY(usmop4a_dh, +, int64_t, uint16_t, int16_t)
3168
IMOP4_4WAY(usmop4s_dh, -, int64_t, uint16_t, int16_t)
3169
3170
#undef IMOP4_4WAY
3171
+
3172
+#define ITMOP_4WAY(TNAME, MNAME) \
3173
+void HELPER(sme_##TNAME)(void *vza, void *vzn, void *vzm, \
3174
+ void *vzk, uint32_t desc) \
3175
+{ \
3176
+ sme_tmop_4way_sb(vza, vzn, vzm, vzk, NULL, desc, inner_##MNAME); \
3177
+}
3178
+
3179
+ITMOP_4WAY(stmopa_sb, smop4a_sb)
3180
+ITMOP_4WAY(utmopa_sb, umop4a_sb)
3181
+ITMOP_4WAY(sutmopa_sb, sumop4a_sb)
3182
+ITMOP_4WAY(ustmopa_sb, usmop4a_sb)
3183
+
3184
+#undef ITMOP_4WAY
target/arm/tcg/translate-sme.c
+9
@@ -2202,3 +2202,12 @@ TRANS_FEAT(STMOPA_sh, aa64_sme_tmop, do_tmop_int,
2202
a, MO_32, gen_helper_sme_stmopa_sh)
2203
TRANS_FEAT(UTMOPA_sh, aa64_sme_tmop, do_tmop_int,
2204
a, MO_32, gen_helper_sme_utmopa_sh)
2205
+
2206
+TRANS_FEAT(STMOPA_sb, aa64_sme_tmop, do_tmop_int,
2207
+ a, MO_32, gen_helper_sme_stmopa_sb)
2208
+TRANS_FEAT(SUTMOPA_sb, aa64_sme_tmop, do_tmop_int,
2209
+ a, MO_32, gen_helper_sme_sutmopa_sb)
2210
+TRANS_FEAT(USTMOPA_sb, aa64_sme_tmop, do_tmop_int,
2211
+ a, MO_32, gen_helper_sme_ustmopa_sb)
2212
+TRANS_FEAT(UTMOPA_sb, aa64_sme_tmop, do_tmop_int,
2213
+ a, MO_32, gen_helper_sme_utmopa_sb)