[pypy-svn] r51023 - in pypy/dist/pypy/jit/codegen: llgraph test

fijal at codespeak.net fijal at codespeak.net
Fri Jan 25 12:46:46 CET 2008


Author: fijal
Date: Fri Jan 25 12:46:46 2008
New Revision: 51023

Modified:
   pypy/dist/pypy/jit/codegen/llgraph/rgenop.py
   pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
Log:
Tests for float_add + llgraph support


Modified: pypy/dist/pypy/jit/codegen/llgraph/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/llgraph/rgenop.py	(original)
+++ pypy/dist/pypy/jit/codegen/llgraph/rgenop.py	Fri Jan 25 12:46:46 2008
@@ -43,6 +43,7 @@
 
 gv_Void = gv_TYPE(lltype.Void)
 gv_Signed = gv_TYPE(lltype.Signed)
+gv_Double = gv_TYPE(lltype.Float)
 gv_Bool = gv_TYPE(lltype.Bool)
 gv_dummy_placeholder = LLConst(llimpl.dummy_placeholder)
 gv_flavor_gc = LLConst(llimpl.placeholder({'flavor': 'gc'}))

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	Fri Jan 25 12:46:46 2008
@@ -10,6 +10,7 @@
     rtyper = None
 GENOP_POLICY = MixLevelAnnotatorPolicy(PseudoAnnhelper())
 
+FLOATFUNC = lltype.FuncType([lltype.Float], lltype.Float)
 FUNC  = lltype.FuncType([lltype.Signed], lltype.Signed)
 FUNC2 = lltype.FuncType([lltype.Signed]*2, lltype.Signed)
 FUNC3 = lltype.FuncType([lltype.Signed]*3, lltype.Signed)
@@ -26,6 +27,19 @@
     builder.end()
     return gv_add_one
 
+def make_float_adder(rgenop, n):
+    # 'return x+n'
+    sigtoken = rgenop.sigToken(FLOATFUNC)
+    import pdb
+    pdb.set_trace()
+    builder, gv_add_one, [gv_x] = rgenop.newgraph(sigtoken, "float_adder")
+    builder.start_writing()
+    c2 = rgenop.genconst(n)
+    gv_result = builder.genop2("float_add", gv_x, c2)
+    builder.finish_and_return(sigtoken, gv_result)
+    builder.end()
+    return gv_add_one
+
 def get_adder_runner(RGenOp):
     def runner(x, y):
         rgenop = RGenOp()
@@ -36,6 +50,16 @@
         return res
     return runner
 
+def get_float_adder_runner(RGenOp):
+    def runner(x, y):
+        rgenop = RGenOp()
+        gv_add_x = make_float_adder(rgenop, x)
+        add_x = gv_add_x.revealconst(lltype.Ptr(FLOATFUNC))
+        res = add_x(y)
+        keepalive_until_here(rgenop)
+        return res
+    return runner
+
 def make_dummy(rgenop):
     # 'return x - (y - (x-1))'
     signed_kind = rgenop.kindToken(lltype.Signed)
@@ -846,6 +870,10 @@
         F1 = lltype.FuncType([lltype.Signed] * nb_args, lltype.Signed)
         return self.RGenOp.get_python_callable(lltype.Ptr(F1), gv)
 
+    def cast_float(self, gv, nb_args):
+        F1 = lltype.FuncType([lltype.Float] * nb_args, lltype.Float)
+        return self.RGenOp.get_python_callable(lltype.Ptr(F1), gv)
+
     def directtesthelper(self, FUNCTYPE, func):
         # for machine code backends: build a ctypes function pointer
         # (with a real physical address) that will call back our 'func'
@@ -890,11 +918,23 @@
         res = fnptr(37)
         assert res == 42
 
+    def test_float_adder(self):
+        rgenop = self.RGenOp()
+        gv_add_5 = make_float_adder(rgenop, 3.2)
+        fnptr = self.cast_float(gv_add_5, 1)
+        res = fnptr(1.2)
+        assert res == 4.4
+
     def test_adder_compile(self):
         fn = self.compile(get_adder_runner(self.RGenOp), [int, int])
         res = fn(9080983, -9080941)
         assert res == 42
 
+    def test_float_adder_compile(self):
+        fn = self.compile(get_float_adder_runner(self.RGenOp), [float, float])
+        res = fn(1.2, 3.4)
+        assert res == 4.6
+
     def test_dummy_direct(self):
         rgenop = self.RGenOp()
         gv_dummyfn = make_dummy(rgenop)



More information about the Pypy-commit mailing list