}
/* Possible values for prefix requirement. */
-#define PREFIX_MANDATORY_REPZ PREFIX_REPZ
-#define PREFIX_MANDATORY_REPNZ PREFIX_REPNZ
-#define PREFIX_MANDATORY_DATA PREFIX_DATA
-#define PREFIX_MANDATORY_ADDR PREFIX_ADDR
-#define PREFIX_MANDATORY_LOCK PREFIX_LOCK
-#define PREFIX_UD_SHIFT 16
-#define PREFIX_UD_REPZ (PREFIX_MANDATORY_REPZ << PREFIX_UD_SHIFT)
-#define PREFIX_UD_REPNZ (PREFIX_MANDATORY_REPNZ << PREFIX_UD_SHIFT)
-#define PREFIX_UD_DATA (PREFIX_MANDATORY_DATA << PREFIX_UD_SHIFT)
-#define PREFIX_UD_ADDR (PREFIX_MANDATORY_ADDR << PREFIX_UD_SHIFT)
-#define PREFIX_UD_LOCK (PREFIX_MANDATORY_LOCK << PREFIX_UD_SHIFT)
-
-#define PREFIX_MANDATORY (PREFIX_MANDATORY_REPZ \
- | PREFIX_MANDATORY_REPNZ \
- | PREFIX_MANDATORY_DATA)
+#define PREFIX_UD_SHIFT 8
+#define PREFIX_UD_REPZ (PREFIX_REPZ << PREFIX_UD_SHIFT)
+#define PREFIX_UD_REPNZ (PREFIX_REPNZ << PREFIX_UD_SHIFT)
+#define PREFIX_UD_DATA (PREFIX_DATA << PREFIX_UD_SHIFT)
+#define PREFIX_UD_ADDR (PREFIX_ADDR << PREFIX_UD_SHIFT)
+#define PREFIX_UD_LOCK (PREFIX_LOCK << PREFIX_UD_SHIFT)
+#define PREFIX_IGNORED_SHIFT 16
+#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
+#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
+#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
+#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
+#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
+
+/* Opcode prefixes. */
+#define PREFIX_OPCODE (PREFIX_REPZ \
+ | PREFIX_REPNZ \
+ | PREFIX_DATA)
+
+/* Prefixes ignored. */
+#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
+ | PREFIX_IGNORED_REPNZ \
+ | PREFIX_IGNORED_DATA)
#define XX { NULL, 0 }
-#define Bad_Opcode NULL, { { NULL, 0 } }, PREFIX_MANDATORY
+#define Bad_Opcode NULL, { { NULL, 0 } }, 0
#define Eb { OP_E, b_mode }
#define Ebnd { OP_E, bnd_mode }
{ PREFIX_TABLE (PREFIX_0F11) },
{ PREFIX_TABLE (PREFIX_0F12) },
{ MOD_TABLE (MOD_0F13) },
- { "unpcklpX", { XM, EXx }, PREFIX_MANDATORY },
- { "unpckhpX", { XM, EXx }, PREFIX_MANDATORY },
+ { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
+ { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
{ PREFIX_TABLE (PREFIX_0F16) },
{ MOD_TABLE (MOD_0F17) },
/* 18 */
{ MOD_TABLE (MOD_0F26) },
{ Bad_Opcode },
/* 28 */
- { "movapX", { XM, EXx }, PREFIX_MANDATORY },
- { "movapX", { EXxS, XM }, PREFIX_MANDATORY },
+ { "movapX", { XM, EXx }, PREFIX_OPCODE },
+ { "movapX", { EXxS, XM }, PREFIX_OPCODE },
{ PREFIX_TABLE (PREFIX_0F2A) },
{ PREFIX_TABLE (PREFIX_0F2B) },
{ PREFIX_TABLE (PREFIX_0F2C) },
{ Bad_Opcode },
{ "getsec", { XX }, 0 },
/* 38 */
- { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_MANDATORY) },
+ { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
{ Bad_Opcode },
- { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_MANDATORY) },
+ { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
{ PREFIX_TABLE (PREFIX_0F51) },
{ PREFIX_TABLE (PREFIX_0F52) },
{ PREFIX_TABLE (PREFIX_0F53) },
- { "andpX", { XM, EXx }, PREFIX_MANDATORY },
- { "andnpX", { XM, EXx }, PREFIX_MANDATORY },
- { "orpX", { XM, EXx }, PREFIX_MANDATORY },
- { "xorpX", { XM, EXx }, PREFIX_MANDATORY },
+ { "andpX", { XM, EXx }, PREFIX_OPCODE },
+ { "andnpX", { XM, EXx }, PREFIX_OPCODE },
+ { "orpX", { XM, EXx }, PREFIX_OPCODE },
+ { "xorpX", { XM, EXx }, PREFIX_OPCODE },
/* 58 */
{ PREFIX_TABLE (PREFIX_0F58) },
{ PREFIX_TABLE (PREFIX_0F59) },
{ PREFIX_TABLE (PREFIX_0F60) },
{ PREFIX_TABLE (PREFIX_0F61) },
{ PREFIX_TABLE (PREFIX_0F62) },
- { "packsswb", { MX, EM }, PREFIX_MANDATORY },
- { "pcmpgtb", { MX, EM }, PREFIX_MANDATORY },
- { "pcmpgtw", { MX, EM }, PREFIX_MANDATORY },
- { "pcmpgtd", { MX, EM }, PREFIX_MANDATORY },
- { "packuswb", { MX, EM }, PREFIX_MANDATORY },
+ { "packsswb", { MX, EM }, PREFIX_OPCODE },
+ { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
+ { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
+ { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
+ { "packuswb", { MX, EM }, PREFIX_OPCODE },
/* 68 */
- { "punpckhbw", { MX, EM }, PREFIX_MANDATORY },
- { "punpckhwd", { MX, EM }, PREFIX_MANDATORY },
- { "punpckhdq", { MX, EM }, PREFIX_MANDATORY },
- { "packssdw", { MX, EM }, PREFIX_MANDATORY },
+ { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
+ { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
+ { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
+ { "packssdw", { MX, EM }, PREFIX_OPCODE },
{ PREFIX_TABLE (PREFIX_0F6C) },
{ PREFIX_TABLE (PREFIX_0F6D) },
- { "movK", { MX, Edq }, PREFIX_MANDATORY },
+ { "movK", { MX, Edq }, PREFIX_OPCODE },
{ PREFIX_TABLE (PREFIX_0F6F) },
/* 70 */
{ PREFIX_TABLE (PREFIX_0F70) },
{ REG_TABLE (REG_0F71) },
{ REG_TABLE (REG_0F72) },
{ REG_TABLE (REG_0F73) },
- { "pcmpeqb", { MX, EM }, PREFIX_MANDATORY },
- { "pcmpeqw", { MX, EM }, PREFIX_MANDATORY },
- { "pcmpeqd", { MX, EM }, PREFIX_MANDATORY },
- { "emms", { XX }, PREFIX_MANDATORY },
+ { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
+ { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
+ { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
+ { "emms", { XX }, PREFIX_OPCODE },
/* 78 */
{ PREFIX_TABLE (PREFIX_0F78) },
{ PREFIX_TABLE (PREFIX_0F79) },
{ "xaddS", { Evh1, Gv }, 0 },
{ PREFIX_TABLE (PREFIX_0FC2) },
{ PREFIX_TABLE (PREFIX_0FC3) },
- { "pinsrw", { MX, Edqw, Ib }, PREFIX_MANDATORY },
- { "pextrw", { Gdq, MS, Ib }, PREFIX_MANDATORY },
- { "shufpX", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
+ { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
+ { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
{ REG_TABLE (REG_0FC7) },
/* c8 */
{ "bswap", { RMeAX }, 0 },
{ "bswap", { RMeDI }, 0 },
/* d0 */
{ PREFIX_TABLE (PREFIX_0FD0) },
- { "psrlw", { MX, EM }, PREFIX_MANDATORY },
- { "psrld", { MX, EM }, PREFIX_MANDATORY },
- { "psrlq", { MX, EM }, PREFIX_MANDATORY },
- { "paddq", { MX, EM }, PREFIX_MANDATORY },
- { "pmullw", { MX, EM }, PREFIX_MANDATORY },
+ { "psrlw", { MX, EM }, PREFIX_OPCODE },
+ { "psrld", { MX, EM }, PREFIX_OPCODE },
+ { "psrlq", { MX, EM }, PREFIX_OPCODE },
+ { "paddq", { MX, EM }, PREFIX_OPCODE },
+ { "pmullw", { MX, EM }, PREFIX_OPCODE },
{ PREFIX_TABLE (PREFIX_0FD6) },
{ MOD_TABLE (MOD_0FD7) },
/* d8 */
- { "psubusb", { MX, EM }, PREFIX_MANDATORY },
- { "psubusw", { MX, EM }, PREFIX_MANDATORY },
- { "pminub", { MX, EM }, PREFIX_MANDATORY },
- { "pand", { MX, EM }, PREFIX_MANDATORY },
- { "paddusb", { MX, EM }, PREFIX_MANDATORY },
- { "paddusw", { MX, EM }, PREFIX_MANDATORY },
- { "pmaxub", { MX, EM }, PREFIX_MANDATORY },
- { "pandn", { MX, EM }, PREFIX_MANDATORY },
+ { "psubusb", { MX, EM }, PREFIX_OPCODE },
+ { "psubusw", { MX, EM }, PREFIX_OPCODE },
+ { "pminub", { MX, EM }, PREFIX_OPCODE },
+ { "pand", { MX, EM }, PREFIX_OPCODE },
+ { "paddusb", { MX, EM }, PREFIX_OPCODE },
+ { "paddusw", { MX, EM }, PREFIX_OPCODE },
+ { "pmaxub", { MX, EM }, PREFIX_OPCODE },
+ { "pandn", { MX, EM }, PREFIX_OPCODE },
/* e0 */
- { "pavgb", { MX, EM }, PREFIX_MANDATORY },
- { "psraw", { MX, EM }, PREFIX_MANDATORY },
- { "psrad", { MX, EM }, PREFIX_MANDATORY },
- { "pavgw", { MX, EM }, PREFIX_MANDATORY },
- { "pmulhuw", { MX, EM }, PREFIX_MANDATORY },
- { "pmulhw", { MX, EM }, PREFIX_MANDATORY },
+ { "pavgb", { MX, EM }, PREFIX_OPCODE },
+ { "psraw", { MX, EM }, PREFIX_OPCODE },
+ { "psrad", { MX, EM }, PREFIX_OPCODE },
+ { "pavgw", { MX, EM }, PREFIX_OPCODE },
+ { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
+ { "pmulhw", { MX, EM }, PREFIX_OPCODE },
{ PREFIX_TABLE (PREFIX_0FE6) },
{ PREFIX_TABLE (PREFIX_0FE7) },
/* e8 */
- { "psubsb", { MX, EM }, PREFIX_MANDATORY },
- { "psubsw", { MX, EM }, PREFIX_MANDATORY },
- { "pminsw", { MX, EM }, PREFIX_MANDATORY },
- { "por", { MX, EM }, PREFIX_MANDATORY },
- { "paddsb", { MX, EM }, PREFIX_MANDATORY },
- { "paddsw", { MX, EM }, PREFIX_MANDATORY },
- { "pmaxsw", { MX, EM }, PREFIX_MANDATORY },
- { "pxor", { MX, EM }, PREFIX_MANDATORY },
+ { "psubsb", { MX, EM }, PREFIX_OPCODE },
+ { "psubsw", { MX, EM }, PREFIX_OPCODE },
+ { "pminsw", { MX, EM }, PREFIX_OPCODE },
+ { "por", { MX, EM }, PREFIX_OPCODE },
+ { "paddsb", { MX, EM }, PREFIX_OPCODE },
+ { "paddsw", { MX, EM }, PREFIX_OPCODE },
+ { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
+ { "pxor", { MX, EM }, PREFIX_OPCODE },
/* f0 */
{ PREFIX_TABLE (PREFIX_0FF0) },
- { "psllw", { MX, EM }, PREFIX_MANDATORY },
- { "pslld", { MX, EM }, PREFIX_MANDATORY },
- { "psllq", { MX, EM }, PREFIX_MANDATORY },
- { "pmuludq", { MX, EM }, PREFIX_MANDATORY },
- { "pmaddwd", { MX, EM }, PREFIX_MANDATORY },
- { "psadbw", { MX, EM }, PREFIX_MANDATORY },
+ { "psllw", { MX, EM }, PREFIX_OPCODE },
+ { "pslld", { MX, EM }, PREFIX_OPCODE },
+ { "psllq", { MX, EM }, PREFIX_OPCODE },
+ { "pmuludq", { MX, EM }, PREFIX_OPCODE },
+ { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
+ { "psadbw", { MX, EM }, PREFIX_OPCODE },
{ PREFIX_TABLE (PREFIX_0FF7) },
/* f8 */
- { "psubb", { MX, EM }, PREFIX_MANDATORY },
- { "psubw", { MX, EM }, PREFIX_MANDATORY },
- { "psubd", { MX, EM }, PREFIX_MANDATORY },
- { "psubq", { MX, EM }, PREFIX_MANDATORY },
- { "paddb", { MX, EM }, PREFIX_MANDATORY },
- { "paddw", { MX, EM }, PREFIX_MANDATORY },
- { "paddd", { MX, EM }, PREFIX_MANDATORY },
+ { "psubb", { MX, EM }, PREFIX_OPCODE },
+ { "psubw", { MX, EM }, PREFIX_OPCODE },
+ { "psubd", { MX, EM }, PREFIX_OPCODE },
+ { "psubq", { MX, EM }, PREFIX_OPCODE },
+ { "paddb", { MX, EM }, PREFIX_OPCODE },
+ { "paddw", { MX, EM }, PREFIX_OPCODE },
+ { "paddd", { MX, EM }, PREFIX_OPCODE },
{ Bad_Opcode },
};
static int last_seg_prefix;
static int fwait_prefix;
/* The PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is mandatory. */
-static int mandatory_prefix;
+static int prefix_requirement;
/* The active segment register prefix. */
static int active_seg_prefix;
#define MAX_CODE_LENGTH 15
{ "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
{ "pause", { XX }, 0 },
{ "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
+ { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
},
/* PREFIX_0F10 */
{
- { "movups", { XM, EXx }, PREFIX_MANDATORY },
- { "movss", { XM, EXd }, PREFIX_MANDATORY },
- { "movupd", { XM, EXx }, PREFIX_MANDATORY },
- { "movsd", { XM, EXq }, PREFIX_MANDATORY },
+ { "movups", { XM, EXx }, PREFIX_OPCODE },
+ { "movss", { XM, EXd }, PREFIX_OPCODE },
+ { "movupd", { XM, EXx }, PREFIX_OPCODE },
+ { "movsd", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F11 */
{
- { "movups", { EXxS, XM }, PREFIX_MANDATORY },
- { "movss", { EXdS, XM }, PREFIX_MANDATORY },
- { "movupd", { EXxS, XM }, PREFIX_MANDATORY },
- { "movsd", { EXqS, XM }, PREFIX_MANDATORY },
+ { "movups", { EXxS, XM }, PREFIX_OPCODE },
+ { "movss", { EXdS, XM }, PREFIX_OPCODE },
+ { "movupd", { EXxS, XM }, PREFIX_OPCODE },
+ { "movsd", { EXqS, XM }, PREFIX_OPCODE },
},
/* PREFIX_0F12 */
{
{ MOD_TABLE (MOD_0F12_PREFIX_0) },
- { "movsldup", { XM, EXx }, PREFIX_MANDATORY },
- { "movlpd", { XM, EXq }, PREFIX_MANDATORY },
- { "movddup", { XM, EXq }, PREFIX_MANDATORY },
+ { "movsldup", { XM, EXx }, PREFIX_OPCODE },
+ { "movlpd", { XM, EXq }, PREFIX_OPCODE },
+ { "movddup", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F16 */
{
{ MOD_TABLE (MOD_0F16_PREFIX_0) },
- { "movshdup", { XM, EXx }, PREFIX_MANDATORY },
- { "movhpd", { XM, EXq }, PREFIX_MANDATORY },
+ { "movshdup", { XM, EXx }, PREFIX_OPCODE },
+ { "movhpd", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F1A */
/* PREFIX_0F2A */
{
- { "cvtpi2ps", { XM, EMCq }, PREFIX_MANDATORY },
- { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_MANDATORY },
- { "cvtpi2pd", { XM, EMCq }, PREFIX_MANDATORY },
+ { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
+ { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
+ { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
{ "cvtsi2sd%LQ", { XM, Ev }, 0 },
},
/* PREFIX_0F2C */
{
- { "cvttps2pi", { MXC, EXq }, PREFIX_MANDATORY },
- { "cvttss2siY", { Gv, EXd }, PREFIX_MANDATORY },
- { "cvttpd2pi", { MXC, EXx }, PREFIX_MANDATORY },
- { "cvttsd2siY", { Gv, EXq }, PREFIX_MANDATORY },
+ { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
+ { "cvttss2siY", { Gv, EXd }, PREFIX_OPCODE },
+ { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
+ { "cvttsd2siY", { Gv, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F2D */
{
- { "cvtps2pi", { MXC, EXq }, PREFIX_MANDATORY },
- { "cvtss2siY", { Gv, EXd }, PREFIX_MANDATORY },
- { "cvtpd2pi", { MXC, EXx }, PREFIX_MANDATORY },
- { "cvtsd2siY", { Gv, EXq }, PREFIX_MANDATORY },
+ { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
+ { "cvtss2siY", { Gv, EXd }, PREFIX_OPCODE },
+ { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
+ { "cvtsd2siY", { Gv, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F2E */
/* PREFIX_0F51 */
{
- { "sqrtps", { XM, EXx }, PREFIX_MANDATORY },
- { "sqrtss", { XM, EXd }, PREFIX_MANDATORY },
- { "sqrtpd", { XM, EXx }, PREFIX_MANDATORY },
- { "sqrtsd", { XM, EXq }, PREFIX_MANDATORY },
+ { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
+ { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
+ { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
+ { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F52 */
{
- { "rsqrtps",{ XM, EXx }, PREFIX_MANDATORY },
- { "rsqrtss",{ XM, EXd }, PREFIX_MANDATORY },
+ { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
+ { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
},
/* PREFIX_0F53 */
{
- { "rcpps", { XM, EXx }, PREFIX_MANDATORY },
- { "rcpss", { XM, EXd }, PREFIX_MANDATORY },
+ { "rcpps", { XM, EXx }, PREFIX_OPCODE },
+ { "rcpss", { XM, EXd }, PREFIX_OPCODE },
},
/* PREFIX_0F58 */
{
- { "addps", { XM, EXx }, PREFIX_MANDATORY },
- { "addss", { XM, EXd }, PREFIX_MANDATORY },
- { "addpd", { XM, EXx }, PREFIX_MANDATORY },
- { "addsd", { XM, EXq }, PREFIX_MANDATORY },
+ { "addps", { XM, EXx }, PREFIX_OPCODE },
+ { "addss", { XM, EXd }, PREFIX_OPCODE },
+ { "addpd", { XM, EXx }, PREFIX_OPCODE },
+ { "addsd", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F59 */
{
- { "mulps", { XM, EXx }, PREFIX_MANDATORY },
- { "mulss", { XM, EXd }, PREFIX_MANDATORY },
- { "mulpd", { XM, EXx }, PREFIX_MANDATORY },
- { "mulsd", { XM, EXq }, PREFIX_MANDATORY },
+ { "mulps", { XM, EXx }, PREFIX_OPCODE },
+ { "mulss", { XM, EXd }, PREFIX_OPCODE },
+ { "mulpd", { XM, EXx }, PREFIX_OPCODE },
+ { "mulsd", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F5A */
{
- { "cvtps2pd", { XM, EXq }, PREFIX_MANDATORY },
- { "cvtss2sd", { XM, EXd }, PREFIX_MANDATORY },
- { "cvtpd2ps", { XM, EXx }, PREFIX_MANDATORY },
- { "cvtsd2ss", { XM, EXq }, PREFIX_MANDATORY },
+ { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
+ { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
+ { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
+ { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F5B */
{
- { "cvtdq2ps", { XM, EXx }, PREFIX_MANDATORY },
- { "cvttps2dq", { XM, EXx }, PREFIX_MANDATORY },
- { "cvtps2dq", { XM, EXx }, PREFIX_MANDATORY },
+ { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
+ { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
+ { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F5C */
{
- { "subps", { XM, EXx }, PREFIX_MANDATORY },
- { "subss", { XM, EXd }, PREFIX_MANDATORY },
- { "subpd", { XM, EXx }, PREFIX_MANDATORY },
- { "subsd", { XM, EXq }, PREFIX_MANDATORY },
+ { "subps", { XM, EXx }, PREFIX_OPCODE },
+ { "subss", { XM, EXd }, PREFIX_OPCODE },
+ { "subpd", { XM, EXx }, PREFIX_OPCODE },
+ { "subsd", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F5D */
{
- { "minps", { XM, EXx }, PREFIX_MANDATORY },
- { "minss", { XM, EXd }, PREFIX_MANDATORY },
- { "minpd", { XM, EXx }, PREFIX_MANDATORY },
- { "minsd", { XM, EXq }, PREFIX_MANDATORY },
+ { "minps", { XM, EXx }, PREFIX_OPCODE },
+ { "minss", { XM, EXd }, PREFIX_OPCODE },
+ { "minpd", { XM, EXx }, PREFIX_OPCODE },
+ { "minsd", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F5E */
{
- { "divps", { XM, EXx }, PREFIX_MANDATORY },
- { "divss", { XM, EXd }, PREFIX_MANDATORY },
- { "divpd", { XM, EXx }, PREFIX_MANDATORY },
- { "divsd", { XM, EXq }, PREFIX_MANDATORY },
+ { "divps", { XM, EXx }, PREFIX_OPCODE },
+ { "divss", { XM, EXd }, PREFIX_OPCODE },
+ { "divpd", { XM, EXx }, PREFIX_OPCODE },
+ { "divsd", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F5F */
{
- { "maxps", { XM, EXx }, PREFIX_MANDATORY },
- { "maxss", { XM, EXd }, PREFIX_MANDATORY },
- { "maxpd", { XM, EXx }, PREFIX_MANDATORY },
- { "maxsd", { XM, EXq }, PREFIX_MANDATORY },
+ { "maxps", { XM, EXx }, PREFIX_OPCODE },
+ { "maxss", { XM, EXd }, PREFIX_OPCODE },
+ { "maxpd", { XM, EXx }, PREFIX_OPCODE },
+ { "maxsd", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F60 */
{
- { "punpcklbw",{ MX, EMd }, PREFIX_MANDATORY },
+ { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
{ Bad_Opcode },
- { "punpcklbw",{ MX, EMx }, PREFIX_MANDATORY },
+ { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
},
/* PREFIX_0F61 */
{
- { "punpcklwd",{ MX, EMd }, PREFIX_MANDATORY },
+ { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
{ Bad_Opcode },
- { "punpcklwd",{ MX, EMx }, PREFIX_MANDATORY },
+ { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
},
/* PREFIX_0F62 */
{
- { "punpckldq",{ MX, EMd }, PREFIX_MANDATORY },
+ { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
{ Bad_Opcode },
- { "punpckldq",{ MX, EMx }, PREFIX_MANDATORY },
+ { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
},
/* PREFIX_0F6C */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "punpcklqdq", { XM, EXx }, PREFIX_MANDATORY },
+ { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F6D */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "punpckhqdq", { XM, EXx }, PREFIX_MANDATORY },
+ { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F6F */
{
- { "movq", { MX, EM }, PREFIX_MANDATORY },
- { "movdqu", { XM, EXx }, PREFIX_MANDATORY },
- { "movdqa", { XM, EXx }, PREFIX_MANDATORY },
+ { "movq", { MX, EM }, PREFIX_OPCODE },
+ { "movdqu", { XM, EXx }, PREFIX_OPCODE },
+ { "movdqa", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F70 */
{
- { "pshufw", { MX, EM, Ib }, PREFIX_MANDATORY },
- { "pshufhw",{ XM, EXx, Ib }, PREFIX_MANDATORY },
- { "pshufd", { XM, EXx, Ib }, PREFIX_MANDATORY },
- { "pshuflw",{ XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
+ { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
+ { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
+ { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F73_REG_3 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "haddpd", { XM, EXx }, PREFIX_MANDATORY },
- { "haddps", { XM, EXx }, PREFIX_MANDATORY },
+ { "haddpd", { XM, EXx }, PREFIX_OPCODE },
+ { "haddps", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F7D */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "hsubpd", { XM, EXx }, PREFIX_MANDATORY },
- { "hsubps", { XM, EXx }, PREFIX_MANDATORY },
+ { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
+ { "hsubps", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F7E */
{
- { "movK", { Edq, MX }, PREFIX_MANDATORY },
- { "movq", { XM, EXq }, PREFIX_MANDATORY },
- { "movK", { Edq, XM }, PREFIX_MANDATORY },
+ { "movK", { Edq, MX }, PREFIX_OPCODE },
+ { "movq", { XM, EXq }, PREFIX_OPCODE },
+ { "movK", { Edq, XM }, PREFIX_OPCODE },
},
/* PREFIX_0F7F */
{
- { "movq", { EMS, MX }, PREFIX_MANDATORY },
- { "movdqu", { EXxS, XM }, PREFIX_MANDATORY },
- { "movdqa", { EXxS, XM }, PREFIX_MANDATORY },
+ { "movq", { EMS, MX }, PREFIX_OPCODE },
+ { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
+ { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
},
/* PREFIX_0FAE_REG_0 */
/* PREFIX_0FC2 */
{
- { "cmpps", { XM, EXx, CMP }, PREFIX_MANDATORY },
- { "cmpss", { XM, EXd, CMP }, PREFIX_MANDATORY },
- { "cmppd", { XM, EXx, CMP }, PREFIX_MANDATORY },
- { "cmpsd", { XM, EXq, CMP }, PREFIX_MANDATORY },
+ { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
+ { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
+ { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
+ { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
},
/* PREFIX_0FC3 */
{
- { "movntiS", { Ma, Gv }, PREFIX_MANDATORY },
+ { "movntiS", { Ma, Gv }, PREFIX_OPCODE },
},
/* PREFIX_0FC7_REG_6 */
/* PREFIX_0FE6 */
{
{ Bad_Opcode },
- { "cvtdq2pd", { XM, EXq }, PREFIX_MANDATORY },
- { "cvttpd2dq", { XM, EXx }, PREFIX_MANDATORY },
- { "cvtpd2dq", { XM, EXx }, PREFIX_MANDATORY },
+ { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
+ { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
+ { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0FE7 */
{
- { "movntq", { Mq, MX }, PREFIX_MANDATORY },
+ { "movntq", { Mq, MX }, PREFIX_OPCODE },
{ Bad_Opcode },
{ MOD_TABLE (MOD_0FE7_PREFIX_2) },
},
/* PREFIX_0FF7 */
{
- { "maskmovq", { MX, MS }, PREFIX_MANDATORY },
+ { "maskmovq", { MX, MS }, PREFIX_OPCODE },
{ Bad_Opcode },
- { "maskmovdqu", { XM, XS }, PREFIX_MANDATORY },
+ { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
},
/* PREFIX_0F3810 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pblendvb", { XM, EXx, XMM0 }, PREFIX_MANDATORY },
+ { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
},
/* PREFIX_0F3814 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "blendvps", { XM, EXx, XMM0 }, PREFIX_MANDATORY },
+ { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
},
/* PREFIX_0F3815 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "blendvpd", { XM, EXx, XMM0 }, PREFIX_MANDATORY },
+ { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
},
/* PREFIX_0F3817 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "ptest", { XM, EXx }, PREFIX_MANDATORY },
+ { "ptest", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F3820 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmovsxbw", { XM, EXq }, PREFIX_MANDATORY },
+ { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F3821 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmovsxbd", { XM, EXd }, PREFIX_MANDATORY },
+ { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
},
/* PREFIX_0F3822 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmovsxbq", { XM, EXw }, PREFIX_MANDATORY },
+ { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
},
/* PREFIX_0F3823 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmovsxwd", { XM, EXq }, PREFIX_MANDATORY },
+ { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F3824 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmovsxwq", { XM, EXd }, PREFIX_MANDATORY },
+ { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
},
/* PREFIX_0F3825 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmovsxdq", { XM, EXq }, PREFIX_MANDATORY },
+ { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F3828 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmuldq", { XM, EXx }, PREFIX_MANDATORY },
+ { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F3829 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pcmpeqq", { XM, EXx }, PREFIX_MANDATORY },
+ { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F382A */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "packusdw", { XM, EXx }, PREFIX_MANDATORY },
+ { "packusdw", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F3830 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmovzxbw", { XM, EXq }, PREFIX_MANDATORY },
+ { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F3831 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmovzxbd", { XM, EXd }, PREFIX_MANDATORY },
+ { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
},
/* PREFIX_0F3832 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmovzxbq", { XM, EXw }, PREFIX_MANDATORY },
+ { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
},
/* PREFIX_0F3833 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmovzxwd", { XM, EXq }, PREFIX_MANDATORY },
+ { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F3834 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmovzxwq", { XM, EXd }, PREFIX_MANDATORY },
+ { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
},
/* PREFIX_0F3835 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmovzxdq", { XM, EXq }, PREFIX_MANDATORY },
+ { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
},
/* PREFIX_0F3837 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pcmpgtq", { XM, EXx }, PREFIX_MANDATORY },
+ { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F3838 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pminsb", { XM, EXx }, PREFIX_MANDATORY },
+ { "pminsb", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F3839 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pminsd", { XM, EXx }, PREFIX_MANDATORY },
+ { "pminsd", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F383A */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pminuw", { XM, EXx }, PREFIX_MANDATORY },
+ { "pminuw", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F383B */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pminud", { XM, EXx }, PREFIX_MANDATORY },
+ { "pminud", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F383C */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmaxsb", { XM, EXx }, PREFIX_MANDATORY },
+ { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F383D */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmaxsd", { XM, EXx }, PREFIX_MANDATORY },
+ { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F383E */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmaxuw", { XM, EXx }, PREFIX_MANDATORY },
+ { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F383F */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmaxud", { XM, EXx }, PREFIX_MANDATORY },
+ { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F3840 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pmulld", { XM, EXx }, PREFIX_MANDATORY },
+ { "pmulld", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F3841 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "phminposuw", { XM, EXx }, PREFIX_MANDATORY },
+ { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F3880 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "invept", { Gm, Mo }, PREFIX_MANDATORY },
+ { "invept", { Gm, Mo }, PREFIX_OPCODE },
},
/* PREFIX_0F3881 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "invvpid", { Gm, Mo }, PREFIX_MANDATORY },
+ { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
},
/* PREFIX_0F3882 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "invpcid", { Gm, M }, PREFIX_MANDATORY },
+ { "invpcid", { Gm, M }, PREFIX_OPCODE },
},
/* PREFIX_0F38C8 */
{
- { "sha1nexte", { XM, EXxmm }, PREFIX_MANDATORY },
+ { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
},
/* PREFIX_0F38C9 */
{
- { "sha1msg1", { XM, EXxmm }, PREFIX_MANDATORY },
+ { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
},
/* PREFIX_0F38CA */
{
- { "sha1msg2", { XM, EXxmm }, PREFIX_MANDATORY },
+ { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
},
/* PREFIX_0F38CB */
{
- { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_MANDATORY },
+ { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
},
/* PREFIX_0F38CC */
{
- { "sha256msg1", { XM, EXxmm }, PREFIX_MANDATORY },
+ { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
},
/* PREFIX_0F38CD */
{
- { "sha256msg2", { XM, EXxmm }, PREFIX_MANDATORY },
+ { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
},
/* PREFIX_0F38DB */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "aesimc", { XM, EXx }, PREFIX_MANDATORY },
+ { "aesimc", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F38DC */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "aesenc", { XM, EXx }, PREFIX_MANDATORY },
+ { "aesenc", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F38DD */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "aesenclast", { XM, EXx }, PREFIX_MANDATORY },
+ { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F38DE */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "aesdec", { XM, EXx }, PREFIX_MANDATORY },
+ { "aesdec", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F38DF */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "aesdeclast", { XM, EXx }, PREFIX_MANDATORY },
+ { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
},
/* PREFIX_0F38F0 */
{
- { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_MANDATORY },
+ { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
{ Bad_Opcode },
- { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_MANDATORY },
- { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_MANDATORY },
+ { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
+ { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
},
/* PREFIX_0F38F1 */
{
- { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_MANDATORY },
+ { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
{ Bad_Opcode },
- { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_MANDATORY },
- { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_MANDATORY },
+ { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
+ { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
},
/* PREFIX_0F38F6 */
{
{ Bad_Opcode },
- { "adoxS", { Gdq, Edq}, PREFIX_MANDATORY },
- { "adcxS", { Gdq, Edq}, PREFIX_MANDATORY },
+ { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
+ { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
{ Bad_Opcode },
},
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "roundps", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A09 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "roundpd", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A0A */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "roundss", { XM, EXd, Ib }, PREFIX_MANDATORY },
+ { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A0B */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "roundsd", { XM, EXq, Ib }, PREFIX_MANDATORY },
+ { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A0C */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "blendps", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A0D */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "blendpd", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A0E */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pblendw", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A14 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pextrb", { Edqb, XM, Ib }, PREFIX_MANDATORY },
+ { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A15 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pextrw", { Edqw, XM, Ib }, PREFIX_MANDATORY },
+ { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A16 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pextrK", { Edq, XM, Ib }, PREFIX_MANDATORY },
+ { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A17 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "extractps", { Edqd, XM, Ib }, PREFIX_MANDATORY },
+ { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A20 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pinsrb", { XM, Edqb, Ib }, PREFIX_MANDATORY },
+ { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A21 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "insertps", { XM, EXd, Ib }, PREFIX_MANDATORY },
+ { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A22 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pinsrK", { XM, Edq, Ib }, PREFIX_MANDATORY },
+ { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A40 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "dpps", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A41 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "dppd", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A42 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "mpsadbw", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A44 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_MANDATORY },
+ { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
},
/* PREFIX_0F3A60 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pcmpestrm", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "pcmpestrm", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A61 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pcmpestri", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "pcmpestri", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A62 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pcmpistrm", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3A63 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "pcmpistri", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3ACC */
{
- { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_MANDATORY },
+ { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
},
/* PREFIX_0F3ADF */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_MANDATORY },
+ { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
},
/* PREFIX_VEX_0F10 */
/* THREE_BYTE_0F38 */
{
/* 00 */
- { "pshufb", { MX, EM }, PREFIX_MANDATORY },
- { "phaddw", { MX, EM }, PREFIX_MANDATORY },
- { "phaddd", { MX, EM }, PREFIX_MANDATORY },
- { "phaddsw", { MX, EM }, PREFIX_MANDATORY },
- { "pmaddubsw", { MX, EM }, PREFIX_MANDATORY },
- { "phsubw", { MX, EM }, PREFIX_MANDATORY },
- { "phsubd", { MX, EM }, PREFIX_MANDATORY },
- { "phsubsw", { MX, EM }, PREFIX_MANDATORY },
+ { "pshufb", { MX, EM }, PREFIX_OPCODE },
+ { "phaddw", { MX, EM }, PREFIX_OPCODE },
+ { "phaddd", { MX, EM }, PREFIX_OPCODE },
+ { "phaddsw", { MX, EM }, PREFIX_OPCODE },
+ { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
+ { "phsubw", { MX, EM }, PREFIX_OPCODE },
+ { "phsubd", { MX, EM }, PREFIX_OPCODE },
+ { "phsubsw", { MX, EM }, PREFIX_OPCODE },
/* 08 */
- { "psignb", { MX, EM }, PREFIX_MANDATORY },
- { "psignw", { MX, EM }, PREFIX_MANDATORY },
- { "psignd", { MX, EM }, PREFIX_MANDATORY },
- { "pmulhrsw", { MX, EM }, PREFIX_MANDATORY },
+ { "psignb", { MX, EM }, PREFIX_OPCODE },
+ { "psignw", { MX, EM }, PREFIX_OPCODE },
+ { "psignd", { MX, EM }, PREFIX_OPCODE },
+ { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
- { "pabsb", { MX, EM }, PREFIX_MANDATORY },
- { "pabsw", { MX, EM }, PREFIX_MANDATORY },
- { "pabsd", { MX, EM }, PREFIX_MANDATORY },
+ { "pabsb", { MX, EM }, PREFIX_OPCODE },
+ { "pabsw", { MX, EM }, PREFIX_OPCODE },
+ { "pabsd", { MX, EM }, PREFIX_OPCODE },
{ Bad_Opcode },
/* 20 */
{ PREFIX_TABLE (PREFIX_0F3820) },
{ PREFIX_TABLE (PREFIX_0F3A0C) },
{ PREFIX_TABLE (PREFIX_0F3A0D) },
{ PREFIX_TABLE (PREFIX_0F3A0E) },
- { "palignr", { MX, EM, Ib }, PREFIX_MANDATORY },
+ { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
/* 10 */
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
/* 20 */
- { "ptest", { XX }, PREFIX_MANDATORY },
+ { "ptest", { XX }, PREFIX_OPCODE },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
/* 40 */
{ Bad_Opcode },
- { "phaddbw", { XM, EXq }, PREFIX_MANDATORY },
- { "phaddbd", { XM, EXq }, PREFIX_MANDATORY },
- { "phaddbq", { XM, EXq }, PREFIX_MANDATORY },
+ { "phaddbw", { XM, EXq }, PREFIX_OPCODE },
+ { "phaddbd", { XM, EXq }, PREFIX_OPCODE },
+ { "phaddbq", { XM, EXq }, PREFIX_OPCODE },
{ Bad_Opcode },
{ Bad_Opcode },
- { "phaddwd", { XM, EXq }, PREFIX_MANDATORY },
- { "phaddwq", { XM, EXq }, PREFIX_MANDATORY },
+ { "phaddwd", { XM, EXq }, PREFIX_OPCODE },
+ { "phaddwq", { XM, EXq }, PREFIX_OPCODE },
/* 48 */
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
- { "phadddq", { XM, EXq }, PREFIX_MANDATORY },
+ { "phadddq", { XM, EXq }, PREFIX_OPCODE },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
/* 50 */
{ Bad_Opcode },
- { "phaddubw", { XM, EXq }, PREFIX_MANDATORY },
- { "phaddubd", { XM, EXq }, PREFIX_MANDATORY },
- { "phaddubq", { XM, EXq }, PREFIX_MANDATORY },
+ { "phaddubw", { XM, EXq }, PREFIX_OPCODE },
+ { "phaddubd", { XM, EXq }, PREFIX_OPCODE },
+ { "phaddubq", { XM, EXq }, PREFIX_OPCODE },
{ Bad_Opcode },
{ Bad_Opcode },
- { "phadduwd", { XM, EXq }, PREFIX_MANDATORY },
- { "phadduwq", { XM, EXq }, PREFIX_MANDATORY },
+ { "phadduwd", { XM, EXq }, PREFIX_OPCODE },
+ { "phadduwq", { XM, EXq }, PREFIX_OPCODE },
/* 58 */
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
- { "phaddudq", { XM, EXq }, PREFIX_MANDATORY },
+ { "phaddudq", { XM, EXq }, PREFIX_OPCODE },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
/* 60 */
{ Bad_Opcode },
- { "phsubbw", { XM, EXq }, PREFIX_MANDATORY },
- { "phsubbd", { XM, EXq }, PREFIX_MANDATORY },
- { "phsubbq", { XM, EXq }, PREFIX_MANDATORY },
+ { "phsubbw", { XM, EXq }, PREFIX_OPCODE },
+ { "phsubbd", { XM, EXq }, PREFIX_OPCODE },
+ { "phsubbq", { XM, EXq }, PREFIX_OPCODE },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
},
{
/* MOD_0F12_PREFIX_0 */
- { "movlps", { XM, EXq }, PREFIX_MANDATORY },
- { "movhlps", { XM, EXq }, PREFIX_MANDATORY },
+ { "movlps", { XM, EXq }, PREFIX_OPCODE },
+ { "movhlps", { XM, EXq }, PREFIX_OPCODE },
},
{
/* MOD_0F13 */
- { "movlpX", { EXq, XM }, PREFIX_MANDATORY },
+ { "movlpX", { EXq, XM }, PREFIX_OPCODE },
},
{
/* MOD_0F16_PREFIX_0 */
},
{
/* MOD_0F17 */
- { "movhpX", { EXq, XM }, PREFIX_MANDATORY },
+ { "movhpX", { EXq, XM }, PREFIX_OPCODE },
},
{
/* MOD_0F18_REG_0 */
},
{
/* MOD_0F2B_PREFIX_0 */
- {"movntps", { Mx, XM }, PREFIX_MANDATORY },
+ {"movntps", { Mx, XM }, PREFIX_OPCODE },
},
{
/* MOD_0F2B_PREFIX_1 */
- {"movntss", { Md, XM }, PREFIX_MANDATORY },
+ {"movntss", { Md, XM }, PREFIX_OPCODE },
},
{
/* MOD_0F2B_PREFIX_2 */
- {"movntpd", { Mx, XM }, PREFIX_MANDATORY },
+ {"movntpd", { Mx, XM }, PREFIX_OPCODE },
},
{
/* MOD_0F2B_PREFIX_3 */
- {"movntsd", { Mq, XM }, PREFIX_MANDATORY },
+ {"movntsd", { Mq, XM }, PREFIX_OPCODE },
},
{
/* MOD_0F51 */
{ Bad_Opcode },
- { "movmskpX", { Gdq, XS }, PREFIX_MANDATORY },
+ { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
},
{
/* MOD_0F71_REG_2 */
last_prefix = last_repnz_prefix;
}
- /* Ignore the invalid index if it isn't mandatory. */
- if (!mandatory_prefix
- && (prefix_table[dp->op[1].bytemode][vindex].name
- == NULL)
- && (prefix_table[dp->op[1].bytemode][vindex].op[0].bytemode
- == 0))
+ /* Check if prefix should be ignored. */
+ if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
+ & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
+ & prefix) != 0)
vindex = 0;
}
threebyte = *++codep;
dp = &dis386_twobyte[threebyte];
need_modrm = twobyte_has_modrm[*codep];
- mandatory_prefix = dp->prefix_requirement;
+ prefix_requirement = dp->prefix_requirement;
codep++;
}
else
{
dp = &dis386[*codep];
need_modrm = onebyte_has_modrm[*codep];
- mandatory_prefix = 0;
+ prefix_requirement = 0;
codep++;
}
used by putop and MMX/SSE operand and may be overriden by the
PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
separately. */
- /* TODO we should check which prefix is mandatory. */
- if (mandatory_prefix
+ if (prefix_requirement == PREFIX_OPCODE
&& dp != &bad_opcode
&& (((prefixes
& (PREFIX_REPZ | PREFIX_REPNZ)) != 0