Author: Remi Meier <remi.me...@inf.ethz.ch> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit