Tweak PPC register usage; gcc doesn't like it when you mess with r31 for some reason
parent
6f432811f5
commit
7741096bff
|
@ -11,8 +11,8 @@ big-endian on
|
||||||
|
|
||||||
4 jit-code-format set
|
4 jit-code-format set
|
||||||
|
|
||||||
: ds-reg 30 ;
|
: ds-reg 29 ;
|
||||||
: rs-reg 31 ;
|
: rs-reg 30 ;
|
||||||
|
|
||||||
: factor-area-size ( -- n ) 4 bootstrap-cells ;
|
: factor-area-size ( -- n ) 4 bootstrap-cells ;
|
||||||
|
|
||||||
|
|
|
@ -19,10 +19,10 @@ namespaces compiler.codegen.fixup ;
|
||||||
IN: cpu.ppc
|
IN: cpu.ppc
|
||||||
|
|
||||||
! PowerPC register assignments:
|
! PowerPC register assignments:
|
||||||
! r2-r28: integer vregs
|
! r2-r27: integer vregs
|
||||||
! r29: integer scratch
|
! r28: integer scratch
|
||||||
! r30: data stack
|
! r29: data stack
|
||||||
! r31: retain stack
|
! r30: retain stack
|
||||||
! f0-f29: float vregs
|
! f0-f29: float vregs
|
||||||
! f30, f31: float scratch
|
! f30, f31: float scratch
|
||||||
|
|
||||||
|
@ -40,13 +40,13 @@ IN: cpu.ppc
|
||||||
|
|
||||||
M: ppc machine-registers
|
M: ppc machine-registers
|
||||||
{
|
{
|
||||||
{ int-regs T{ range f 2 27 1 } }
|
{ int-regs T{ range f 2 26 1 } }
|
||||||
{ double-float-regs T{ range f 0 28 1 } }
|
{ double-float-regs T{ range f 0 28 1 } }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
: scratch-reg 29 ; inline
|
: scratch-reg 28 ; inline
|
||||||
: fp-scratch-reg-1 30 ; inline
|
: fp-scratch-reg-1 29 ; inline
|
||||||
: fp-scratch-reg-2 31 ; inline
|
: fp-scratch-reg-2 30 ; inline
|
||||||
|
|
||||||
M: ppc two-operand? f ;
|
M: ppc two-operand? f ;
|
||||||
|
|
||||||
|
|
16
vm/cpu-ppc.S
16
vm/cpu-ppc.S
|
@ -60,8 +60,8 @@ DEF(void,c_to_factor,(CELL quot)):
|
||||||
PROLOGUE
|
PROLOGUE
|
||||||
|
|
||||||
SAVE_INT(r13,0) /* save GPRs */
|
SAVE_INT(r13,0) /* save GPRs */
|
||||||
/* don't save ds pointer */
|
SAVE_INT(r14,1)
|
||||||
/* don't save rs pointer */
|
SAVE_INT(r15,2)
|
||||||
SAVE_INT(r16,3)
|
SAVE_INT(r16,3)
|
||||||
SAVE_INT(r17,4)
|
SAVE_INT(r17,4)
|
||||||
SAVE_INT(r18,5)
|
SAVE_INT(r18,5)
|
||||||
|
@ -75,9 +75,6 @@ DEF(void,c_to_factor,(CELL quot)):
|
||||||
SAVE_INT(r26,13)
|
SAVE_INT(r26,13)
|
||||||
SAVE_INT(r27,14)
|
SAVE_INT(r27,14)
|
||||||
SAVE_INT(r28,15)
|
SAVE_INT(r28,15)
|
||||||
SAVE_INT(r29,16)
|
|
||||||
SAVE_INT(r30,17)
|
|
||||||
SAVE_INT(r31,18)
|
|
||||||
|
|
||||||
SAVE_FP(f14,20) /* save FPRs */
|
SAVE_FP(f14,20) /* save FPRs */
|
||||||
SAVE_FP(f15,22)
|
SAVE_FP(f15,22)
|
||||||
|
@ -125,10 +122,7 @@ DEF(void,c_to_factor,(CELL quot)):
|
||||||
RESTORE_FP(f15,22)
|
RESTORE_FP(f15,22)
|
||||||
RESTORE_FP(f14,20) /* save FPRs */
|
RESTORE_FP(f14,20) /* save FPRs */
|
||||||
|
|
||||||
RESTORE_INT(r31,18) /* restore GPRs */
|
RESTORE_INT(r28,15) /* restore GPRs */
|
||||||
RESTORE_INT(r30,17)
|
|
||||||
RESTORE_INT(r29,16)
|
|
||||||
RESTORE_INT(r28,15)
|
|
||||||
RESTORE_INT(r27,14)
|
RESTORE_INT(r27,14)
|
||||||
RESTORE_INT(r26,13)
|
RESTORE_INT(r26,13)
|
||||||
RESTORE_INT(r25,12)
|
RESTORE_INT(r25,12)
|
||||||
|
@ -141,8 +135,8 @@ DEF(void,c_to_factor,(CELL quot)):
|
||||||
RESTORE_INT(r18,5)
|
RESTORE_INT(r18,5)
|
||||||
RESTORE_INT(r17,4)
|
RESTORE_INT(r17,4)
|
||||||
RESTORE_INT(r16,3)
|
RESTORE_INT(r16,3)
|
||||||
/* don't restore rs pointer */
|
RESTORE_INT(r15,2)
|
||||||
/* don't restore ds pointer */
|
RESTORE_INT(r14,1)
|
||||||
RESTORE_INT(r13,0)
|
RESTORE_INT(r13,0)
|
||||||
|
|
||||||
EPILOGUE
|
EPILOGUE
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#define FACTOR_CPU_STRING "ppc"
|
#define FACTOR_CPU_STRING "ppc"
|
||||||
#define F_FASTCALL
|
#define F_FASTCALL
|
||||||
|
|
||||||
register CELL ds asm("r30");
|
register CELL ds asm("r29");
|
||||||
register CELL rs asm("r31");
|
register CELL rs asm("r30");
|
||||||
|
|
||||||
void c_to_factor(CELL quot);
|
void c_to_factor(CELL quot);
|
||||||
void undefined(CELL word);
|
void undefined(CELL word);
|
||||||
|
|
Loading…
Reference in New Issue