[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