Author: edelsohn
Branch: ppc-jit-backend
Changeset: r49312:c702afe5ff67
Date: 2011-11-11 10:27 -0500
http://bitbucket.org/pypy/pypy/changeset/c702afe5ff67/

Log:    Adjust emit_call for PPC64 ABI.

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
@@ -2,8 +2,8 @@
                                                           
gen_emit_unary_cmp_op)
 import pypy.jit.backend.ppc.ppcgen.condition as c
 import pypy.jit.backend.ppc.ppcgen.register as r
-from pypy.jit.backend.ppc.ppcgen.arch import (GPR_SAVE_AREA, IS_PPC_32, WORD,
-                                              BACKCHAIN_SIZE)
+from pypy.jit.backend.ppc.ppcgen.arch import (IS_PPC_32, WORD,
+                                              GPR_SAVE_AREA, BACKCHAIN_SIZE)
 
 from pypy.jit.metainterp.history import LoopToken, AbstractFailDescr, FLOAT
 from pypy.rlib.objectmodel import we_are_translated
@@ -518,21 +518,27 @@
                 stack_args.append(None)
 
         # adjust SP and compute size of parameter save area
-        stack_space = len(stack_args) * WORD + BACKCHAIN_SIZE
-        while stack_space % (4 * WORD) != 0:
-            stack_space += 1
         if IS_PPC_32:
+            stack_space = BACKCHAIN_SIZE + len(stack_args) * WORD
+            while stack_space % (4 * WORD) != 0:
+                stack_space += 1
             self.mc.stwu(r.SP.value, r.SP.value, -stack_space)
             self.mc.mflr(r.r0.value)
             self.mc.stw(r.r0.value, r.SP.value, stack_space + WORD)
         else:
+            # ABI fixed frame + 8 GPRs + arguments
+            stack_space = (6 + 8 + len(stack_args)) * WORD
             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 + 2 * WORD)
 
         # then we push everything on the stack
         for i, arg in enumerate(stack_args):
-            offset = (2 + i) * WORD
+            if IS_PPC_32:
+                abi = 2
+            else:
+                abi = 14
+            offset = (abi + i) * WORD
             if arg is not None:
                 self.mc.load_imm(r.r0, arg.value)
             if IS_PPC_32:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to