[pypy-svn] r75772 - in pypy/trunk/pypy/jit/backend/x86: . test
arigo at codespeak.net
arigo at codespeak.net
Fri Jul 2 17:01:30 CEST 2010
Author: arigo
Date: Fri Jul 2 17:01:28 2010
New Revision: 75772
Modified:
pypy/trunk/pypy/jit/backend/x86/regalloc.py
pypy/trunk/pypy/jit/backend/x86/test/test_zrpy_gc.py
Log:
Test and fix for allocating arrays with Boehm.
The length is not at offset zero any more, since a while now.
Modified: pypy/trunk/pypy/jit/backend/x86/regalloc.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/regalloc.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/regalloc.py Fri Jul 2 17:01:28 2010
@@ -783,12 +783,14 @@
arglocs.append(self.loc(op.args[0]))
return self._call(op, arglocs)
# boehm GC (XXX kill the following code at some point)
- scale_of_field, basesize, _ = self._unpack_arraydescr(op.descr)
- return self._malloc_varsize(basesize, 0, scale_of_field, op.args[0],
- op.result)
+ scale_of_field, basesize, ofs_length, _ = (
+ self._unpack_arraydescr(op.descr))
+ return self._malloc_varsize(basesize, ofs_length, scale_of_field,
+ op.args[0], op.result)
def _unpack_arraydescr(self, arraydescr):
assert isinstance(arraydescr, BaseArrayDescr)
+ ofs_length = arraydescr.get_ofs_length(self.translate_support_code)
ofs = arraydescr.get_base_size(self.translate_support_code)
size = arraydescr.get_item_size(self.translate_support_code)
ptr = arraydescr.is_array_of_pointers()
@@ -796,7 +798,7 @@
while (1 << scale) < size:
scale += 1
assert (1 << scale) == size
- return scale, ofs, ptr
+ return scale, ofs, ofs_length, ptr
def _unpack_fielddescr(self, fielddescr):
assert isinstance(fielddescr, BaseFieldDescr)
@@ -831,7 +833,7 @@
consider_unicodesetitem = consider_strsetitem
def consider_setarrayitem_gc(self, op):
- scale, ofs, ptr = self._unpack_arraydescr(op.descr)
+ scale, ofs, _, ptr = self._unpack_arraydescr(op.descr)
base_loc = self.rm.make_sure_var_in_reg(op.args[0], op.args)
if scale == 0:
need_lower_byte = True
@@ -858,7 +860,7 @@
consider_getfield_gc_pure = consider_getfield_gc
def consider_getarrayitem_gc(self, op):
- scale, ofs, _ = self._unpack_arraydescr(op.descr)
+ scale, ofs, _, _ = self._unpack_arraydescr(op.descr)
base_loc = self.rm.make_sure_var_in_reg(op.args[0], op.args)
ofs_loc = self.rm.make_sure_var_in_reg(op.args[1], op.args)
self.rm.possibly_free_vars(op.args)
Modified: pypy/trunk/pypy/jit/backend/x86/test/test_zrpy_gc.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/test/test_zrpy_gc.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/test/test_zrpy_gc.py Fri Jul 2 17:01:28 2010
@@ -105,6 +105,12 @@
def test_compile_boehm():
myjitdriver = JitDriver(greens = [], reds = ['n', 'x'])
+ @dont_look_inside
+ def see(lst, n):
+ assert len(lst) == 3
+ assert lst[0] == n+10
+ assert lst[1] == n+20
+ assert lst[2] == n+30
def main(n, x):
while n > 0:
myjitdriver.can_enter_jit(n=n, x=x)
@@ -112,6 +118,7 @@
y = X()
y.foo = x.foo
n -= y.foo
+ see([n+10, n+20, n+30], n)
res = compile_and_run(get_entry(get_g(main)), "boehm", jit=True)
assert int(res) >= 16
More information about the Pypy-commit
mailing list