[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pypy-svn
Subject:    [pypy-commit] pypy ppc-jit-backend: add test for direct call of
From:       hager <noreply () buildbot ! pypy ! org>
Date:       2011-11-30 17:04:15
Message-ID: 20111130170415.3E9278208A () wyvern ! cs ! uni-duesseldorf ! de
[Download RAW message or body]

Author: hager <sven.hager@uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r50022:2da6b07d24ec
Date: 2011-11-30 18:02 +0100
http://bitbucket.org/pypy/pypy/changeset/2da6b07d24ec/

Log:	add test for direct call of assembler code

diff --git a/pypy/jit/backend/ppc/ppcgen/test/test_call_assembler.py \
b/pypy/jit/backend/ppc/ppcgen/test/test_call_assembler.py new file mode 100644
--- /dev/null
+++ b/pypy/jit/backend/ppc/ppcgen/test/test_call_assembler.py
@@ -0,0 +1,77 @@
+import py
+from pypy.jit.metainterp.history import BoxInt, ConstInt,\
+     BoxPtr, ConstPtr, TreeLoop, BasicFailDescr
+from pypy.jit.metainterp.resoperation import rop, ResOperation
+from pypy.jit.codewriter import heaptracker
+from pypy.jit.backend.llsupport.descr import GcCache
+from pypy.jit.backend.llsupport.gc import GcLLDescription
+from pypy.jit.backend.detect_cpu import getcpuclass
+from pypy.jit.tool.oparser import parse
+from pypy.rpython.lltypesystem import lltype, llmemory, rffi
+from pypy.rpython.annlowlevel import llhelper
+from pypy.rpython.lltypesystem import rclass, rstr
+from pypy.jit.backend.llsupport.gc import GcLLDescr_framework, GcPtrFieldDescr
+
+from pypy.jit.codewriter.effectinfo import EffectInfo
+from pypy.jit.backend.ppc.runner import PPC_64_CPU
+from pypy.jit.backend.ppc.test.test_runner import FakeStats
+
+class TestAssembler(object):
+
+    type_system = 'lltype'
+
+    def setup_class(cls):
+        cls.cpu = PPC_64_CPU(rtyper=None, stats=FakeStats())
+        cls.cpu.setup_once()
+
+    def interpret_direct_entry_point(self, ops, args, namespace):
+        loop = self.parse(ops, namespace)
+        self.cpu.compile_loop(loop.inputargs, loop.operations, loop.token)
+        param_sign_list = []
+        for i, arg in enumerate(args):
+            if isinstance(arg, int):
+                param_sign_list.append(lltype.Signed)
+            elif isinstance(arg, float):
+                assert 0, "not implemented yet"
+            else:
+                assert 0, "not implemented yet"
+
+        looptoken = loop.token
+        signature = lltype.FuncType(param_sign_list, lltype.Signed)
+        addr = looptoken._ppc_direct_bootstrap_code
+        func = rffi.cast(lltype.Ptr(signature), addr)
+        fail_index = func(*args)
+        fail_descr = self.cpu.get_fail_descr_from_number(fail_index)
+        return fail_descr
+
+    def parse(self, s, namespace, boxkinds=None):
+        return parse(s, self.cpu, namespace,
+                     type_system=self.type_system,
+                     boxkinds=boxkinds)
+
+    # XXX this test should also be used by the other backends
+    def test_call_assembler_vary_arguments(self):
+        namespace = {}
+        numargs = 20
+
+        for i in range(numargs + 1):
+            namespace["fdescr%d" % i] = BasicFailDescr(i)
+        namespace["finishdescr"] = BasicFailDescr(numargs + 1)
+
+        for i in range(1, numargs + 1):
+            arglist = []
+            guardlist = []
+
+            for k in range(i):
+                name = "i%d" % k
+                arglist.append(name)
+                guardlist.append("guard_value(%s, %d, descr=fdescr%d) [%s]"
+                        % (name, k, k, name))
+
+            argstr = "".join(("[", ", ".join(arglist), "]\n"))
+            guardstr = "\n".join(guardlist) + "\n"
+            finish = "finish(descr=finishdescr)\n"
+
+            trace = "".join((argstr, guardstr, finish))
+            fail_descr = self.interpret_direct_entry_point(trace, range(i), \
namespace) +            assert fail_descr.identifier == \
namespace["finishdescr"].identifier _______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic