summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/i386/i386ops.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/i386/i386ops.h')
-rw-r--r--src/emu/cpu/i386/i386ops.h369
1 files changed, 369 insertions, 0 deletions
diff --git a/src/emu/cpu/i386/i386ops.h b/src/emu/cpu/i386/i386ops.h
new file mode 100644
index 00000000000..797d89f6b72
--- /dev/null
+++ b/src/emu/cpu/i386/i386ops.h
@@ -0,0 +1,369 @@
+typedef struct {
+ UINT8 opcode;
+ UINT32 flags;
+ void (*handler16)(void);
+ void (*handler32)(void);
+} X86_OPCODE;
+
+#define OP_I386 0x1
+#define OP_FPU 0x2
+#define OP_I486 0x4
+#define OP_PENTIUM 0x8
+#define OP_MMX 0x10
+#define OP_PPRO 0x20
+#define OP_SSE 0x40
+#define OP_SSE2 0x80
+#define OP_SSE3 0x100
+#define OP_CYRIX 0x8000
+#define OP_2BYTE 0x80000000
+
+static const X86_OPCODE x86_opcode_table[] =
+{
+// Opcode Flags 16-bit handler 32-bit handler
+ { 0x00, OP_I386, I386OP(add_rm8_r8), I386OP(add_rm8_r8), },
+ { 0x01, OP_I386, I386OP(add_rm16_r16), I386OP(add_rm32_r32), },
+ { 0x02, OP_I386, I386OP(add_r8_rm8), I386OP(add_r8_rm8), },
+ { 0x03, OP_I386, I386OP(add_r16_rm16), I386OP(add_r32_rm32), },
+ { 0x04, OP_I386, I386OP(add_al_i8), I386OP(add_al_i8), },
+ { 0x05, OP_I386, I386OP(add_ax_i16), I386OP(add_eax_i32), },
+ { 0x06, OP_I386, I386OP(push_es16), I386OP(push_es32), },
+ { 0x07, OP_I386, I386OP(pop_es16), I386OP(pop_es32), },
+ { 0x08, OP_I386, I386OP(or_rm8_r8), I386OP(or_rm8_r8), },
+ { 0x09, OP_I386, I386OP(or_rm16_r16), I386OP(or_rm32_r32), },
+ { 0x0A, OP_I386, I386OP(or_r8_rm8), I386OP(or_r8_rm8), },
+ { 0x0B, OP_I386, I386OP(or_r16_rm16), I386OP(or_r32_rm32), },
+ { 0x0C, OP_I386, I386OP(or_al_i8), I386OP(or_al_i8), },
+ { 0x0D, OP_I386, I386OP(or_ax_i16), I386OP(or_eax_i32), },
+ { 0x0E, OP_I386, I386OP(push_cs16), I386OP(push_cs32), },
+ { 0x0F, OP_I386, I386OP(decode_two_byte), I386OP(decode_two_byte), },
+ { 0x10, OP_I386, I386OP(adc_rm8_r8), I386OP(adc_rm8_r8), },
+ { 0x11, OP_I386, I386OP(adc_rm16_r16), I386OP(adc_rm32_r32), },
+ { 0x12, OP_I386, I386OP(adc_r8_rm8), I386OP(adc_r8_rm8), },
+ { 0x13, OP_I386, I386OP(adc_r16_rm16), I386OP(adc_r32_rm32), },
+ { 0x14, OP_I386, I386OP(adc_al_i8), I386OP(adc_al_i8), },
+ { 0x15, OP_I386, I386OP(adc_ax_i16), I386OP(adc_eax_i32), },
+ { 0x16, OP_I386, I386OP(push_ss16), I386OP(push_ss32), },
+ { 0x17, OP_I386, I386OP(pop_ss16), I386OP(pop_ss32), },
+ { 0x18, OP_I386, I386OP(sbb_rm8_r8), I386OP(sbb_rm8_r8), },
+ { 0x19, OP_I386, I386OP(sbb_rm16_r16), I386OP(sbb_rm32_r32), },
+ { 0x1A, OP_I386, I386OP(sbb_r8_rm8), I386OP(sbb_r8_rm8), },
+ { 0x1B, OP_I386, I386OP(sbb_r16_rm16), I386OP(sbb_r32_rm32), },
+ { 0x1C, OP_I386, I386OP(sbb_al_i8), I386OP(sbb_al_i8), },
+ { 0x1D, OP_I386, I386OP(sbb_ax_i16), I386OP(sbb_eax_i32), },
+ { 0x1E, OP_I386, I386OP(push_ds16), I386OP(push_ds32), },
+ { 0x1F, OP_I386, I386OP(pop_ds16), I386OP(pop_ds32), },
+ { 0x20, OP_I386, I386OP(and_rm8_r8), I386OP(and_rm8_r8), },
+ { 0x21, OP_I386, I386OP(and_rm16_r16), I386OP(and_rm32_r32), },
+ { 0x22, OP_I386, I386OP(and_r8_rm8), I386OP(and_r8_rm8), },
+ { 0x23, OP_I386, I386OP(and_r16_rm16), I386OP(and_r32_rm32), },
+ { 0x24, OP_I386, I386OP(and_al_i8), I386OP(and_al_i8), },
+ { 0x25, OP_I386, I386OP(and_ax_i16), I386OP(and_eax_i32), },
+ { 0x26, OP_I386, I386OP(segment_ES), I386OP(segment_ES), },
+ { 0x27, OP_I386, I386OP(daa), I386OP(daa), },
+ { 0x28, OP_I386, I386OP(sub_rm8_r8), I386OP(sub_rm8_r8), },
+ { 0x29, OP_I386, I386OP(sub_rm16_r16), I386OP(sub_rm32_r32), },
+ { 0x2A, OP_I386, I386OP(sub_r8_rm8), I386OP(sub_r8_rm8), },
+ { 0x2B, OP_I386, I386OP(sub_r16_rm16), I386OP(sub_r32_rm32), },
+ { 0x2C, OP_I386, I386OP(sub_al_i8), I386OP(sub_al_i8), },
+ { 0x2D, OP_I386, I386OP(sub_ax_i16), I386OP(sub_eax_i32), },
+ { 0x2E, OP_I386, I386OP(segment_CS), I386OP(segment_CS), },
+ { 0x2F, OP_I386, I386OP(das), I386OP(das), },
+ { 0x30, OP_I386, I386OP(xor_rm8_r8), I386OP(xor_rm8_r8), },
+ { 0x31, OP_I386, I386OP(xor_rm16_r16), I386OP(xor_rm32_r32), },
+ { 0x32, OP_I386, I386OP(xor_r8_rm8), I386OP(xor_r8_rm8), },
+ { 0x33, OP_I386, I386OP(xor_r16_rm16), I386OP(xor_r32_rm32), },
+ { 0x34, OP_I386, I386OP(xor_al_i8), I386OP(xor_al_i8), },
+ { 0x35, OP_I386, I386OP(xor_ax_i16), I386OP(xor_eax_i32), },
+ { 0x36, OP_I386, I386OP(segment_SS), I386OP(segment_SS), },
+ { 0x37, OP_I386, I386OP(aaa), I386OP(aaa), },
+ { 0x38, OP_I386, I386OP(cmp_rm8_r8), I386OP(cmp_rm8_r8), },
+ { 0x39, OP_I386, I386OP(cmp_rm16_r16), I386OP(cmp_rm32_r32), },
+ { 0x3A, OP_I386, I386OP(cmp_r8_rm8), I386OP(cmp_r8_rm8), },
+ { 0x3B, OP_I386, I386OP(cmp_r16_rm16), I386OP(cmp_r32_rm32), },
+ { 0x3C, OP_I386, I386OP(cmp_al_i8), I386OP(cmp_al_i8), },
+ { 0x3D, OP_I386, I386OP(cmp_ax_i16), I386OP(cmp_eax_i32), },
+ { 0x3E, OP_I386, I386OP(segment_DS), I386OP(segment_DS), },
+ { 0x3F, OP_I386, I386OP(aas), I386OP(aas), },
+ { 0x40, OP_I386, I386OP(inc_ax), I386OP(inc_eax), },
+ { 0x41, OP_I386, I386OP(inc_cx), I386OP(inc_ecx), },
+ { 0x42, OP_I386, I386OP(inc_dx), I386OP(inc_edx), },
+ { 0x43, OP_I386, I386OP(inc_bx), I386OP(inc_ebx), },
+ { 0x44, OP_I386, I386OP(inc_sp), I386OP(inc_esp), },
+ { 0x45, OP_I386, I386OP(inc_bp), I386OP(inc_ebp), },
+ { 0x46, OP_I386, I386OP(inc_si), I386OP(inc_esi), },
+ { 0x47, OP_I386, I386OP(inc_di), I386OP(inc_edi), },
+ { 0x48, OP_I386, I386OP(dec_ax), I386OP(dec_eax), },
+ { 0x49, OP_I386, I386OP(dec_cx), I386OP(dec_ecx), },
+ { 0x4A, OP_I386, I386OP(dec_dx), I386OP(dec_edx), },
+ { 0x4B, OP_I386, I386OP(dec_bx), I386OP(dec_ebx), },
+ { 0x4C, OP_I386, I386OP(dec_sp), I386OP(dec_esp), },
+ { 0x4D, OP_I386, I386OP(dec_bp), I386OP(dec_ebp), },
+ { 0x4E, OP_I386, I386OP(dec_si), I386OP(dec_esi), },
+ { 0x4F, OP_I386, I386OP(dec_di), I386OP(dec_edi), },
+ { 0x50, OP_I386, I386OP(push_ax), I386OP(push_eax), },
+ { 0x51, OP_I386, I386OP(push_cx), I386OP(push_ecx), },
+ { 0x52, OP_I386, I386OP(push_dx), I386OP(push_edx), },
+ { 0x53, OP_I386, I386OP(push_bx), I386OP(push_ebx), },
+ { 0x54, OP_I386, I386OP(push_sp), I386OP(push_esp), },
+ { 0x55, OP_I386, I386OP(push_bp), I386OP(push_ebp), },
+ { 0x56, OP_I386, I386OP(push_si), I386OP(push_esi), },
+ { 0x57, OP_I386, I386OP(push_di), I386OP(push_edi), },
+ { 0x58, OP_I386, I386OP(pop_ax), I386OP(pop_eax), },
+ { 0x59, OP_I386, I386OP(pop_cx), I386OP(pop_ecx), },
+ { 0x5A, OP_I386, I386OP(pop_dx), I386OP(pop_edx), },
+ { 0x5B, OP_I386, I386OP(pop_bx), I386OP(pop_ebx), },
+ { 0x5C, OP_I386, I386OP(pop_sp), I386OP(pop_esp), },
+ { 0x5D, OP_I386, I386OP(pop_bp), I386OP(pop_ebp), },
+ { 0x5E, OP_I386, I386OP(pop_si), I386OP(pop_esi), },
+ { 0x5F, OP_I386, I386OP(pop_di), I386OP(pop_edi), },
+ { 0x60, OP_I386, I386OP(pusha), I386OP(pushad), },
+ { 0x61, OP_I386, I386OP(popa), I386OP(popad), },
+ { 0x62, OP_I386, I386OP(bound_r16_m16_m16), I386OP(bound_r32_m32_m32), },
+ { 0x63, OP_I386, I386OP(unimplemented), I386OP(unimplemented), },
+ { 0x64, OP_I386, I386OP(segment_FS), I386OP(segment_FS), },
+ { 0x65, OP_I386, I386OP(segment_GS), I386OP(segment_GS), },
+ { 0x66, OP_I386, I386OP(operand_size), I386OP(operand_size), },
+ { 0x67, OP_I386, I386OP(address_size), I386OP(address_size), },
+ { 0x68, OP_I386, I386OP(push_i16), I386OP(push_i32), },
+ { 0x69, OP_I386, I386OP(imul_r16_rm16_i16), I386OP(imul_r32_rm32_i32), },
+ { 0x6A, OP_I386, I386OP(push_i8), I386OP(push_i8), },
+ { 0x6B, OP_I386, I386OP(imul_r16_rm16_i8), I386OP(imul_r32_rm32_i8), },
+ { 0x6C, OP_I386, I386OP(insb), I386OP(insb), },
+ { 0x6D, OP_I386, I386OP(insw), I386OP(insd), },
+ { 0x6E, OP_I386, I386OP(outsb), I386OP(outsb), },
+ { 0x6F, OP_I386, I386OP(outsw), I386OP(outsd), },
+ { 0x70, OP_I386, I386OP(jo_rel8), I386OP(jo_rel8), },
+ { 0x71, OP_I386, I386OP(jno_rel8), I386OP(jno_rel8), },
+ { 0x72, OP_I386, I386OP(jc_rel8), I386OP(jc_rel8), },
+ { 0x73, OP_I386, I386OP(jnc_rel8), I386OP(jnc_rel8), },
+ { 0x74, OP_I386, I386OP(jz_rel8), I386OP(jz_rel8), },
+ { 0x75, OP_I386, I386OP(jnz_rel8), I386OP(jnz_rel8), },
+ { 0x76, OP_I386, I386OP(jbe_rel8), I386OP(jbe_rel8), },
+ { 0x77, OP_I386, I386OP(ja_rel8), I386OP(ja_rel8), },
+ { 0x78, OP_I386, I386OP(js_rel8), I386OP(js_rel8), },
+ { 0x79, OP_I386, I386OP(jns_rel8), I386OP(jns_rel8), },
+ { 0x7A, OP_I386, I386OP(jp_rel8), I386OP(jp_rel8), },
+ { 0x7B, OP_I386, I386OP(jnp_rel8), I386OP(jnp_rel8), },
+ { 0x7C, OP_I386, I386OP(jl_rel8), I386OP(jl_rel8), },
+ { 0x7D, OP_I386, I386OP(jge_rel8), I386OP(jge_rel8), },
+ { 0x7E, OP_I386, I386OP(jle_rel8), I386OP(jle_rel8), },
+ { 0x7F, OP_I386, I386OP(jg_rel8), I386OP(jg_rel8), },
+ { 0x80, OP_I386, I386OP(group80_8), I386OP(group80_8), },
+ { 0x81, OP_I386, I386OP(group81_16), I386OP(group81_32), },
+ { 0x82, OP_I386, I386OP(group80_8), I386OP(group80_8), },
+ { 0x83, OP_I386, I386OP(group83_16), I386OP(group83_32), },
+ { 0x84, OP_I386, I386OP(test_rm8_r8), I386OP(test_rm8_r8), },
+ { 0x85, OP_I386, I386OP(test_rm16_r16), I386OP(test_rm32_r32), },
+ { 0x86, OP_I386, I386OP(xchg_r8_rm8), I386OP(xchg_r8_rm8), },
+ { 0x87, OP_I386, I386OP(xchg_r16_rm16), I386OP(xchg_r32_rm32), },
+ { 0x88, OP_I386, I386OP(mov_rm8_r8), I386OP(mov_rm8_r8), },
+ { 0x89, OP_I386, I386OP(mov_rm16_r16), I386OP(mov_rm32_r32), },
+ { 0x8A, OP_I386, I386OP(mov_r8_rm8), I386OP(mov_r8_rm8), },
+ { 0x8B, OP_I386, I386OP(mov_r16_rm16), I386OP(mov_r32_rm32), },
+ { 0x8C, OP_I386, I386OP(mov_rm16_sreg), I386OP(mov_rm16_sreg), },
+ { 0x8D, OP_I386, I386OP(lea16), I386OP(lea32), },
+ { 0x8E, OP_I386, I386OP(mov_sreg_rm16), I386OP(mov_sreg_rm16), },
+ { 0x8F, OP_I386, I386OP(pop_rm16), I386OP(pop_rm32), },
+ { 0x90, OP_I386, I386OP(nop), I386OP(nop), },
+ { 0x91, OP_I386, I386OP(xchg_ax_cx), I386OP(xchg_eax_ecx), },
+ { 0x92, OP_I386, I386OP(xchg_ax_dx), I386OP(xchg_eax_edx), },
+ { 0x93, OP_I386, I386OP(xchg_ax_bx), I386OP(xchg_eax_ebx), },
+ { 0x94, OP_I386, I386OP(xchg_ax_sp), I386OP(xchg_eax_esp), },
+ { 0x95, OP_I386, I386OP(xchg_ax_bp), I386OP(xchg_eax_ebp), },
+ { 0x96, OP_I386, I386OP(xchg_ax_si), I386OP(xchg_eax_esi), },
+ { 0x97, OP_I386, I386OP(xchg_ax_di), I386OP(xchg_eax_edi), },
+ { 0x98, OP_I386, I386OP(cbw), I386OP(cwde), },
+ { 0x99, OP_I386, I386OP(cwd), I386OP(cdq), },
+ { 0x9A, OP_I386, I386OP(call_abs16), I386OP(call_abs32), },
+ { 0x9B, OP_I386, I386OP(wait), I386OP(wait), },
+ { 0x9C, OP_I386, I386OP(pushf), I386OP(pushfd), },
+ { 0x9D, OP_I386, I386OP(popf), I386OP(popfd), },
+ { 0x9E, OP_I386, I386OP(sahf), I386OP(sahf), },
+ { 0x9F, OP_I386, I386OP(lahf), I386OP(lahf), },
+ { 0xA0, OP_I386, I386OP(mov_al_m8), I386OP(mov_al_m8), },
+ { 0xA1, OP_I386, I386OP(mov_ax_m16), I386OP(mov_eax_m32), },
+ { 0xA2, OP_I386, I386OP(mov_m8_al), I386OP(mov_m8_al), },
+ { 0xA3, OP_I386, I386OP(mov_m16_ax), I386OP(mov_m32_eax), },
+ { 0xA4, OP_I386, I386OP(movsb), I386OP(movsb), },
+ { 0xA5, OP_I386, I386OP(movsw), I386OP(movsd), },
+ { 0xA6, OP_I386, I386OP(cmpsb), I386OP(cmpsb), },
+ { 0xA7, OP_I386, I386OP(cmpsw), I386OP(cmpsd), },
+ { 0xA8, OP_I386, I386OP(test_al_i8), I386OP(test_al_i8), },
+ { 0xA9, OP_I386, I386OP(test_ax_i16), I386OP(test_eax_i32), },
+ { 0xAA, OP_I386, I386OP(stosb), I386OP(stosb), },
+ { 0xAB, OP_I386, I386OP(stosw), I386OP(stosd), },
+ { 0xAC, OP_I386, I386OP(lodsb), I386OP(lodsb), },
+ { 0xAD, OP_I386, I386OP(lodsw), I386OP(lodsd), },
+ { 0xAE, OP_I386, I386OP(scasb), I386OP(scasb), },
+ { 0xAF, OP_I386, I386OP(scasw), I386OP(scasd), },
+ { 0xB0, OP_I386, I386OP(mov_al_i8), I386OP(mov_al_i8), },
+ { 0xB1, OP_I386, I386OP(mov_cl_i8), I386OP(mov_cl_i8), },
+ { 0xB2, OP_I386, I386OP(mov_dl_i8), I386OP(mov_dl_i8), },
+ { 0xB3, OP_I386, I386OP(mov_bl_i8), I386OP(mov_bl_i8), },
+ { 0xB4, OP_I386, I386OP(mov_ah_i8), I386OP(mov_ah_i8), },
+ { 0xB5, OP_I386, I386OP(mov_ch_i8), I386OP(mov_ch_i8), },
+ { 0xB6, OP_I386, I386OP(mov_dh_i8), I386OP(mov_dh_i8), },
+ { 0xB7, OP_I386, I386OP(mov_bh_i8), I386OP(mov_bh_i8), },
+ { 0xB8, OP_I386, I386OP(mov_ax_i16), I386OP(mov_eax_i32), },
+ { 0xB9, OP_I386, I386OP(mov_cx_i16), I386OP(mov_ecx_i32), },
+ { 0xBA, OP_I386, I386OP(mov_dx_i16), I386OP(mov_edx_i32), },
+ { 0xBB, OP_I386, I386OP(mov_bx_i16), I386OP(mov_ebx_i32), },
+ { 0xBC, OP_I386, I386OP(mov_sp_i16), I386OP(mov_esp_i32), },
+ { 0xBD, OP_I386, I386OP(mov_bp_i16), I386OP(mov_ebp_i32), },
+ { 0xBE, OP_I386, I386OP(mov_si_i16), I386OP(mov_esi_i32), },
+ { 0xBF, OP_I386, I386OP(mov_di_i16), I386OP(mov_edi_i32), },
+ { 0xC0, OP_I386, I386OP(groupC0_8), I386OP(groupC0_8), },
+ { 0xC1, OP_I386, I386OP(groupC1_16), I386OP(groupC1_32), },
+ { 0xC2, OP_I386, I386OP(ret_near16_i16), I386OP(ret_near32_i16), },
+ { 0xC3, OP_I386, I386OP(ret_near16), I386OP(ret_near32), },
+ { 0xC4, OP_I386, I386OP(les16), I386OP(les32), },
+ { 0xC5, OP_I386, I386OP(lds16), I386OP(lds32), },
+ { 0xC6, OP_I386, I386OP(mov_rm8_i8), I386OP(mov_rm8_i8), },
+ { 0xC7, OP_I386, I386OP(mov_rm16_i16), I386OP(mov_rm32_i32), },
+ { 0xC8, OP_I386, I386OP(unimplemented), I386OP(unimplemented), },
+ { 0xC9, OP_I386, I386OP(leave16), I386OP(leave32), },
+ { 0xCA, OP_I386, I386OP(retf_i16), I386OP(retf_i32), },
+ { 0xCB, OP_I386, I386OP(retf16), I386OP(retf32), },
+ { 0xCC, OP_I386, I386OP(int3), I386OP(int3), },
+ { 0xCD, OP_I386, I386OP(int), I386OP(int), },
+ { 0xCE, OP_I386, I386OP(into), I386OP(into), },
+ { 0xCF, OP_I386, I386OP(iret16), I386OP(iret32), },
+ { 0xD0, OP_I386, I386OP(groupD0_8), I386OP(groupD0_8), },
+ { 0xD1, OP_I386, I386OP(groupD1_16), I386OP(groupD1_32), },
+ { 0xD2, OP_I386, I386OP(groupD2_8), I386OP(groupD2_8), },
+ { 0xD3, OP_I386, I386OP(groupD3_16), I386OP(groupD3_32), },
+ { 0xD4, OP_I386, I386OP(aam), I386OP(aam), },
+ { 0xD5, OP_I386, I386OP(aad), I386OP(aad), },
+ { 0xD6, OP_I386, I386OP(setalc), I386OP(setalc), },
+ { 0xD7, OP_I386, I386OP(xlat16), I386OP(xlat32), },
+ { 0xD8, OP_I386, I386OP(escape), I386OP(escape), },
+ { 0xD9, OP_I386, I386OP(escape), I386OP(escape), },
+ { 0xDA, OP_I386, I386OP(escape), I386OP(escape), },
+ { 0xDB, OP_I386, I386OP(escape), I386OP(escape), },
+ { 0xDC, OP_I386, I386OP(escape), I386OP(escape), },
+ { 0xDD, OP_I386, I386OP(escape), I386OP(escape), },
+ { 0xDE, OP_I386, I386OP(escape), I386OP(escape), },
+ { 0xDF, OP_I386, I386OP(escape), I386OP(escape), },
+ { 0xD8, OP_FPU, I386OP(fpu_group_d8), I386OP(fpu_group_d8), },
+ { 0xD9, OP_FPU, I386OP(fpu_group_d9), I386OP(fpu_group_d9), },
+ { 0xDA, OP_FPU, I386OP(fpu_group_da), I386OP(fpu_group_da), },
+ { 0xDB, OP_FPU, I386OP(fpu_group_db), I386OP(fpu_group_db), },
+ { 0xDC, OP_FPU, I386OP(fpu_group_dc), I386OP(fpu_group_dc), },
+ { 0xDD, OP_FPU, I386OP(fpu_group_dd), I386OP(fpu_group_dd), },
+ { 0xDE, OP_FPU, I386OP(fpu_group_de), I386OP(fpu_group_de), },
+ { 0xDF, OP_FPU, I386OP(fpu_group_df), I386OP(fpu_group_df), },
+ { 0xE0, OP_I386, I386OP(loopne16), I386OP(loopne32), },
+ { 0xE1, OP_I386, I386OP(loopz16), I386OP(loopz32), },
+ { 0xE2, OP_I386, I386OP(loop16), I386OP(loop32), },
+ { 0xE3, OP_I386, I386OP(jcxz16), I386OP(jcxz32), },
+ { 0xE4, OP_I386, I386OP(in_al_i8), I386OP(in_al_i8), },
+ { 0xE5, OP_I386, I386OP(in_ax_i8), I386OP(in_eax_i8), },
+ { 0xE6, OP_I386, I386OP(out_al_i8), I386OP(out_al_i8), },
+ { 0xE7, OP_I386, I386OP(out_ax_i8), I386OP(out_eax_i8), },
+ { 0xE8, OP_I386, I386OP(call_rel16), I386OP(call_rel32), },
+ { 0xE9, OP_I386, I386OP(jmp_rel16), I386OP(jmp_rel32), },
+ { 0xEA, OP_I386, I386OP(jmp_abs16), I386OP(jmp_abs32), },
+ { 0xEB, OP_I386, I386OP(jmp_rel8), I386OP(jmp_rel8), },
+ { 0xEC, OP_I386, I386OP(in_al_dx), I386OP(in_al_dx), },
+ { 0xED, OP_I386, I386OP(in_ax_dx), I386OP(in_eax_dx), },
+ { 0xEE, OP_I386, I386OP(out_al_dx), I386OP(out_al_dx), },
+ { 0xEF, OP_I386, I386OP(out_ax_dx), I386OP(out_eax_dx), },
+ { 0xF0, OP_I386, I386OP(lock), I386OP(lock), },
+ { 0xF1, OP_I386, I386OP(invalid), I386OP(invalid), },
+ { 0xF2, OP_I386, I386OP(repne), I386OP(repne), },
+ { 0xF3, OP_I386, I386OP(rep), I386OP(rep), },
+ { 0xF4, OP_I386, I386OP(hlt), I386OP(hlt), },
+ { 0xF5, OP_I386, I386OP(cmc), I386OP(cmc), },
+ { 0xF6, OP_I386, I386OP(groupF6_8), I386OP(groupF6_8), },
+ { 0xF7, OP_I386, I386OP(groupF7_16), I386OP(groupF7_32), },
+ { 0xF8, OP_I386, I386OP(clc), I386OP(clc), },
+ { 0xF9, OP_I386, I386OP(stc), I386OP(stc), },
+ { 0xFA, OP_I386, I386OP(cli), I386OP(cli), },
+ { 0xFB, OP_I386, I386OP(sti), I386OP(sti), },
+ { 0xFC, OP_I386, I386OP(cld), I386OP(cld), },
+ { 0xFD, OP_I386, I386OP(std), I386OP(std), },
+ { 0xFE, OP_I386, I386OP(groupFE_8), I386OP(groupFE_8), },
+ { 0xFF, OP_I386, I386OP(groupFF_16), I386OP(groupFF_32), },
+ { 0x00, OP_2BYTE|OP_I386, I386OP(group0F00_16), I386OP(group0F00_32), },
+ { 0x01, OP_2BYTE|OP_I386, I386OP(group0F01_16), I386OP(group0F01_32), },
+ { 0x01, OP_2BYTE|OP_I486, I486OP(group0F01_16), I486OP(group0F01_32), },
+ { 0x02, OP_2BYTE|OP_I386, I386OP(unimplemented), I386OP(unimplemented), },
+ { 0x03, OP_2BYTE|OP_I386, I386OP(unimplemented), I386OP(unimplemented), },
+ { 0x06, OP_2BYTE|OP_I386, I386OP(clts), I386OP(clts), },
+ { 0x08, OP_2BYTE|OP_I486, I486OP(invd), I486OP(invd), },
+ { 0x09, OP_2BYTE|OP_I486, I486OP(wbinvd), I486OP(wbinvd), },
+ { 0x0B, OP_2BYTE|OP_I386, I386OP(unimplemented), I386OP(unimplemented), },
+ { 0x20, OP_2BYTE|OP_I386, I386OP(mov_r32_cr), I386OP(mov_r32_cr), },
+ { 0x21, OP_2BYTE|OP_I386, I386OP(mov_r32_dr), I386OP(mov_r32_dr), },
+ { 0x22, OP_2BYTE|OP_I386, I386OP(mov_cr_r32), I386OP(mov_cr_r32), },
+ { 0x23, OP_2BYTE|OP_I386, I386OP(mov_dr_r32), I386OP(mov_dr_r32), },
+ { 0x24, OP_2BYTE|OP_I386, I386OP(mov_r32_tr), I386OP(mov_r32_tr), },
+ { 0x26, OP_2BYTE|OP_I386, I386OP(mov_tr_r32), I386OP(mov_tr_r32), },
+ { 0x30, OP_2BYTE|OP_PENTIUM, PENTIUMOP(wrmsr), PENTIUMOP(wrmsr), },
+ { 0x31, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rdtsc), PENTIUMOP(rdtsc), },
+ { 0x32, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rdmsr), PENTIUMOP(rdmsr), },
+ { 0x74, OP_2BYTE|OP_CYRIX, I386OP(cyrix_unknown), I386OP(cyrix_unknown), },
+ { 0x80, OP_2BYTE|OP_I386, I386OP(jo_rel16), I386OP(jo_rel32), },
+ { 0x81, OP_2BYTE|OP_I386, I386OP(jno_rel16), I386OP(jno_rel32), },
+ { 0x82, OP_2BYTE|OP_I386, I386OP(jc_rel16), I386OP(jc_rel32), },
+ { 0x83, OP_2BYTE|OP_I386, I386OP(jnc_rel16), I386OP(jnc_rel32), },
+ { 0x84, OP_2BYTE|OP_I386, I386OP(jz_rel16), I386OP(jz_rel32), },
+ { 0x85, OP_2BYTE|OP_I386, I386OP(jnz_rel16), I386OP(jnz_rel32), },
+ { 0x86, OP_2BYTE|OP_I386, I386OP(jbe_rel16), I386OP(jbe_rel32), },
+ { 0x87, OP_2BYTE|OP_I386, I386OP(ja_rel16), I386OP(ja_rel32), },
+ { 0x88, OP_2BYTE|OP_I386, I386OP(js_rel16), I386OP(js_rel32), },
+ { 0x89, OP_2BYTE|OP_I386, I386OP(jns_rel16), I386OP(jns_rel32), },
+ { 0x8A, OP_2BYTE|OP_I386, I386OP(jp_rel16), I386OP(jp_rel32), },
+ { 0x8B, OP_2BYTE|OP_I386, I386OP(jnp_rel16), I386OP(jnp_rel32), },
+ { 0x8C, OP_2BYTE|OP_I386, I386OP(jl_rel16), I386OP(jl_rel32), },
+ { 0x8D, OP_2BYTE|OP_I386, I386OP(jge_rel16), I386OP(jge_rel32), },
+ { 0x8E, OP_2BYTE|OP_I386, I386OP(jle_rel16), I386OP(jle_rel32), },
+ { 0x8F, OP_2BYTE|OP_I386, I386OP(jg_rel16), I386OP(jg_rel32), },
+ { 0x90, OP_2BYTE|OP_I386, I386OP(seto_rm8), I386OP(seto_rm8), },
+ { 0x91, OP_2BYTE|OP_I386, I386OP(setno_rm8), I386OP(setno_rm8), },
+ { 0x92, OP_2BYTE|OP_I386, I386OP(setc_rm8), I386OP(setc_rm8), },
+ { 0x93, OP_2BYTE|OP_I386, I386OP(setnc_rm8), I386OP(setnc_rm8), },
+ { 0x94, OP_2BYTE|OP_I386, I386OP(setz_rm8), I386OP(setz_rm8), },
+ { 0x95, OP_2BYTE|OP_I386, I386OP(setnz_rm8), I386OP(setnz_rm8), },
+ { 0x96, OP_2BYTE|OP_I386, I386OP(setbe_rm8), I386OP(setbe_rm8), },
+ { 0x97, OP_2BYTE|OP_I386, I386OP(seta_rm8), I386OP(seta_rm8), },
+ { 0x98, OP_2BYTE|OP_I386, I386OP(sets_rm8), I386OP(sets_rm8), },
+ { 0x99, OP_2BYTE|OP_I386, I386OP(setns_rm8), I386OP(setns_rm8), },
+ { 0x9A, OP_2BYTE|OP_I386, I386OP(setp_rm8), I386OP(setp_rm8), },
+ { 0x9B, OP_2BYTE|OP_I386, I386OP(setnp_rm8), I386OP(setnp_rm8), },
+ { 0x9C, OP_2BYTE|OP_I386, I386OP(setl_rm8), I386OP(setl_rm8), },
+ { 0x9D, OP_2BYTE|OP_I386, I386OP(setge_rm8), I386OP(setge_rm8), },
+ { 0x9E, OP_2BYTE|OP_I386, I386OP(setle_rm8), I386OP(setle_rm8), },
+ { 0x9F, OP_2BYTE|OP_I386, I386OP(setg_rm8), I386OP(setg_rm8), },
+ { 0xA0, OP_2BYTE|OP_I386, I386OP(push_fs16), I386OP(push_fs32), },
+ { 0xA1, OP_2BYTE|OP_I386, I386OP(pop_fs16), I386OP(pop_fs32), },
+ { 0xA2, OP_2BYTE|OP_I486, I486OP(cpuid), I486OP(cpuid), },
+ { 0xA3, OP_2BYTE|OP_I386, I386OP(bt_rm16_r16), I386OP(bt_rm32_r32), },
+ { 0xA4, OP_2BYTE|OP_I386, I386OP(shld16_i8), I386OP(shld32_i8), },
+ { 0xA5, OP_2BYTE|OP_I386, I386OP(shld16_cl), I386OP(shld32_cl), },
+ { 0xA8, OP_2BYTE|OP_I386, I386OP(push_gs16), I386OP(push_gs32), },
+ { 0xA9, OP_2BYTE|OP_I386, I386OP(pop_gs16), I386OP(pop_gs32), },
+ { 0xAA, OP_2BYTE|OP_I386, I386OP(unimplemented), I386OP(unimplemented), },
+ { 0xAB, OP_2BYTE|OP_I386, I386OP(bts_rm16_r16), I386OP(bts_rm32_r32), },
+ { 0xAC, OP_2BYTE|OP_I386, I386OP(shrd16_i8), I386OP(shrd32_i8), },
+ { 0xAD, OP_2BYTE|OP_I386, I386OP(shrd16_cl), I386OP(shrd32_cl), },
+ { 0xAE, OP_2BYTE|OP_I386, I386OP(invalid), I386OP(invalid), },
+ { 0xAF, OP_2BYTE|OP_I386, I386OP(imul_r16_rm16), I386OP(imul_r32_rm32), },
+ { 0xB0, OP_2BYTE|OP_I486, I486OP(cmpxchg_rm8_r8), I486OP(cmpxchg_rm8_r8), },
+ { 0xB1, OP_2BYTE|OP_I486, I486OP(cmpxchg_rm16_r16), I486OP(cmpxchg_rm32_r32), },
+ { 0xB2, OP_2BYTE|OP_I386, I386OP(lss16), I386OP(lss32), },
+ { 0xB3, OP_2BYTE|OP_I386, I386OP(btr_rm16_r16), I386OP(btr_rm32_r32), },
+ { 0xB4, OP_2BYTE|OP_I386, I386OP(lfs16), I386OP(lfs32), },
+ { 0xB5, OP_2BYTE|OP_I386, I386OP(lgs16), I386OP(lgs32), },
+ { 0xB6, OP_2BYTE|OP_I386, I386OP(movzx_r16_rm8), I386OP(movzx_r32_rm8), },
+ { 0xB7, OP_2BYTE|OP_I386, I386OP(invalid), I386OP(movzx_r32_rm16), },
+ { 0xBA, OP_2BYTE|OP_I386, I386OP(group0FBA_16), I386OP(group0FBA_32), },
+ { 0xBB, OP_2BYTE|OP_I386, I386OP(btc_rm16_r16), I386OP(btc_rm32_r32), },
+ { 0xBC, OP_2BYTE|OP_I386, I386OP(bsf_r16_rm16), I386OP(bsf_r32_rm32), },
+ { 0xBD, OP_2BYTE|OP_I386, I386OP(bsr_r16_rm16), I386OP(bsr_r32_rm32), },
+ { 0xBE, OP_2BYTE|OP_I386, I386OP(movsx_r16_rm8), I386OP(movsx_r32_rm8), },
+ { 0xBF, OP_2BYTE|OP_I386, I386OP(invalid), I386OP(movsx_r32_rm16), },
+ { 0xC0, OP_2BYTE|OP_I486, I486OP(xadd_rm8_r8), I486OP(xadd_rm8_r8), },
+ { 0xC1, OP_2BYTE|OP_I486, I486OP(xadd_rm16_r16), I486OP(xadd_rm32_r32), },
+ { 0xC7, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmpxchg8b_m64), PENTIUMOP(cmpxchg8b_m64), }
+};