target/arm: Convert BFMMLA, SMMLA, UMMLA, USMMLA to decodetree
Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20240625183536.1672454-10-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
1c6ecab431
commit
9676c9d9b5
@ -952,6 +952,10 @@ UDOT_v 0.10 1110 100 ..... 10010 1 ..... ..... @qrrr_s
|
|||||||
USDOT_v 0.00 1110 100 ..... 10011 1 ..... ..... @qrrr_s
|
USDOT_v 0.00 1110 100 ..... 10011 1 ..... ..... @qrrr_s
|
||||||
BFDOT_v 0.10 1110 010 ..... 11111 1 ..... ..... @qrrr_s
|
BFDOT_v 0.10 1110 010 ..... 11111 1 ..... ..... @qrrr_s
|
||||||
BFMLAL_v 0.10 1110 110 ..... 11111 1 ..... ..... @qrrr_h
|
BFMLAL_v 0.10 1110 110 ..... 11111 1 ..... ..... @qrrr_h
|
||||||
|
BFMMLA 0110 1110 010 ..... 11101 1 ..... ..... @rrr_q1e0
|
||||||
|
SMMLA 0100 1110 100 ..... 10100 1 ..... ..... @rrr_q1e0
|
||||||
|
UMMLA 0110 1110 100 ..... 10100 1 ..... ..... @rrr_q1e0
|
||||||
|
USMMLA 0100 1110 100 ..... 10101 1 ..... ..... @rrr_q1e0
|
||||||
|
|
||||||
### Advanced SIMD scalar x indexed element
|
### Advanced SIMD scalar x indexed element
|
||||||
|
|
||||||
|
@ -5605,6 +5605,10 @@ TRANS_FEAT(SDOT_v, aa64_dp, do_dot_vector, a, gen_helper_gvec_sdot_b)
|
|||||||
TRANS_FEAT(UDOT_v, aa64_dp, do_dot_vector, a, gen_helper_gvec_udot_b)
|
TRANS_FEAT(UDOT_v, aa64_dp, do_dot_vector, a, gen_helper_gvec_udot_b)
|
||||||
TRANS_FEAT(USDOT_v, aa64_i8mm, do_dot_vector, a, gen_helper_gvec_usdot_b)
|
TRANS_FEAT(USDOT_v, aa64_i8mm, do_dot_vector, a, gen_helper_gvec_usdot_b)
|
||||||
TRANS_FEAT(BFDOT_v, aa64_bf16, do_dot_vector, a, gen_helper_gvec_bfdot)
|
TRANS_FEAT(BFDOT_v, aa64_bf16, do_dot_vector, a, gen_helper_gvec_bfdot)
|
||||||
|
TRANS_FEAT(BFMMLA, aa64_bf16, do_dot_vector, a, gen_helper_gvec_bfmmla)
|
||||||
|
TRANS_FEAT(SMMLA, aa64_i8mm, do_dot_vector, a, gen_helper_gvec_smmla_b)
|
||||||
|
TRANS_FEAT(UMMLA, aa64_i8mm, do_dot_vector, a, gen_helper_gvec_ummla_b)
|
||||||
|
TRANS_FEAT(USMMLA, aa64_i8mm, do_dot_vector, a, gen_helper_gvec_usmmla_b)
|
||||||
|
|
||||||
static bool trans_BFMLAL_v(DisasContext *s, arg_qrrr_e *a)
|
static bool trans_BFMLAL_v(DisasContext *s, arg_qrrr_e *a)
|
||||||
{
|
{
|
||||||
@ -10949,15 +10953,6 @@ static void disas_simd_three_reg_same_extra(DisasContext *s, uint32_t insn)
|
|||||||
int rot;
|
int rot;
|
||||||
|
|
||||||
switch (u * 16 + opcode) {
|
switch (u * 16 + opcode) {
|
||||||
case 0x04: /* SMMLA */
|
|
||||||
case 0x14: /* UMMLA */
|
|
||||||
case 0x05: /* USMMLA */
|
|
||||||
if (!is_q || size != MO_32) {
|
|
||||||
unallocated_encoding(s);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
feature = dc_isar_feature(aa64_i8mm, s);
|
|
||||||
break;
|
|
||||||
case 0x18: /* FCMLA, #0 */
|
case 0x18: /* FCMLA, #0 */
|
||||||
case 0x19: /* FCMLA, #90 */
|
case 0x19: /* FCMLA, #90 */
|
||||||
case 0x1a: /* FCMLA, #180 */
|
case 0x1a: /* FCMLA, #180 */
|
||||||
@ -10972,19 +10967,16 @@ static void disas_simd_three_reg_same_extra(DisasContext *s, uint32_t insn)
|
|||||||
}
|
}
|
||||||
feature = dc_isar_feature(aa64_fcma, s);
|
feature = dc_isar_feature(aa64_fcma, s);
|
||||||
break;
|
break;
|
||||||
case 0x1d: /* BFMMLA */
|
|
||||||
if (size != MO_16 || !is_q) {
|
|
||||||
unallocated_encoding(s);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
feature = dc_isar_feature(aa64_bf16, s);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
case 0x02: /* SDOT (vector) */
|
case 0x02: /* SDOT (vector) */
|
||||||
case 0x03: /* USDOT */
|
case 0x03: /* USDOT */
|
||||||
|
case 0x04: /* SMMLA */
|
||||||
|
case 0x05: /* USMMLA */
|
||||||
case 0x10: /* SQRDMLAH (vector) */
|
case 0x10: /* SQRDMLAH (vector) */
|
||||||
case 0x11: /* SQRDMLSH (vector) */
|
case 0x11: /* SQRDMLSH (vector) */
|
||||||
case 0x12: /* UDOT (vector) */
|
case 0x12: /* UDOT (vector) */
|
||||||
|
case 0x14: /* UMMLA */
|
||||||
|
case 0x1d: /* BFMMLA */
|
||||||
case 0x1f: /* BFDOT / BFMLAL */
|
case 0x1f: /* BFDOT / BFMLAL */
|
||||||
unallocated_encoding(s);
|
unallocated_encoding(s);
|
||||||
return;
|
return;
|
||||||
@ -10998,15 +10990,6 @@ static void disas_simd_three_reg_same_extra(DisasContext *s, uint32_t insn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (opcode) {
|
switch (opcode) {
|
||||||
case 0x04: /* SMMLA, UMMLA */
|
|
||||||
gen_gvec_op4_ool(s, 1, rd, rn, rm, rd, 0,
|
|
||||||
u ? gen_helper_gvec_ummla_b
|
|
||||||
: gen_helper_gvec_smmla_b);
|
|
||||||
return;
|
|
||||||
case 0x05: /* USMMLA */
|
|
||||||
gen_gvec_op4_ool(s, 1, rd, rn, rm, rd, 0, gen_helper_gvec_usmmla_b);
|
|
||||||
return;
|
|
||||||
|
|
||||||
case 0x8: /* FCMLA, #0 */
|
case 0x8: /* FCMLA, #0 */
|
||||||
case 0x9: /* FCMLA, #90 */
|
case 0x9: /* FCMLA, #90 */
|
||||||
case 0xa: /* FCMLA, #180 */
|
case 0xa: /* FCMLA, #180 */
|
||||||
@ -11051,9 +11034,6 @@ static void disas_simd_three_reg_same_extra(DisasContext *s, uint32_t insn)
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 0xd: /* BFMMLA */
|
|
||||||
gen_gvec_op4_ool(s, is_q, rd, rn, rm, rd, 0, gen_helper_gvec_bfmmla);
|
|
||||||
return;
|
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached();
|
g_assert_not_reached();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user