📄 x86_emit.h
字号:
x86_indirect_branch_##type, 4)) \#define generate_block_prologue() \#define generate_block_extra_vars_arm() \ void generate_indirect_branch_arm() \ { \ if(condition == 0x0E) \ { \ generate_indirect_branch_cycle_update(arm); \ } \ else \ { \ generate_indirect_branch_no_cycle_update(arm); \ } \ } \ \ void generate_indirect_branch_dual() \ { \ if(condition == 0x0E) \ { \ generate_indirect_branch_cycle_update(dual); \ } \ else \ { \ generate_indirect_branch_no_cycle_update(dual); \ } \ } \#define generate_block_extra_vars_thumb() \#define translate_invalidate_dcache() \#define block_prologue_size 0#define calculate_z_flag(dest) \ reg[REG_Z_FLAG] = (dest == 0) \#define calculate_n_flag(dest) \ reg[REG_N_FLAG] = ((signed)dest < 0) \#define calculate_c_flag_sub(dest, src_a, src_b) \ reg[REG_C_FLAG] = ((unsigned)src_b <= (unsigned)src_a) \#define calculate_v_flag_sub(dest, src_a, src_b) \ reg[REG_V_FLAG] = ((signed)src_b > (signed)src_a) != ((signed)dest < 0) \#define calculate_c_flag_add(dest, src_a, src_b) \ reg[REG_C_FLAG] = ((unsigned)dest < (unsigned)src_a) \#define calculate_v_flag_add(dest, src_a, src_b) \ reg[REG_V_FLAG] = ((signed)dest < (signed)src_a) != ((signed)src_b < 0) \#define get_shift_imm() \ u32 shift = (opcode >> 7) & 0x1F \#define generate_shift_reg(ireg, name, flags_op) \ generate_load_reg_pc(ireg, rm, 12); \ generate_load_reg(a1, ((opcode >> 8) & 0x0F)); \ generate_function_call(execute_##name##_##flags_op##_reg); \ generate_mov(ireg, rv) \u32 function_cc execute_lsl_no_flags_reg(u32 value, u32 shift){ if(shift != 0) { if(shift > 31) value = 0; else value <<= shift; } return value;}u32 function_cc execute_lsr_no_flags_reg(u32 value, u32 shift){ if(shift != 0) { if(shift > 31) value = 0; else value >>= shift; } return value;}u32 function_cc execute_asr_no_flags_reg(u32 value, u32 shift){ if(shift != 0) { if(shift > 31) value = (s32)value >> 31; else value = (s32)value >> shift; } return value;}u32 function_cc execute_ror_no_flags_reg(u32 value, u32 shift){ if(shift != 0) { ror(value, value, shift); } return value;}u32 function_cc execute_lsl_flags_reg(u32 value, u32 shift){ if(shift != 0) { if(shift > 31) { if(shift == 32) reg[REG_C_FLAG] = value & 0x01; else reg[REG_C_FLAG] = 0; value = 0; } else { reg[REG_C_FLAG] = (value >> (32 - shift)) & 0x01; value <<= shift; } } return value;}u32 function_cc execute_lsr_flags_reg(u32 value, u32 shift){ if(shift != 0) { if(shift > 31) { if(shift == 32) reg[REG_C_FLAG] = (value >> 31) & 0x01; else reg[REG_C_FLAG] = 0; value = 0; } else { reg[REG_C_FLAG] = (value >> (shift - 1)) & 0x01; value >>= shift; } } return value;}u32 function_cc execute_asr_flags_reg(u32 value, u32 shift){ if(shift != 0) { if(shift > 31) { value = (s32)value >> 31; reg[REG_C_FLAG] = value & 0x01; } else { reg[REG_C_FLAG] = (value >> (shift - 1)) & 0x01; value = (s32)value >> shift; } } return value;}u32 function_cc execute_ror_flags_reg(u32 value, u32 shift){ if(shift != 0) { reg[REG_C_FLAG] = (value >> (shift - 1)) & 0x01; ror(value, value, shift); } return value;}u32 function_cc execute_rrx_flags(u32 value){ u32 c_flag = reg[REG_C_FLAG]; reg[REG_C_FLAG] = value & 0x01; return (value >> 1) | (c_flag << 31);}u32 function_cc execute_rrx(u32 value){ return (value >> 1) | (reg[REG_C_FLAG] << 31);}#define generate_shift_imm_lsl_no_flags(ireg) \ generate_load_reg_pc(ireg, rm, 8); \ if(shift != 0) \ { \ generate_shift_left(ireg, shift); \ } \#define generate_shift_imm_lsr_no_flags(ireg) \ if(shift != 0) \ { \ generate_load_reg_pc(ireg, rm, 8); \ generate_shift_right(ireg, shift); \ } \ else \ { \ generate_load_imm(ireg, 0); \ } \#define generate_shift_imm_asr_no_flags(ireg) \ generate_load_reg_pc(ireg, rm, 8); \ if(shift != 0) \ { \ generate_shift_right_arithmetic(ireg, shift); \ } \ else \ { \ generate_shift_right_arithmetic(ireg, 31); \ } \#define generate_shift_imm_ror_no_flags(ireg) \ if(shift != 0) \ { \ generate_load_reg_pc(ireg, rm, 8); \ generate_rotate_right(ireg, shift); \ } \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -