diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index 889396e901b02e07e70d19860b307defef82c2c5..c84307d911a976c5911c4e13c396d49cd2fc3b1c 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 e48da0f2a7b6b6028afed25263028dbdc38cbc97..4253396364c2cf8dd63777b89998238b43e5fe00 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),