Author: hager <[email protected]>
Branch: ppc-jit-backend
Changeset: r49127:8c0775a2ea17
Date: 2011-11-10 12:58 +0100
http://bitbucket.org/pypy/pypy/changeset/8c0775a2ea17/

Log:    First set SP when saving managed registers

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
@@ -292,16 +292,18 @@
     def _gen_exit_path(self):
         mc = PPCBuilder() 
         #
-        self._save_managed_regs(mc)
-        # adjust SP (r1)
+        # compute offset to new SP
         size = WORD * (len(r.MANAGED_REGS)) + BACKCHAIN_SIZE
-        # XXX do quadword alignment
-        #while size % (4 * WORD) != 0:
-        #    size += WORD
+        # set SP
         if IS_PPC_32:
             mc.stwu(r.SP.value, r.SP.value, -size)
         else:
             mc.stdu(r.SP.value, r.SP.value, -size)
+        self._save_managed_regs(mc)
+        # adjust SP (r1)
+        # XXX do quadword alignment
+        #while size % (4 * WORD) != 0:
+        #    size += WORD
         #
         decode_func_addr = llhelper(self.recovery_func_sign,
                 self.failure_recovery_func)
@@ -352,12 +354,12 @@
     # Save all registers which are managed by the register
     # allocator on top of the stack before decoding.
     def _save_managed_regs(self, mc):
-        for i in range(len(r.MANAGED_REGS) - 1, -1, -1):
+        for i in range(len(r.MANAGED_REGS)):
             reg = r.MANAGED_REGS[i]
             if IS_PPC_32:
-                mc.stw(reg.value, r.SP.value, -(len(r.MANAGED_REGS) - i) * 
WORD)
+                mc.stw(reg.value, r.SP.value, i * WORD + BACKCHAIN_SIZE)
             else:
-                mc.std(reg.value, r.SP.value, -(len(r.MANAGED_REGS) - i) * 
WORD)
+                mc.std(reg.value, r.SP.value, i * WORD + BACKCHAIN_SIZE)
 
     def gen_bootstrap_code(self, nonfloatlocs, inputargs):
         for i in range(len(nonfloatlocs)):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to