mirror of
https://github.com/gwenhael-le-moine/x49gp.git
synced 2024-12-27 21:58:33 +01:00
37 lines
1.6 KiB
Diff
37 lines
1.6 KiB
Diff
2005-11-11 Gwenole Beauchesne <gbeauchesne@mandriva.com>
|
|
|
|
* Globaaly save %ebx, %esi, %edi on entry to generated
|
|
function. This avoids some register spills in synthetic opcodes.
|
|
NOTE: this also easily fixes gcc4 compiled qemu-system-x86_64 on x86.
|
|
|
|
--- qemu-0.7.2/cpu-exec.c.gcc4-opts 2005-09-04 19:11:31.000000000 +0200
|
|
+++ qemu-0.7.2/cpu-exec.c 2005-11-11 17:40:47.000000000 +0100
|
|
@@ -561,6 +561,15 @@ int cpu_exec(CPUState *env1)
|
|
: /* no outputs */
|
|
: "r" (gen_func)
|
|
: "r1", "r2", "r3", "r8", "r9", "r10", "r12", "r14");
|
|
+#elif defined(TARGET_X86_64) && defined(__i386__)
|
|
+ asm volatile ("push %%ebx\n"
|
|
+ "push %%esi\n"
|
|
+ "push %%edi\n"
|
|
+ "call *%0\n"
|
|
+ "pop %%edi\n"
|
|
+ "pop %%esi\n"
|
|
+ "pop %%ebx\n"
|
|
+ : : "r" (gen_func) : "ebx", "esi", "edi");
|
|
#elif defined(TARGET_I386) && defined(USE_CODE_COPY)
|
|
{
|
|
if (!(tb->cflags & CF_CODE_COPY)) {
|
|
--- qemu-0.7.2/Makefile.target.gcc4-opts 2005-11-11 16:26:33.000000000 +0100
|
|
+++ qemu-0.7.2/Makefile.target 2005-11-11 17:59:56.000000000 +0100
|
|
@@ -65,6 +65,10 @@ OP_CFLAGS+= -falign-functions=0 -fno-gcs
|
|
else
|
|
OP_CFLAGS+= -malign-functions=0
|
|
endif
|
|
+ifeq ($(TARGET_ARCH), x86_64)
|
|
+# XXX globally save %ebx, %esi, %edi on entry to generated function
|
|
+OP_CFLAGS+= -fcall-used-ebx -fcall-used-esi -fcall-used-edi
|
|
+endif
|
|
|
|
ifdef TARGET_GPROF
|
|
USE_I386_LD=y
|