{"sve2p3", AARCH64_FEATURE (SVE2p3), AARCH64_FEATURE (SVE2p2)},
{"sme2p3", AARCH64_FEATURE (SME2p3), AARCH64_FEATURES (2, SME2p2, SME_LUTv2)},
{"f16f32dot", AARCH64_FEATURE (F16F32DOT), AARCH64_FEATURE (SIMD)},
+ {"f16f32mm", AARCH64_FEATURE (F16F32MM), AARCH64_FEATURES (2, SIMD, F16)},
{NULL, AARCH64_NO_FEATURES, AARCH64_NO_FEATURES},
};
}
else
{
- if (((word >> 15) & 0x1) == 0)
+ if (((word >> 14) & 0x1) == 0)
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- 0x001110xx0xxxxx0x1011xxxxxxxxxx. */
- return A64_OPID_0e002c00_smov_Rd_En;
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ 0x001110xx0xxxxx001011xxxxxxxxxx. */
+ return A64_OPID_0e002c00_smov_Rd_En;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ 0x001110xx0xxxxx101011xxxxxxxxxx. */
+ return A64_OPID_4e80ac00_usmmla_Vd_Vn_Vm;
+ }
}
else
{
/* 33222222222211111111110000000000
10987654321098765432109876543210
- 0x001110xx0xxxxx1x1011xxxxxxxxxx. */
- return A64_OPID_4e80ac00_usmmla_Vd_Vn_Vm;
+ 0x001110xx0xxxxxx11011xxxxxxxxxx. */
+ return A64_OPID_4e40ec00_fmmla_Vd_Vn_Vm;
}
}
}
AARCH64_FEATURE (SVE2p3_SME2p3);
static const aarch64_feature_set aarch64_feature_f16f32dot =
AARCH64_FEATURE (F16F32DOT);
+static const aarch64_feature_set aarch64_feature_f16f32mm =
+ AARCH64_FEATURE (F16F32MM);
#define CORE &aarch64_feature_v8
#define FP &aarch64_feature_fp
#define SME2p3 &aarch64_feature_sme2p3
#define SVE2p3_SME2p3 &aarch64_feature_sve2p3_sme2p3
#define F16F32DOT &aarch64_feature_f16f32dot
+#define F16F32MM &aarch64_feature_f16f32mm
#define CORE_INSN(NAME,OPCODE,MASK,CLASS,OP,OPS,QUALS,FLAGS) \
{ NAME, OPCODE, MASK, CLASS, OP, CORE, OPS, QUALS, FLAGS | F_INVALID_IMM_SYMS_1, 0, 0, NULL }
#define F16F32DOT_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \
{ NAME, OPCODE, MASK, CLASS, 0, F16F32DOT, OPS, QUALS, FLAGS, 0, 0, NULL }
+#define F16F32MM_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \
+ { NAME, OPCODE, MASK, CLASS, 0, F16F32MM, OPS, QUALS, FLAGS, 0, 0, NULL }
#define MOPS_CPY_OP1_OP2_PME_INSN(NAME, OPCODE, MASK, FLAGS, CONSTRAINTS) \
MOPS_INSN (NAME, OPCODE, MASK, 0, \
F16F32DOT_INSN ("fdot", 0x0f409000, 0xbfc0f400, dotproduct, OP3 (Vd, Vn, Em16), QL_BFDOT64I, F_SIZEQ),
F16F32DOT_INSN ("fdot", 0x0e80fc00, 0xbfe0fc00, dotproduct, OP3 (Vd, Vn, Vm), QL_BFDOT64, F_SIZEQ),
+ /* F16F32MM instructions. */
+ F16F32MM_INSN ("fmmla", 0x4e40ec00, 0xffe0fc00, asimdmisc, OP3 (Vd, Vn, Vm), QL_BFMMLA, F_SIZEQ),
+
{0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, NULL},
};