Get rid of RET_NEAR_IMM

This commit is contained in:
Theodore Dubois 2018-05-30 18:26:42 -07:00
parent a092f01491
commit ef0007cd71
3 changed files with 5 additions and 7 deletions

View File

@ -523,9 +523,9 @@ restart:
READMODRM; READIMM8; GRP2(imm, modrm_val,oz); break;
case 0xc2: TRACEI("ret near imm\t");
READIMM16; RET_NEAR_IMM(imm); break;
READIMM16; RET_NEAR(imm); break;
case 0xc3: TRACEI("ret near");
RET_NEAR(); break;
RET_NEAR(0); break;
case 0xc9: TRACEI("leave");
MOV(reg_bp, reg_sp,oz); POP(reg_bp,oz); break;
@ -666,7 +666,7 @@ restart:
// a branch prediction penalty if the target of a branch is a
// ret. gcc used to use nop ret but repz ret is only one
// instruction
case 0xc3: TRACEI("repz ret\t"); RET_NEAR(); break;
case 0xc3: TRACEI("repz ret\t"); RET_NEAR(0); break;
default: TRACELN("undefined"); UNDEFINED;
}
break;

View File

@ -197,8 +197,7 @@ static inline bool gen_op(struct gen_state *state, gadget_t *gadgets, enum arg a
#define JN_REL(cc, off) gagg(jmp, cond_##cc, state->ip, state->ip + off); end_block = true
#define CALL(loc) load(loc, OP_SIZE); ggg(call_indir, saved_ip, state->ip); end_block = true
#define CALL_REL(off) gggg(call, saved_ip, state->ip + off, state->ip); end_block = true
#define RET_NEAR_IMM(imm) ggg(ret, saved_ip, 4 + imm); end_block = true
#define RET_NEAR() RET_NEAR_IMM(0); end_block = true
#define RET_NEAR(imm) ggg(ret, saved_ip, 4 + imm); end_block = true
#define INT(code) gg_here(interrupt, (uint8_t) code); end_block = true
#define SET(cc, dst) ga(set, cond_##cc); store(dst, 8)

View File

@ -509,8 +509,7 @@ static bool modrm_compute(struct cpu_state *cpu, struct tlb *tlb, addr_t *addr_o
}
#define JCXZ_REL(offset) J_REL(get(reg_c,oz) == 0, offset)
#define RET_NEAR() POP(eip,32); FIX_EIP
#define RET_NEAR_IMM(imm) RET_NEAR(); cpu->esp += get(imm,16)
#define RET_NEAR(imm) POP(eip,32); FIX_EIP; cpu->esp += get(imm,16)
#define SET(cond, val) \
set(val, (cond ? 1 : 0),8)