X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2Fdrc%2Femit_x86.c;h=c823cfb0c1a44fbc56a4603b4be1b596f39759d3;hb=44e6452e0247e4a926eba8a233080aec5dd7b29b;hp=1c29eeafefafa58cdc16d5477543de47b86d56f4;hpb=25eb407c56c95255fc1b88afe084bd5ae393193d;p=picodrive.git diff --git a/cpu/drc/emit_x86.c b/cpu/drc/emit_x86.c index 1c29eea..c823cfb 100644 --- a/cpu/drc/emit_x86.c +++ b/cpu/drc/emit_x86.c @@ -463,6 +463,9 @@ enum { xAX = 0, xCX, xDX, xBX, xSP, xBP, xSI, xDI }; EMIT(disp, u32); \ } +#define emith_jump_patchable(target) \ + emith_jump(target) + #define emith_jump_cond(cond, ptr) { \ u32 disp = (u32)(ptr) - ((u32)tcache_ptr + 6); \ EMIT(0x0f, u8); \ @@ -470,12 +473,13 @@ enum { xAX = 0, xCX, xDX, xBX, xSP, xBP, xSI, xDI }; EMIT(disp, u32); \ } -#define emith_jump_patchable(cond) \ - emith_jump_cond(cond, 0) +#define emith_jump_cond_patchable(cond, target) \ + emith_jump_cond(cond, target) #define emith_jump_patch(ptr, target) do { \ - u32 disp = (u32)(target) - ((u32)(ptr) + 6); \ - EMIT_PTR((u8 *)(ptr) + 2, disp, u32); \ + u32 disp_ = (u32)(target) - ((u32)(ptr) + 4); \ + u32 offs_ = (*(u8 *)(ptr) == 0x0f) ? 2 : 1; \ + EMIT_PTR((u8 *)(ptr) + offs_, disp_ - offs_, u32); \ } while (0) #define emith_call(ptr) { \