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