[pypy-commit] pypy fast-newarray: write a test and fix it
fijal
noreply at buildbot.pypy.org
Mon Apr 15 23:09:46 CEST 2013
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: fast-newarray
Changeset: r63393:4c0c30b1f265
Date: 2013-04-15 23:09 +0200
http://bitbucket.org/pypy/pypy/changeset/4c0c30b1f265/
Log: write a test and fix it
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
@@ -181,6 +181,12 @@
[lltype.Signed] * 3,
lltype.Signed)
+ def malloc_str(size):
+ self.calls.append(('str', size))
+ return 13
+ self.generate_function('malloc_str', malloc_str, [lltype.Signed],
+ lltype.Signed)
+
def get_nursery_free_addr(self):
return rffi.cast(lltype.Signed, self.addrs)
@@ -284,23 +290,26 @@
def test_malloc_nursery_varsize_slowpath(self):
self.cpu = self.getcpu(None)
- ops = '''
+ ops = """
[i0, i1, i2]
p0 = call_malloc_nursery_varsize(0, 8, i0, descr=arraydescr)
p1 = call_malloc_nursery_varsize(0, 5, i1, descr=arraydescr)
p3 = call_malloc_nursery_varsize(0, 5, i2, descr=arraydescr)
+ # overflow
p4 = call_malloc_nursery_varsize(0, 5, i2, descr=arraydescr)
- # overflow
+ # we didn't collect, so still overflow
+ p5 = call_malloc_nursery_varsize(1, 5, i2, descr=strdescr)
guard_false(i0) [p0, p1, p3, p4]
- '''
+ """
A = lltype.GcArray(lltype.Signed)
arraydescr = self.cpu.arraydescrof(A)
arraydescr.tid = 15
self.interpret(ops, [10, 3, 3],
- namespace={'arraydescr': arraydescr})
+ namespace={'arraydescr': arraydescr,
+ 'strdescr': arraydescr})
# check the returned pointers
gc_ll_descr = self.cpu.gc_ll_descr
- assert gc_ll_descr.calls == [(8, 15, 10), (5, 15, 3)]
+ assert gc_ll_descr.calls == [(8, 15, 10), (5, 15, 3), ('str', 3)]
# one fit, one was too large, one was not fitting
def test_malloc_slowpath(self):
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
@@ -2390,11 +2390,17 @@
self.mc.MOV_si(WORD, itemsize)
self.mc.MOV(RawEspLoc(WORD * 2, INT), lengthloc)
self.mc.MOV_si(WORD * 3, arraydescr.tid)
+ addr = self.malloc_slowpath_varsize
else:
+ if kind == 1:
+ addr = self.malloc_slowpath_str
+ else:
+ assert kind == 2
+ addr = self.malloc_slowpath_unicode
self.mc.MOV(RawEspLoc(WORD, INT), lengthloc)
# save the gcmap
self.push_gcmap(self.mc, gcmap, mov=True)
- self.mc.CALL(imm(self.malloc_slowpath_varsize))
+ self.mc.CALL(imm(addr))
offset = self.mc.get_relative_pos() - jmp_adr1
assert 0 < offset <= 127
self.mc.overwrite(jmp_adr1-1, chr(offset))
More information about the pypy-commit
mailing list