[pypy-commit] pypy arm-backed-float: make sure to use imm values for offset calculations when possible

bivab noreply at buildbot.pypy.org
Thu Jun 2 11:47:08 CEST 2011


Author: David Schneider <david.schneider at picle.org>
Branch: arm-backed-float
Changeset: r44647:93e1b8303ca3
Date: 2011-06-02 11:58 +0200
http://bitbucket.org/pypy/pypy/changeset/93e1b8303ca3/

Log:	make sure to use imm values for offset calculations when possible

diff --git a/pypy/jit/backend/arm/assembler.py b/pypy/jit/backend/arm/assembler.py
--- a/pypy/jit/backend/arm/assembler.py
+++ b/pypy/jit/backend/arm/assembler.py
@@ -817,21 +817,21 @@
                     self.mc.LDR_ri(loc.value, r.fp.value, imm=-offset.value, cond=cond)
             elif loc.is_stack() and prev_loc.is_vfp_reg():
                 # spill vfp register
-                offset = ConstInt(loc.position*-WORD)
+                offset = ConstInt(loc.position*WORD)
                 if not _check_imm_arg(offset):
                     self.mc.gen_load_int(temp.value, offset.value)
-                    self.mc.ADD_rr(temp.value, r.fp.value, temp.value)
+                    self.mc.SUB_rr(temp.value, r.fp.value, temp.value)
                 else:
-                    self.mc.ADD_rr(temp.value, r.fp.value, offset.value)
+                    self.mc.SUB_ri(temp.value, r.fp.value, offset.value)
                 self.mc.VSTR(prev_loc.value, temp.value, cond=cond)
             elif loc.is_vfp_reg() and prev_loc.is_stack():
                 # load spilled value into vfp reg
-                offset = ConstInt(prev_loc.position*-WORD)
+                offset = ConstInt(prev_loc.position*WORD)
                 if not _check_imm_arg(offset):
                     self.mc.gen_load_int(temp.value, offset.value)
-                    self.mc.ADD_rr(temp.value, r.fp.value, temp.value)
+                    self.mc.SUB_rr(temp.value, r.fp.value, temp.value)
                 else:
-                    self.mc.ADD_rr(temp.value, r.fp.value, offset.value)
+                    self.mc.SUB_ri(temp.value, r.fp.value, offset.value)
                 self.mc.VLDR(loc.value, temp.value, cond=cond)
             else:
                 assert 0, 'unsupported case'


More information about the pypy-commit mailing list