[pypy-commit] pypy ppc-jit-backend: Adjust frame layout and store TOC pointer.
edelsohn
noreply at buildbot.pypy.org
Fri Nov 11 15:57:34 CET 2011
Author: edelsohn
Branch: ppc-jit-backend
Changeset: r49310:4cf958dae77e
Date: 2011-11-11 09:57 -0500
http://bitbucket.org/pypy/pypy/changeset/4cf958dae77e/
Log: Adjust frame layout and store TOC pointer.
diff --git a/pypy/jit/backend/ppc/ppcgen/arch.py b/pypy/jit/backend/ppc/ppcgen/arch.py
--- a/pypy/jit/backend/ppc/ppcgen/arch.py
+++ b/pypy/jit/backend/ppc/ppcgen/arch.py
@@ -10,7 +10,7 @@
else:
WORD = 8
IS_PPC_32 = False
- BACKCHAIN_SIZE = 3 * WORD
+ BACKCHAIN_SIZE = 4 * WORD
IS_PPC_64 = not IS_PPC_32
MY_COPY_OF_REGS = 0
diff --git a/pypy/jit/backend/ppc/ppcgen/opassembler.py b/pypy/jit/backend/ppc/ppcgen/opassembler.py
--- a/pypy/jit/backend/ppc/ppcgen/opassembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/opassembler.py
@@ -527,7 +527,7 @@
else:
self.mc.stdu(r.SP.value, r.SP.value, -stack_space)
self.mc.mflr(r.r0.value)
- self.mc.std(r.r0.value, r.SP.value, stack_space + WORD)
+ self.mc.std(r.r0.value, r.SP.value, stack_space + 2 * WORD)
# then we push everything on the stack
for i, arg in enumerate(stack_args):
@@ -574,14 +574,14 @@
self.mc.bl_abs(adr)
self.mc.lwz(r.r0.value, r.SP.value, stack_space + WORD)
else:
- self.mc.std(r.r2.value, r.SP.value, 40)
+ self.mc.std(r.r2.value, r.SP.value, 3 * WORD)
self.mc.load_from_addr(r.r0, adr)
- self.mc.load_from_addr(r.r2, adr+WORD)
- self.mc.load_from_addr(r.r11, adr+2*WORD)
+ self.mc.load_from_addr(r.r2, adr + WORD)
+ self.mc.load_from_addr(r.r11, adr + 2 * WORD)
self.mc.mtctr(r.r0.value)
self.mc.bctrl()
- self.mc.ld(r.r2.value, r.SP.value, 40)
- self.mc.ld(r.r0.value, r.SP.value, stack_space + WORD)
+ self.mc.ld(r.r2.value, r.SP.value, 3 * WORD)
+ self.mc.ld(r.r0.value, r.SP.value, stack_space + 2 * WORD)
self.mc.mtlr(r.r0.value)
self.mc.addi(r.SP.value, r.SP.value, stack_space)
diff --git a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
--- a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
@@ -174,7 +174,7 @@
else:
self.mc.stdu(r.SP.value, r.SP.value, -frame_depth)
self.mc.mflr(r.r0.value)
- self.mc.std(r.r0.value, r.SP.value, frame_depth + WORD)
+ self.mc.std(r.r0.value, r.SP.value, frame_depth + 2 * WORD)
# compute spilling pointer (SPP)
self.mc.addi(r.SPP.value, r.SP.value, frame_depth
@@ -381,12 +381,15 @@
# load address of decoding function into r0
mc.load_imm(r.r0, addr)
if IS_PPC_64:
+ mc.std(r.r2.value, r.SP.value, 3 * WORD)
# load TOC pointer and environment pointer
mc.load_imm(r.r2, r2_value)
mc.load_imm(r.r11, r11_value)
# ... and branch there
mc.mtctr(r.r0.value)
mc.bctrl()
+ if IS_PPC_64:
+ mc.ld(r.r2.value, r.SP.value, 3 * WORD)
#
mc.addi(r.SP.value, r.SP.value, size)
# save SPP in r5
@@ -398,7 +401,7 @@
if IS_PPC_32:
mc.lwz(r.r4.value, r.r5.value, offset_to_old_backchain)
else:
- mc.ld(r.r4.value, r.r5.value, offset_to_old_backchain)
+ mc.ld(r.r4.value, r.r5.value, offset_to_old_backchain + WORD)
mc.mtlr(r.r4.value) # restore LR
# From SPP, we have a constant offset of GPR_SAVE_AREA_AND_FORCE_INDEX
More information about the pypy-commit
mailing list