[pypy-svn] r77186 - pypy/branch/jitffi/pypy/jit/metainterp/test
fijal at codespeak.net
fijal at codespeak.net
Mon Sep 20 09:57:20 CEST 2010
Author: fijal
Date: Mon Sep 20 09:57:18 2010
New Revision: 77186
Added:
pypy/branch/jitffi/pypy/jit/metainterp/test/test_direct_call.py
Log:
A functional test about optimizing ffi access.
Added: pypy/branch/jitffi/pypy/jit/metainterp/test/test_direct_call.py
==============================================================================
--- (empty file)
+++ pypy/branch/jitffi/pypy/jit/metainterp/test/test_direct_call.py Mon Sep 20 09:57:18 2010
@@ -0,0 +1,40 @@
+
+import py
+from pypy.rlib.jit import JitDriver
+from pypy.jit.metainterp.test.test_basic import LLJitMixin
+from pypy.rlib.libffi import FuncPtr, CDLL, ffi_type_sint
+from pypy.tool.udir import udir
+from pypy.translator.tool.cbuild import ExternalCompilationInfo
+from pypy.translator.platform import platform
+from pypy.rpython.lltypesystem import lltype, rffi
+
+class TestDirectCall(LLJitMixin):
+ def setup_class(cls):
+ # prepare C code as an example, so we can load it and call
+ # it via rlib.libffi
+ c_file = udir.ensure("test_jit_direct_call", dir=1).join("xlib.c")
+ c_file.write(py.code.Source('''
+ int sum_xy(int x, int y)
+ {
+ return (x + y);
+ }
+ '''))
+ eci = ExternalCompilationInfo(export_symbols=['sum_xy'])
+ cls.lib_name = str(platform.compile([c_file], eci, 'x',
+ standalone=False))
+
+ def test_one(self):
+ driver = JitDriver(reds = ['n', 'fn'], greens = [])
+
+ def f(n):
+ cdll = CDLL(self.lib_name)
+ fn = cdll.getpointer('sum_xy', [ffi_type_sint, ffi_type_sint],
+ ffi_type_sint)
+ while n < 10:
+ driver.jit_merge_point(n=n, fn=fn)
+ driver.can_enter_jit(n=n, fn=fn)
+ fn.push_arg(n)
+ fn.push_arg(1)
+ n = fn.call(lltype.Signed)
+
+ self.meta_interp(f, [0])
More information about the Pypy-commit
mailing list