[pypy-commit] pypy stmgc-c4: add new resops COND_CALL_STM_WB and COND_CALL_STM_RB
Raemi
noreply at buildbot.pypy.org
Fri Jul 5 13:50:18 CEST 2013
Author: Remi Meier <meierrem at 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
More information about the pypy-commit
mailing list