From: Cerion Armour-Brown Date: Wed, 9 Feb 2005 21:01:22 +0000 (+0000) Subject: Changed the register setup a little X-Git-Tag: svn/VALGRIND_3_0_1^2~456 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=47b609ab7e0447d5c44019e8ade5b64a6289e9f3;p=thirdparty%2Fvalgrind.git Changed the register setup a little git-svn-id: svn://svn.valgrind.org/vex/trunk@878 --- diff --git a/VEX/priv/host-ppc32/hdefs.c b/VEX/priv/host-ppc32/hdefs.c index 667177e97f..d3cd5b77c1 100644 --- a/VEX/priv/host-ppc32/hdefs.c +++ b/VEX/priv/host-ppc32/hdefs.c @@ -142,73 +142,73 @@ HReg hregPPC32_FPR31 ( void ) { return mkHReg(31, HRcFlt64, False); } void getAllocableRegs_PPC32 ( Int* nregs, HReg** arr ) { - *nregs = 60; + *nregs = 59; *arr = LibVEX_Alloc(*nregs * sizeof(HReg)); - (*arr)[ 0] = hregPPC32_GPR0(); + // GPR0 = reserved // GPR1 = stack pointer // GPR2 = TOC pointer - (*arr)[ 1] = hregPPC32_GPR3(); - (*arr)[ 2] = hregPPC32_GPR4(); - (*arr)[ 3] = hregPPC32_GPR5(); - (*arr)[ 4] = hregPPC32_GPR6(); - (*arr)[ 5] = hregPPC32_GPR7(); - (*arr)[ 6] = hregPPC32_GPR8(); - (*arr)[ 7] = hregPPC32_GPR9(); - (*arr)[ 8] = hregPPC32_GPR10(); - (*arr)[ 9] = hregPPC32_GPR11(); - (*arr)[10] = hregPPC32_GPR12(); + (*arr)[ 0] = hregPPC32_GPR3(); + (*arr)[ 1] = hregPPC32_GPR4(); + (*arr)[ 2] = hregPPC32_GPR5(); + (*arr)[ 3] = hregPPC32_GPR6(); + (*arr)[ 4] = hregPPC32_GPR7(); + (*arr)[ 5] = hregPPC32_GPR8(); + (*arr)[ 6] = hregPPC32_GPR9(); + (*arr)[ 7] = hregPPC32_GPR10(); + (*arr)[ 8] = hregPPC32_GPR11(); + (*arr)[ 9] = hregPPC32_GPR12(); // GPR13 = thread specific pointer - (*arr)[11] = hregPPC32_GPR14(); - (*arr)[12] = hregPPC32_GPR15(); - (*arr)[13] = hregPPC32_GPR16(); - (*arr)[14] = hregPPC32_GPR17(); - (*arr)[15] = hregPPC32_GPR18(); - (*arr)[16] = hregPPC32_GPR19(); - (*arr)[17] = hregPPC32_GPR20(); - (*arr)[18] = hregPPC32_GPR21(); - (*arr)[19] = hregPPC32_GPR22(); - (*arr)[20] = hregPPC32_GPR23(); - (*arr)[21] = hregPPC32_GPR24(); - (*arr)[22] = hregPPC32_GPR25(); - (*arr)[23] = hregPPC32_GPR26(); - (*arr)[24] = hregPPC32_GPR27(); - (*arr)[25] = hregPPC32_GPR28(); - (*arr)[26] = hregPPC32_GPR29(); - (*arr)[27] = hregPPC32_GPR30(); + (*arr)[10] = hregPPC32_GPR14(); + (*arr)[11] = hregPPC32_GPR15(); + (*arr)[12] = hregPPC32_GPR16(); + (*arr)[13] = hregPPC32_GPR17(); + (*arr)[14] = hregPPC32_GPR18(); + (*arr)[15] = hregPPC32_GPR19(); + (*arr)[16] = hregPPC32_GPR20(); + (*arr)[17] = hregPPC32_GPR21(); + (*arr)[18] = hregPPC32_GPR22(); + (*arr)[19] = hregPPC32_GPR23(); + (*arr)[20] = hregPPC32_GPR24(); + (*arr)[21] = hregPPC32_GPR25(); + (*arr)[22] = hregPPC32_GPR26(); + (*arr)[23] = hregPPC32_GPR27(); + (*arr)[24] = hregPPC32_GPR28(); + (*arr)[25] = hregPPC32_GPR29(); + (*arr)[26] = hregPPC32_GPR30(); // GPR31 = GuestStatePtr - (*arr)[28] = hregPPC32_FPR0(); - (*arr)[29] = hregPPC32_FPR1(); - (*arr)[30] = hregPPC32_FPR2(); - (*arr)[31] = hregPPC32_FPR3(); - (*arr)[32] = hregPPC32_FPR4(); - (*arr)[33] = hregPPC32_FPR5(); - (*arr)[34] = hregPPC32_FPR6(); - (*arr)[35] = hregPPC32_FPR7(); - (*arr)[36] = hregPPC32_FPR8(); - (*arr)[37] = hregPPC32_FPR9(); - (*arr)[38] = hregPPC32_FPR10(); - (*arr)[39] = hregPPC32_FPR11(); - (*arr)[40] = hregPPC32_FPR12(); - (*arr)[41] = hregPPC32_FPR13(); - (*arr)[42] = hregPPC32_FPR14(); - (*arr)[43] = hregPPC32_FPR15(); - (*arr)[44] = hregPPC32_FPR16(); - (*arr)[45] = hregPPC32_FPR17(); - (*arr)[46] = hregPPC32_FPR18(); - (*arr)[47] = hregPPC32_FPR19(); - (*arr)[48] = hregPPC32_FPR20(); - (*arr)[49] = hregPPC32_FPR21(); - (*arr)[50] = hregPPC32_FPR22(); - (*arr)[51] = hregPPC32_FPR23(); - (*arr)[52] = hregPPC32_FPR24(); - (*arr)[53] = hregPPC32_FPR25(); - (*arr)[54] = hregPPC32_FPR26(); - (*arr)[55] = hregPPC32_FPR27(); - (*arr)[56] = hregPPC32_FPR28(); - (*arr)[57] = hregPPC32_FPR29(); - (*arr)[58] = hregPPC32_FPR30(); - (*arr)[59] = hregPPC32_FPR31(); + (*arr)[27] = hregPPC32_FPR0(); + (*arr)[28] = hregPPC32_FPR1(); + (*arr)[29] = hregPPC32_FPR2(); + (*arr)[30] = hregPPC32_FPR3(); + (*arr)[31] = hregPPC32_FPR4(); + (*arr)[32] = hregPPC32_FPR5(); + (*arr)[33] = hregPPC32_FPR6(); + (*arr)[34] = hregPPC32_FPR7(); + (*arr)[35] = hregPPC32_FPR8(); + (*arr)[36] = hregPPC32_FPR9(); + (*arr)[37] = hregPPC32_FPR10(); + (*arr)[38] = hregPPC32_FPR11(); + (*arr)[39] = hregPPC32_FPR12(); + (*arr)[40] = hregPPC32_FPR13(); + (*arr)[41] = hregPPC32_FPR14(); + (*arr)[42] = hregPPC32_FPR15(); + (*arr)[43] = hregPPC32_FPR16(); + (*arr)[44] = hregPPC32_FPR17(); + (*arr)[45] = hregPPC32_FPR18(); + (*arr)[46] = hregPPC32_FPR19(); + (*arr)[47] = hregPPC32_FPR20(); + (*arr)[48] = hregPPC32_FPR21(); + (*arr)[49] = hregPPC32_FPR22(); + (*arr)[50] = hregPPC32_FPR23(); + (*arr)[51] = hregPPC32_FPR24(); + (*arr)[52] = hregPPC32_FPR25(); + (*arr)[53] = hregPPC32_FPR26(); + (*arr)[54] = hregPPC32_FPR27(); + (*arr)[55] = hregPPC32_FPR28(); + (*arr)[56] = hregPPC32_FPR29(); + (*arr)[57] = hregPPC32_FPR30(); + (*arr)[58] = hregPPC32_FPR31(); } diff --git a/VEX/priv/host-ppc32/hdefs.h b/VEX/priv/host-ppc32/hdefs.h index 2c55d5b589..e4d2464abd 100644 --- a/VEX/priv/host-ppc32/hdefs.h +++ b/VEX/priv/host-ppc32/hdefs.h @@ -48,7 +48,7 @@ extern void ppHRegPPC32 ( HReg ); -extern HReg hregPPC32_GPR0 ( void ); +extern HReg hregPPC32_GPR0 ( void ); // reserved extern HReg hregPPC32_GPR1 ( void ); // Stack Frame Pointer extern HReg hregPPC32_GPR2 ( void ); // TOC pointer - not used extern HReg hregPPC32_GPR3 ( void ); diff --git a/VEX/priv/host-ppc32/isel.c b/VEX/priv/host-ppc32/isel.c index 41e76b76e8..a969903b19 100644 --- a/VEX/priv/host-ppc32/isel.c +++ b/VEX/priv/host-ppc32/isel.c @@ -43,6 +43,36 @@ #include "host-generic/h_generic_regs.h" //.. #include "host-generic/h_generic_simd64.h" #include "host-ppc32/hdefs.h" + +/*---------------------------------------------------------*/ +/*--- Register Usage Conventions ---*/ +/*---------------------------------------------------------*/ +/* + Integer Regs + ------------ + GPR0 Reserved + GPR1 Stack Pointer + GPR2 TOC pointer - not used + GPR3:12 Allocateable + GPR13 Thread-specific pointer - not used + GPR14:30 Allocateable + GPR31 GuestStatePointer + + Of Allocateable regs: + GPR3:12 Caller-saved regs + GPR14:30 Callee-saved regs + + GPR3:10 Parameter-carrying regs + + + Floating Point Regs + ------------------- + FPR0:31 Allocateable + + FPR0:13 Caller-saved regs + FPR14:31 Callee-saved regs +*/ + //.. //.. //.. /*---------------------------------------------------------*/ @@ -1147,7 +1177,7 @@ static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e ) /* Marshal args, do the call, clear stack. */ doHelperCall( env, False, NULL, e->Iex.CCall.cee, e->Iex.CCall.args ); - addInstr(env, mk_iMOVds_RR(dst, hregPPC32_GPR0())); + addInstr(env, mk_iMOVds_RR(dst, hregPPC32_GPR3())); return dst; }