@samitouri / QOSamiQemu / commits / ec52415a4d

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,