{OPT_Reg|OPS_80|OPA_Op1Add, 0, 0} }
};
+/* 486 extensions */
+static const x86_insn_info bswap_insn[] = {
+ { CPU_486, 0, 32, 2, {0x0F, 0xC8, 0}, 0, 1,
+ {OPT_Reg|OPS_32|OPA_Op1Add, 0, 0} }
+};
+static const x86_insn_info cmpxchgxadd_insn[] = {
+ { CPU_486, MOD_Op1Add, 0, 2, {0x0F, 0x00, 0}, 0, 2,
+ {OPT_RM|OPS_8|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_8|OPA_Spare, 0} },
+ { CPU_486, MOD_Op1Add, 16, 2, {0x0F, 0x01, 0}, 0, 2,
+ {OPT_RM|OPS_16|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_16|OPA_Spare, 0} },
+ { CPU_486, MOD_Op1Add, 32, 2, {0x0F, 0x01, 0}, 0, 2,
+ {OPT_RM|OPS_32|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_32|OPA_Spare, 0} }
+};
+
+/* Pentium extensions */
+static const x86_insn_info cmpxchg8b_insn[] = {
+ { CPU_586, 0, 0, 2, {0x0F, 0xC7, 0}, 1, 1,
+ {OPT_Mem|OPS_64|OPS_Relaxed|OPA_EA, 0, 0} }
+};
+
+/* Pentium II/Pentium Pro extensions */
+static const x86_insn_info cmovcc_insn[] = {
+ { CPU_686, MOD_Op1Add, 16, 2, {0x0F, 0x40, 0}, 0, 2,
+ {OPT_Reg|OPS_16|OPA_Spare, OPT_RM|OPS_16|OPS_Relaxed|OPA_EA, 0} },
+ { CPU_686, MOD_Op1Add, 32, 2, {0x0F, 0x40, 0}, 0, 2,
+ {OPT_Reg|OPS_32|OPA_Spare, OPT_RM|OPS_32|OPS_Relaxed|OPA_EA, 0} }
+};
+static const x86_insn_info fcmovcc_insn[] = {
+ { CPU_686|CPU_FPU, MOD_Op0Add|MOD_Op1Add, 0, 2, {0x00, 0x00, 0}, 0, 2,
+ {OPT_ST0|OPS_80|OPA_None, OPT_Reg|OPS_80|OPA_Op1Add, 0} }
+};
+
+/* Pentium4 extensions */
+static const x86_insn_info movnti_insn[] = {
+ { CPU_P4, 0, 0, 2, {0x0F, 0xC3, 0}, 0, 2,
+ {OPT_Mem|OPS_32|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_32|OPA_Spare, 0} }
+};
+static const x86_insn_info clflush_insn[] = {
+ { CPU_P3, 0, 0, 2, {0x0F, 0xAE, 0}, 7, 1,
+ {OPT_Mem|OPS_8|OPS_Relaxed|OPA_EA, 0, 0} }
+};
+
+/* TODO: MMX/SSE2 instructions */
+
+/* TODO: PIII (Katmai) new instructions / SIMD instructiosn */
+
+/* TODO: SSE2 instructions */
+
+/* TODO: AMD 3DNow! instructions */
+
+/* TODO: Cyrix MMX instructions */
+
+/* Cyrix extensions */
+static const x86_insn_info rsdc_insn[] = {
+ { CPU_486|CPU_Cyrix|CPU_SMM, 0, 0, 2, {0x0F, 0x79, 0}, 0, 2,
+ {OPT_SegReg|OPS_16|OPA_Spare, OPT_Mem|OPS_80|OPS_Relaxed|OPA_EA, 0} }
+};
+static const x86_insn_info cyrixsmm_insn[] = {
+ { CPU_486|CPU_Cyrix|CPU_SMM, MOD_Op1Add, 0, 2, {0x0F, 0x00, 0}, 0, 1,
+ {OPT_Mem|OPS_80|OPS_Relaxed|OPA_EA, 0, 0} }
+};
+static const x86_insn_info svdc_insn[] = {
+ { CPU_486|CPU_Cyrix|CPU_SMM, 0, 0, 2, {0x0F, 0x78, 0}, 0, 2,
+ {OPT_Mem|OPS_80|OPS_Relaxed|OPA_EA, OPT_SegReg|OPS_16|OPA_Spare, 0} }
+};
+
+/* Obsolete/undocumented instructions */
+static const x86_insn_info ibts_insn[] = {
+ { CPU_386|CPU_Undoc|CPU_Obs, 0, 16, 2, {0x0F, 0xA7, 0}, 0, 2,
+ {OPT_RM|OPS_16|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_16|OPA_Spare, 0} },
+ { CPU_386|CPU_Undoc|CPU_Obs, 0, 32, 2, {0x0F, 0xA7, 0}, 0, 2,
+ {OPT_RM|OPS_32|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_32|OPA_Spare, 0} }
+};
+static const x86_insn_info umov_insn[] = {
+ { CPU_386|CPU_Undoc, 0, 0, 2, {0x0F, 0x10, 0}, 0, 2,
+ {OPT_RM|OPS_8|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_8|OPA_Spare, 0} },
+ { CPU_386|CPU_Undoc, 0, 16, 2, {0x0F, 0x11, 0}, 0, 2,
+ {OPT_RM|OPS_16|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_16|OPA_Spare, 0} },
+ { CPU_386|CPU_Undoc, 0, 32, 2, {0x0F, 0x11, 0}, 0, 2,
+ {OPT_RM|OPS_32|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_32|OPA_Spare, 0} },
+ { CPU_386|CPU_Undoc, 0, 0, 2, {0x0F, 0x12, 0}, 0, 2,
+ {OPT_Reg|OPS_8|OPA_Spare, OPT_RM|OPS_8|OPS_Relaxed|OPA_EA, 0} },
+ { CPU_386|CPU_Undoc, 0, 16, 2, {0x0F, 0x13, 0}, 0, 2,
+ {OPT_Reg|OPS_16|OPA_Spare, OPT_RM|OPS_16|OPS_Relaxed|OPA_EA, 0} },
+ { CPU_386|CPU_Undoc, 0, 32, 2, {0x0F, 0x13, 0}, 0, 2,
+ {OPT_Reg|OPS_32|OPA_Spare, OPT_RM|OPS_32|OPS_Relaxed|OPA_EA, 0} }
+};
+static const x86_insn_info xbts_insn[] = {
+ { CPU_386|CPU_Undoc|CPU_Obs, 0, 16, 2, {0x0F, 0xA6, 0}, 0, 2,
+ {OPT_Reg|OPS_16|OPA_Spare, OPT_Mem|OPS_16|OPS_Relaxed|OPA_EA, 0} },
+ { CPU_386|CPU_Undoc|CPU_Obs, 0, 32, 2, {0x0F, 0xA6, 0}, 0, 2,
+ {OPT_Reg|OPS_32|OPA_Spare, OPT_Mem|OPS_32|OPS_Relaxed|OPA_EA, 0} }
+};
+
bytecode *
x86_new_insn(const unsigned long data[4], int num_operands,
/* Prefixes (should the others be here too? should wait be a prefix? */
W A I T { RET_INSN(onebyte, 0x009B, CPU_Any); }
/* 486 extensions */
- /* B S W A P */
- /* X A D D */
- /* C M P X C H G */
- /* C M P X C H G 4 8 6 */
+ B S W A P { RET_INSN(bswap, 0, CPU_486); }
+ X A D D { RET_INSN(cmpxchgxadd, 0xC0, CPU_486); }
+ C M P X C H G { RET_INSN(cmpxchgxadd, 0xB0, CPU_486); }
+ C M P X C H G "486" { RET_INSN(cmpxchgxadd, 0xA6, CPU_486|CPU_Undoc); }
I N V D { RET_INSN(twobyte, 0x0F08, CPU_486|CPU_Priv); }
W B I N V D { RET_INSN(twobyte, 0x0F09, CPU_486|CPU_Priv); }
I N V L P G { RET_INSN(twobytemem, 0x070F01, CPU_486|CPU_Priv); }
W R M S R { RET_INSN(twobyte, 0x0F30, CPU_586|CPU_Priv); }
R D T S C { RET_INSN(twobyte, 0x0F31, CPU_586); }
R D M S R { RET_INSN(twobyte, 0x0F32, CPU_586|CPU_Priv); }
- /* C M P X C H G 8 B */
+ C M P X C H G "8" B { RET_INSN(cmpxchg8b, 0, CPU_586); }
/* Pentium II/Pentium Pro extensions */
S Y S E N T E R { RET_INSN(twobyte, 0x0F34, CPU_686); }
S Y S E X I T { RET_INSN(twobyte, 0x0F35, CPU_686|CPU_Priv); }
R D P M C { RET_INSN(twobyte, 0x0F33, CPU_686); }
U D "2" { RET_INSN(twobyte, 0x0F0B, CPU_286); }
U D "1" { RET_INSN(twobyte, 0x0FB9, CPU_286|CPU_Undoc); }
- /* C M O V */
- /* F C M O V */
+ C M O V O { RET_INSN(cmovcc, 0x00, CPU_686); }
+ C M O V N O { RET_INSN(cmovcc, 0x01, CPU_686); }
+ C M O V B { RET_INSN(cmovcc, 0x02, CPU_686); }
+ C M O V C { RET_INSN(cmovcc, 0x02, CPU_686); }
+ C M O V N A E { RET_INSN(cmovcc, 0x02, CPU_686); }
+ C M O V N B { RET_INSN(cmovcc, 0x03, CPU_686); }
+ C M O V N C { RET_INSN(cmovcc, 0x03, CPU_686); }
+ C M O V A E { RET_INSN(cmovcc, 0x03, CPU_686); }
+ C M O V E { RET_INSN(cmovcc, 0x04, CPU_686); }
+ C M O V Z { RET_INSN(cmovcc, 0x04, CPU_686); }
+ C M O V N E { RET_INSN(cmovcc, 0x05, CPU_686); }
+ C M O V N Z { RET_INSN(cmovcc, 0x05, CPU_686); }
+ C M O V B E { RET_INSN(cmovcc, 0x06, CPU_686); }
+ C M O V N A { RET_INSN(cmovcc, 0x06, CPU_686); }
+ C M O V N B E { RET_INSN(cmovcc, 0x07, CPU_686); }
+ C M O V A { RET_INSN(cmovcc, 0x07, CPU_686); }
+ C M O V S { RET_INSN(cmovcc, 0x08, CPU_686); }
+ C M O V N S { RET_INSN(cmovcc, 0x09, CPU_686); }
+ C M O V P { RET_INSN(cmovcc, 0x0A, CPU_686); }
+ C M O V P E { RET_INSN(cmovcc, 0x0A, CPU_686); }
+ C M O V N P { RET_INSN(cmovcc, 0x0B, CPU_686); }
+ C M O V P O { RET_INSN(cmovcc, 0x0B, CPU_686); }
+ C M O V L { RET_INSN(cmovcc, 0x0C, CPU_686); }
+ C M O V N G E { RET_INSN(cmovcc, 0x0C, CPU_686); }
+ C M O V N L { RET_INSN(cmovcc, 0x0D, CPU_686); }
+ C M O V G E { RET_INSN(cmovcc, 0x0D, CPU_686); }
+ C M O V L E { RET_INSN(cmovcc, 0x0E, CPU_686); }
+ C M O V N G { RET_INSN(cmovcc, 0x0E, CPU_686); }
+ C M O V N L E { RET_INSN(cmovcc, 0x0F, CPU_686); }
+ C M O V G { RET_INSN(cmovcc, 0x0F, CPU_686); }
+ F C M O V B { RET_INSN(fcmovcc, 0xDAC0, CPU_686|CPU_FPU); }
+ F C M O V E { RET_INSN(fcmovcc, 0xDAC8, CPU_686|CPU_FPU); }
+ F C M O V B E { RET_INSN(fcmovcc, 0xDAD0, CPU_686|CPU_FPU); }
+ F C M O V U { RET_INSN(fcmovcc, 0xDAD8, CPU_686|CPU_FPU); }
+ F C M O V N B { RET_INSN(fcmovcc, 0xDBC0, CPU_686|CPU_FPU); }
+ F C M O V N E { RET_INSN(fcmovcc, 0xDBC8, CPU_686|CPU_FPU); }
+ F C M O V N B E { RET_INSN(fcmovcc, 0xDBD0, CPU_686|CPU_FPU); }
+ F C M O V U { RET_INSN(fcmovcc, 0xDBD8, CPU_686|CPU_FPU); }
F C O M I { RET_INSN(fcom2, 0xDBF0, CPU_686|CPU_FPU); }
F U C O M I { RET_INSN(fcom2, 0xDBE8, CPU_686|CPU_FPU); }
F C O M I P { RET_INSN(fcom2, 0xDFF0, CPU_686|CPU_FPU); }
F U C O M I P { RET_INSN(fcom2, 0xDFE8, CPU_686|CPU_FPU); }
/* Pentium4 extensions */
- /* M O V N T I */
- /* C L F L U S H */
+ M O V N T I { RET_INSN(movnti, 0, CPU_P4); }
+ C L F L U S H { RET_INSN(clflush, 0, CPU_P3); }
L F E N C E { RET_INSN(threebyte, 0x0FAEE8, CPU_P3); }
M F E N C E { RET_INSN(threebyte, 0x0FAEF0, CPU_P3); }
P A U S E { RET_INSN(twobyte, 0xF390, CPU_P4); }
/* Cyrix MMX instructions */
/* Cyrix extensions */
R D S H R { RET_INSN(twobyte, 0x0F36, CPU_686|CPU_Cyrix|CPU_SMM); }
- /* R S D C */
- /* R S L D T */
- /* R S T S */
- /* S V D C */
- /* S V L D T */
- /* S V T S */
+ R S D C { RET_INSN(rsdc, 0, CPU_486|CPU_Cyrix|CPU_SMM); }
+ R S L D T { RET_INSN(cyrixsmm, 0x7B, CPU_486|CPU_Cyrix|CPU_SMM); }
+ R S T S { RET_INSN(cyrixsmm, 0x7D, CPU_486|CPU_Cyrix|CPU_SMM); }
+ S V D C { RET_INSN(svdc, 0, CPU_486|CPU_Cyrix|CPU_SMM); }
+ S V L D T { RET_INSN(cyrixsmm, 0x7A, CPU_486|CPU_Cyrix|CPU_SMM); }
+ S V T S { RET_INSN(cyrixsmm, 0x7C, CPU_486|CPU_Cyrix|CPU_SMM); }
S M I N T { RET_INSN(twobyte, 0x0F38, CPU_686|CPU_Cyrix); }
S M I N T O L D { RET_INSN(twobyte, 0x0F7E, CPU_486|CPU_Cyrix|CPU_Obs); }
W R S H R { RET_INSN(twobyte, 0x0F37, CPU_686|CPU_Cyrix|CPU_SMM); }
/* Obsolete/undocumented instructions */
F S E T P M { RET_INSN(twobyte, 0xDBE4, CPU_286|CPU_FPU|CPU_Obs); }
- /* I B T S */
+ I B T S { RET_INSN(ibts, 0, CPU_386|CPU_Undoc|CPU_Obs); }
L O A D A L L { RET_INSN(twobyte, 0x0F07, CPU_386|CPU_Undoc); }
L O A D A L L "286" { RET_INSN(twobyte, 0x0F05, CPU_286|CPU_Undoc); }
S A L C { RET_INSN(onebyte, 0x00D6, CPU_Undoc); }
S M I { RET_INSN(onebyte, 0x00F1, CPU_386|CPU_Undoc); }
- /* U M O V */
- /* X B T S */
+ U M O V { RET_INSN(umov, 0, CPU_386|CPU_Undoc); }
+ X B T S { RET_INSN(xbts, 0, CPU_386|CPU_Undoc|CPU_Obs); }
/* catchalls */
{OPT_Reg|OPS_80|OPA_Op1Add, 0, 0} }
};
+/* 486 extensions */
+static const x86_insn_info bswap_insn[] = {
+ { CPU_486, 0, 32, 2, {0x0F, 0xC8, 0}, 0, 1,
+ {OPT_Reg|OPS_32|OPA_Op1Add, 0, 0} }
+};
+static const x86_insn_info cmpxchgxadd_insn[] = {
+ { CPU_486, MOD_Op1Add, 0, 2, {0x0F, 0x00, 0}, 0, 2,
+ {OPT_RM|OPS_8|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_8|OPA_Spare, 0} },
+ { CPU_486, MOD_Op1Add, 16, 2, {0x0F, 0x01, 0}, 0, 2,
+ {OPT_RM|OPS_16|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_16|OPA_Spare, 0} },
+ { CPU_486, MOD_Op1Add, 32, 2, {0x0F, 0x01, 0}, 0, 2,
+ {OPT_RM|OPS_32|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_32|OPA_Spare, 0} }
+};
+
+/* Pentium extensions */
+static const x86_insn_info cmpxchg8b_insn[] = {
+ { CPU_586, 0, 0, 2, {0x0F, 0xC7, 0}, 1, 1,
+ {OPT_Mem|OPS_64|OPS_Relaxed|OPA_EA, 0, 0} }
+};
+
+/* Pentium II/Pentium Pro extensions */
+static const x86_insn_info cmovcc_insn[] = {
+ { CPU_686, MOD_Op1Add, 16, 2, {0x0F, 0x40, 0}, 0, 2,
+ {OPT_Reg|OPS_16|OPA_Spare, OPT_RM|OPS_16|OPS_Relaxed|OPA_EA, 0} },
+ { CPU_686, MOD_Op1Add, 32, 2, {0x0F, 0x40, 0}, 0, 2,
+ {OPT_Reg|OPS_32|OPA_Spare, OPT_RM|OPS_32|OPS_Relaxed|OPA_EA, 0} }
+};
+static const x86_insn_info fcmovcc_insn[] = {
+ { CPU_686|CPU_FPU, MOD_Op0Add|MOD_Op1Add, 0, 2, {0x00, 0x00, 0}, 0, 2,
+ {OPT_ST0|OPS_80|OPA_None, OPT_Reg|OPS_80|OPA_Op1Add, 0} }
+};
+
+/* Pentium4 extensions */
+static const x86_insn_info movnti_insn[] = {
+ { CPU_P4, 0, 0, 2, {0x0F, 0xC3, 0}, 0, 2,
+ {OPT_Mem|OPS_32|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_32|OPA_Spare, 0} }
+};
+static const x86_insn_info clflush_insn[] = {
+ { CPU_P3, 0, 0, 2, {0x0F, 0xAE, 0}, 7, 1,
+ {OPT_Mem|OPS_8|OPS_Relaxed|OPA_EA, 0, 0} }
+};
+
+/* TODO: MMX/SSE2 instructions */
+
+/* TODO: PIII (Katmai) new instructions / SIMD instructiosn */
+
+/* TODO: SSE2 instructions */
+
+/* TODO: AMD 3DNow! instructions */
+
+/* TODO: Cyrix MMX instructions */
+
+/* Cyrix extensions */
+static const x86_insn_info rsdc_insn[] = {
+ { CPU_486|CPU_Cyrix|CPU_SMM, 0, 0, 2, {0x0F, 0x79, 0}, 0, 2,
+ {OPT_SegReg|OPS_16|OPA_Spare, OPT_Mem|OPS_80|OPS_Relaxed|OPA_EA, 0} }
+};
+static const x86_insn_info cyrixsmm_insn[] = {
+ { CPU_486|CPU_Cyrix|CPU_SMM, MOD_Op1Add, 0, 2, {0x0F, 0x00, 0}, 0, 1,
+ {OPT_Mem|OPS_80|OPS_Relaxed|OPA_EA, 0, 0} }
+};
+static const x86_insn_info svdc_insn[] = {
+ { CPU_486|CPU_Cyrix|CPU_SMM, 0, 0, 2, {0x0F, 0x78, 0}, 0, 2,
+ {OPT_Mem|OPS_80|OPS_Relaxed|OPA_EA, OPT_SegReg|OPS_16|OPA_Spare, 0} }
+};
+
+/* Obsolete/undocumented instructions */
+static const x86_insn_info ibts_insn[] = {
+ { CPU_386|CPU_Undoc|CPU_Obs, 0, 16, 2, {0x0F, 0xA7, 0}, 0, 2,
+ {OPT_RM|OPS_16|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_16|OPA_Spare, 0} },
+ { CPU_386|CPU_Undoc|CPU_Obs, 0, 32, 2, {0x0F, 0xA7, 0}, 0, 2,
+ {OPT_RM|OPS_32|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_32|OPA_Spare, 0} }
+};
+static const x86_insn_info umov_insn[] = {
+ { CPU_386|CPU_Undoc, 0, 0, 2, {0x0F, 0x10, 0}, 0, 2,
+ {OPT_RM|OPS_8|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_8|OPA_Spare, 0} },
+ { CPU_386|CPU_Undoc, 0, 16, 2, {0x0F, 0x11, 0}, 0, 2,
+ {OPT_RM|OPS_16|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_16|OPA_Spare, 0} },
+ { CPU_386|CPU_Undoc, 0, 32, 2, {0x0F, 0x11, 0}, 0, 2,
+ {OPT_RM|OPS_32|OPS_Relaxed|OPA_EA, OPT_Reg|OPS_32|OPA_Spare, 0} },
+ { CPU_386|CPU_Undoc, 0, 0, 2, {0x0F, 0x12, 0}, 0, 2,
+ {OPT_Reg|OPS_8|OPA_Spare, OPT_RM|OPS_8|OPS_Relaxed|OPA_EA, 0} },
+ { CPU_386|CPU_Undoc, 0, 16, 2, {0x0F, 0x13, 0}, 0, 2,
+ {OPT_Reg|OPS_16|OPA_Spare, OPT_RM|OPS_16|OPS_Relaxed|OPA_EA, 0} },
+ { CPU_386|CPU_Undoc, 0, 32, 2, {0x0F, 0x13, 0}, 0, 2,
+ {OPT_Reg|OPS_32|OPA_Spare, OPT_RM|OPS_32|OPS_Relaxed|OPA_EA, 0} }
+};
+static const x86_insn_info xbts_insn[] = {
+ { CPU_386|CPU_Undoc|CPU_Obs, 0, 16, 2, {0x0F, 0xA6, 0}, 0, 2,
+ {OPT_Reg|OPS_16|OPA_Spare, OPT_Mem|OPS_16|OPS_Relaxed|OPA_EA, 0} },
+ { CPU_386|CPU_Undoc|CPU_Obs, 0, 32, 2, {0x0F, 0xA6, 0}, 0, 2,
+ {OPT_Reg|OPS_32|OPA_Spare, OPT_Mem|OPS_32|OPS_Relaxed|OPA_EA, 0} }
+};
+
bytecode *
x86_new_insn(const unsigned long data[4], int num_operands,
/* Prefixes (should the others be here too? should wait be a prefix? */
W A I T { RET_INSN(onebyte, 0x009B, CPU_Any); }
/* 486 extensions */
- /* B S W A P */
- /* X A D D */
- /* C M P X C H G */
- /* C M P X C H G 4 8 6 */
+ B S W A P { RET_INSN(bswap, 0, CPU_486); }
+ X A D D { RET_INSN(cmpxchgxadd, 0xC0, CPU_486); }
+ C M P X C H G { RET_INSN(cmpxchgxadd, 0xB0, CPU_486); }
+ C M P X C H G "486" { RET_INSN(cmpxchgxadd, 0xA6, CPU_486|CPU_Undoc); }
I N V D { RET_INSN(twobyte, 0x0F08, CPU_486|CPU_Priv); }
W B I N V D { RET_INSN(twobyte, 0x0F09, CPU_486|CPU_Priv); }
I N V L P G { RET_INSN(twobytemem, 0x070F01, CPU_486|CPU_Priv); }
W R M S R { RET_INSN(twobyte, 0x0F30, CPU_586|CPU_Priv); }
R D T S C { RET_INSN(twobyte, 0x0F31, CPU_586); }
R D M S R { RET_INSN(twobyte, 0x0F32, CPU_586|CPU_Priv); }
- /* C M P X C H G 8 B */
+ C M P X C H G "8" B { RET_INSN(cmpxchg8b, 0, CPU_586); }
/* Pentium II/Pentium Pro extensions */
S Y S E N T E R { RET_INSN(twobyte, 0x0F34, CPU_686); }
S Y S E X I T { RET_INSN(twobyte, 0x0F35, CPU_686|CPU_Priv); }
R D P M C { RET_INSN(twobyte, 0x0F33, CPU_686); }
U D "2" { RET_INSN(twobyte, 0x0F0B, CPU_286); }
U D "1" { RET_INSN(twobyte, 0x0FB9, CPU_286|CPU_Undoc); }
- /* C M O V */
- /* F C M O V */
+ C M O V O { RET_INSN(cmovcc, 0x00, CPU_686); }
+ C M O V N O { RET_INSN(cmovcc, 0x01, CPU_686); }
+ C M O V B { RET_INSN(cmovcc, 0x02, CPU_686); }
+ C M O V C { RET_INSN(cmovcc, 0x02, CPU_686); }
+ C M O V N A E { RET_INSN(cmovcc, 0x02, CPU_686); }
+ C M O V N B { RET_INSN(cmovcc, 0x03, CPU_686); }
+ C M O V N C { RET_INSN(cmovcc, 0x03, CPU_686); }
+ C M O V A E { RET_INSN(cmovcc, 0x03, CPU_686); }
+ C M O V E { RET_INSN(cmovcc, 0x04, CPU_686); }
+ C M O V Z { RET_INSN(cmovcc, 0x04, CPU_686); }
+ C M O V N E { RET_INSN(cmovcc, 0x05, CPU_686); }
+ C M O V N Z { RET_INSN(cmovcc, 0x05, CPU_686); }
+ C M O V B E { RET_INSN(cmovcc, 0x06, CPU_686); }
+ C M O V N A { RET_INSN(cmovcc, 0x06, CPU_686); }
+ C M O V N B E { RET_INSN(cmovcc, 0x07, CPU_686); }
+ C M O V A { RET_INSN(cmovcc, 0x07, CPU_686); }
+ C M O V S { RET_INSN(cmovcc, 0x08, CPU_686); }
+ C M O V N S { RET_INSN(cmovcc, 0x09, CPU_686); }
+ C M O V P { RET_INSN(cmovcc, 0x0A, CPU_686); }
+ C M O V P E { RET_INSN(cmovcc, 0x0A, CPU_686); }
+ C M O V N P { RET_INSN(cmovcc, 0x0B, CPU_686); }
+ C M O V P O { RET_INSN(cmovcc, 0x0B, CPU_686); }
+ C M O V L { RET_INSN(cmovcc, 0x0C, CPU_686); }
+ C M O V N G E { RET_INSN(cmovcc, 0x0C, CPU_686); }
+ C M O V N L { RET_INSN(cmovcc, 0x0D, CPU_686); }
+ C M O V G E { RET_INSN(cmovcc, 0x0D, CPU_686); }
+ C M O V L E { RET_INSN(cmovcc, 0x0E, CPU_686); }
+ C M O V N G { RET_INSN(cmovcc, 0x0E, CPU_686); }
+ C M O V N L E { RET_INSN(cmovcc, 0x0F, CPU_686); }
+ C M O V G { RET_INSN(cmovcc, 0x0F, CPU_686); }
+ F C M O V B { RET_INSN(fcmovcc, 0xDAC0, CPU_686|CPU_FPU); }
+ F C M O V E { RET_INSN(fcmovcc, 0xDAC8, CPU_686|CPU_FPU); }
+ F C M O V B E { RET_INSN(fcmovcc, 0xDAD0, CPU_686|CPU_FPU); }
+ F C M O V U { RET_INSN(fcmovcc, 0xDAD8, CPU_686|CPU_FPU); }
+ F C M O V N B { RET_INSN(fcmovcc, 0xDBC0, CPU_686|CPU_FPU); }
+ F C M O V N E { RET_INSN(fcmovcc, 0xDBC8, CPU_686|CPU_FPU); }
+ F C M O V N B E { RET_INSN(fcmovcc, 0xDBD0, CPU_686|CPU_FPU); }
+ F C M O V U { RET_INSN(fcmovcc, 0xDBD8, CPU_686|CPU_FPU); }
F C O M I { RET_INSN(fcom2, 0xDBF0, CPU_686|CPU_FPU); }
F U C O M I { RET_INSN(fcom2, 0xDBE8, CPU_686|CPU_FPU); }
F C O M I P { RET_INSN(fcom2, 0xDFF0, CPU_686|CPU_FPU); }
F U C O M I P { RET_INSN(fcom2, 0xDFE8, CPU_686|CPU_FPU); }
/* Pentium4 extensions */
- /* M O V N T I */
- /* C L F L U S H */
+ M O V N T I { RET_INSN(movnti, 0, CPU_P4); }
+ C L F L U S H { RET_INSN(clflush, 0, CPU_P3); }
L F E N C E { RET_INSN(threebyte, 0x0FAEE8, CPU_P3); }
M F E N C E { RET_INSN(threebyte, 0x0FAEF0, CPU_P3); }
P A U S E { RET_INSN(twobyte, 0xF390, CPU_P4); }
/* Cyrix MMX instructions */
/* Cyrix extensions */
R D S H R { RET_INSN(twobyte, 0x0F36, CPU_686|CPU_Cyrix|CPU_SMM); }
- /* R S D C */
- /* R S L D T */
- /* R S T S */
- /* S V D C */
- /* S V L D T */
- /* S V T S */
+ R S D C { RET_INSN(rsdc, 0, CPU_486|CPU_Cyrix|CPU_SMM); }
+ R S L D T { RET_INSN(cyrixsmm, 0x7B, CPU_486|CPU_Cyrix|CPU_SMM); }
+ R S T S { RET_INSN(cyrixsmm, 0x7D, CPU_486|CPU_Cyrix|CPU_SMM); }
+ S V D C { RET_INSN(svdc, 0, CPU_486|CPU_Cyrix|CPU_SMM); }
+ S V L D T { RET_INSN(cyrixsmm, 0x7A, CPU_486|CPU_Cyrix|CPU_SMM); }
+ S V T S { RET_INSN(cyrixsmm, 0x7C, CPU_486|CPU_Cyrix|CPU_SMM); }
S M I N T { RET_INSN(twobyte, 0x0F38, CPU_686|CPU_Cyrix); }
S M I N T O L D { RET_INSN(twobyte, 0x0F7E, CPU_486|CPU_Cyrix|CPU_Obs); }
W R S H R { RET_INSN(twobyte, 0x0F37, CPU_686|CPU_Cyrix|CPU_SMM); }
/* Obsolete/undocumented instructions */
F S E T P M { RET_INSN(twobyte, 0xDBE4, CPU_286|CPU_FPU|CPU_Obs); }
- /* I B T S */
+ I B T S { RET_INSN(ibts, 0, CPU_386|CPU_Undoc|CPU_Obs); }
L O A D A L L { RET_INSN(twobyte, 0x0F07, CPU_386|CPU_Undoc); }
L O A D A L L "286" { RET_INSN(twobyte, 0x0F05, CPU_286|CPU_Undoc); }
S A L C { RET_INSN(onebyte, 0x00D6, CPU_Undoc); }
S M I { RET_INSN(onebyte, 0x00F1, CPU_386|CPU_Undoc); }
- /* U M O V */
- /* X B T S */
+ U M O V { RET_INSN(umov, 0, CPU_386|CPU_Undoc); }
+ X B T S { RET_INSN(xbts, 0, CPU_386|CPU_Undoc|CPU_Obs); }
/* catchalls */