Author: Remi Meier <[email protected]>
Branch: stmgc-c4
Changeset: r66013:693378095093
Date: 2013-08-06 09:09 +0200
http://bitbucket.org/pypy/pypy/changeset/693378095093/

Log:    remove need for another temporary register in stm_read_barrier
        fastpath

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
@@ -2323,14 +2323,12 @@
             # calculate: temp = obj & FX_MASK
             assert StmGC.FX_MASK == 65535
             assert not is_frame
-            temp_loc = arglocs[1] # does not exist if is_frame!
-            mc.MOVZX16(temp_loc, loc_base)
+            mc.MOVZX16(X86_64_SCRATCH_REG, loc_base)
             # calculate: rbc + temp == obj
             rbc = self._get_stm_read_barrier_cache_addr()
             stmtlocal.tl_segment_prefix(mc)
-            mc.MOV_rj(X86_64_SCRATCH_REG.value, rbc)
-            mc.CMP_ra(loc_base.value, 
-                      (X86_64_SCRATCH_REG.value, temp_loc.value, 0, 0))
+            mc.ADD_rj(X86_64_SCRATCH_REG.value, rbc)
+            mc.CMP_rm(loc_base.value, (X86_64_SCRATCH_REG.value, 0))
             mc.J_il8(rx86.Conditions['Z'], 0) # patched below
             jz_location2 = mc.get_relative_pos()
 
diff --git a/rpython/jit/backend/x86/regalloc.py 
b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -797,24 +797,7 @@
                    for i in range(N)]
         self.perform_discard(op, arglocs)
 
-    def consider_cond_call_stm_b(self, op):
-        assert op.result is None
-        args = op.getarglist()
-        N = len(args)
-        assert N == 1
-        # we force all arguments in a reg (unless they are Consts),
-        # because it will be needed anyway by the following setfield_gc
-        # or setarrayitem_gc. It avoids loading it twice from the memory.
-        tmp_box = TempBox()
-        tmp_loc = self.rm.force_allocate_reg(tmp_box, args)
-        args = args + [tmp_box]
-
-        arglocs = [self.rm.make_sure_var_in_reg(op.getarg(i), args)
-                   for i in range(N)] + [tmp_loc]
-
-        self.perform_discard(op, arglocs)
-        self.rm.possibly_free_var(tmp_box)
-        
+    consider_cond_call_stm_b = consider_cond_call_gc_wb
     consider_cond_call_gc_wb_array = consider_cond_call_gc_wb
 
     def consider_call_malloc_nursery(self, op):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to