]> git.proxmox.com Git - qemu.git/commitdiff
tcp/mips: Change TCG_AREG0 (fp -> s0)
authorStefan Weil <weil@mail.berlios.de>
Fri, 9 Apr 2010 15:28:40 +0000 (17:28 +0200)
committerAurelien Jarno <aurelien@aurel32.net>
Tue, 13 Apr 2010 22:59:42 +0000 (00:59 +0200)
Register fp (frame pointer) is a bad choice for compilations
without optimisation, because the compiler makes heavy use
of this register (so the resulting code crashes).

Register s0 had been used for TCG_AREG1 in earlier releases,
but was no longer used and is now free for TCG_AREG0.

The resulting code works for compilations without
optimisation (tested with qemu mips in qemu mips
on x86 host).

Signed-off-by: Stefan Weil <weil@mail.berlios.de>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
dyngen-exec.h
tcg/mips/tcg-target.c
tcg/mips/tcg-target.h

index d04eda8a91dc7934c07fcaa1cf74703709839f3c..0700a2d9bb20717dba5b8093e993c61dc10cb767 100644 (file)
@@ -59,7 +59,7 @@ extern int printf(const char *, ...);
 #elif defined(__hppa__)
 #define AREG0 "r17"
 #elif defined(__mips__)
-#define AREG0 "fp"
+#define AREG0 "s0"
 #elif defined(__sparc__)
 #ifdef CONFIG_SOLARIS
 #define AREG0 "g2"
index f4fb615bf0c4affdd947124523056508734c0ef7..f38eb2888dd097f24e15395192291e553607aff2 100644 (file)
@@ -1450,7 +1450,9 @@ static const TCGTargetOpDef mips_op_defs[] = {
 };
 
 static int tcg_target_callee_save_regs[] = {
+#if 0 /* used for the global env (TCG_AREG0), so no need to save */
     TCG_REG_S0,
+#endif
     TCG_REG_S1,
     TCG_REG_S2,
     TCG_REG_S3,
@@ -1459,8 +1461,7 @@ static int tcg_target_callee_save_regs[] = {
     TCG_REG_S6,
     TCG_REG_S7,
     TCG_REG_GP,
-    /* TCG_REG_FP, */ /* currently used for the global env, so np
-                         need to save */
+    TCG_REG_FP,
     TCG_REG_RA,       /* should be last for ABI compliance */
 };
 
index 0292d3360d1762f2fff94b84e8f54a00f289ed1e..0028bfa562350dbe6f0276f4da427ba857cbcc48 100644 (file)
@@ -97,7 +97,7 @@ enum {
 #undef TCG_TARGET_HAS_ext16u_i32   /* andi rt, rs, 0xffff */
 
 /* Note: must be synced with dyngen-exec.h */
-#define TCG_AREG0 TCG_REG_FP
+#define TCG_AREG0 TCG_REG_S0
 
 /* guest base is supported */
 #define TCG_TARGET_HAS_GUEST_BASE