Author: Remi Meier <meier...@student.ethz.ch> Branch: stmgc-c4 Changeset: r65196:675a3d0878f1 Date: 2013-07-05 13:23 +0200 http://bitbucket.org/pypy/pypy/changeset/675a3d0878f1/
Log: add new resops COND_CALL_STM_WB and COND_CALL_STM_RB diff --git a/rpython/jit/backend/llsupport/stmrewrite.py b/rpython/jit/backend/llsupport/stmrewrite.py --- a/rpython/jit/backend/llsupport/stmrewrite.py +++ b/rpython/jit/backend/llsupport/stmrewrite.py @@ -121,8 +121,13 @@ except KeyError: return v_base # no barrier needed args = [v_base, self.c_zero] - self.newops.append(ResOperation(rop.COND_CALL_GC_WB, args, None, + if target_category == 'W': + op = rop.COND_CALL_STM_WB + else: + op = rop.COND_CALL_STM_RB + self.newops.append(ResOperation(op, args, None, descr=write_barrier_descr)) + self.known_category[v_base] = target_category return v_base diff --git a/rpython/jit/backend/llsupport/test/test_stmrewrite.py b/rpython/jit/backend/llsupport/test/test_stmrewrite.py --- a/rpython/jit/backend/llsupport/test/test_stmrewrite.py +++ b/rpython/jit/backend/llsupport/test/test_stmrewrite.py @@ -44,7 +44,7 @@ jump() """, """ [p1, p2] - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setfield_gc(p1, p2, descr=tzdescr) jump() """) @@ -59,7 +59,7 @@ """, """ [p1, p2] p3 = same_as(ConstPtr(t)) - cond_call_gc_wb(p3, 0, descr=P2Wdescr) + cond_call_stm_wb(p3, 0, descr=P2Wdescr) setfield_gc(p3, p2, descr=tzdescr) jump() """, t=NULL) @@ -87,9 +87,9 @@ jump() """, """ [p1, p2, p3, p4] - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setfield_gc(p1, p2, descr=tzdescr) - cond_call_gc_wb(p3, 0, descr=P2Wdescr) + cond_call_stm_wb(p3, 0, descr=P2Wdescr) setfield_gc(p3, p4, descr=tzdescr) jump() """) @@ -102,7 +102,7 @@ jump() """, """ [p1, p2, i3] - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setfield_gc(p1, p2, descr=tzdescr) setfield_gc(p1, i3, descr=tydescr) jump() @@ -117,10 +117,10 @@ jump(p1) """, """ [p1, p2, i3] - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setfield_gc(p1, p2, descr=tzdescr) label(p1, i3) - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setfield_gc(p1, i3, descr=tydescr) jump(p1) """) @@ -162,7 +162,7 @@ jump(p2) """, """ [p1] - cond_call_gc_wb(p1, 0, descr=P2Rdescr) + cond_call_stm_rb(p1, 0, descr=P2Rdescr) p2 = getfield_gc(p1, descr=tzdescr) jump(p2) """) @@ -177,7 +177,7 @@ """, """ [p1] p3 = same_as(ConstPtr(t)) - cond_call_gc_wb(p3, 0, descr=P2Rdescr) + cond_call_stm_rb(p3, 0, descr=P2Rdescr) p2 = getfield_gc(p3, descr=tzdescr) jump(p2) """, t=NULL) @@ -190,7 +190,7 @@ jump(i3) """, """ [p1, i2] - cond_call_gc_wb(p1, 0, descr=P2Rdescr) + cond_call_stm_rb(p1, 0, descr=P2Rdescr) i3 = getarrayitem_gc(p1, i2, descr=adescr) jump(i3) """) @@ -202,7 +202,7 @@ jump(i3) """, """ [p1, i2] - cond_call_gc_wb(p1, 0, descr=P2Rdescr) + cond_call_stm_rb(p1, 0, descr=P2Rdescr) i3 = getinteriorfield_gc(p1, i2, descr=adescr) jump(i3) """) @@ -215,7 +215,7 @@ jump(p2, i2) """, """ [p1] - cond_call_gc_wb(p1, 0, descr=P2Rdescr) + cond_call_stm_rb(p1, 0, descr=P2Rdescr) p2 = getfield_gc(p1, descr=tzdescr) i2 = getfield_gc(p1, descr=tydescr) jump(p2, i2) @@ -229,9 +229,9 @@ jump(p2, i2) """, """ [p1] - cond_call_gc_wb(p1, 0, descr=P2Rdescr) + cond_call_stm_rb(p1, 0, descr=P2Rdescr) p2 = getfield_gc(p1, descr=tzdescr) - cond_call_gc_wb(p2, 0, descr=P2Rdescr) + cond_call_stm_rb(p2, 0, descr=P2Rdescr) i2 = getfield_gc(p2, descr=tydescr) jump(p2, i2) """) @@ -247,10 +247,10 @@ jump(p1) """, """ [p1] - cond_call_gc_wb(p1, 0, descr=P2Rdescr) + cond_call_stm_rb(p1, 0, descr=P2Rdescr) i1 = getfield_gc(p1, descr=tydescr) i2 = int_add(i1, 1) - cond_call_gc_wb(p1, 0, descr=R2Wdescr) + cond_call_stm_wb(p1, 0, descr=R2Wdescr) setfield_gc(p1, i2, descr=tydescr) jump(p1) """) @@ -263,7 +263,7 @@ jump(p2) """, """ [p1] - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setfield_gc(p1, 123, descr=tydescr) p2 = getfield_gc(p1, descr=tzdescr) jump(p2) @@ -295,10 +295,10 @@ jump(p2) """, """ [p1] - cond_call_gc_wb(p1, 0, descr=P2Rdescr) + cond_call_stm_rb(p1, 0, descr=P2Rdescr) p2 = getfield_gc(p1, descr=tzdescr) call(p2) - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setfield_gc(p1, 5, descr=tydescr) jump(p2) """) @@ -358,9 +358,9 @@ jump() """, """ [p1, i1, p2, p3, i3, p4] - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setarrayitem_gc(p1, i1, p2, descr=adescr) - cond_call_gc_wb(p3, 0, descr=P2Wdescr) + cond_call_stm_wb(p3, 0, descr=P2Wdescr) setarrayitem_gc(p3, i3, p4, descr=adescr) jump() """) @@ -374,7 +374,7 @@ jump() """, """ [p1, p2, i2, p3, i3] - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setarrayitem_gc(p1, i2, p2, descr=adescr) i4 = read_timestamp() setarrayitem_gc(p1, i3, p3, descr=adescr) @@ -390,7 +390,7 @@ jump() """, """ [p1, p2, i2, p3, i3] - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setinteriorfield_gc(p1, i2, p2, descr=adescr) i4 = read_timestamp() setinteriorfield_gc(p1, i3, p3, descr=adescr) @@ -405,7 +405,7 @@ jump() """, """ [p1, i2, i3] - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) strsetitem(p1, i2, i3) unicodesetitem(p1, i2, i3) jump() @@ -432,11 +432,11 @@ jump(i2, p7) """ % op, """ [i1, i2, i3, p7] - cond_call_gc_wb(p7, 0, descr=P2Wdescr) + cond_call_stm_wb(p7, 0, descr=P2Wdescr) setfield_gc(p7, 10, descr=tydescr) $INEV %s - cond_call_gc_wb(p7, 0, descr=P2Wdescr) + cond_call_stm_wb(p7, 0, descr=P2Wdescr) setfield_gc(p7, 20, descr=tydescr) jump(i2, p7) """ % op, calldescr2=calldescr2) @@ -448,8 +448,8 @@ jump() """, """ [p1, p2, i1, i2, i3] - cond_call_gc_wb(p2, 0, descr=P2Wdescr) - cond_call_gc_wb(p1, 0, descr=P2Rdescr) + cond_call_stm_wb(p2, 0, descr=P2Wdescr) + cond_call_stm_rb(p1, 0, descr=P2Rdescr) copystrcontent(p1, p2, i1, i2, i3) jump() """) @@ -468,7 +468,7 @@ jump(p1) """ % op, """ [p1] - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setfield_gc(p1, 10, descr=tydescr) %s setfield_gc(p1, 20, descr=tydescr) @@ -491,10 +491,10 @@ jump(p1) """ % op, """ [p1] - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setfield_gc(p1, 10, descr=tydescr) %s - cond_call_gc_wb(p1, 0, descr=P2Wdescr) + cond_call_stm_wb(p1, 0, descr=P2Wdescr) setfield_gc(p1, 20, descr=tydescr) jump(p1) """ % op, calldescr2=calldescr2) diff --git a/rpython/jit/metainterp/executor.py b/rpython/jit/metainterp/executor.py --- a/rpython/jit/metainterp/executor.py +++ b/rpython/jit/metainterp/executor.py @@ -345,6 +345,8 @@ if value in (rop.FORCE_TOKEN, rop.CALL_ASSEMBLER, rop.COND_CALL_GC_WB, + rop.COND_CALL_STM_WB, + rop.COND_CALL_STM_RB, rop.COND_CALL_GC_WB_ARRAY, rop.DEBUG_MERGE_POINT, rop.JIT_DEBUG, diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py --- a/rpython/jit/metainterp/resoperation.py +++ b/rpython/jit/metainterp/resoperation.py @@ -500,6 +500,8 @@ 'STRSETITEM/3', 'UNICODESETITEM/3', #'RUNTIMENEW/1', # ootype operation + 'COND_CALL_STM_WB/2d', # [objptr, newvalue] (write barrier) + 'COND_CALL_STM_RB/2d', # [objptr, newvalue] (read barrier) 'COND_CALL_GC_WB/2d', # [objptr, newvalue] (for the write barrier) 'COND_CALL_GC_WB_ARRAY/3d', # [objptr, arrayindex, newvalue] (write barr.) 'DEBUG_MERGE_POINT/*', # debugging only _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit