[pypy-svn] r36850 - in pypy/dist/pypy/jit/codegen/i386: . test
arigo at codespeak.net
arigo at codespeak.net
Tue Jan 16 20:16:46 CET 2007
Author: arigo
Date: Tue Jan 16 20:16:42 2007
New Revision: 36850
Modified:
pypy/dist/pypy/jit/codegen/i386/rgenop.py
pypy/dist/pypy/jit/codegen/i386/test/test_rgenop.py
Log:
genop_malloc_varsize stored the size of the allocated array in bytes
into the 'length' field, instead of the item count
Modified: pypy/dist/pypy/jit/codegen/i386/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/i386/rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/i386/rgenop.py Tue Jan 16 20:16:42 2007
@@ -1377,7 +1377,7 @@
[opsz])
self.operations.append(opmalloc)
lengthtoken, _, _ = varsizealloctoken
- self.operations.append(OpSetField(lengthtoken, opmalloc, opsz))
+ self.operations.append(OpSetField(lengthtoken, opmalloc, gv_size))
return opmalloc
def genop_getfield(self, fieldtoken, gv_ptr):
Modified: pypy/dist/pypy/jit/codegen/i386/test/test_rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/i386/test/test_rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/i386/test/test_rgenop.py Tue Jan 16 20:16:42 2007
@@ -1,3 +1,4 @@
+from pypy.rpython.lltypesystem import lltype
from pypy.jit.codegen.i386.rgenop import RI386GenOp
from pypy.jit.codegen.test.rgenop_tests import AbstractRGenOpTests
@@ -6,3 +7,44 @@
# for the individual tests see
# ====> ../../test/rgenop_tests.py
+
+ def test_array_of_ints(self):
+ from pypy.jit.codegen.i386.test.test_operation import RGenOpPacked
+ rgenop = RGenOpPacked()
+ A = lltype.GcArray(lltype.Signed)
+ FUNC3 = lltype.FuncType([lltype.Signed]*3, lltype.Signed)
+ varsizealloctoken = rgenop.varsizeAllocToken(A)
+ arraytoken = rgenop.arrayToken(A)
+ signed_kind = rgenop.kindToken(lltype.Signed)
+ # ------------------------------------------------------------
+ builder0, gv_callable, [v0, v1, v2] = rgenop.newgraph(
+ rgenop.sigToken(FUNC3), 'generated')
+ v3 = builder0.genop_malloc_varsize(varsizealloctoken,
+ rgenop.genconst(2))
+ v4 = builder0.genop1('ptr_iszero', v3)
+ builder1 = builder0.jump_if_false(v4, [v2, v0, v3, v1])
+ builder2 = builder0.pause_writing([])
+ builder1.start_writing()
+ builder1.genop_setarrayitem(arraytoken, v3, rgenop.genconst(0), v0)
+ builder1.genop_setarrayitem(arraytoken, v3, rgenop.genconst(1), v1)
+ v5 = builder1.genop_getarrayitem(arraytoken, v3, v2)
+ v6 = builder1.genop_getarraysize(arraytoken, v3)
+ v7 = builder1.genop2('int_mul', v5, v6)
+ builder3 = builder1.pause_writing([v7])
+ builder3.start_writing()
+ args_gv = [v7]
+ label0 = builder3.enter_next_block([signed_kind], args_gv)
+ [v8] = args_gv
+ builder4 = builder3.pause_writing([v8])
+ builder2.start_writing()
+ builder2.finish_and_goto([rgenop.genconst(-1)], label0)
+ builder4.start_writing()
+ args_gv = [v8]
+ label1 = builder4.enter_next_block([signed_kind], args_gv)
+ [v9] = args_gv
+ builder4.finish_and_return(rgenop.sigToken(FUNC3), v9)
+ builder0.end()
+
+ fnptr = self.cast(gv_callable, 3)
+ res = fnptr(21, -21, 0)
+ assert res == 42
More information about the Pypy-commit
mailing list