Author: hager <[email protected]>
Branch: ppc-jit-backend
Changeset: r46379:39a826271ef6
Date: 2011-08-08 17:58 +0200
http://bitbucket.org/pypy/pypy/changeset/39a826271ef6/

Log:    Store indices of those memory pieces in faildescr which hold ~real~
        failargs.

diff --git a/pypy/jit/backend/ppc/runner.py b/pypy/jit/backend/ppc/runner.py
--- a/pypy/jit/backend/ppc/runner.py
+++ b/pypy/jit/backend/ppc/runner.py
@@ -44,6 +44,7 @@
 
         codebuilder = PPCBuilder()
         
+        # initialize registers from memory
         self.next_free_register = 3
         for index, arg in enumerate(inputargs):
             self.reg_map[arg] = self.next_free_register
@@ -68,22 +69,27 @@
         self.reg_map = {}
 
         codebuilder = looptoken.codebuilder
+        # jump to the bridge
         current_pos = codebuilder.get_relative_pos()
         offset = current_pos - descr.patch_pos
         codebuilder.b(offset)
         codebuilder.patch_op(descr.patch_op)
 
+        # initialize registers from memory
         self.next_free_register = 3
+        use_index = 0
         for index, arg in enumerate(inputargs):
             self.reg_map[arg] = self.next_free_register
-            addr = self.fail_boxes_int.get_addr_for_num(index)
+            addr = self.fail_boxes_int.get_addr_for_num(
+                    descr.used_mem_indices[use_index])
             codebuilder.load_from(self.next_free_register, addr)
             self.next_free_register += 1
+            use_index += 1
             
         self._walk_trace_ops(codebuilder, operations)
         self._make_epilogue(codebuilder)
 
-        f = codebuilder.assemble(True)
+        f = codebuilder.assemble()
         looptoken.ppc_code = f
         looptoken.codebuilder = codebuilder
 
@@ -99,17 +105,20 @@
             codebuilder.patch_op(op_index)
 
             # store return parameters in memory
+            used_mem_indices = []
             for index, reg in enumerate(reglist):
                 # if reg is None, then there is a hole in the failargs
                 if reg is not None:
                     addr = self.fail_boxes_int.get_addr_for_num(index)
                     codebuilder.store_reg(reg, addr)
+                    used_mem_indices.append(index)
 
             patch_op = codebuilder.get_number_of_ops()
             patch_pos = codebuilder.get_relative_pos()
             descr = self.saved_descr[fail_index]
             descr.patch_op = patch_op
             descr.patch_pos = patch_pos
+            descr.used_mem_indices = used_mem_indices
 
             codebuilder.li(3, fail_index)            
             codebuilder.blr()
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to