[pypy-svn] r31676 - in pypy/branch/no-zeroing-assumption/pypy: rpython/memory translator/c/src
mwh at codespeak.net
mwh at codespeak.net
Sat Aug 26 13:08:51 CEST 2006
Author: mwh
Date: Sat Aug 26 13:08:50 2006
New Revision: 31676
Modified:
pypy/branch/no-zeroing-assumption/pypy/rpython/memory/gctransform.py
pypy/branch/no-zeroing-assumption/pypy/translator/c/src/mem.h
Log:
actually allocate some non zeroed memory.
Modified: pypy/branch/no-zeroing-assumption/pypy/rpython/memory/gctransform.py
==============================================================================
--- pypy/branch/no-zeroing-assumption/pypy/rpython/memory/gctransform.py (original)
+++ pypy/branch/no-zeroing-assumption/pypy/rpython/memory/gctransform.py Sat Aug 26 13:08:50 2006
@@ -20,6 +20,7 @@
from pypy.rpython.memory.gcheader import GCHeaderBuilder
from pypy.rpython.annlowlevel import MixLevelHelperAnnotator
from pypy.rpython.extregistry import ExtRegistryEntry
+from pypy.rpython.rtyper import LowLevelOpList
import sets, os
def var_ispyobj(var):
@@ -1216,28 +1217,33 @@
c_size = rmodel.inputconst(lltype.Signed, info["fixedsize"])
if not op.opname.endswith('_varsize'):
if op.opname.startswith('zero'):
- p = self.malloc_fixedsize_clear_ptr
+ malloc_ptr = self.malloc_fixedsize_clear_ptr
else:
- p = self.malloc_fixedsize_clear_ptr
- args = [p, self.c_const_gc, c_type_id, c_size, c_can_collect]
+ malloc_ptr = self.malloc_fixedsize_ptr
+ args = [self.c_const_gc, c_type_id, c_size, c_can_collect]
else:
v_length = op.args[-1]
c_ofstolength = rmodel.inputconst(lltype.Signed, info['ofstolength'])
c_varitemsize = rmodel.inputconst(lltype.Signed, info['varitemsize'])
- if op.opname.startswith('zero'):
- p = self.malloc_varsize_clear_ptr
- else:
- p = self.malloc_varsize_clear_ptr
- args = [p, self.c_const_gc, c_type_id, v_length, c_size,
+ malloc_ptr = self.malloc_varsize_clear_ptr
+## if op.opname.startswith('zero'):
+## p = self.malloc_varsize_clear_ptr
+## else:
+## p = self.malloc_varsize_clear_ptr
+ args = [self.c_const_gc, c_type_id, v_length, c_size,
c_varitemsize, c_ofstolength, c_can_collect]
c_has_finalizer = rmodel.inputconst(
lltype.Bool, bool(self.finalizer_funcptr_for_type(TYPE)))
args.append(c_has_finalizer)
v = varoftype(llmemory.GCREF)
- newop = SpaceOperation("direct_call", args, v)
+ newop = SpaceOperation("direct_call", [malloc_ptr] + args, v)
ops, index = self.protect_roots(newop, livevars, block,
block.operations.index(op))
ops.append(SpaceOperation("cast_opaque_ptr", [v], op.result))
+ if malloc_ptr == self.malloc_fixedsize_ptr:
+ llops = LowLevelOpList(None)
+ gen_zero_gc_pointers(TYPE, op.result, llops)
+ ops.extend(llops)
return ops
replace_zero_malloc = replace_malloc
@@ -1342,6 +1348,21 @@
offsets.append(0)
return offsets
+def gen_zero_gc_pointers(TYPE, v, llops):
+ assert isinstance(TYPE, lltype.Struct)
+ for name in TYPE._names:
+ FIELD = getattr(TYPE, name)
+ if isinstance(FIELD, lltype.Ptr) and FIELD._needsgc():
+ c_name = Constant(name, lltype.Void)
+ c_null = Constant(lltype.nullptr(FIELD.TO), FIELD)
+ llops.genop('bare_setfield', [v, c_name, c_null])
+ elif isinstance(FIELD, lltype.Struct):
+ c_name = Constant(name, lltype.Void)
+ v1 = llops.genop('getsubstruct', [v, c_name],
+ resulttype = lltype.Ptr(FIELD))
+ gen_zero_gc_pointers(FIELD, v1, llops)
+
+
# ____________________________________________________________
Modified: pypy/branch/no-zeroing-assumption/pypy/translator/c/src/mem.h
==============================================================================
--- pypy/branch/no-zeroing-assumption/pypy/translator/c/src/mem.h (original)
+++ pypy/branch/no-zeroing-assumption/pypy/translator/c/src/mem.h Sat Aug 26 13:08:50 2006
@@ -23,7 +23,11 @@
#define alloca _alloca
#endif
+#ifdef USING_BOEHM_GC
#define MALLOC_ZERO_FILLED 1
+#else
+#define MALLOC_ZERO_FILLED 0
+#endif
#define OP_STACK_MALLOC(size,r,restype) \
r = (restype) alloca(size); \
More information about the Pypy-commit
mailing list