diff options
Diffstat (limited to 'src/arch/x86/processor.c')
-rw-r--r-- | src/arch/x86/processor.c | 63 |
1 files changed, 49 insertions, 14 deletions
diff --git a/src/arch/x86/processor.c b/src/arch/x86/processor.c index 54008d7..7048890 100644 --- a/src/arch/x86/processor.c +++ b/src/arch/x86/processor.c @@ -182,6 +182,8 @@ static GArchInstruction *g_x86_processor_decode_instruction(const GX86Processor static const x86_read_instr decodings[XOP_COUNT] = { + /* Instructions avec opcode sur un octet */ + [XOP_ADD_RM8_R8] = x86_read_instr_add_rm8_r8, [XOP_ADD_RM1632_R1632] = x86_read_instr_add_rm1632_r1632, [XOP_ADD_R8_RM8] = x86_read_instr_add_r8_rm8, @@ -193,26 +195,15 @@ static GArchInstruction *g_x86_processor_decode_instruction(const GX86Processor [XOP_OR_R8_RM8] = x86_read_instr_or_r8_rm8, [XOP_OR_R1632_RM1632] = x86_read_instr_or_r1632_rm1632, [XOP_OR_AL_IMM8] = x86_read_instr_or_al_imm8, - [XOP_JE_REL1632] = x86_read_instr_je_rel1632, - [XOP_JNE_REL1632] = x86_read_instr_jne_rel1632, - [XOP_JBE_REL1632] = x86_read_instr_jbe_rel1632, - [XOP_JA_REL1632] = x86_read_instr_ja_rel1632, - [XOP_JGE_REL1632] = x86_read_instr_jge_rel1632, - [XOP_JLE_REL1632] = x86_read_instr_jle_rel1632, - [XOP_JG_REL1632] = x86_read_instr_jg_rel1632, - [XOP_SETE_RM8] = x86_read_instr_sete_rm8, - [XOP_SETNE_RM8] = x86_read_instr_setne_rm8, - [XOP_SETL_RM8] = x86_read_instr_setl_rm8, - [XOP_MOVZX_R1632_RM8] = x86_read_instr_movzx_r1632_rm8, - [XOP_MOVSX_R1632_RM8] = x86_read_instr_movsx_r1632_rm8, - [XOP_MOVSX_R1632_RM1632] = x86_read_instr_movsx_r1632_rm1632, [XOP_ADC_RM8_R8] = x86_read_instr_adc_rm8_r8, + [XOP_SBB_RM1632_R1632] = x86_read_instr_sbb_rm1632_r1632, [XOP_AND_RM8_R8] = x86_read_instr_and_rm8_r8, [XOP_AND_RM1632_R1632] = x86_read_instr_and_rm1632_r1632, [XOP_AND_AL_IMM8] = x86_read_instr_and_al_imm8, [XOP_AND_E_AX_IMM1632] = x86_read_instr_and_e_ax_imm1632, [XOP_SUB_RM1632_R1632] = x86_read_instr_sub_rm1632_r1632, [XOP_SUB_R8_RM8] = x86_read_instr_sub_r8_rm8, + [XOP_SUB_R1632_RM1632] = x86_read_instr_sub_r1632_rm1632, [XOP_SUB_AL_IMM8] = x86_read_instr_sub_al_imm8, [XOP_SUB_E_AX_IMM1632] = x86_read_instr_sub_e_ax_imm1632, [XOP_XOR_RM8_R8] = x86_read_instr_xor_rm8_r8, @@ -221,8 +212,11 @@ static GArchInstruction *g_x86_processor_decode_instruction(const GX86Processor [XOP_XOR_R1632_RM1632] = x86_read_instr_xor_r1632_rm1632, [XOP_XOR_AL_IMM8] = x86_read_instr_xor_al_imm8, [XOP_XOR_E_AX_IMM1632] = x86_read_instr_xor_e_ax_imm1632, + [XOP_CMP_RM8_R8] = x86_read_instr_cmp_rm8_r8, [XOP_CMP_RM1632_R1632] = x86_read_instr_cmp_rm1632_r1632, [XOP_CMP_R1632_RM1632] = x86_read_instr_cmp_r1632_rm1632, + [XOP_CMP_AL_IMM8] = x86_read_instr_cmp_al_imm8, + [XOP_CMP_E_AX_IMM1632] = x86_read_instr_cmp_e_ax_imm1632, [XOP_INC_E_AX] = x86_read_instr_inc_r1632, [XOP_INC_E_CX] = x86_read_instr_inc_r1632, [XOP_INC_E_DX] = x86_read_instr_inc_r1632, @@ -320,6 +314,7 @@ static GArchInstruction *g_x86_processor_decode_instruction(const GX86Processor [XOP_MOV_MOFFS8_AL] = x86_read_instr_mov_moffs8_al, [XOP_MOV_MOFFS1632_E_AX] = x86_read_instr_mov_moffs1632_e_ax, [XOP_MOVS_M1632_M1632] = x86_read_instr_movs_m1632_m1632, + [XOP_CMPS_M8_M8] = x86_read_instr_cmps_m8_m8, [XOP_TEST_AL_IMM8] = x86_read_instr_test_al_imm8, [XOP_TEST_E_AX_IMM1632] = x86_read_instr_test_e_ax_imm1632, [XOP_STOS_M1632_E_AX] = x86_read_instr_stos_m1632_e_ax, @@ -373,7 +368,45 @@ static GArchInstruction *g_x86_processor_decode_instruction(const GX86Processor [XOP_DEC_RM1632] = x86_read_instr_dec_rm1632, [XOP_CALL_RM1632] = x86_read_instr_call_rm1632, [XOP_JMP_RM1632] = x86_read_instr_jmp_rm1632, - [XOP_PUSH_RM1632] = x86_read_instr_push_rm1632 + [XOP_PUSH_RM1632] = x86_read_instr_push_rm1632, + + /* Instructions avec opcode sur deux octets */ + + [XOP_JO_REL1632] = x86_read_instr_jo_rel1632, + [XOP_JNO_REL1632] = x86_read_instr_jno_rel1632, + [XOP_JB_REL1632] = x86_read_instr_jb_rel1632, + [XOP_JNB_REL1632] = x86_read_instr_jnb_rel1632, + [XOP_JE_REL1632] = x86_read_instr_je_rel1632, + [XOP_JNE_REL1632] = x86_read_instr_jne_rel1632, + [XOP_JNA_REL1632] = x86_read_instr_jna_rel1632, + [XOP_JA_REL1632] = x86_read_instr_ja_rel1632, + [XOP_JS_REL1632] = x86_read_instr_js_rel1632, + [XOP_JNS_REL1632] = x86_read_instr_jns_rel1632, + [XOP_JP_REL1632] = x86_read_instr_jp_rel1632, + [XOP_JNP_REL1632] = x86_read_instr_jnp_rel1632, + [XOP_JL_REL1632] = x86_read_instr_jl_rel1632, + [XOP_JNL_REL1632] = x86_read_instr_jnl_rel1632, + [XOP_JNG_REL1632] = x86_read_instr_jng_rel1632, + [XOP_JG_REL1632] = x86_read_instr_jg_rel1632, + [XOP_SETO_RM8] = x86_read_instr_seto_rm8, + [XOP_SETNO_RM8] = x86_read_instr_setno_rm8, + [XOP_SETB_RM8] = x86_read_instr_setb_rm8, + [XOP_SETNB_RM8] = x86_read_instr_setnb_rm8, + [XOP_SETE_RM8] = x86_read_instr_sete_rm8, + [XOP_SETNE_RM8] = x86_read_instr_setne_rm8, + [XOP_SETNA_RM8] = x86_read_instr_setna_rm8, + [XOP_SETA_RM8] = x86_read_instr_seta_rm8, + [XOP_SETS_RM8] = x86_read_instr_sets_rm8, + [XOP_SETNS_RM8] = x86_read_instr_setns_rm8, + [XOP_SETP_RM8] = x86_read_instr_setp_rm8, + [XOP_SETNP_RM8] = x86_read_instr_setnp_rm8, + [XOP_SETL_RM8] = x86_read_instr_setl_rm8, + [XOP_SETNL_RM8] = x86_read_instr_setnl_rm8, + [XOP_SETNG_RM8] = x86_read_instr_setng_rm8, + [XOP_SETG_RM8] = x86_read_instr_setg_rm8, + [XOP_MOVZX_R1632_RM8] = x86_read_instr_movzx_r1632_rm8, + [XOP_MOVSX_R1632_RM8] = x86_read_instr_movsx_r1632_rm8, + [XOP_MOVSX_R1632_RM1632] = x86_read_instr_movsx_r1632_rm1632 }; @@ -385,6 +418,8 @@ static GArchInstruction *g_x86_processor_decode_instruction(const GX86Processor addr++; } if (prefix & XPX_OPERAND_SIZE_OVERRIDE) (*pos)++; + if (prefix & XPX_REPEAT_STR_OPERATION_F2) (*pos)++; + if (prefix & XPX_REPEAT_STR_OPERATION_F3) (*pos)++; if (id != XOP_COUNT && !care) (*pos)++; |