Author: Remi Meier <[email protected]>
Branch: stmgc-c4
Changeset: r65374:add171e74fe2
Date: 2013-07-12 08:29 +0200
http://bitbucket.org/pypy/pypy/changeset/add171e74fe2/

Log:    remove R2W for now; introduce is_stm on GcRootMap

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
@@ -250,6 +250,7 @@
 
 class GcRootMap_asmgcc(object):
     is_shadow_stack = False
+    is_stm = False
 
     def __init__(self, gcdescr):
         pass
@@ -259,7 +260,8 @@
 
 class GcRootMap_shadowstack(object):
     is_shadow_stack = True
-
+    is_stm = False
+    
     def __init__(self, gcdescr):
         pass
 
@@ -271,8 +273,9 @@
         return rffi.cast(lltype.Signed, rst_addr)
 
 class GcRootMap_stm(object):
-    is_shadow_stack = True # XXX: should it have an is_stmgc?
-
+    is_shadow_stack = True
+    is_stm = True
+    
     def __init__(self, gcdescr):
         pass
 
@@ -535,7 +538,6 @@
     def _setup_barriers_for_stm(self):
         self.P2Rdescr = STMReadBarrierDescr(self, 'P2R')
         self.P2Wdescr = STMWriteBarrierDescr(self, 'P2W')
-        self.R2Wdescr = STMWriteBarrierDescr(self, 'R2W')
         self.write_barrier_descr = "wbdescr: do not use"
         #
         @specialize.argtype(0)
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
@@ -34,7 +34,7 @@
             'P': {'R': self.gc_ll_descr.P2Rdescr,
                   'W': self.gc_ll_descr.P2Wdescr,
                  },
-            'R': {'W': self.gc_ll_descr.R2Wdescr,
+            'R': {'W': self.gc_ll_descr.P2Wdescr,
                  },
             'W': {},
            }
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
@@ -250,7 +250,7 @@
             cond_call_stm_b(p1, descr=P2Rdescr)
             i1 = getfield_gc(p1, descr=tydescr)
             i2 = int_add(i1, 1)
-            cond_call_stm_b(p1, descr=R2Wdescr)
+            cond_call_stm_b(p1, descr=P2Wdescr)
             setfield_gc(p1, i2, descr=tydescr)
             jump(p1)
         """)
diff --git a/rpython/jit/backend/x86/assembler.py 
b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -1020,12 +1020,16 @@
 
     def _reload_frame_if_necessary(self, mc, align_stack=False):
         gcrootmap = self.cpu.gc_ll_descr.gcrootmap
-        if gcrootmap:
-            if gcrootmap.is_shadow_stack:
-                rst = gcrootmap.get_root_stack_top_addr()
-                mc.MOV(ecx, heap(rst))
-                mc.MOV(ebp, mem(ecx, -WORD))
-        wbdescr = self.cpu.gc_ll_descr.write_barrier_descr
+        if gcrootmap and gcrootmap.is_shadow_stack:
+            rst = gcrootmap.get_root_stack_top_addr()
+            mc.MOV(ecx, heap(rst))
+            mc.MOV(ebp, mem(ecx, -WORD))
+
+        if gcrootmap and gcrootmap.is_stm:
+            wbdescr = self.cpu.gc_ll_descr.P2Wdescr
+        else:
+            wbdescr = self.cpu.gc_ll_descr.write_barrier_descr
+            
         if gcrootmap and wbdescr:
             # frame never uses card marking, so we enforce this is not
             # an array
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to