Author: Armin Rigo <[email protected]>
Branch: stmgc-c7
Changeset: r70164:59318684cd56
Date: 2014-03-22 12:42 +0100
http://bitbucket.org/pypy/pypy/changeset/59318684cd56/

Log:    progress

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
@@ -72,11 +72,11 @@
             return
         # ----------  setters for pure fields  ----------
         if opnum in (rop.STRSETITEM, rop.UNICODESETITEM):
-            self.handle_setters_for_pure_fields(op)
+            self.handle_setters_for_pure_fields(op, 0)
             return
         # ----------  copystrcontent  ----------
         if opnum in (rop.COPYSTRCONTENT, rop.COPYUNICODECONTENT):
-            self.handle_copystrcontent(op)
+            self.handle_setters_for_pure_fields(op, 1)
             return
         # ----------  raw getfields and setfields  ----------
         if opnum in (rop.GETFIELD_RAW, rop.SETFIELD_RAW):
@@ -160,8 +160,8 @@
             return True
         return False
 
-    def handle_setters_for_pure_fields(self, op):
-        val = op.getarg(0)
+    def handle_setters_for_pure_fields(self, op, targetindex):
+        val = op.getarg(targetindex)
         if self.must_apply_write_barrier(val):
             self.gen_write_barrier(val)
         self.newops.append(op)
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
@@ -612,17 +612,17 @@
             jump(i2, p7)
         """, """
             [i1, i2, i3, p7]
-            cond_call_stm_b(p7, descr=A2Vdescr)
+            cond_call_gc_wb(p7, descr=wbdescr)
             setfield_gc(p7, 10, descr=tydescr)
             call_release_gil(123, descr=calldescr2)
             guard_not_forced() []
             
-            cond_call_stm_b(p7, descr=A2Vdescr)
+            cond_call_gc_wb(p7, descr=wbdescr)
             setfield_gc(p7, 20, descr=tydescr)
             
             jump(i2, p7)
         """, calldescr2=calldescr2)
-        
+
     def test_fallback_to_inevitable(self):
         T = rffi.CArrayPtr(rffi.TIME_T)
         calldescr2 = get_call_descr(self.gc_ll_descr, [T], rffi.TIME_T)
@@ -641,27 +641,39 @@
                 jump(i2, p7)
             """ % op, """
                 [i1, i2, i3, p7]
-                cond_call_stm_b(p7, descr=A2Vdescr)
+                cond_call_gc_wb(p7, descr=wbdescr)
                 setfield_gc(p7, 10, descr=tydescr)
                 $INEV
                 %s
-                cond_call_stm_b(p7, descr=A2Vdescr)
+                cond_call_gc_wb(p7, descr=wbdescr)
                 setfield_gc(p7, 20, descr=tydescr)
                 
                 jump(i2, p7)
             """ % op, calldescr2=calldescr2)
 
-    def test_copystrcontent(self):
+    def test_copystrcontent_new(self):
+        self.check_rewrite("""
+            [p1, i1, i2, i3]
+            p2 = newstr(i3)
+            copystrcontent(p1, p2, i1, i2, i3)
+            jump()
+        """, """
+            [p1, i1, i2, i3]
+            p2 = call_malloc_nursery_varsize(1, 1, i3, descr=strdescr)
+            setfield_gc(p2, i3, descr=strlendescr)
+            copystrcontent(p1, p2, i1, i2, i3)
+            jump()
+        """)
+
+    def test_copystrcontent_old(self):
         self.check_rewrite("""
             [p1, p2, i1, i2, i3]
             copystrcontent(p1, p2, i1, i2, i3)
             jump()
         """, """
             [p1, p2, i1, i2, i3]
-            cond_call_stm_b(p2, descr=A2Wdescr)
-            cond_call_stm_b(p1, descr=A2Rdescr)
+            cond_call_gc_wb(p2, descr=wbdescr)
             copystrcontent(p1, p2, i1, i2, i3)
-            
             jump()
         """)
 
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to