diff options
Diffstat (limited to 'trunk/src/emu/cpu/i386/i386ops.h')
-rw-r--r-- | trunk/src/emu/cpu/i386/i386ops.h | 378 |
1 files changed, 378 insertions, 0 deletions
diff --git a/trunk/src/emu/cpu/i386/i386ops.h b/trunk/src/emu/cpu/i386/i386ops.h new file mode 100644 index 00000000000..322a90b62fc --- /dev/null +++ b/trunk/src/emu/cpu/i386/i386ops.h @@ -0,0 +1,378 @@ +typedef struct { + UINT8 opcode; + UINT32 flags; + void (*handler16)(i386_state *cpustate); + void (*handler32)(i386_state *cpustate); +} 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(arpl), I386OP(arpl), }, + { 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(enter16), I386OP(enter32), }, + { 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(x87_group_d8), I386OP(x87_group_d8), }, + { 0xD9, OP_FPU, I386OP(x87_group_d9), I386OP(x87_group_d9), }, + { 0xDA, OP_FPU, I386OP(x87_group_da), I386OP(x87_group_da), }, + { 0xDB, OP_FPU, I386OP(x87_group_db), I386OP(x87_group_db), }, + { 0xDC, OP_FPU, I386OP(x87_group_dc), I386OP(x87_group_dc), }, + { 0xDD, OP_FPU, I386OP(x87_group_dd), I386OP(x87_group_dd), }, + { 0xDE, OP_FPU, I386OP(x87_group_de), I386OP(x87_group_de), }, + { 0xDF, OP_FPU, I386OP(x87_group_df), I386OP(x87_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(lar_r16_rm16), I386OP(lar_r32_rm32), }, + { 0x03, OP_2BYTE|OP_I386, I386OP(lsl_r16_rm16), I386OP(lsl_r32_rm32), }, + { 0x06, OP_2BYTE|OP_I386, I386OP(clts), I386OP(clts), }, + { 0x07, OP_2BYTE|OP_I386, I386OP(loadall), I386OP(loadall), }, + { 0x08, OP_2BYTE|OP_I486, I486OP(invd), I486OP(invd), }, + { 0x09, OP_2BYTE|OP_I486, I486OP(wbinvd), I486OP(wbinvd), }, + { 0x0B, OP_2BYTE|OP_PENTIUM, PENTIUMOP(ud2), PENTIUMOP(ud2), }, + { 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_PENTIUM, PENTIUMOP(sse_group0fae), PENTIUMOP(sse_group0fae), }, + { 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), }, + { 0xC8, OP_2BYTE|OP_I486, I486OP(bswap_eax), I486OP(bswap_eax), }, + { 0xC9, OP_2BYTE|OP_I486, I486OP(bswap_ecx), I486OP(bswap_ecx), }, + { 0xCA, OP_2BYTE|OP_I486, I486OP(bswap_edx), I486OP(bswap_edx), }, + { 0xCB, OP_2BYTE|OP_I486, I486OP(bswap_ebx), I486OP(bswap_ebx), }, + { 0xCC, OP_2BYTE|OP_I486, I486OP(bswap_esp), I486OP(bswap_esp), }, + { 0xCD, OP_2BYTE|OP_I486, I486OP(bswap_ebp), I486OP(bswap_ebp), }, + { 0xCE, OP_2BYTE|OP_I486, I486OP(bswap_esi), I486OP(bswap_esi), }, + { 0xCF, OP_2BYTE|OP_I486, I486OP(bswap_edi), I486OP(bswap_edi), } +}; |