Author: Armin Rigo <[email protected]>
Branch: stm-thread-2
Changeset: r57280:7cb7c5c88068
Date: 2012-09-11 15:09 +0200
http://bitbucket.org/pypy/pypy/changeset/7cb7c5c88068/

Log:    Kill old stm-supporting code from the x86 backend.

diff --git a/pypy/jit/backend/llsupport/gc.py b/pypy/jit/backend/llsupport/gc.py
--- a/pypy/jit/backend/llsupport/gc.py
+++ b/pypy/jit/backend/llsupport/gc.py
@@ -640,15 +640,15 @@
         while value[i] == '\x00': i += 1
         return (i, struct.unpack('b', value[i])[0])
 
-    def get_write_barrier_fn(self, cpu, stm=False):
-        # must pass in 'self.stm', to make sure that
+    def get_write_barrier_fn(self, cpu, returns_modified_object=False):
+        # must pass in 'self.returns_modified_object', to make sure that
         # the callers are fixed for this case
-        assert stm == self.returns_modified_object
+        assert returns_modified_object == self.returns_modified_object
         llop1 = self.llop1
         if self.returns_modified_object:
             FUNCTYPE = self.WB_FUNCPTR_MOD
             _, cat = self.stmcat
-            assert cat(stm) == 3 and cat[1] == '2'      # "x2y"
+            assert len(cat) == 3 and cat[1] == '2'      # "x2y"
             funcptr = llop1.get_write_barrier_failing_case(FUNCTYPE,
                                                            cat[0], cat[2])
         else:
diff --git a/pypy/jit/backend/llsupport/stmrewrite.py 
b/pypy/jit/backend/llsupport/stmrewrite.py
--- a/pypy/jit/backend/llsupport/stmrewrite.py
+++ b/pypy/jit/backend/llsupport/stmrewrite.py
@@ -23,7 +23,7 @@
 
 class GcStmRewriterAssembler(GcRewriterAssembler):
     # This class performs the same rewrites as its base class,
-    # plus the rewrites described in stm.txt.
+    # plus the rewrites described above.
 
     def __init__(self, *args):
         GcRewriterAssembler.__init__(self, *args)
diff --git a/pypy/jit/backend/x86/assembler.py 
b/pypy/jit/backend/x86/assembler.py
--- a/pypy/jit/backend/x86/assembler.py
+++ b/pypy/jit/backend/x86/assembler.py
@@ -2576,49 +2576,6 @@
 
     genop_discard_cond_call_gc_wb_array = genop_discard_cond_call_gc_wb
 
-    def genop_discard_stm_read_before(self, op, arglocs):
-        descr = op.getdescr()
-        if we_are_translated():
-            cls = self.cpu.gc_ll_descr.has_write_barrier_class()
-            assert cls is not None and isinstance(descr, cls)
-        # 
-        loc, loc_version = arglocs
-        assert loc is edx
-        assert loc_version is eax
-        # XXX hard-coded for now: the version is the second WORD in objects
-        self.mc.MOV_rm(loc_version.value, (loc.value, WORD))
-        #
-        mask = descr.jit_wb_if_flag_singlebyte    # test GCFLAG_GLOBAL
-        self.mc.TEST8_mi((loc.value, descr.jit_wb_if_flag_byteofs), mask)
-        self.mc.J_il8(rx86.Conditions['Z'], 0) # patched later
-        jz_location = self.mc.get_relative_pos()
-
-        # call interface: 'loc' is passed in edx; 'loc_version' is
-        # returned in eax.
-        self.mc.CALL(imm(self.stm_read_before_slowpath))
-
-        # patch the JZ above
-        offset = self.mc.get_relative_pos() - jz_location
-        assert 0 < offset <= 127
-        self.mc.overwrite(jz_location-1, chr(offset))
-
-    def genop_discard_stm_read_after(self, op, arglocs):
-        loc, loc_version, loc_position = arglocs
-        assert isinstance(loc, RegLoc)
-        assert isinstance(loc_version, RegLoc)
-        assert isinstance(loc_position, ImmedLoc)
-        # XXX hard-coded for now: the version is the second WORD in objects
-        self.mc.CMP_rm(loc_version.value, (loc.value, WORD))
-        #
-        # the negative offset of the conditional jump
-        offset = loc_position.value - (self.mc.get_relative_pos() + 2)
-        assert offset < 0
-        if offset >= -128:
-            self.mc.J_il8(rx86.Conditions['NE'], offset)
-        else:
-            # doesn't fit in one byte, use the 4-bytes variant
-            XXX
-
     def not_implemented_op_discard(self, op, arglocs):
         not_implemented("not implemented operation: %s" % op.getopname())
 
diff --git a/pypy/jit/backend/x86/regalloc.py b/pypy/jit/backend/x86/regalloc.py
--- a/pypy/jit/backend/x86/regalloc.py
+++ b/pypy/jit/backend/x86/regalloc.py
@@ -1532,28 +1532,6 @@
     def consider_keepalive(self, op):
         pass
 
-    def consider_stm_read_before(self, op):
-        self.xrm.before_call(save_all_regs=True)
-        self.rm.before_call(save_all_regs=True)
-        self.stm_read_before_position = self.assembler.mc.get_relative_pos()
-        args = op.getarglist()
-        loc = self.rm.make_sure_var_in_reg(args[0], selected_reg=edx)
-        tmpbox_version = TempBox()
-        loc_version = self.rm.force_allocate_reg(tmpbox_version,
-                                                 selected_reg=eax)
-        self.PerformDiscard(op, [loc, loc_version])
-        # tmpbox_version freed only in stm_read_after
-        self.stm_tmpbox_version = tmpbox_version
-
-    def consider_stm_read_after(self, op):
-        tmpbox_version = self.stm_tmpbox_version
-        loc = self.rm.make_sure_var_in_reg(op.getarg(0))
-        loc_version = self.rm.make_sure_var_in_reg(tmpbox_version)
-        loc_position = imm(self.stm_read_before_position)
-        self.PerformDiscard(op, [loc, loc_version, loc_position])
-        self.rm.possibly_free_var(op.getarg(0))
-        self.rm.possibly_free_var(tmpbox_version)
-
     def not_implemented_op(self, op):
         not_implemented("not implemented operation: %s" % op.getopname())
 
diff --git a/pypy/jit/backend/x86/test/test_stm_integration.py 
b/pypy/jit/backend/x86/test/test_stm_integration.py
deleted file mode 100644
--- a/pypy/jit/backend/x86/test/test_stm_integration.py
+++ /dev/null
@@ -1,22 +0,0 @@
-
-""" Tests for register allocation for common constructs
-"""
-
-import py
-from pypy.jit.backend.x86.test.test_regalloc import BaseTestRegalloc
-
-
-class TestStm(BaseTestRegalloc):
-
-    def test_stm_read_before_spills_all(self):
-        # for now, stm_read_before() first spills all registers
-        ops = '''
-        [i1, i2, p1]
-        i3 = int_add(i1, i2)
-        stm_read_before(p1, descr=wbdescr)
-        escape(i3)         # assert i3 was spilled
-        finish(i3)
-        '''
-        self.interpret(ops, [40, 2])
-        res = self.cpu.get_latest_value_int(0)
-        assert res == 42
diff --git a/pypy/jit/metainterp/executor.py b/pypy/jit/metainterp/executor.py
--- a/pypy/jit/metainterp/executor.py
+++ b/pypy/jit/metainterp/executor.py
@@ -356,8 +356,6 @@
                          rop.CALL_MALLOC_GC,
                          rop.CALL_MALLOC_NURSERY,
                          rop.LABEL,
-                         rop.STM_READ_BEFORE,
-                         rop.STM_READ_AFTER,
                          ):      # list of opcodes never executed by pyjitpl
                 continue
             raise AssertionError("missing %r" % (key,))
diff --git a/pypy/jit/metainterp/resoperation.py 
b/pypy/jit/metainterp/resoperation.py
--- a/pypy/jit/metainterp/resoperation.py
+++ b/pypy/jit/metainterp/resoperation.py
@@ -505,8 +505,6 @@
     'QUASIIMMUT_FIELD/1d',    # [objptr], descr=SlowMutateDescr
     'RECORD_KNOWN_CLASS/2',   # [objptr, clsptr]
     'KEEPALIVE/1',
-    'STM_READ_BEFORE/1d',     # inserted by backend/llsupport/stmrewrite
-    'STM_READ_AFTER/1',       # inserted by backend/llsupport/stmrewrite
 
     '_CANRAISE_FIRST', # ----- start of can_raise operations -----
     '_CALL_FIRST',
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to