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