Author: Maciej Fijalkowski <[email protected]>
Branch: gc_no_cleanup_nursery
Changeset: r73635:255d60019595
Date: 2014-09-21 13:49 +0200
http://bitbucket.org/pypy/pypy/changeset/255d60019595/
Log: extra fields that we zero by hand
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
@@ -120,7 +120,8 @@
descrs = JitFrameDescrs()
descrs.arraydescr = cpu.arraydescrof(jitframe.JITFRAME)
for name in ['jf_descr', 'jf_guard_exc', 'jf_force_descr',
- 'jf_frame_info', 'jf_gcmap', 'jf_extra_stack_depth']:
+ 'jf_frame_info', 'jf_gcmap', 'jf_extra_stack_depth',
+ 'jf_savedata', 'jf_forward']:
setattr(descrs, name, cpu.fielddescrof(jitframe.JITFRAME, name))
descrs.jfi_frame_size = cpu.fielddescrof(jitframe.JITFRAMEINFO,
'jfi_frame_size')
diff --git a/rpython/jit/backend/llsupport/rewrite.py
b/rpython/jit/backend/llsupport/rewrite.py
--- a/rpython/jit/backend/llsupport/rewrite.py
+++ b/rpython/jit/backend/llsupport/rewrite.py
@@ -215,7 +215,7 @@
self.newops.append(o)
elif isinstance(v_length, ConstInt) and v_length.getint() == 0:
return
- o = ResOperation(rop.ZERO_ARRAY, [v_arr, ConstInt(0), v_length], None,
+ o = ResOperation(rop.ZERO_ARRAY, [v_arr, self.c_zero, v_length], None,
descr=arraydescr)
self.newops.append(o)
@@ -238,13 +238,21 @@
self.gen_malloc_nursery_varsize_frame(size_box, frame)
self.gen_initialize_tid(frame, descrs.arraydescr.tid)
length_box = history.BoxInt()
- op1 = ResOperation(rop.GETFIELD_GC, [history.ConstInt(frame_info)],
- length_box,
- descr=descrs.jfi_frame_depth)
- self.newops.append(op1)
- op2 = ResOperation(rop.SETFIELD_GC, [frame, ConstInt(0)],
- None, descr=descrs.jf_extra_stack_depth)
- self.newops.append(op2)
+ # we need to explicitely zero all the gc fields, because
+ # of the unusal malloc pattern
+ extra_ops = [
+ ResOperation(rop.GETFIELD_GC, [history.ConstInt(frame_info)],
+ length_box, descr=descrs.jfi_frame_depth),
+ ResOperation(rop.SETFIELD_GC, [frame, self.c_zero],
+ None, descr=descrs.jf_extra_stack_depth),
+ ResOperation(rop.SETFIELD_GC, [frame, self.c_zero],
+ None, descr=descrs.jf_savedata),
+ ResOperation(rop.SETFIELD_GC, [frame, self.c_zero],
+ None, descr=descrs.jf_guard_exc),
+ ResOperation(rop.SETFIELD_GC, [frame, self.c_zero],
+ None, descr=descrs.jf_forward),
+ ]
+ self.newops += extra_ops
self.gen_initialize_len(frame, length_box,
descrs.arraydescr.lendescr)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit