[pypy-commit] pypy default: Test and fix for issue #1632.

arigo noreply at buildbot.pypy.org
Sat Nov 9 11:27:38 CET 2013


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r67891:a3af3cc958c5
Date: 2013-11-09 11:27 +0100
http://bitbucket.org/pypy/pypy/changeset/a3af3cc958c5/

Log:	Test and fix for issue #1632.

diff --git a/rpython/jit/backend/x86/callbuilder.py b/rpython/jit/backend/x86/callbuilder.py
--- a/rpython/jit/backend/x86/callbuilder.py
+++ b/rpython/jit/backend/x86/callbuilder.py
@@ -304,8 +304,12 @@
         except IndexError:
             return None
         if hint in self.DONT_MOVE_GPR:
-            self.ARGUMENTS_GPR[i] = hint
-            res = hint
+            for j in range(i):
+                if hint is self.ARGUMENTS_GPR[j]:
+                    break
+            else:
+                self.ARGUMENTS_GPR[i] = hint
+                res = hint
         return res
 
     def _unused_xmm(self):
diff --git a/rpython/jit/backend/x86/test/test_callbuilder.py b/rpython/jit/backend/x86/test/test_callbuilder.py
new file mode 100644
--- /dev/null
+++ b/rpython/jit/backend/x86/test/test_callbuilder.py
@@ -0,0 +1,33 @@
+from rpython.jit.backend.x86 import callbuilder
+from rpython.jit.backend.x86.regloc import esi, edi, ebx, ecx, ImmedLoc
+
+
+class FakeAssembler:
+    mc = None
+    class _regalloc:
+        class rm:
+            free_regs = [ebx]
+
+    def __init__(self):
+        self._log = []
+
+    def _is_asmgcc(self):
+        return False
+
+    def regalloc_mov(self, src, dst):
+        self._log.append(('mov', src, dst))
+
+
+def test_base_case():
+    asm = FakeAssembler()
+    cb = callbuilder.CallBuilder64(asm, ImmedLoc(12345), [ebx, ebx])
+    cb.prepare_arguments()
+    assert asm._log == [('mov', ebx, edi),
+                        ('mov', ebx, esi)]
+
+def test_bug_call_release_gil():
+    asm = FakeAssembler()
+    cb = callbuilder.CallBuilder64(asm, ImmedLoc(12345), [ebx, ebx])
+    cb.select_call_release_gil_mode()
+    cb.prepare_arguments()
+    assert asm._log == [('mov', ebx, ecx)]


More information about the pypy-commit mailing list