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();
}
#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
+*/
+
//..
//..
//.. /*---------------------------------------------------------*/
/* 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;
}