target/arm: Implement FMLAL (multiple and indexed, FP8 to FP16)
Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20260625015159.719300-5-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Richard Henderson committed
Jun 24, 2026 at 18:51 UTC
ec52415a4d8c4b52f0bd4672607d9e0f9f424930
2 files changed
+17
target/arm/tcg/sme.decode
+13
@@ -791,6 +791,19 @@ FMLALL_nx_b 11000001 0001 .... 1 .. 0.. ...10 00.. . @azx_4x1_i4_o1
791
FDOT_nx_b 11000001 0101 .... 0 .. 0.. ....1 11 ... @azx_2x1_i2_o3
792
FDOT_nx_b 11000001 0101 .... 1 .. 0.. ...00 01 ... @azx_4x1_i2_o3
793
794
+%idx4_15_10_3 15:1 10:2 3:1
795
+%idx4_10_2 10:2 2:2
796
+@azx_1x1_i4_o3x2 ........ .... zm:4 . .. . .. zn:5 .. ... \
797
+ &azx_n n=1 rv=%mova_rv off=%off3_x2 idx=%idx4_15_10_3
798
+@azx_2x2_i4_o3x2 ........ .... zm:4 . .. . .. .... .. .. .. \
799
+ &azx_n n=2 rv=%mova_rv zn=%zn_ax2 off=%off2_x2 idx=%idx4_10_2
800
+@azx_4x4_i4_o3x2 ........ .... zm:4 . .. . .. ... ... .. .. \
801
+ &azx_n n=4 rv=%mova_rv zn=%zn_ax4 off=%off2_x2 idx=%idx4_10_2
802
+
803
+FMLAL_nx_hb 11000001 1100 .... . .. 0.. ..... 0. ... @azx_1x1_i4_o3x2
804
+FMLAL_nx_hb 11000001 1001 .... 0 .. 1.. ....1 1.. .. @azx_2x2_i4_o3x2
805
+FMLAL_nx_hb 11000001 1001 .... 1 .. 1.. ...01 0.. .. @azx_4x4_i4_o3x2
806
+
807
%idx2_10_3 10:1 3:1
808
@azx_4x2_i2_o3 ........ .... zm:4 . .. ... .... ... off:3 \
809
&azx_n n=4 rv=%mova_rv zn=%zn_ax2 idx=%idx2_10_3
target/arm/tcg/translate-sme.c
+4
@@ -1140,6 +1140,10 @@ static bool do_fmlal_nx(DisasContext *s, arg_azx_n *a, bool sub)
1140
TRANS_FEAT(FMLAL_nx_sh, aa64_sme2, do_fmlal_nx, a, false)
1141
TRANS_FEAT(FMLSL_nx_sh, aa64_sme2, do_fmlal_nx, a, true)
1142
1143
+TRANS_FEAT(FMLAL_nx_hb, aa64_sme_f8f16, do_azz_acc_fp8,
1144
+ a->n, 2, a->rv, a->off, a->zn, a->zm,
1145
+ a->idx << 2, 0, false, gen_helper_gvec_fmla_idx_hb)
1146
+
1147
static bool do_bfmlal(DisasContext *s, arg_azz_n *a, bool sub, bool multi)
1148
{
1149
return do_azz_acc_fp(s, a->n, 2, a->rv, a->off, a->zn, a->zm,