From ef0007cd71271799ecdfe27c6e631462206ea80b Mon Sep 17 00:00:00 2001 From: Theodore Dubois Date: Wed, 30 May 2018 18:26:42 -0700 Subject: [PATCH] Get rid of RET_NEAR_IMM --- emu/decode.h | 6 +++--- emu/gen.c | 3 +-- emu/interp.c | 3 +-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/emu/decode.h b/emu/decode.h index 184b0312..fdcb1415 100644 --- a/emu/decode.h +++ b/emu/decode.h @@ -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; diff --git a/emu/gen.c b/emu/gen.c index 093f8db2..a6ceac89 100644 --- a/emu/gen.c +++ b/emu/gen.c @@ -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) diff --git a/emu/interp.c b/emu/interp.c index f39a7f4b..083ecc51 100644 --- a/emu/interp.c +++ b/emu/interp.c @@ -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)