aboutsummaryrefslogtreecommitdiff
path: root/target-ppc
diff options
context:
space:
mode:
Diffstat (limited to 'target-ppc')
-rw-r--r--target-ppc/cpu.h6
-rw-r--r--target-ppc/translate.c9
2 files changed, 14 insertions, 1 deletions
diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h
index 889396e901..c84307d911 100644
--- a/target-ppc/cpu.h
+++ b/target-ppc/cpu.h
@@ -530,7 +530,11 @@ struct CPUPPCState {
* during translated code execution
*/
#if TARGET_LONG_BITS > HOST_LONG_BITS
- target_ulong t0, t1, t2;
+ target_ulong t0, t1;
+#endif
+ /* XXX: this is a temporary workaround for i386. cf translate.c comment */
+#if (TARGET_LONG_BITS > HOST_LONG_BITS) || defined(HOST_I386)
+ target_ulong t2;
#endif
#if !defined(TARGET_PPC64)
/* temporary fixed-point registers
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index e48da0f2a7..4253396364 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -97,8 +97,17 @@ void ppc_translate_init(void)
#else
cpu_T[0] = tcg_global_reg_new(TCG_TYPE_TL, TCG_AREG1, "T0");
cpu_T[1] = tcg_global_reg_new(TCG_TYPE_TL, TCG_AREG2, "T1");
+#ifdef HOST_I386
+ /* XXX: This is a temporary workaround for i386.
+ * On i386 qemu_st32 runs out of registers.
+ * The proper fix is to remove cpu_T.
+ */
+ cpu_T[2] = tcg_global_mem_new(TCG_TYPE_TL,
+ TCG_AREG0, offsetof(CPUState, t2), "T2");
+#else
cpu_T[2] = tcg_global_reg_new(TCG_TYPE_TL, TCG_AREG3, "T2");
#endif
+#endif
#if !defined(TARGET_PPC64)
cpu_T64[0] = tcg_global_mem_new(TCG_TYPE_I64,
TCG_AREG0, offsetof(CPUState, t0_64),