Author: Remi Meier <[email protected]>
Branch: stmgc-c7
Changeset: r71369:6c68d7afe0c1
Date: 2014-05-07 13:52 +0200
http://bitbucket.org/pypy/pypy/changeset/6c68d7afe0c1/
Log: revert the additional argument of stm_should_break_transaction()
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
@@ -121,11 +121,8 @@
self.read_barrier_applied[v_ptr] = None
def handle_should_break_transaction(self, op):
- op1 = ResOperation(rop.STM_SHOULD_BREAK_TRANSACTION,
- [ConstInt(not self.does_any_allocation)],
- op.result)
- self.newops.append(op1)
- self.does_any_allocation = True
+ self.newops.append(op)
+ #self.does_any_allocation = True
def must_apply_write_barrier(self, val, v=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
@@ -1233,11 +1233,11 @@
def test_stm_should_break_transaction_no_malloc(self):
self.check_rewrite("""
[]
- i1 = stm_should_break_transaction(0)
+ i1 = stm_should_break_transaction()
jump(i1)
""", """
[]
- i1 = stm_should_break_transaction(1)
+ i1 = stm_should_break_transaction()
jump(i1)
""")
@@ -1245,26 +1245,26 @@
self.check_rewrite("""
[]
p2 = new(descr=tdescr)
- i1 = stm_should_break_transaction(0)
+ i1 = stm_should_break_transaction()
jump(i1)
""", """
[]
p2 = call_malloc_nursery(%(tdescr.size)d)
setfield_gc(p2, %(tdescr.tid)d, descr=tiddescr)
- i1 = stm_should_break_transaction(0)
+ i1 = stm_should_break_transaction()
jump(i1)
""")
def test_double_stm_should_break_allocation(self):
self.check_rewrite("""
[]
- i1 = stm_should_break_transaction(0)
- i2 = stm_should_break_transaction(0)
+ i1 = stm_should_break_transaction()
+ i2 = stm_should_break_transaction()
jump(i1, i2)
""", """
[]
- i1 = stm_should_break_transaction(1)
- i2 = stm_should_break_transaction(0)
+ i1 = stm_should_break_transaction()
+ i2 = stm_should_break_transaction()
jump(i1, i2)
""")
@@ -1273,13 +1273,13 @@
[]
p2 = new(descr=tdescr)
label()
- i1 = stm_should_break_transaction(0)
+ i1 = stm_should_break_transaction()
jump(i1)
""", """
[]
p2 = call_malloc_nursery(%(tdescr.size)d)
setfield_gc(p2, %(tdescr.tid)d, descr=tiddescr)
label()
- i1 = stm_should_break_transaction(1)
+ i1 = stm_should_break_transaction()
jump(i1)
""")
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
@@ -619,7 +619,7 @@
self.patch_jump_for_descr(faildescr, rawstart)
if self.cpu.gc_ll_descr.stm:
rstm.partial_commit_and_resume_other_threads()
-
+
self.teardown()
# oprofile support
if self.cpu.profile_agent is not None:
@@ -940,7 +940,7 @@
mc.copy_to_raw_memory(oldadr)
if self.cpu.gc_ll_descr.stm:
rstm.partial_commit_and_resume_other_threads()
-
+
def dump(self, text):
if not self.verbose:
@@ -2554,7 +2554,7 @@
assert isinstance(reg, RegLoc)
self.mc.MOV_rr(reg.value, ebp.value)
- def _generate_cmp_break_transaction(self, increase_nursery=False):
+ def _generate_cmp_break_transaction(self):
# emits the check with a CMP instruction:
# pypy_stm_nursery_low_fill_mark < STM_SEGMENT->nursery_current
# so if it is followed with a JB, it will follow the jump if
@@ -2562,33 +2562,26 @@
#
if not IS_X86_64:
todo() # "needed for X86_64_SCRATCH_REG"
- nf_adr = rstm.adr_nursery_free # STM_SEGMENT->nursery_current
- assert rx86.fits_in_32bits(nf_adr) # nf_adr is in page 1
- self.mc.MOV_rj(X86_64_SCRATCH_REG.value, (self.SEGMENT_GC, nf_adr))
- if increase_nursery:
- self.mc.ADD_ri(X86_64_SCRATCH_REG.value, WORD)
- self.mc.MOV_jr((self.SEGMENT_GC, nf_adr), X86_64_SCRATCH_REG.value)
psnlfm_adr = rstm.adr_pypy_stm_nursery_low_fill_mark
- psnlfm_adr -= stmtlocal.threadlocal_base()
- assert rx86.fits_in_32bits(psnlfm_adr) # should be %fs-local
- self.mc.CMP_rj(X86_64_SCRATCH_REG.value, (self.SEGMENT_TL, psnlfm_adr))
+ self.mc.MOV(X86_64_SCRATCH_REG, self.heap_tl(psnlfm_adr))
+ nf_adr = rstm.adr_nursery_free
+ assert rx86.fits_in_32bits(nf_adr) # because it is in the 2nd page
+ self.mc.CMP_rj(X86_64_SCRATCH_REG.value, (self.SEGMENT_GC, nf_adr))
def genop_stm_should_break_transaction(self, op, arglocs, result_loc):
- increase_nursery = op.getarg(0).getint()
- self._generate_cmp_break_transaction(increase_nursery=increase_nursery)
+ self._generate_cmp_break_transaction()
rl = result_loc.lowest8bits()
- self.mc.SET_ir(rx86.Conditions['A'], rl.value)
+ self.mc.SET_ir(rx86.Conditions['B'], rl.value)
self.mc.MOVZX8_rr(result_loc.value, rl.value)
def genop_guard_stm_should_break_transaction(self, op, guard_op,
guard_token, arglocs,
result_loc):
- increase_nursery = op.getarg(0).getint()
- self._generate_cmp_break_transaction(increase_nursery=increase_nursery)
+ self._generate_cmp_break_transaction()
if guard_op.getopnum() == rop.GUARD_FALSE:
- self.implement_guard(guard_token, 'A') # JA goes to "yes, break"
+ self.implement_guard(guard_token, 'B') # JB goes to "yes, break"
else:
- self.implement_guard(guard_token, 'BE') # JBE goes to "no, don't"
+ self.implement_guard(guard_token, 'AE') # JAE goes to "no, don't"
def genop_guard_stm_transaction_break(self, op, guard_op, guard_token,
arglocs, result_loc):
@@ -2601,9 +2594,9 @@
mc = self.mc
self._generate_cmp_break_transaction()
- # use JBE to jump over the following piece of code if we don't need
+ # use JAE to jump over the following piece of code if we don't need
# to break the transaction now
- mc.J_il(rx86.Conditions['BE'], 0xfffff) # patched later
+ mc.J_il(rx86.Conditions['AE'], 0xfffff) # patched later
jae_location = mc.get_relative_pos()
# This is the case in which we have to do the same as the logic
diff --git a/rpython/jit/metainterp/pyjitpl.py
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -207,8 +207,7 @@
if val:
# app-level loop: only one of these per loop is really needed
resbox = history.BoxInt(0)
- mi.history.record(rop.STM_SHOULD_BREAK_TRANSACTION,
- [history.CONST_FALSE], resbox)
+ mi.history.record(rop.STM_SHOULD_BREAK_TRANSACTION, [], resbox)
self.metainterp.heapcache.stm_break_done()
return resbox
else:
diff --git a/rpython/jit/metainterp/resoperation.py
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -494,7 +494,7 @@
'FORCE_TOKEN/0',
'VIRTUAL_REF/2', # removed before it's passed to the backend
'READ_TIMESTAMP/0',
- 'STM_SHOULD_BREAK_TRANSACTION/1', # flag: increase nursery_current?
+ 'STM_SHOULD_BREAK_TRANSACTION/0',
'MARK_OPAQUE_PTR/1b',
# this one has no *visible* side effect, since the virtualizable
# must be forced, however we need to execute it anyway
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit