[pypy-svn] pypy arm-backend-2: Fix an issue with a wrongly calculated offset size to choose an imm or register based operation

bivab commits-noreply at bitbucket.org
Thu Dec 30 19:45:12 CET 2010


Author: David Schneider <david.schneider at picle.org>
Branch: arm-backend-2
Changeset: r40290:167ec958fd2f
Date: 2010-12-29 20:34 +0100
http://bitbucket.org/pypy/pypy/changeset/167ec958fd2f/

Log:	Fix an issue with a wrongly calculated offset size to choose an imm
	or register based operation

diff --git a/pypy/jit/backend/arm/codebuilder.py b/pypy/jit/backend/arm/codebuilder.py
--- a/pypy/jit/backend/arm/codebuilder.py
+++ b/pypy/jit/backend/arm/codebuilder.py
@@ -60,23 +60,19 @@
             self.MOV_rr(reg.pc.value, reg.ip.value, cond=c)
 
     def B_offs(self, target_ofs, c=cond.AL):
-        target = target_ofs-arch.PC_OFFSET/2
         pos = self.currpos()
         if target_ofs > pos:
             raise NotImplementedError
         else:
+            target_ofs = pos - target_ofs
+            target = WORD + target_ofs + arch.PC_OFFSET/2
             if target >= 0 and target <= 0xFF:
-                pos = self.currpos()
-                target_ofs = pos - target_ofs
-                target = WORD + target_ofs + arch.PC_OFFSET/2
                 self.SUB_ri(reg.pc.value, reg.pc.value, target, cond=c)
             else:
                 assert c == cond.AL
                 self.LDR_ri(reg.ip.value, reg.pc.value, cond=c)
                 self.SUB_rr(reg.pc.value, reg.pc.value, reg.ip.value, cond=c)
-                pos = self.currpos()
-                target_ofs = pos - target_ofs
-                target = WORD + target_ofs + arch.PC_OFFSET/2
+                target += 2 * WORD
                 self.write32(target)
 
     def BL(self, target, c=cond.AL):
@@ -176,6 +172,7 @@
 
     def copy_to_raw_memory(self, addr):
         self._copy_to_raw_memory(addr)
+        self._dump(addr, "jit-backend-dump", 'arm')
 
     def currpos(self):
         return self.get_relative_pos()


More information about the Pypy-commit mailing list