[pypy-commit] pypy fast-newarray: make sure our stuff is correctly aligned

fijal noreply at buildbot.pypy.org
Tue Apr 16 00:40:12 CEST 2013


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: fast-newarray
Changeset: r63395:68fbb849da58
Date: 2013-04-16 00:39 +0200
http://bitbucket.org/pypy/pypy/changeset/68fbb849da58/

Log:	make sure our stuff is correctly aligned

diff --git a/rpython/jit/backend/llsupport/test/test_gc_integration.py b/rpython/jit/backend/llsupport/test/test_gc_integration.py
--- a/rpython/jit/backend/llsupport/test/test_gc_integration.py
+++ b/rpython/jit/backend/llsupport/test/test_gc_integration.py
@@ -284,7 +284,7 @@
         # check the nursery content and state
         assert gc_ll_descr.nursery[0] == chr(15)
         assert gc_ll_descr.nursery[2 * WORD + 8] == chr(15)
-        assert gc_ll_descr.addrs[0] == nurs_adr + 4 * WORD + 8*1 + 5*2
+        assert gc_ll_descr.addrs[0] == nurs_adr + (((4 * WORD + 8*1 + 5*2) + (WORD - 1)) & ~(WORD - 1))
         # slowpath never called
         assert gc_ll_descr.calls == []
 
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
@@ -2375,8 +2375,12 @@
         jmp_adr0 = self.mc.get_relative_pos()
         self.mc.MOV(eax, heap(nursery_free_adr))
         self.mc.MOV(edi, lengthloc)
-        self.mc.IMUL(edi, imm(itemsize))
-        self.mc.ADD(edi, imm(WORD * 2))
+        if itemsize == 0:
+            self.mc.ADD_ri(edi.value, 2 * WORD)
+        else:
+            self.mc.IMUL_ri(edi.value, itemsize)
+            self.mc.ADD_ri(edi.value, WORD * 2 + WORD - 1)
+            self.mc.AND_ri(edi.value, ~(WORD - 1))
         self.mc.ADD(edi, heap(nursery_free_adr))
         self.mc.CMP(edi, heap(nursery_top_adr))
         # write down the tid


More information about the pypy-commit mailing list