[pypy-commit] pypy reusing-r11: fixes

arigo pypy.commits at gmail.com
Wed Apr 5 10:05:47 EDT 2017


Author: Armin Rigo <arigo at tunes.org>
Branch: reusing-r11
Changeset: r90967:b5e006d2ab59
Date: 2017-04-05 16:05 +0200
http://bitbucket.org/pypy/pypy/changeset/b5e006d2ab59/

Log:	fixes

diff --git a/rpython/jit/backend/x86/regloc.py b/rpython/jit/backend/x86/regloc.py
--- a/rpython/jit/backend/x86/regloc.py
+++ b/rpython/jit/backend/x86/regloc.py
@@ -556,13 +556,13 @@
             offset = r_uint(addr) - r_uint(self._scratch_register_value)
             offset = intmask(offset)
             if rx86.fits_in_32bits(offset):
-                print '_addr_as_reg_offset(%x) [REUSED r11+%d]' % (
-                    addr, offset)
+                #print '_addr_as_reg_offset(%x) [REUSED r11+%d]' % (
+                #    addr, offset)
                 return (X86_64_SCRATCH_REG.value, offset)
-            print '_addr_as_reg_offset(%x) [too far]' % (addr,)
+            #print '_addr_as_reg_offset(%x) [too far]' % (addr,)
             # else: fall through
-        else:
-            print '_addr_as_reg_offset(%x) [new]' % (addr,)
+        #else:
+        #    print '_addr_as_reg_offset(%x) [new]' % (addr,)
         self._scratch_register_value = addr
         self.MOV_ri(X86_64_SCRATCH_REG.value, addr)
         return (X86_64_SCRATCH_REG.value, 0)
@@ -572,10 +572,9 @@
         # where the static offset does not fit in 32-bits.  We have to fall
         # back to the X86_64_SCRATCH_REG.  Returns a new location encoded
         # as mode 'm' too.  These are all possibly rare cases.
-        ofs = self._addr_as_reg_offset(static_offset)
+        reg, ofs = self._addr_as_reg_offset(static_offset)
         self.forget_scratch_register()
-        self.LEA_ra(X86_64_SCRATCH_REG.value,
-                    (basereg, X86_64_SCRATCH_REG.value, 0, ofs))
+        self.LEA_ra(X86_64_SCRATCH_REG.value, (basereg, reg, 0, ofs))
         return (X86_64_SCRATCH_REG.value, 0)
 
     def _fix_static_offset_64_a(self, (basereg, scalereg,
@@ -584,38 +583,38 @@
         # where the static offset does not fit in 32-bits.  We have to fall
         # back to the X86_64_SCRATCH_REG.  In one case it is even more
         # annoying.  These are all possibly rare cases.
-        ofs = self._addr_as_reg_offset(static_offset)
+        reg, ofs = self._addr_as_reg_offset(static_offset)
         #
         if basereg != rx86.NO_BASE_REGISTER:
             self.forget_scratch_register()
-            self.LEA_ra(X86_64_SCRATCH_REG.value,
-                        (basereg, X86_64_SCRATCH_REG.value, 0, ofs))
+            self.LEA_ra(X86_64_SCRATCH_REG.value, (basereg, reg, 0, ofs))
+            reg = X86_64_SCRATCH_REG.value
             ofs = 0
-        return (X86_64_SCRATCH_REG.value, scalereg, scale, ofs)
+        return (reg, scalereg, scale, ofs)
 
     def _load_scratch(self, value):
         if self._scratch_register_value != 0:
             if self._scratch_register_value == value:
-                print '_load_scratch(%x) [REUSED]' % (value,)
+                #print '_load_scratch(%x) [REUSED]' % (value,)
                 return
             offset = r_uint(value) - r_uint(self._scratch_register_value)
             offset = intmask(offset)
             if rx86.fits_in_32bits(offset):
-                print '_load_scratch(%x) [LEA r11+%d]' % (value, offset)
-                global COUNT_
-                try:
-                    COUNT_ += 1
-                except NameError:
-                    COUNT_ = 1
-                if COUNT_ % 182 == 0:
-                    import pdb;pdb.set_trace()
+                #print '_load_scratch(%x) [LEA r11+%d]' % (value, offset)
+                #global COUNT_
+                #try:
+                #    COUNT_ += 1
+                #except NameError:
+                #    COUNT_ = 1
+                #if COUNT_ % 182 == 0:
+                #    import pdb;pdb.set_trace()
                 self.LEA_rm(X86_64_SCRATCH_REG.value,
                     (X86_64_SCRATCH_REG.value, offset))
                 self._scratch_register_value = value
                 return
-            print '_load_scratch(%x) [too far]' % (value,)
-        else:
-            print '_load_scratch(%x) [new]' % (value,)
+            #print '_load_scratch(%x) [too far]' % (value,)
+        #else:
+        #    print '_load_scratch(%x) [new]' % (value,)
         self._scratch_register_value = value
         self.MOV_ri(X86_64_SCRATCH_REG.value, value)
 
diff --git a/rpython/jit/backend/x86/test/test_jump.py b/rpython/jit/backend/x86/test/test_jump.py
--- a/rpython/jit/backend/x86/test/test_jump.py
+++ b/rpython/jit/backend/x86/test/test_jump.py
@@ -26,6 +26,11 @@
         assert isinstance(to_loc,   FrameLoc)
         self.ops.append(('immedmem2mem', from_loc, to_loc))
 
+    class mc:
+        @staticmethod
+        def forget_scratch_register():
+            pass
+
     def got(self, expected):
         print '------------------------ comparing ---------------------------'
         for op1, op2 in zip(self.ops, expected):
@@ -405,6 +410,10 @@
             print "pop", x
         def regalloc_immedmem2mem(self, x, y):
             print "?????????????????????????"
+        class mc:
+            @staticmethod
+            def forget_scratch_register():
+                pass
     def main():
         srclocs = [FrameLoc(9999, x, 'i') for x,y in CASE]
         dstlocs = [FrameLoc(9999, y, 'i') for x,y in CASE]
diff --git a/rpython/jit/backend/x86/test/test_regloc.py b/rpython/jit/backend/x86/test/test_regloc.py
--- a/rpython/jit/backend/x86/test/test_regloc.py
+++ b/rpython/jit/backend/x86/test/test_regloc.py
@@ -149,10 +149,8 @@
     def test_reuse_scratch_register(self):
         base_addr = intmask(0xFEDCBA9876543210)
         cb = LocationCodeBuilder64()
-        cb.begin_reuse_scratch_register()
         cb.MOV(ecx, heap(base_addr))
         cb.MOV(ecx, heap(base_addr + 8))
-        cb.end_reuse_scratch_register()
 
         expected_instructions = (
                 # mov r11, 0xFEDCBA9876543210
@@ -213,12 +211,9 @@
     def test_64bit_address_4(self):
         base_addr = intmask(0xFEDCBA9876543210)
         cb = LocationCodeBuilder64()
-        cb.begin_reuse_scratch_register()
-        assert cb._reuse_scratch_register is True
-        assert cb._scratch_register_known is False
+        assert cb._scratch_register_value == 0
         cb.MOV(ecx, AddressLoc(edx, esi, 2, base_addr))
-        assert cb._reuse_scratch_register is True
-        assert cb._scratch_register_known is False
+        assert cb._scratch_register_value == 0
         # this case is a CMP_ra
         #
         expected_instructions = (


More information about the pypy-commit mailing list