notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
32x: drc: block linking
[picodrive.git]
/
cpu
/
drc
/
emit_x86.c
diff --git
a/cpu/drc/emit_x86.c
b/cpu/drc/emit_x86.c
index
1c29eea
..
c823cfb
100644
(file)
--- 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); \
}
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); \
#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); \
}
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 { \
#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) { \
} while (0)
#define emith_call(ptr) { \