[pypy-commit] pypy stmgc-c8: fix memset usage in the jit for %gs prefix'd address

Raemi noreply at buildbot.pypy.org
Thu Mar 12 15:43:43 CET 2015


Author: Remi Meier <remi.meier at inf.ethz.ch>
Branch: stmgc-c8
Changeset: r76351:4dbf5a92f9f6
Date: 2015-03-12 11:36 +0100
http://bitbucket.org/pypy/pypy/changeset/4dbf5a92f9f6/

Log:	fix memset usage in the jit for %gs prefix'd address

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
@@ -1102,7 +1102,7 @@
         self.mc.LEA(result, addr_add(self.SEGMENT_NO, frm, sizereg,
                                      baseofs, scale))
 
-    def convert_addresses_to_linear(self, reg1, reg2):
+    def convert_addresses_to_linear(self, reg1, reg2=None):
         if not self.cpu.gc_ll_descr.stm:   # stm-only
             return
         if not IS_X86_64:
@@ -1111,7 +1111,8 @@
         assert rx86.fits_in_32bits(sb_adr)    # because it is in the 2nd page
         self.mc.MOV_rj(X86_64_SCRATCH_REG.value, (self.SEGMENT_GC, sb_adr))
         self.mc.ADD(reg1, X86_64_SCRATCH_REG)
-        self.mc.ADD(reg2, X86_64_SCRATCH_REG)
+        if reg2 is not None:
+            self.mc.ADD(reg2, X86_64_SCRATCH_REG)
 
     def _unaryop(asmop):
         def genop_unary(self, op, arglocs, resloc):
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
@@ -1461,6 +1461,8 @@
                 dstaddr_loc, startindex_loc, itemsize_loc,
                 base_loc, imm(baseofs))
             self.assembler.mc.LEA(dstaddr_loc, dst_addr)
+            # for stm: convert the address from %gs-based to linear
+            self.assembler.convert_addresses_to_linear(dstaddr_loc)
             #
             if constbytes >= 0:
                 length_loc = imm(constbytes)


More information about the pypy-commit mailing list