Author: hager <[email protected]>
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
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to