static bool VPCMP_Fixup (instr_info *, int, int);
static bool VPCOM_Fixup (instr_info *, int, int);
static bool NOP_Fixup (instr_info *, int, int);
+static bool MONTMUL_Fixup (instr_info *, int, int);
static bool OP_3DNowSuffix (instr_info *, int, int);
static bool CMP_Fixup (instr_info *, int, int);
static bool REP_Fixup (instr_info *, int, int);
PREFIX_0F7D,
PREFIX_0F7E,
PREFIX_0F7F,
+ PREFIX_0FA6_REG_0,
+ PREFIX_0FA6_REG_5,
+ PREFIX_0FA7_REG_6,
PREFIX_0FAE_REG_0_MOD_3,
PREFIX_0FAE_REG_1_MOD_3,
PREFIX_0FAE_REG_2_MOD_3,
},
/* REG_0FA6 */
{
- { "montmul", { { OP_0f07, 0 } }, 0 },
+ { PREFIX_TABLE (PREFIX_0FA6_REG_0) },
{ "xsha1", { { OP_0f07, 0 } }, 0 },
{ "xsha256", { { OP_0f07, 0 } }, 0 },
+ { Bad_Opcode },
+ { Bad_Opcode },
+ { PREFIX_TABLE (PREFIX_0FA6_REG_5) },
},
/* REG_0FA7 */
{
{ "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
{ "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
{ "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
+ { PREFIX_TABLE (PREFIX_0FA7_REG_6) },
},
/* REG_0FAE */
{
{ "movdqa", { EXxS, XM }, PREFIX_OPCODE },
},
+ /* PREFIX_0FA6_REG_0 */
+ {
+ { Bad_Opcode },
+ { "montmul", { { MONTMUL_Fixup, 0 } }, 0},
+ { Bad_Opcode },
+ { "sm2", { Skip_MODRM }, 0 },
+ },
+
+ /* PREFIX_0FA6_REG_5 */
+ {
+ { Bad_Opcode },
+ { "sm3", { Skip_MODRM }, 0 },
+ },
+
+ /* PREFIX_0FA7_REG_6 */
+ {
+ { Bad_Opcode },
+ { "sm4", { Skip_MODRM }, 0 },
+ },
+
/* PREFIX_0FAE_REG_0_MOD_3 */
{
{ Bad_Opcode },
return OP_E (ins, bytemode, sizeflag);
}
+/* montmul instruction need display repz and skip modrm */
+
+static bool
+MONTMUL_Fixup (instr_info *ins, int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
+{
+ if (ins->modrm.mod != 3 || ins->modrm.rm != 0)
+ return BadOp (ins);
+
+ /* The 0xf3 prefix should be displayed as "repz" for montmul. */
+ if (ins->prefixes & PREFIX_REPZ)
+ ins->all_prefixes[ins->last_repz_prefix] = 0xf3;
+
+ /* Skip mod/rm byte. */
+ MODRM_CHECK;
+ ins->codep++;
+ return true;
+}
+
/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
32bit mode and "xchg %rax,%rax" in 64bit mode. */
// Alias for xstore-rng.
xstore, 0xfa7c0, PadLock, NoSuf|RepPrefixOk, {}
+// ZHAOXIN GMI instructions
+sm2, 0xf20fa6c0, GMI, NoSuf, {}
+sm3, 0xf30fa6e8, GMI, NoSuf, {}
+sm4, 0xf30fa7f0, GMI, NoSuf, {}
+
// Multy-precision Add Carry, rdseed instructions.
<adx:pfx, c:66, o:f3>
ad<adx>x, 0x<adx:pfx>66, ADX&APX_F, C|Modrm|CheckOperandSize|No_bSuf|No_wSuf|No_sSuf|DstVVVV|EVexMap4, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 }