[pypy-commit] pypy stmgc-c4: remove need for another temporary register in stm_read_barrier fastpath

Raemi noreply at buildbot.pypy.org
Thu Aug 8 16:15:12 CEST 2013


Author: Remi Meier <remi.meier at gmail.com>
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):


More information about the pypy-commit mailing list