[pypy-commit] pypy stmgc-c4: no fastpath for gc write/read barriers
Raemi
noreply at buildbot.pypy.org
Fri Jul 5 16:58:46 CEST 2013
Author: Remi Meier <meierrem at student.ethz.ch>
Branch: stmgc-c4
Changeset: r65201:43aaaf023f46
Date: 2013-07-05 16:58 +0200
http://bitbucket.org/pypy/pypy/changeset/43aaaf023f46/
Log: no fastpath for gc write/read barriers
diff --git a/rpython/jit/backend/llsupport/gc.py b/rpython/jit/backend/llsupport/gc.py
--- a/rpython/jit/backend/llsupport/gc.py
+++ b/rpython/jit/backend/llsupport/gc.py
@@ -362,7 +362,7 @@
self.wb_slowpath[withcards + 2 * withfloats] = addr
@specialize.arg(2)
- def _do_write_barrier(self, gcref_struct, returns_modified_object):
+ def _do_barrier(self, gcref_struct, returns_modified_object):
assert self.returns_modified_object == returns_modified_object
hdr_addr = llmemory.cast_ptr_to_adr(gcref_struct)
hdr_addr -= self.gcheaderbuilder.size_gc_header
@@ -397,20 +397,29 @@
cat = self.stmcat
return cat
+ @specialize.arg(2)
def _do_barrier(self, gcref_struct, returns_modified_object):
- raise NotImplemented
+ assert self.returns_modified_object == returns_modified_object
+ # XXX: fastpath for Read and Write variants
+ funcptr = self.get_barrier_funcptr(returns_modified_object)
+ res = funcptr(llmemory.cast_ptr_to_adr(gcref_struct))
+ if returns_modified_object:
+ return llmemory.cast_adr_to_ptr(res, llmemory.GCREF)
+
class STMReadBarrierDescr(STMBarrierDescr):
def __init__(self, gc_ll_descr, stmcat):
assert stmcat == 'P2R'
STMBarrierDescr.__init__(self, gc_ll_descr, stmcat,
- 'stm_DirectReadBarrier')
+ 'stm_read_barrier')
+
+
class STMWriteBarrierDescr(STMBarrierDescr):
def __init__(self, gc_ll_descr, stmcat):
assert stmcat in ['P2W', 'R2W']
STMBarrierDescr.__init__(self, gc_ll_descr, stmcat,
- 'stm_WriteBarrier')
+ 'stm_write_barrier')
class GcLLDescr_framework(GcLLDescription):
@@ -507,7 +516,7 @@
else:
self.write_barrier_descr = WriteBarrierDescr(self)
def do_write_barrier(gcref_struct, gcref_newptr):
- self.write_barrier_descr._do_write_barrier(gcref_struct, False)
+ self.write_barrier_descr._do_barrier(gcref_struct, False)
self.do_write_barrier = do_write_barrier
def _setup_barriers_for_stm(self):
@@ -524,7 +533,7 @@
descr = self.P2Wdescr
else:
descr = self.P2Rdescr
- return descr._do_write_barrier(gcref, True)
+ return descr._do_barrier(gcref, True)
self.do_stm_barrier = do_stm_barrier
def _make_functions(self, really_not_translated):
More information about the pypy-commit
mailing list