Author: Maciej Fijalkowski <[email protected]>
Branch: kill-gen-store-back-in
Changeset: r64568:cf108e905352
Date: 2013-05-26 17:12 +0200
http://bitbucket.org/pypy/pypy/changeset/cf108e905352/
Log: implement missing pieces on x86 backend
diff --git a/rpython/jit/backend/x86/assembler.py
b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -79,6 +79,7 @@
allblocks)
self.target_tokens_currently_compiling = {}
self.frame_depth_to_patch = []
+ self._finish_gcmap = lltype.nullptr(jitframe.GCMAP)
def teardown(self):
self.pending_guard_tokens = None
@@ -1806,7 +1807,11 @@
self.mov(fail_descr_loc, RawEbpLoc(ofs))
arglist = op.getarglist()
if arglist and arglist[0].type == REF:
- gcmap = self.gcmap_for_finish
+ if self._finish_gcmap:
+ self._finish_gcmap[0] |= r_uint(1) # rax
+ gcmap = self._finish_gcmap
+ else:
+ gcmap = self.gcmap_for_finish
self.push_gcmap(self.mc, gcmap, store=True)
else:
# note that the 0 here is redundant, but I would rather
@@ -2230,6 +2235,15 @@
assert 0 < offset <= 127
self.mc.overwrite(jmp_location - 1, chr(offset))
+ def store_force_descr(self, op, fail_locs, frame_depth):
+ guard_token = self.implement_guard_recovery(op.opnum,
+ op.getdescr(),
+ op.getfailargs(),
+ fail_locs, frame_depth)
+ self._finish_gcmap = guard_token.gcmap
+ self._store_force_index(op)
+ self.store_info_on_descr(0, guard_token)
+
def force_token(self, reg):
# XXX kill me
assert isinstance(reg, RegLoc)
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
@@ -1336,6 +1336,11 @@
#if jump_op is not None and jump_op.getdescr() is descr:
# self._compute_hint_frame_locations_from_descr(descr)
+ def consider_guard_not_forced(self, op):
+ self.rm.before_call([], save_all_regs=True)
+ fail_locs = [self.loc(v) for v in op.getfailargs()]
+ self.assembler.store_force_descr(op, fail_locs,
+ self.fm.get_frame_depth())
def consider_keepalive(self, op):
pass
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit