[pypy-svn] r53352 - pypy/branch/jit-hotpath/pypy/jit/codegen/test

fijal at codespeak.net fijal at codespeak.net
Fri Apr 4 20:33:04 CEST 2008


Author: fijal
Date: Fri Apr  4 20:33:04 2008
New Revision: 53352

Modified:
   pypy/branch/jit-hotpath/pypy/jit/codegen/test/rgenop_tests.py
Log:
test for array of floats (passes on llgraph backend)


Modified: pypy/branch/jit-hotpath/pypy/jit/codegen/test/rgenop_tests.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/codegen/test/rgenop_tests.py	(original)
+++ pypy/branch/jit-hotpath/pypy/jit/codegen/test/rgenop_tests.py	Fri Apr  4 20:33:04 2008
@@ -2208,6 +2208,51 @@
         res = fnptr(21, -21, 0)
         assert res == 42
 
+    def test_array_of_floats(self):
+        if self.RGenOpPacked is None:
+            py.test.skip("requires RGenOpPacked")
+        rgenop = self.RGenOpPacked()
+        A = lltype.GcArray(lltype.Float)
+        FUNC3 = lltype.FuncType([lltype.Float]*2 + [lltype.Signed], lltype.Float)
+        varsizealloctoken = rgenop.varsizeAllocToken(A)
+        arraytoken = rgenop.arrayToken(A)
+        float_kind = rgenop.kindToken(lltype.Float)
+        # ------------------------------------------------------------
+        builder0, gv_callable, [v0, v1, v2] = rgenop.newgraph(
+            rgenop.sigToken(FUNC3), 'float_array')
+        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)
+        v6b = builder1.genop1('cast_int_to_float', v6)
+        v7 = builder1.genop2('float_mul', v5, v6b)
+        builder3 = builder1.pause_writing([v7])
+        builder3.start_writing()
+        args_gv = [v7]
+        label0 = builder3.enter_next_block(args_gv)
+        [v8] = args_gv
+        builder4 = builder3.pause_writing([v8])
+        builder2.start_writing()
+        builder2.finish_and_goto([rgenop.genconst(-1.0)], label0)
+        builder4.start_writing()
+        args_gv = [v8]
+        label1 = builder4.enter_next_block(args_gv)
+        [v9] = args_gv
+        builder4.finish_and_return(rgenop.sigToken(FUNC3), v9)
+        builder0.end()
+        
+        fnptr = self.cast_whatever(gv_callable, [lltype.Float]*2 +
+                                   [lltype.Signed], lltype.Float)
+        res = fnptr(3.1, -3.2, 1)
+        assert res == -6.4
+
     def test_interior_access(self):
         # for assembler backends, the 'interior' lloperations can be
         # simply expressed as a sequence of genop_getsubstruct and



More information about the Pypy-commit mailing list