[pypy-commit] pypy ppc-backend-2: Add a third argument to failure_recovery_func() to pass a separate pointer

edelsohn noreply at buildbot.pypy.org
Mon Jun 11 20:34:47 CEST 2012


Author: edelsohn
Branch: ppc-backend-2
Changeset: r55599:54682b235002
Date: 2012-06-11 14:34 -0400
http://bitbucket.org/pypy/pypy/changeset/54682b235002/

Log:	Add a third argument to failure_recovery_func() to pass a separate
	pointer to managed registers arena.

diff --git a/pypy/jit/backend/ppc/ppc_assembler.py b/pypy/jit/backend/ppc/ppc_assembler.py
--- a/pypy/jit/backend/ppc/ppc_assembler.py
+++ b/pypy/jit/backend/ppc/ppc_assembler.py
@@ -179,13 +179,14 @@
     def setup_failure_recovery(self):
 
         @rgc.no_collect
-        def failure_recovery_func(mem_loc, spilling_pointer):
+        def failure_recovery_func(mem_loc, spilling_pointer,
+                                  managed_registers_pointer):
             """
                 mem_loc is a pointer to the beginning of the encoding.
 
                 spilling_pointer is the address of the spilling area.
             """
-            regs = rffi.cast(rffi.LONGP, spilling_pointer)
+            regs = rffi.cast(rffi.LONGP, managed_registers_pointer)
             fpregs = rffi.ptradd(regs, len(r.MANAGED_REGS))
             fpregs = rffi.cast(rffi.LONGP, fpregs)
             return self.decode_registers_and_descr(mem_loc, 
@@ -194,8 +195,8 @@
 
         self.failure_recovery_func = failure_recovery_func
 
-    recovery_func_sign = lltype.Ptr(lltype.FuncType([lltype.Signed, 
-            lltype.Signed], lltype.Signed))
+    recovery_func_sign = lltype.Ptr(lltype.FuncType([lltype.Signed] * 3,
+            lltype.Signed))
 
     @rgc.no_collect
     def decode_registers_and_descr(self, mem_loc, spp, registers, fp_registers):
@@ -551,8 +552,10 @@
         addr = rffi.cast(lltype.Signed, decode_func_addr)
 
         # load parameters into parameter registers
-        mc.load(r.RES.value, r.SPP.value, FORCE_INDEX_OFS)    # address of state encoding 
-        mc.mr(r.r4.value, r.SPP.value)                             # load spilling pointer
+        # address of state encoding 
+        mc.load(r.RES.value, r.SPP.value, FORCE_INDEX_OFS)
+        mc.mr(r.r4.value, r.SPP.value)  # load spilling pointer
+        mc.mr(r.r5.value, r.SPP.value)  # load managed registers pointer
         #
         # call decoding function
         mc.call(addr)


More information about the pypy-commit mailing list