[pypy-commit] pypy quad-color-gc: Cleanup, set hash and tid from both fixed and varsize
ntruessel
pypy.commits at gmail.com
Mon Aug 22 11:45:54 EDT 2016
Author: Nicolas Truessel <ntruessel at njsm.de>
Branch: quad-color-gc
Changeset: r86424:220e04e78d18
Date: 2016-08-22 17:45 +0200
http://bitbucket.org/pypy/pypy/changeset/220e04e78d18/
Log: Cleanup, set hash and tid from both fixed and varsize
diff --git a/rpython/memory/gc/qcgc.py b/rpython/memory/gc/qcgc.py
--- a/rpython/memory/gc/qcgc.py
+++ b/rpython/memory/gc/qcgc.py
@@ -24,6 +24,11 @@
('hash', lltype.Signed))
#HDR = rffi.COpaque('object_t')
+ def init_gc_object(self, obj, typeid):
+ hdr = llmemory.cast_adr_to_ptr(obj, lltype.Ptr(self.HDR))
+ hdr.tid = rffi.cast(lltype.Signed, typeid)
+ hdr.hash = rffi.cast(lltype.Signed, obj)
+
def malloc_fixedsize_clear(self, typeid, size,
needs_finalizer=False,
is_finalizer_light=False,
@@ -32,18 +37,16 @@
ll_assert(not needs_finalizer, 'finalizer not supported')
ll_assert(not is_finalizer_light, 'light finalizer not supported')
ll_assert(not contains_weakptr, 'weakref not supported')
- raw_mem = llop.qcgc_allocate(llmemory.Address, size, typeid)
- hdr = llmemory.cast_adr_to_ptr(raw_mem, lltype.Ptr(self.HDR))
- hdr.tid = rffi.cast(lltype.Signed, typeid)
- # FIXME: set hash
- # XXX: Hope the tid/hash setting here is not removed/optimized out
- return llmemory.cast_adr_to_ptr(raw_mem, llmemory.GCREF)
+ obj = llop.qcgc_allocate(llmemory.Address, size)
+ self.init_gc_object(obj, typeid)
+ return llmemory.cast_adr_to_ptr(obj, llmemory.GCREF)
- def malloc_varsize_clear(self, typeid16, length, size, itemsize,
+ def malloc_varsize_clear(self, typeid, length, size, itemsize,
offset_to_length):
totalsize = size + itemsize * length
#totalsize = llarena.round_up_for_allocation(totalsize)
- obj = llop.qcgc_allocate(llmemory.Address, totalsize, typeid16)
+ obj = llop.qcgc_allocate(llmemory.Address, totalsize)
+ self.init_gc_object(obj, typeid)
(obj + offset_to_length).signed[0] = length
return llmemory.cast_adr_to_ptr(obj, llmemory.GCREF)
@@ -68,14 +71,10 @@
def get_type_id(self, obj):
return self.header(obj).tid
- def init_gc_object(self, addr, typeid, flags=0):
+ def init_gc_object_immortal(self, addr, typeid, flags=0): # XXX: Prebuilt Objects?
assert flags == 0
hdr = llmemory.cast_adr_to_ptr(addr, lltype.Ptr(self.HDR))
hdr.tid = typeid.index
-
- def init_gc_object_immortal(self, addr, typeid, flags=0): # XXX: Prebuilt Objects?
- assert flags == 0
- self.init_gc_object(addr, typeid, flags)
ptr = self.gcheaderbuilder.object_from_header(addr.ptr)
prebuilt_hash = lltype.identityhash_nocache(ptr)
assert prebuilt_hash != 0
diff --git a/rpython/translator/c/funcgen.py b/rpython/translator/c/funcgen.py
--- a/rpython/translator/c/funcgen.py
+++ b/rpython/translator/c/funcgen.py
@@ -954,7 +954,6 @@
def OP_QCGC_ALLOCATE(self, op):
# XXX: SET typeid
size = self.expr(op.args[0])
- typeid = self.expr(op.args[1])
result = self.expr(op.result)
return '%s = qcgc_allocate(%s);' % (result, size)
More information about the pypy-commit
mailing list