[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