Author: Hakan Ardo <ha...@debian.org> Branch: jit-targets Changeset: r50172:d638586fc5b1 Date: 2011-12-05 16:16 +0100 http://bitbucket.org/pypy/pypy/changeset/d638586fc5b1/
Log: hg merge default diff --git a/pypy/jit/backend/llsupport/gc.py b/pypy/jit/backend/llsupport/gc.py --- a/pypy/jit/backend/llsupport/gc.py +++ b/pypy/jit/backend/llsupport/gc.py @@ -823,6 +823,15 @@ bool(v.value)): # store a non-NULL self._gen_write_barrier(newops, op.getarg(0), v) op = op.copy_and_change(rop.SETFIELD_RAW) + # ---------- write barrier for SETINTERIORFIELD_GC ------ + if op.getopnum() == rop.SETINTERIORFIELD_GC: + val = op.getarg(0) + if val is not last_malloc: + v = op.getarg(2) + if isinstance(v, BoxPtr) or (isinstance(v, ConstPtr) and + bool(v.value)): # store a non-NULL + self._gen_write_barrier(newops, op.getarg(0), v) + op = op.copy_and_change(rop.SETINTERIORFIELD_RAW) # ---------- write barrier for SETARRAYITEM_GC ---------- if op.getopnum() == rop.SETARRAYITEM_GC: val = op.getarg(0) diff --git a/pypy/jit/backend/llsupport/test/test_gc.py b/pypy/jit/backend/llsupport/test/test_gc.py --- a/pypy/jit/backend/llsupport/test/test_gc.py +++ b/pypy/jit/backend/llsupport/test/test_gc.py @@ -570,6 +570,28 @@ assert operations[1].getarg(2) == v_value assert operations[1].getdescr() == array_descr + def test_rewrite_assembler_5(self): + S = lltype.GcStruct('S') + A = lltype.GcArray(lltype.Struct('A', ('x', lltype.Ptr(S)))) + interiordescr = get_interiorfield_descr(self.gc_ll_descr, A, + A.OF, 'x') + wbdescr = self.gc_ll_descr.write_barrier_descr + ops = parse(""" + [p1, p2] + setinteriorfield_gc(p1, 0, p2, descr=interiordescr) + jump(p1, p2) + """, namespace=locals()) + expected = parse(""" + [p1, p2] + cond_call_gc_wb(p1, p2, descr=wbdescr) + setinteriorfield_raw(p1, 0, p2, descr=interiordescr) + jump(p1, p2) + """, namespace=locals()) + operations = get_deep_immutable_oplist(ops.operations) + operations = self.gc_ll_descr.rewrite_assembler(self.fake_cpu, + operations, []) + equaloplists(operations, expected.operations) + def test_rewrite_assembler_initialization_store(self): S = lltype.GcStruct('S', ('parent', OBJECT), ('x', lltype.Signed)) diff --git a/pypy/jit/backend/x86/test/test_zrpy_gc.py b/pypy/jit/backend/x86/test/test_zrpy_gc.py --- a/pypy/jit/backend/x86/test/test_zrpy_gc.py +++ b/pypy/jit/backend/x86/test/test_zrpy_gc.py @@ -490,8 +490,8 @@ check(a[i].y.i == n + i * 100 + 2) check(a[i].z.i == n + i * 100 + 3) i += 1 + n -= x.foo return n, x, x0, x1, x2, x3, x4, x5, x6, x7, l, s - f(123, *[None]*11) # check that the check() are ok return None, f, None def test_compile_framework_7_interior(self): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit