[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