[pypy-svn] r70748 - pypy/branch/direct-assembler-call/pypy/jit/backend/x86

fijal at codespeak.net fijal at codespeak.net
Thu Jan 21 15:49:20 CET 2010


Author: fijal
Date: Thu Jan 21 15:49:19 2010
New Revision: 70748

Modified:
   pypy/branch/direct-assembler-call/pypy/jit/backend/x86/assembler.py
Log:
implement guard recovery code, forgot that we have a guard to handle as well


Modified: pypy/branch/direct-assembler-call/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/backend/x86/assembler.py	(original)
+++ pypy/branch/direct-assembler-call/pypy/jit/backend/x86/assembler.py	Thu Jan 21 15:49:19 2010
@@ -1252,8 +1252,9 @@
 
     def genop_guard_call_assembler(self, op, guard_op, addr,
                                    arglocs, result_loc):
-        # XXX temporary code. We generally want a separate entry point,
-        #     needs more tests
+        faildescr = guard_op.descr
+        fail_index = self.cpu.get_fail_descr_number(faildescr)
+        self.mc.MOV(mem(ebp, FORCE_INDEX_OFS), imm(fail_index))
         self._emit_call(rel32(op.descr._x86_direct_bootstrap_code), arglocs, 2,
                         tmp=eax)
         self._emit_call(rel32(self.assembler_helper_adr), [eax, arglocs[1]], 0,
@@ -1262,6 +1263,8 @@
             self.mc.FSTP(result_loc)
         else:
             assert result_loc is eax or result_loc is None
+        self.mc.CMP(mem(ebp, FORCE_INDEX_OFS), imm(0))
+        return self.implement_guard(addr, self.mc.JL)        
 
     def genop_discard_cond_call_gc_wb(self, op, arglocs):
         # use 'mc._mc' directly instead of 'mc', to avoid



More information about the Pypy-commit mailing list