[pypy-commit] pypy default: Not really sure, but I believe this to be a fix

arigo noreply at buildbot.pypy.org
Tue Jul 30 14:31:29 CEST 2013


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r65820:2cc1812e0ada
Date: 2013-07-30 14:30 +0200
http://bitbucket.org/pypy/pypy/changeset/2cc1812e0ada/

Log:	Not really sure, but I believe this to be a fix

diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -799,6 +799,15 @@
     consider_cond_call_gc_wb_array = consider_cond_call_gc_wb
 
     def consider_cond_call(self, op):
+        # A 32-bit-only, asmgcc-only issue: 'cond_call_register_arguments'
+        # contains edi and esi, which are also in asmgcroot.py:ASM_FRAMEDATA.
+        # We must make sure that edi and esi do not contain GC pointers.
+        if IS_X86_32 and self.assembler._is_asmgcc():
+            for box, loc in self.rm.reg_bindings.items():
+                if (loc == edi or loc == esi) and box.type == REF:
+                    self.rm.force_spill_var(box)
+                    assert box not in self.rm.reg_bindings
+        #
         assert op.result is None
         args = op.getarglist()
         assert 2 <= len(args) <= 4 + 2     # maximum 4 arguments


More information about the pypy-commit mailing list