[pypy-commit] pypy ppc-jit-backend: (bivab, hager): fix off-by-one bug in computation of offset to stack locations

hager noreply at buildbot.pypy.org
Tue Jan 10 12:19:11 CET 2012


Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r51198:308dd2d5e89f
Date: 2012-01-10 12:18 +0100
http://bitbucket.org/pypy/pypy/changeset/308dd2d5e89f/

Log:	(bivab, hager): fix off-by-one bug in computation of offset to stack
	locations

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
@@ -709,14 +709,14 @@
             # move immediate value to memory
             elif loc.is_stack():
                 self.mc.alloc_scratch_reg()
-                offset = loc.as_key() * WORD - WORD
+                offset = loc.as_key() * WORD
                 self.mc.load_imm(r.SCRATCH.value, value)
                 self.mc.store(r.SCRATCH.value, r.SPP.value, offset)
                 self.mc.free_scratch_reg()
                 return
             assert 0, "not supported location"
         elif prev_loc.is_stack():
-            offset = prev_loc.as_key() * WORD - WORD
+            offset = prev_loc.as_key() * WORD
             # move from memory to register
             if loc.is_reg():
                 reg = loc.as_key()
@@ -724,7 +724,7 @@
                 return
             # move in memory
             elif loc.is_stack():
-                target_offset = loc.as_key() * WORD - WORD
+                target_offset = loc.as_key() * WORD
                 self.mc.alloc_scratch_reg()
                 self.mc.load(r.SCRATCH.value, r.SPP.value, offset)
                 self.mc.store(r.SCRATCH.value, r.SPP.value, target_offset)
@@ -740,7 +740,7 @@
                 return
             # move to memory
             elif loc.is_stack():
-                offset = loc.as_key() * WORD - WORD
+                offset = loc.as_key() * WORD
                 self.mc.store(reg, r.SPP.value, offset)
                 return
             assert 0, "not supported location"
diff --git a/pypy/jit/backend/ppc/ppcgen/regalloc.py b/pypy/jit/backend/ppc/ppcgen/regalloc.py
--- a/pypy/jit/backend/ppc/ppcgen/regalloc.py
+++ b/pypy/jit/backend/ppc/ppcgen/regalloc.py
@@ -161,7 +161,7 @@
         arg_index = 0
         count = 0
         n_register_args = len(r.PARAM_REGS)
-        cur_frame_pos = -self.assembler.OFFSET_STACK_ARGS // WORD
+        cur_frame_pos = -self.assembler.OFFSET_STACK_ARGS // WORD + 1
         for box in inputargs:
             assert isinstance(box, Box)
             # handle inputargs in argument registers


More information about the pypy-commit mailing list