]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Changed the register setup a little
authorCerion Armour-Brown <cerion@valgrind.org>
Wed, 9 Feb 2005 21:01:22 +0000 (21:01 +0000)
committerCerion Armour-Brown <cerion@valgrind.org>
Wed, 9 Feb 2005 21:01:22 +0000 (21:01 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@878

VEX/priv/host-ppc32/hdefs.c
VEX/priv/host-ppc32/hdefs.h
VEX/priv/host-ppc32/isel.c

index 667177e97f999cc46a8ee2e14187dbc1166e84e3..d3cd5b77c15945cb5592fccfd7a1fd1da46a4d14 100644 (file)
@@ -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();
 }
 
 
index 2c55d5b5892f9be4b85e6fae598283f4c8c058c7..e4d2464abddb3c00fcab01fbb3a1e51df02ee931 100644 (file)
@@ -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 );
index 41e76b76e8d8c2301e88d60f1b0f633be08e5fd6..a969903b192797d90b59073f93a6c9325ba41025 100644 (file)
 #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;
    }