[pypy-commit] pypy stmgc-c4: treat OS_JIT_STM_SHOULD_BREAK_TRANSACTION as a non-collecting function in the jit
Raemi
noreply at buildbot.pypy.org
Tue Jan 14 10:44:20 CET 2014
Author: Remi Meier <remi.meier at gmail.com>
Branch: stmgc-c4
Changeset: r68661:162a671c4f65
Date: 2014-01-14 10:43 +0100
http://bitbucket.org/pypy/pypy/changeset/162a671c4f65/
Log: treat OS_JIT_STM_SHOULD_BREAK_TRANSACTION as a non-collecting
function in the jit
diff --git a/rpython/jit/backend/llsupport/stmrewrite.py b/rpython/jit/backend/llsupport/stmrewrite.py
--- a/rpython/jit/backend/llsupport/stmrewrite.py
+++ b/rpython/jit/backend/llsupport/stmrewrite.py
@@ -105,6 +105,14 @@
continue
# ---------- calls ----------
if op.is_call():
+ if opnum == rop.CALL and op.getdescr():
+ d = op.getdescr()
+ assert isinstance(d, CallDescr)
+ ei = d.get_extra_info()
+ if ei and ei.oopspecindex == EffectInfo.OS_JIT_STM_SHOULD_BREAK_TRANSACTION:
+ self.newops.append(op)
+ continue
+
self.emitting_an_operation_that_can_collect()
self.next_op_may_be_in_new_transaction()
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
@@ -2278,6 +2278,7 @@
cb = callbuilder.CallBuilder(self, arglocs[2], arglocs[3:], resloc)
descr = op.getdescr()
+ effectinfo = descr.get_extra_info()
assert isinstance(descr, CallDescr)
cb.callconv = descr.get_call_conv()
cb.argtypes = descr.get_arg_types()
@@ -2289,7 +2290,9 @@
assert isinstance(signloc, ImmedLoc)
cb.ressign = signloc.value
- if is_call_release_gil:
+ if effectinfo and effectinfo.oopspecindex == EffectInfo.OS_JIT_STM_SHOULD_BREAK_TRANSACTION:
+ cb.emit_no_collect()
+ elif is_call_release_gil:
cb.emit_call_release_gil()
else:
cb.emit()
More information about the pypy-commit
mailing list