[pypy-commit] pypy default: Remove the calls to pin/unpin statically if our GC doesn't support them.
arigo
noreply at buildbot.pypy.org
Wed Nov 19 12:18:37 CET 2014
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r74598:f2f96a913975
Date: 2014-11-19 12:18 +0100
http://bitbucket.org/pypy/pypy/changeset/f2f96a913975/
Log: Remove the calls to pin/unpin statically if our GC doesn't support
them. (This is mainly for STM being unhappy about the
cast_ptr_to_adr.)
diff --git a/rpython/memory/gctransform/framework.py b/rpython/memory/gctransform/framework.py
--- a/rpython/memory/gctransform/framework.py
+++ b/rpython/memory/gctransform/framework.py
@@ -461,17 +461,18 @@
annmodel.SomeInteger(nonneg=True)],
annmodel.s_None)
- self.pin_ptr = getfn(GCClass.pin,
- [s_gc, SomeAddress()],
- annmodel.SomeBool())
+ if GCClass.can_usually_pin_objects:
+ self.pin_ptr = getfn(GCClass.pin,
+ [s_gc, SomeAddress()],
+ annmodel.SomeBool())
- self.unpin_ptr = getfn(GCClass.unpin,
- [s_gc, SomeAddress()],
- annmodel.s_None)
+ self.unpin_ptr = getfn(GCClass.unpin,
+ [s_gc, SomeAddress()],
+ annmodel.s_None)
- self._is_pinned_ptr = getfn(GCClass._is_pinned,
- [s_gc, SomeAddress()],
- annmodel.SomeBool())
+ self._is_pinned_ptr = getfn(GCClass._is_pinned,
+ [s_gc, SomeAddress()],
+ annmodel.SomeBool())
self.write_barrier_ptr = None
self.write_barrier_from_array_ptr = None
@@ -1042,6 +1043,10 @@
v_size])
def gct_gc_pin(self, hop):
+ if not hasattr(self, 'pin_ptr'):
+ c_false = rmodel.inputconst(lltype.Bool, False)
+ hop.genop("same_as", [c_false], resultvar=hop.spaceop.result)
+ return
op = hop.spaceop
v_addr = hop.genop('cast_ptr_to_adr', [op.args[0]],
resulttype=llmemory.Address)
@@ -1049,6 +1054,8 @@
resultvar=op.result)
def gct_gc_unpin(self, hop):
+ if not hasattr(self, 'unpin_ptr'):
+ return
op = hop.spaceop
v_addr = hop.genop('cast_ptr_to_adr', [op.args[0]],
resulttype=llmemory.Address)
@@ -1056,6 +1063,10 @@
resultvar=op.result)
def gct_gc__is_pinned(self, hop):
+ if not hasattr(self, '_is_pinned_ptr'):
+ c_false = rmodel.inputconst(lltype.Bool, False)
+ hop.genop("same_as", [c_false], resultvar=hop.spaceop.result)
+ return
op = hop.spaceop
v_addr = hop.genop('cast_ptr_to_adr', [op.args[0]],
resulttype=llmemory.Address)
More information about the pypy-commit
mailing list