[pypy-svn] r64570 - pypy/branch/pyjitpl5/pypy/jit/backend/x86

fijal at codespeak.net fijal at codespeak.net
Wed Apr 22 17:14:25 CEST 2009


Author: fijal
Date: Wed Apr 22 17:14:22 2009
New Revision: 64570

Modified:
   pypy/branch/pyjitpl5/pypy/jit/backend/x86/assembler.py
Log:
a fix for the case when there is a longer chain of suboperations, finalized
by fail. Still trying to find the test which explores that.


Modified: pypy/branch/pyjitpl5/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/x86/assembler.py	(original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/x86/assembler.py	Wed Apr 22 17:14:22 2009
@@ -391,6 +391,7 @@
     def call(self, addr, args, res):
         for i in range(len(args)):
             arg = args[i]
+            assert not isinstance(arg, MODRM)
             self.mc.PUSH(arg)
         self.mc.CALL(rel32(addr))
         self.mc.ADD(esp, imm(len(args) * WORD))
@@ -795,6 +796,9 @@
         if (guard_op.opnum == rop.GUARD_EXCEPTION or
             guard_op.opnum == rop.GUARD_NO_EXCEPTION):
             exc = True
+        if (exc and (guard_op.suboperations[0].opnum == rop.GUARD_EXCEPTION or
+                    guard_op.suboperations[0].opnum == rop.GUARD_NO_EXCEPTION)):
+            exc = False
         regalloc.walk_guard_ops(guard_op.inputargs, guard_op.suboperations, exc)
         self.mcstack.give_mc_back(self.mc2)
         self.mc2 = self.mc



More information about the Pypy-commit mailing list