Skip to content

Commit

Permalink
sh2 drc, minor optimization for x86 backend
Browse files Browse the repository at this point in the history
  • Loading branch information
irixxxx committed Jun 27, 2024
1 parent c1812e1 commit cb4379b
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 7 deletions.
7 changes: 3 additions & 4 deletions cpu/drc/emit_x86.c
Original file line number Diff line number Diff line change
Expand Up @@ -1211,13 +1211,12 @@ enum { xAX = 0, xCX, xDX, xBX, xSP, xBP, xSI, xDI, // x86-64,i386 common
} while (0)

#define emith_sh2_rcall(a, tab, func, mask) do { \
int scale_ = PTR_SCALE <= 2 ? PTR_SCALE : 2; \
emith_lsr(mask, a, SH2_READ_SHIFT); \
if (PTR_SCALE > scale_) emith_lsl(mask, mask, PTR_SCALE-scale_); \
EMIT_XREX_IF(1, tab, tab, mask); \
EMIT_OP_MODRM64(0x8d, 0, tab, 4); \
EMIT_SIB64(PTR_SCALE, mask, tab); /* lea tab, [tab + mask * {4,8}] */ \
EMIT_XREX_IF(1, tab, tab, mask); \
EMIT_OP_MODRM64(0x8d, 0, tab, 4); \
EMIT_SIB64(PTR_SCALE, mask, tab); /* lea tab, [tab + mask * {4,8}] */ \
EMIT_SIB64(scale_+1, mask, tab); /* lea tab, [tab + mask*(2*scale)] */ \
EMIT_REX_IF(1, func, tab); \
emith_deref_modrm(0x8b, 0, func, tab); /* mov func, [tab] */ \
EMIT_REX_IF(0, mask, tab); \
Expand Down
7 changes: 4 additions & 3 deletions cpu/sh2/compiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,10 @@ u16 scan_block(u32 base_pc, int is_slave, u8 *op_flags, u32 *end_pc,
#elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__)
#define DRC_SR_REG "r28"
#define DRC_REG_LL 0 // no ABI for __ILP32__
#elif defined(__i386__)
#define DRC_SR_REG "edi"
#define DRC_REG_LL 0 // 32 bit
//i386 only has 8 registers and reserving one of them causes too much spilling
//#elif defined(__i386__)
//#define DRC_SR_REG "edi"
//#define DRC_REG_LL 0 // 32 bit
#elif defined(__x86_64__)
#define DRC_SR_REG "rbx"
#define DRC_REG_LL (__ILP32__ || _WIN32)
Expand Down

0 comments on commit cb4379b

Please sign in to comment.