@samitouri / QOSamiQemu / commits / fbd6357a22

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

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

Richard Henderson committed Jun 24, 2026 at 18:51 UTC fbd6357a224def8ee5ce3835bd2783484b9647c1
2 files changed +15
target/arm/tcg/sme.decode
+6
@@ -456,6 +456,9 @@ 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 +FDOT_n1_hb 11000001 001 0 .... 0 .. 100 ..... 01 ... @azz_nx1_o3 n=2
460 +FDOT_n1_hb 11000001 001 1 .... 0 .. 100 ..... 01 ... @azz_nx1_o3 n=4
461 +
462 ### SME2 Multi-vector Multiple Array Vectors
463
464 %zn_ax2 6:4 !function=times_2
@@ -585,6 +588,9 @@ FDOT_nn_sb 11000001 101 ...01 0 .. 100 ...01 10 ... @azz_4x4_o3
588 FMLAL_nn_hb 11000001 101 ....0 0 .. 010 ....1 000 .. @azz_2x2_o2x2
589 FMLAL_nn_hb 11000001 101 ...01 0 .. 010 ...01 000 .. @azz_4x4_o2x2
590
591 +FDOT_nn_hb 11000001 101 ....0 0 .. 100 ....1 00 ... @azz_2x2_o3
592 +FDOT_nn_hb 11000001 101 ...01 0 .. 100 ...01 00 ... @azz_4x4_o3
593 +
594 &az_n n off rv zm
595 @az_2x2_o3 ........ ... ..... . .. ... ..... .. off:3 \
596 &az_n n=2 rv=%mova_rv zm=%zn_ax2
target/arm/tcg/translate-sme.c
+9
@@ -1196,6 +1196,15 @@ static bool do_fdot_fp8(DisasContext *s, arg_azz_n *a, bool multi)
1196 TRANS_FEAT(FDOT_n1_sb, aa64_sme_f8f32, do_fdot_fp8, a, false)
1197 TRANS_FEAT(FDOT_nn_sb, aa64_sme_f8f32, do_fdot_fp8, a, true)
1198
1199 +static bool do_fdot_hb(DisasContext *s, arg_azz_n *a, bool multi)
1200 +{
1201 + return do_azz_acc_fp8(s, a->n, 1, a->rv, a->off, a->zn, a->zm,
1202 + 0, 0, multi, gen_helper_gvec_fdot_hb);
1203 +}
1204 +
1205 +TRANS_FEAT(FDOT_n1_hb, aa64_sme_f8f16, do_fdot_hb, a, false)
1206 +TRANS_FEAT(FDOT_nn_hb, aa64_sme_f8f16, do_fdot_hb, a, true)
1207 +
1208 static bool do_fdot_nx(DisasContext *s, arg_azx_n *a)
1209 {
1210 return do_azz_acc_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm,