[pypy-commit] pypy ppc-backend-2: Temporary kludge for FP arguments in set_initial_bindings.

edelsohn noreply at buildbot.pypy.org
Fri Jun 1 23:37:34 CEST 2012


Author: edelsohn
Branch: ppc-backend-2
Changeset: r55268:363a0e741a26
Date: 2012-06-01 17:37 -0400
http://bitbucket.org/pypy/pypy/changeset/363a0e741a26/

Log:	Temporary kludge for FP arguments in set_initial_bindings.

diff --git a/pypy/jit/backend/ppc/regalloc.py b/pypy/jit/backend/ppc/regalloc.py
--- a/pypy/jit/backend/ppc/regalloc.py
+++ b/pypy/jit/backend/ppc/regalloc.py
@@ -221,35 +221,34 @@
 
     def _set_initial_bindings(self, inputargs):
         arg_index = 0
-        count = 0
+        fparg_index = 0
         n_register_args = len(r.PARAM_REGS)
+        n_fpregister_args = len(r.PARAM_FPREGS)
         cur_frame_pos = -self.assembler.OFFSET_STACK_ARGS // WORD + 1
         for box in inputargs:
             assert isinstance(box, Box)
-            if arg_index < n_register_args:
-                if box.type == FLOAT:
-                    loc = r.PARAM_FPREGS[arg_index]
+            if box.type == FLOAT:
+                if fparg_index < n_fpregister_args:
+                    loc = r.PARAM_FPREGS[fparg_index]
                     self.try_allocate_reg(box, selected_reg=loc)
-                    arg_index += 1
+                    fparg_index += 1
                 else:
-                    loc = r.PARAM_REGS[arg_index]
-                    self.try_allocate_reg(box, selected_reg=loc)
-                    arg_index += 1
-            else:
-                # treat stack args as stack locations with a negative offset
-                if box.type == FLOAT:
                     if IS_PPC_32:
                         cur_frame_pos -= 2
                     else:
                         cur_frame_pos -= 1
-                    if count % 2 != 0: # Stack argument alignment
-                        cur_frame_pos -= 1
-                        count = 0
+                    loc = self.frame_manager.frame_pos(cur_frame_pos, box.type)
+                    self.frame_manager.set_binding(box, loc)
+            else:
+                if arg_index < n_register_args:
+                    loc = r.PARAM_REGS[arg_index]
+                    self.try_allocate_reg(box, selected_reg=loc)
+                    arg_index += 1
                 else:
+                # treat stack args as stack locations with a negative offset
                     cur_frame_pos -= 1
-                    count += 1
-                loc = self.frame_manager.frame_pos(cur_frame_pos, box.type)
-                self.frame_manager.set_binding(box, loc)
+                    loc = self.frame_manager.frame_pos(cur_frame_pos, box.type)
+                    self.frame_manager.set_binding(box, loc)
 
     def _update_bindings(self, locs, inputargs):
         used = {}


More information about the pypy-commit mailing list