@samitouri / QOSamiQemu / commits / 274960271c

target/arm: Implement FMLAL (multiple, multiple and single, FP8 to FP16)

Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20260625015159.719300-4-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Richard Henderson committed Jun 24, 2026 at 18:51 UTC 274960271cdabe3728f5679cfcd4f39764e53f79
2 files changed +16
target/arm/tcg/sme.decode
+7
@@ -452,6 +452,10 @@ FMLALL_n1_b 11000001 001 1 .... 0 .. 000 ..... 0001 . @azz_nx1_o1x4 n=4
452 FDOT_n1_sb 11000001 001 0 .... 0 .. 100 ..... 11 ... @azz_nx1_o3 n=2
453 FDOT_n1_sb 11000001 001 1 .... 0 .. 100 ..... 11 ... @azz_nx1_o3 n=4
454
455 +FMLAL_n1_hb 11000001 001 1 .... 0 .. 011 ..... 00 ... @azz_nx1_o3x2 n=1
456 +FMLAL_n1_hb 11000001 001 0 .... 0 .. 010 ..... 001 .. @azz_nx1_o2x2 n=2
457 +FMLAL_n1_hb 11000001 001 1 .... 0 .. 010 ..... 001 .. @azz_nx1_o2x2 n=4
458 +
459 ### SME2 Multi-vector Multiple Array Vectors
460
461 %zn_ax2 6:4 !function=times_2
@@ -578,6 +582,9 @@ FMLALL_nn_b 11000001 101 ...01 0 .. 000 ...01 0000 . @azz_4x4_o1x4
582 FDOT_nn_sb 11000001 101 ....0 0 .. 100 ....1 10 ... @azz_2x2_o3
583 FDOT_nn_sb 11000001 101 ...01 0 .. 100 ...01 10 ... @azz_4x4_o3
584
585 +FMLAL_nn_hb 11000001 101 ....0 0 .. 010 ....1 000 .. @azz_2x2_o2x2
586 +FMLAL_nn_hb 11000001 101 ...01 0 .. 010 ...01 000 .. @azz_4x4_o2x2
587 +
588 &az_n n off rv zm
589 @az_2x2_o3 ........ ... ..... . .. ... ..... .. off:3 \
590 &az_n n=2 rv=%mova_rv zm=%zn_ax2
target/arm/tcg/translate-sme.c
+9
@@ -1121,6 +1121,15 @@ static bool do_fmlall_fp8(DisasContext *s, arg_azz_n *a, bool multi)
1121 TRANS_FEAT(FMLALL_n1_b, aa64_sme_f8f32, do_fmlall_fp8, a, false)
1122 TRANS_FEAT(FMLALL_nn_b, aa64_sme_f8f32, do_fmlall_fp8, a, true)
1123
1124 +static bool do_fmlal_fp8(DisasContext *s, arg_azz_n *a, bool multi)
1125 +{
1126 + return do_azz_acc_fp8(s, a->n, 2, a->rv, a->off, a->zn, a->zm,
1127 + 0, 0, multi, gen_helper_gvec_fmla_hb);
1128 +}
1129 +
1130 +TRANS_FEAT(FMLAL_n1_hb, aa64_sme_f8f16, do_fmlal_fp8, a, false)
1131 +TRANS_FEAT(FMLAL_nn_hb, aa64_sme_f8f16, do_fmlal_fp8, a, true)
1132 +
1133 static bool do_fmlal_nx(DisasContext *s, arg_azx_n *a, bool sub)
1134 {
1135 return do_azz_acc_fp(s, a->n, 2, a->rv, a->off, a->zn, a->zm,