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

Reply via email to