[pypy-commit] pypy stmgc-c4: start implementing repeated write and read barriers in stmrewrite and gc (WIP)

Raemi noreply at buildbot.pypy.org
Tue Oct 22 14:50:57 CEST 2013


Author: Remi Meier <remi.meier at gmail.com>
Branch: stmgc-c4
Changeset: r67512:bea8518a7ce2
Date: 2013-10-22 12:19 +0200
http://bitbucket.org/pypy/pypy/changeset/bea8518a7ce2/

Log:	start implementing repeated write and read barriers in stmrewrite
	and gc (WIP)

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
@@ -428,10 +428,13 @@
 
 class STMReadBarrierDescr(STMBarrierDescr):
     def __init__(self, gc_ll_descr, stmcat):
-        assert stmcat == 'P2R'
-        STMBarrierDescr.__init__(self, gc_ll_descr, stmcat,
-                                 'stm_DirectReadBarrier') 
-        # XXX: implement fastpath then change to stm_DirectReadBarrier
+        assert stmcat in ['A2R', 'Q2R']
+        if stmcat == 'A2R':
+            STMBarrierDescr.__init__(self, gc_ll_descr, stmcat,
+                                     'stm_DirectReadBarrier')
+        else:
+            STMBarrierDescr.__init__(self, gc_ll_descr, stmcat,
+                                     'stm_RepeatReadBarrier')
 
     @specialize.arg(2)
     def _do_barrier(self, gcref_struct, returns_modified_object):
@@ -440,20 +443,27 @@
         objadr = llmemory.cast_ptr_to_adr(gcref_struct)
         objhdr = rffi.cast(StmGC.GCHDRP, gcref_struct)
 
-        # if h_revision == privat_rev of transaction
-        priv_rev = self.llop1.stm_get_adr_of_private_rev_num(rffi.SIGNEDP)
-        if objhdr.h_revision == priv_rev[0]:
-            return gcref_struct
+        if self.stmcat == 'A2R':
+            # if h_revision == privat_rev of transaction
+            priv_rev = self.llop1.stm_get_adr_of_private_rev_num(rffi.SIGNEDP)
+            if objhdr.h_revision == priv_rev[0]:
+                return gcref_struct
 
-        # readcache[obj] == obj
-        read_cache = self.llop1.stm_get_adr_of_read_barrier_cache(rffi.SIGNEDP)
-        objint = llmemory.cast_adr_to_int(objadr)
-        assert WORD == 8, "check for 32bit compatibility"
-        index = (objint & StmGC.FX_MASK) / WORD
-        CP = lltype.Ptr(rffi.CArray(lltype.Signed))
-        rcp = rffi.cast(CP, read_cache[0])
-        if rcp[index] == objint:
-            return gcref_struct
+            # readcache[obj] == obj
+            read_cache = self.llop1.stm_get_adr_of_read_barrier_cache(rffi.SIGNEDP)
+            objint = llmemory.cast_adr_to_int(objadr)
+            assert WORD == 8, "check for 32bit compatibility"
+            index = (objint & StmGC.FX_MASK) / WORD
+            CP = lltype.Ptr(rffi.CArray(lltype.Signed))
+            rcp = rffi.cast(CP, read_cache[0])
+            if rcp[index] == objint:
+                return gcref_struct
+        else: # 'Q2R'
+            # is GCFLAG_PUBLIC_TO_PRIVATE or GCFLAG_MOVED set?
+            if not (objhdr.h_tid &
+                    (StmGC.GCFLAG_PUBLIC_TO_PRIVATE | StmGC.GCFLAG_MOVED)):
+                # no.
+                return gcref_struct
         
         funcptr = self.get_barrier_funcptr(returns_modified_object)
         res = funcptr(objadr)
@@ -462,9 +472,14 @@
         
 class STMWriteBarrierDescr(STMBarrierDescr):
     def __init__(self, gc_ll_descr, stmcat):
-        assert stmcat in ['P2W']
-        STMBarrierDescr.__init__(self, gc_ll_descr, stmcat,
-                                 'stm_WriteBarrier')
+        assert stmcat in ['A2W', 'V2W']
+        if stmcat == 'A2W':
+            STMBarrierDescr.__init__(self, gc_ll_descr, stmcat,
+                                     'stm_WriteBarrier')
+        else:
+            STMBarrierDescr.__init__(self, gc_ll_descr, stmcat,
+                                     'stm_RepeatWriteBarrier')
+
 
     @specialize.arg(2)
     def _do_barrier(self, gcref_struct, returns_modified_object):
@@ -473,9 +488,9 @@
         objadr = llmemory.cast_ptr_to_adr(gcref_struct)
         objhdr = rffi.cast(StmGC.GCHDRP, gcref_struct)
         
-        # if h_revision == privat_rev of transaction
+        # if it is a repeated WB or h_revision == privat_rev of transaction
         priv_rev = self.llop1.stm_get_adr_of_private_rev_num(rffi.SIGNEDP)
-        if objhdr.h_revision == priv_rev[0]:
+        if self.stmcat == 'V2W' or objhdr.h_revision == priv_rev[0]:
             # also WRITE_BARRIER not set?
             if not (objhdr.h_tid & StmGC.GCFLAG_WRITE_BARRIER):
                 return gcref_struct
@@ -580,8 +595,10 @@
 
     def _setup_write_barrier(self):
         if self.stm:
-            self.P2Rdescr = STMReadBarrierDescr(self, 'P2R')
-            self.P2Wdescr = STMWriteBarrierDescr(self, 'P2W')
+            self.A2Rdescr = STMReadBarrierDescr(self, 'A2R')
+            self.Q2Rdescr = STMReadBarrierDescr(self, 'Q2R')
+            self.A2Wdescr = STMWriteBarrierDescr(self, 'A2W')
+            self.V2Wdescr = STMWriteBarrierDescr(self, 'V2W')
             self.write_barrier_descr = "wbdescr: do not use"
         else:
             self.write_barrier_descr = WriteBarrierDescr(self)
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
@@ -12,7 +12,7 @@
 #
 # Any SETFIELD_GC, SETARRAYITEM_GC, SETINTERIORFIELD_GC must be done on a
 # W object.  The operation that forces an object p1 to be W is
-# COND_CALL_STM_B(p1, descr=x2Wdescr), for x in 'PGORL'.  This
+# COND_CALL_STM_B(p1, descr=x2Wdescr), for x in 'AIQRVWZ'.  This
 # COND_CALL_STM_B is a bit special because if p1 is not W, it *replaces*
 # its value with the W copy (by changing the register's value and
 # patching the stack location if any).  It's still conceptually the same
@@ -25,6 +25,8 @@
 #
 
 
+
+
 class GcStmRewriterAssembler(GcRewriterAssembler):
     # This class performs the same rewrites as its base class,
     # plus the rewrites described above.
@@ -33,14 +35,7 @@
         GcRewriterAssembler.__init__(self, *args)
         self.known_category = {}    # variable: letter (R, W, ...)
         self.always_inevitable = False
-        self.more_precise_categories = {
-            'P': {'R': self.gc_ll_descr.P2Rdescr,
-                  'W': self.gc_ll_descr.P2Wdescr,
-                 },
-            'R': {'W': self.gc_ll_descr.P2Wdescr,
-                 },
-            'W': {},
-           }
+        
 
     def rewrite(self, operations):
         # overridden method from parent class
@@ -115,8 +110,6 @@
                 continue
             # ----------  mallocs  ----------
             if op.is_malloc():
-                # write barriers not valid after possible collection
-                self.write_to_read_categories()
                 self.handle_malloc_operation(op)
                 continue
             # ----------  calls  ----------
@@ -195,20 +188,45 @@
         assert not insert_transaction_break
         return self.newops
 
+    def emitting_an_operation_that_can_collect(self):
+        GcRewriterAssembler.emitting_an_operation_that_can_collect(self)
+        self.invalidate_write_categories()
+    
     def next_op_may_be_in_new_transaction(self):
         self.known_category.clear()
-        
-    def write_to_read_categories(self):
+
+    def invalidate_write_categories(self):
         for v, c in self.known_category.items():
             if c == 'W':
-                self.known_category[v] = 'R'
+                self.known_category[v] = 'V'
 
-    def clear_readable_statuses(self, reason):
+    def invalidate_read_categories(self, reason):
         # XXX: needs aliasing info to be better
         # XXX: move to optimizeopt to only invalidate same typed vars?
         for v, c in self.known_category.items():
             if c == 'R':
-                self.known_category[v] = 'P'
+                self.known_category[v] = 'Q'
+
+    
+    def get_barrier_descr(self, from_cat, to_cat):
+        # compare with translator.stm.funcgen.stm_barrier
+        # XXX: specialize more with info of IMMUTABLE and NOPTR
+        if from_cat >= to_cat:
+            return None
+        
+        gc = self.gc_ll_descr
+        if to_cat == 'W':
+            if from_cat >= 'V':
+                return gc.V2Wdescr
+            return gc.A2Wdescr
+        elif to_cat == 'V':
+            return gc.A2Wdescr
+        elif to_cat == 'R':
+            if from_cat >= 'Q':
+                return gc.Q2Rdescr
+            return gc.A2Rdescr
+        elif to_cat == 'I':
+            return gc.A2Rdescr
 
     def gen_initialize_tid(self, v_newgcobj, tid):
         GcRewriterAssembler.gen_initialize_tid(self, v_newgcobj, tid)
@@ -217,24 +235,23 @@
                               descr=self.gc_ll_descr.fielddescr_rev)
             self.newops.append(op)
             
-
-                
     def gen_write_barrier(self, v):
         raise NotImplementedError
 
     def gen_barrier(self, v_base, target_category):
         v_base = self.unconstifyptr(v_base)
         assert isinstance(v_base, BoxPtr)
-        source_category = self.known_category.get(v_base, 'P')
+        source_category = self.known_category.get(v_base, 'A')
+        write_barrier_descr = self.get_barrier_descr(source_category,
+                                                     target_category)
+        if write_barrier_descr is None:
+            return v_base    # no barrier needed
+
         if target_category == 'W':
             # if *any* of the readable vars is the same object,
             # it must repeat the read_barrier now
-            self.clear_readable_statuses(v_base)
-        mpcat = self.more_precise_categories[source_category]
-        try:
-            write_barrier_descr = mpcat[target_category]
-        except KeyError:
-            return v_base    # no barrier needed
+            self.invalidate_read_categories(v_base)
+
         args = [v_base,]
         op = rop.COND_CALL_STM_B
         self.newops.append(ResOperation(op, args, None,
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
@@ -93,7 +93,7 @@
             jump()
         """, """
             [p1, p2]
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             setfield_gc(p1, p2, descr=tzdescr)
             stm_transaction_break(1)
             jump()
@@ -109,7 +109,7 @@
         """, """
             [p1, p2]
             p3 = same_as(ConstPtr(t))
-            cond_call_stm_b(p3, descr=P2Wdescr)
+            cond_call_stm_b(p3, descr=A2Wdescr)
             setfield_gc(p3, p2, descr=tzdescr)
             stm_transaction_break(1)
             jump()
@@ -130,11 +130,11 @@
             [p0]
             p1 = same_as(ConstPtr(t))
             p2 = same_as(ConstPtr(t))
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             p3 = getfield_gc(p1, descr=tzdescr)
-            cond_call_stm_b(p2, descr=P2Wdescr)
+            cond_call_stm_b(p2, descr=A2Wdescr)
             setfield_gc(p2, p0, descr=tzdescr)
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=Q2Rdescr)
             p4 = getfield_gc(p1, descr=tzdescr)
             stm_transaction_break(1)
             jump()
@@ -153,11 +153,11 @@
             [p0]
             p1 = same_as(p0)
             p2 = same_as(p0)
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             p4 = getfield_gc(p1, descr=tzdescr)
-            cond_call_stm_b(p2, descr=P2Wdescr)
+            cond_call_stm_b(p2, descr=A2Wdescr)
             setfield_gc(p2, p0, descr=tzdescr)
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=Q2Rdescr)
             p5 = getfield_gc(p1, descr=tzdescr)
             stm_transaction_break(1)
             jump()
@@ -174,14 +174,14 @@
             jump()
         """, """
             [p0]
-            cond_call_stm_b(p0, descr=P2Rdescr)
+            cond_call_stm_b(p0, descr=A2Rdescr)
             p1 = getfield_gc(p0, descr=tzdescr)
             p2 = getfield_gc(p0, descr=tzdescr)
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             p3 = getfield_gc(p1, descr=tzdescr)
-            cond_call_stm_b(p2, descr=P2Wdescr)
+            cond_call_stm_b(p2, descr=A2Wdescr)
             setfield_gc(p2, p0, descr=tzdescr)
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=Q2Rdescr)
             p4 = getfield_gc(p1, descr=tzdescr)
             stm_transaction_break(1)
             jump()
@@ -200,14 +200,14 @@
         """
         rewritten = """
             [p0, i1, i2]
-            cond_call_stm_b(p0, descr=P2Rdescr)
+            cond_call_stm_b(p0, descr=A2Rdescr)
             p1 = %s(p0, i1, descr=adescr)
             p2 = %s(p0, i2, descr=adescr)
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             p3 = getfield_gc(p1, descr=tzdescr)
-            cond_call_stm_b(p2, descr=P2Wdescr)
+            cond_call_stm_b(p2, descr=A2Wdescr)
             setfield_gc(p2, p0, descr=tzdescr)
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=Q2Rdescr)
             p4 = getfield_gc(p1, descr=tzdescr)
             stm_transaction_break(1)
             jump()
@@ -225,12 +225,12 @@
             jump(p2)
         """, """
             [p1, p3]
-            cond_call_stm_b(p3, descr=P2Wdescr)
+            cond_call_stm_b(p3, descr=A2Wdescr)
             setfield_gc(p3, p1, descr=tzdescr)
             p2 = call_malloc_nursery(%(tdescr.size)d)
             setfield_gc(p2, %(tdescr.tid)d, descr=tiddescr)
             stm_set_revision_gc(p2, descr=revdescr)
-            cond_call_stm_b(p3, descr=P2Wdescr)
+            cond_call_stm_b(p3, descr=V2Wdescr)
             setfield_gc(p3, p1, descr=tzdescr)
             stm_transaction_break(1)
             jump(p2)
@@ -245,7 +245,7 @@
             jump(p2)
         """, """
             [p1]
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             p2 = getfield_gc(p1, descr=tzdescr)
             p3 = call_malloc_nursery(%(tdescr.size)d)
             setfield_gc(p3, %(tdescr.tid)d, descr=tiddescr)
@@ -279,9 +279,9 @@
             jump()
         """, """
             [p1, p2, p3, p4]
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             setfield_gc(p1, p2, descr=tzdescr)
-            cond_call_stm_b(p3, descr=P2Wdescr)
+            cond_call_stm_b(p3, descr=A2Wdescr)
             setfield_gc(p3, p4, descr=tzdescr)
             stm_transaction_break(1)
             jump()
@@ -295,7 +295,7 @@
             jump()
         """, """
             [p1, p2, i3]
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             setfield_gc(p1, p2, descr=tzdescr)
             setfield_gc(p1, i3, descr=tydescr)
             stm_transaction_break(1)
@@ -311,10 +311,10 @@
             jump(p1)
         """, """
             [p1, p2, i3]
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             setfield_gc(p1, p2, descr=tzdescr)
             label(p1, i3)
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             setfield_gc(p1, i3, descr=tydescr)
             stm_transaction_break(1)
             jump(p1)
@@ -358,7 +358,7 @@
             jump(p2)
         """, """
             [p1]
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             p2 = getfield_gc(p1, descr=tzdescr)
             stm_transaction_break(1)
             jump(p2)
@@ -374,7 +374,7 @@
         """, """
             [p1]
             p3 = same_as(ConstPtr(t))
-            cond_call_stm_b(p3, descr=P2Rdescr)
+            cond_call_stm_b(p3, descr=A2Rdescr)
             p2 = getfield_gc(p3, descr=tzdescr)
             stm_transaction_break(1)
             jump(p2)
@@ -388,7 +388,7 @@
             jump(i3)
         """, """
             [p1, i2]
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             i3 = getarrayitem_gc(p1, i2, descr=adescr)
             stm_transaction_break(1)
             jump(i3)
@@ -401,7 +401,7 @@
             jump(i3)
         """, """
             [p1, i2]
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             i3 = getinteriorfield_gc(p1, i2, descr=adescr)
             stm_transaction_break(1)
             jump(i3)
@@ -415,7 +415,7 @@
             jump(p2, i2)
         """, """
             [p1]
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             p2 = getfield_gc(p1, descr=tzdescr)
             i2 = getfield_gc(p1, descr=tydescr)
             stm_transaction_break(1)
@@ -430,9 +430,9 @@
             jump(p2, i2)
         """, """
             [p1]
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             p2 = getfield_gc(p1, descr=tzdescr)
-            cond_call_stm_b(p2, descr=P2Rdescr)
+            cond_call_stm_b(p2, descr=A2Rdescr)
             i2 = getfield_gc(p2, descr=tydescr)
             stm_transaction_break(1)
             jump(p2, i2)
@@ -449,10 +449,10 @@
             jump(p1)
         """, """
             [p1]
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             i1 = getfield_gc(p1, descr=tydescr)
             i2 = int_add(i1, 1)
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             setfield_gc(p1, i2, descr=tydescr)
             stm_transaction_break(1)
             jump(p1)
@@ -466,7 +466,7 @@
             jump(p2)
         """, """
             [p1]
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             setfield_gc(p1, 123, descr=tydescr)
             p2 = getfield_gc(p1, descr=tzdescr)
             stm_transaction_break(1)
@@ -506,10 +506,10 @@
             jump(p2)
         """, """
             [p1]
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             p2 = getfield_gc(p1, descr=tzdescr)
             call(p2, descr=calldescr1)
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             setfield_gc(p1, 5, descr=tydescr)
             stm_transaction_break(1)
             jump(p2)
@@ -589,9 +589,9 @@
             jump()
         """, """
             [p1, i1, p2, p3, i3, p4]
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             setarrayitem_gc(p1, i1, p2, descr=adescr)
-            cond_call_stm_b(p3, descr=P2Wdescr)
+            cond_call_stm_b(p3, descr=A2Wdescr)
             setarrayitem_gc(p3, i3, p4, descr=adescr)
             stm_transaction_break(1)
             jump()
@@ -606,7 +606,7 @@
             jump()
         """, """
             [p1, p2, i2, p3, i3]
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             setarrayitem_gc(p1, i2, p2, descr=adescr)
             i4 = read_timestamp()
             setarrayitem_gc(p1, i3, p3, descr=adescr)
@@ -623,7 +623,7 @@
             jump()
         """, """
             [p1, p2, i2, p3, i3]
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             setinteriorfield_gc(p1, i2, p2, descr=adescr)
             i4 = read_timestamp()
             setinteriorfield_gc(p1, i3, p3, descr=adescr)
@@ -639,7 +639,7 @@
             jump()
         """, """
             [p1, i2, i3]
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             strsetitem(p1, i2, i3)
             unicodesetitem(p1, i2, i3)
             stm_transaction_break(1)
@@ -660,12 +660,12 @@
             jump(i2, p7)
         """, """
             [i1, i2, i3, p7]
-            cond_call_stm_b(p7, descr=P2Wdescr)
+            cond_call_stm_b(p7, descr=A2Wdescr)
             setfield_gc(p7, 10, descr=tydescr)
             call_release_gil(123, descr=calldescr2)
             guard_not_forced() []
             stm_transaction_break(0)
-            cond_call_stm_b(p7, descr=P2Wdescr)
+            cond_call_stm_b(p7, descr=A2Wdescr)
             setfield_gc(p7, 20, descr=tydescr)
             stm_transaction_break(1)
             jump(i2, p7)
@@ -689,11 +689,11 @@
                 jump(i2, p7)
             """ % op, """
                 [i1, i2, i3, p7]
-                cond_call_stm_b(p7, descr=P2Wdescr)
+                cond_call_stm_b(p7, descr=A2Wdescr)
                 setfield_gc(p7, 10, descr=tydescr)
                 $INEV
                 %s
-                cond_call_stm_b(p7, descr=P2Wdescr)
+                cond_call_stm_b(p7, descr=A2Wdescr)
                 setfield_gc(p7, 20, descr=tydescr)
                 stm_transaction_break(1)
                 jump(i2, p7)
@@ -706,8 +706,8 @@
             jump()
         """, """
             [p1, p2, i1, i2, i3]
-            cond_call_stm_b(p2, descr=P2Wdescr)
-            cond_call_stm_b(p1, descr=P2Rdescr)
+            cond_call_stm_b(p2, descr=A2Wdescr)
+            cond_call_stm_b(p1, descr=A2Rdescr)
             copystrcontent(p1, p2, i1, i2, i3)
             stm_transaction_break(1)
             jump()
@@ -727,7 +727,7 @@
                 jump(p1)
             """ % op, """
                 [p1]
-                cond_call_stm_b(p1, descr=P2Wdescr)
+                cond_call_stm_b(p1, descr=A2Wdescr)
                 setfield_gc(p1, 10, descr=tydescr)
                 %s
                 setfield_gc(p1, 20, descr=tydescr)
@@ -758,12 +758,12 @@
                 jump(p1)
             """ % (op, guard), """
                 [p1]
-                cond_call_stm_b(p1, descr=P2Wdescr)
+                cond_call_stm_b(p1, descr=A2Wdescr)
                 setfield_gc(p1, 10, descr=tydescr)
                 %s
                 %s
                 %s
-                cond_call_stm_b(p1, descr=P2Wdescr)
+                cond_call_stm_b(p1, descr=A2Wdescr)
                 setfield_gc(p1, 20, descr=tydescr)
                 stm_transaction_break(1)
                 jump(p1)
@@ -1141,7 +1141,7 @@
             stm_set_revision_gc(p1, descr=revdescr)
             setfield_gc(p1, 5, descr=clendescr)
             label(p1, i2, p3)
-            cond_call_stm_b(p1, descr=P2Wdescr)
+            cond_call_stm_b(p1, descr=A2Wdescr)
             setarrayitem_gc(p1, i2, p3, descr=cdescr)
         """)
 


More information about the pypy-commit mailing list