|
From: <sv...@va...> - 2005-12-16 01:06:47
|
Author: sewardj
Date: 2005-12-16 01:06:42 +0000 (Fri, 16 Dec 2005)
New Revision: 1497
Log:
ppc32/64 backend: take r29 out of circulation so the Valgrind
dispatcher can use it.
Modified:
trunk/priv/host-ppc32/hdefs.c
Modified: trunk/priv/host-ppc32/hdefs.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/host-ppc32/hdefs.c 2005-12-15 21:33:50 UTC (rev 1496)
+++ trunk/priv/host-ppc32/hdefs.c 2005-12-16 01:06:42 UTC (rev 1497)
@@ -204,9 +204,9 @@
{
UInt i=3D0;
if (mode64)
- *nregs =3D (32-8) + (32-24) + (32-24);
+ *nregs =3D (32-9) + (32-24) + (32-24);
else
- *nregs =3D (32-6) + (32-24) + (32-24);
+ *nregs =3D (32-7) + (32-24) + (32-24);
*arr =3D LibVEX_Alloc(*nregs * sizeof(HReg));
// GPR0 =3D scratch reg where possible - some ops interpret as value =
zero
// GPR1 =3D stack pointer
@@ -227,7 +227,7 @@
(*arr)[i++] =3D hregPPC_GPR12(mode64);
}
// GPR13 =3D thread specific pointer
- // GPR 14 and above are callee save. Yay.
+ // GPR14 and above are callee save. Yay.
(*arr)[i++] =3D hregPPC_GPR14(mode64);
(*arr)[i++] =3D hregPPC_GPR15(mode64);
(*arr)[i++] =3D hregPPC_GPR16(mode64);
@@ -243,7 +243,7 @@
(*arr)[i++] =3D hregPPC_GPR26(mode64);
(*arr)[i++] =3D hregPPC_GPR27(mode64);
(*arr)[i++] =3D hregPPC_GPR28(mode64);
- (*arr)[i++] =3D hregPPC_GPR29(mode64);
+ // GPR29 is reserved for the dispatcher
// GPR30 is reserved as AltiVec spill reg temporary
// GPR31 is reserved for the GuestStatePtr
=20
@@ -260,6 +260,7 @@
(*arr)[i++] =3D hregPPC32_FPR7();
=20
/* Same deal re Altivec */
+ /* NB, vr29 is used as a scratch temporary -- do not allocate */
(*arr)[i++] =3D hregPPC32_VR0();
(*arr)[i++] =3D hregPPC32_VR1();
(*arr)[i++] =3D hregPPC32_VR2();
@@ -1287,7 +1288,7 @@
ppHRegPPC32(i->Pin.Set32.dst);
vex_printf(",");
ppHRegPPC32(i->Pin.Set32.dst);
- vex_printf("1");
+ vex_printf(",1");
}
vex_printf(" }");
}
@@ -1741,7 +1742,7 @@
addHRegUse(u, HRmRead, i->Pin.AvBin32Fx4.srcL);
addHRegUse(u, HRmRead, i->Pin.AvBin32Fx4.srcR);
if (i->Pin.AvBin32Fx4.op =3D=3D Pavfp_MULF)
- addHRegUse(u, HRmWrite, hregPPC_GPR29(mode64));
+ addHRegUse(u, HRmWrite, hregPPC32_VR29());
return;
case Pin_AvUn32Fx4:
addHRegUse(u, HRmWrite, i->Pin.AvUn32Fx4.dst);
@@ -3374,7 +3375,9 @@
load -0.0 (0x8000_0000) to each 32-bit word of vB
this makes the add a noop.
*/
- UInt vB =3D 29; // XXX: Using r29 for temp
+ UInt vB =3D 29; // XXX: Using v29 for temp do not change
+ // without also changing
+ // getRegUsage_PPC32Instr
UInt konst =3D 0x1F;
=20
// Better way to load -0.0 (0x80000000) ?
|