[pypy-svn] r48202 - in pypy/dist/pypy/jit/codegen: i386/test llgraph/test test
arigo at codespeak.net
arigo at codespeak.net
Tue Oct 30 16:46:53 CET 2007
Author: arigo
Date: Tue Oct 30 16:46:51 2007
New Revision: 48202
Modified:
pypy/dist/pypy/jit/codegen/i386/test/test_rgenop.py
pypy/dist/pypy/jit/codegen/llgraph/test/test_rgenop.py
pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
Log:
Shuffle tests so that some rgenop_tests can use an RGenOpPacked
if necessary.
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 Oct 30 16:46:51 2007
@@ -5,48 +5,7 @@
class TestRI386Genop(AbstractRGenOpTests):
RGenOp = RI386GenOp
+ from pypy.jit.codegen.i386.test.test_operation import RGenOpPacked
# 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')
- builder0.start_writing()
- 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
Modified: pypy/dist/pypy/jit/codegen/llgraph/test/test_rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/llgraph/test/test_rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/llgraph/test/test_rgenop.py Tue Oct 30 16:46:51 2007
@@ -8,6 +8,7 @@
class TestLLGraphRGenop(AbstractRGenOpTests):
RGenOp = RGenOp
+ RGenOpPacked = RGenOp
def setup_method(self, meth):
if 'ovfcheck' in meth.__name__:
Modified: pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/test/rgenop_tests.py (original)
+++ pypy/dist/pypy/jit/codegen/test/rgenop_tests.py Tue Oct 30 16:46:51 2007
@@ -1,4 +1,4 @@
-import random, sys
+import random, sys, py
from pypy.rpython.annlowlevel import MixLevelAnnotatorPolicy, llhelper
from pypy.rlib.rarithmetic import intmask, r_uint
from pypy.rlib.objectmodel import keepalive_until_here
@@ -836,6 +836,7 @@
class AbstractRGenOpTests(test_boehm.AbstractGCTestClass):
RGenOp = None
+ RGenOpPacked = None
def compile(self, runner, argtypes):
return self.getcompiled(runner, argtypes,
@@ -2076,16 +2077,61 @@
result = fnptr(x)
assert result == expected(x)
+ def test_array_of_ints(self):
+ if self.RGenOpPacked is None:
+ py.test.skip("requires RGenOpPacked")
+ rgenop = self.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')
+ builder0.start_writing()
+ 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
+
def test_interior_access(self):
# for assembler backends, the 'interior' lloperations can be
# simply expressed as a sequence of genop_getsubstruct and
# genop_getarraysubstruct. So we put magic in the llgraph
# backend to recognize and rebuild the expected 'interior'
# lloperation in the llgraphs.
+ if self.RGenOpPacked is None:
+ py.test.skip("requires RGenOpPacked")
T = lltype.Struct('T', ('x', lltype.Signed))
A = lltype.Array(T)
S = lltype.GcStruct('S', ('a', A))
- rgenop = self.RGenOp()
+ rgenop = self.RGenOpPacked()
sigtoken = rgenop.sigToken(FUNC)
builder, gv_fn, [gv_x] = rgenop.newgraph(sigtoken, "interior_access")
builder.start_writing()
More information about the Pypy-commit
mailing list