Author: Maciej Fijalkowski <[email protected]>
Branch: fast-newarray
Changeset: r63397:58720f75e1c0
Date: 2013-04-16 01:06 +0200
http://bitbucket.org/pypy/pypy/changeset/58720f75e1c0/

Log:    get correct values instead of hardcoding them

diff --git a/rpython/jit/backend/llsupport/assembler.py 
b/rpython/jit/backend/llsupport/assembler.py
--- a/rpython/jit/backend/llsupport/assembler.py
+++ b/rpython/jit/backend/llsupport/assembler.py
@@ -70,6 +70,12 @@
         # the address of the function called by 'new'
         gc_ll_descr = self.cpu.gc_ll_descr
         gc_ll_descr.initialize()
+        self.gc_minimal_size_in_nursery = getattr(gc_ll_descr,
+                                                  'minimal_size_in_nursery', 0)
+        if hasattr(gc_ll_descr, 'gcheaderbuilder'):
+            self.gc_size_of_header = gc_ll_descr.gcheaderbuilder.size_gc_header
+        else:
+            self.gc_size_of_header = WORD # for tests
         self.memcpy_addr = self.cpu.cast_ptr_to_int(memcpy_fn)
         self._build_failure_recovery(False, withfloats=False)
         self._build_failure_recovery(True, withfloats=False)
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,12 +2375,11 @@
         jmp_adr0 = self.mc.get_relative_pos()
         self.mc.MOV(eax, heap(nursery_free_adr))
         self.mc.MOV(edi, lengthloc)
-        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))
+        assert arraydescr.basesize >= self.gc_minimal_size_in_nursery
+        self.mc.IMUL_ri(edi.value, itemsize)
+        header_size = self.gc_size_of_header
+        self.mc.ADD_ri(edi.value, arraydescr.basesize + header_size + 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
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to