Author: David Schneider <[email protected]>
Branch: arm-backed-float
Changeset: r44382:03908c0e8cb8
Date: 2011-05-23 10:27 +0200
http://bitbucket.org/pypy/pypy/changeset/03908c0e8cb8/

Log:    move calling convention tests to backend tests

diff --git a/pypy/jit/backend/arm/test/test_calling_convention.py 
b/pypy/jit/backend/arm/test/test_calling_convention.py
--- a/pypy/jit/backend/arm/test/test_calling_convention.py
+++ b/pypy/jit/backend/arm/test/test_calling_convention.py
@@ -1,214 +1,1 @@
-import py, sys, random, os, struct, operator, itertools
-from pypy.jit.metainterp.history import (AbstractFailDescr,
-                                         AbstractDescr,
-                                         BasicFailDescr,
-                                         BoxInt, Box, BoxPtr,
-                                         LoopToken,
-                                         ConstInt, ConstPtr,
-                                         BoxObj, Const,
-                                         ConstObj, BoxFloat, ConstFloat)
-from pypy.jit.metainterp.resoperation import ResOperation, rop
-from pypy.jit.metainterp.typesystem import deref
-from pypy.jit.tool.oparser import parse
-from pypy.rpython.lltypesystem import lltype, llmemory, rstr, rffi, rclass
-from pypy.rpython.ootypesystem import ootype
-from pypy.rpython.annlowlevel import llhelper
-from pypy.rpython.llinterp import LLException
-from pypy.jit.codewriter import heaptracker, longlong
-from pypy.rlib.rarithmetic import intmask
-from pypy.jit.backend.detect_cpu import getcpuclass
-from pypy.jit.backend.test.runner_test import Runner
-
-# XXX add a test that tests the direct call assembler thing
-# XXX add a test that generates combinations of calls
-
-def boxfloat(x):
-    return BoxFloat(longlong.getfloatstorage(x))
-
-def constfloat(x):
-    return ConstFloat(longlong.getfloatstorage(x))
-class FakeStats(object):
-    pass
-class TestCallingConv(Runner):
-    type_system = 'lltype'
-    Ptr = lltype.Ptr
-    FuncType = lltype.FuncType
-
-    def __init__(self):
-        self.cpu = getcpuclass()(rtyper=None, stats=FakeStats())
-        self.cpu.setup_once()
-
-    @classmethod
-    def get_funcbox(cls, cpu, func_ptr):
-        addr = llmemory.cast_ptr_to_adr(func_ptr)
-        return ConstInt(heaptracker.adr2int(addr))
-
-    def test_call_aligned_with_args_on_the_stack(self):
-            from pypy.rlib.libffi import types
-            cpu = self.cpu
-            if not cpu.supports_floats:
-                py.test.skip('requires floats')
-
-
-            def func(*args):
-                return sum(args)
-
-            F = lltype.Float
-            I = lltype.Signed
-            base_args = [F, F]
-            floats = [0.7, 5.8, 0.1, 0.3, 0.9]
-            ints = [7, 11, 23]
-            result = sum(floats + ints)
-            for p in itertools.permutations([I, I, I, F, F, F]):
-                args = base_args + list(p)
-                local_floats = list(floats)
-                local_ints = list(ints)
-                FUNC = self.FuncType(args, F)
-                FPTR = self.Ptr(FUNC)
-                func_ptr = llhelper(FPTR, func)
-                calldescr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT)
-                funcbox = self.get_funcbox(cpu, func_ptr)
-                argslist = []
-                for x in args:
-                    if x is F:
-                        argslist.append(boxfloat(local_floats.pop()))
-                    else:
-                        argslist.append(BoxInt(local_ints.pop()))
-
-                res = self.execute_operation(rop.CALL,
-                                             [funcbox] + argslist,
-                                             'float', descr=calldescr)
-                assert abs(res.getfloat() - result) < 0.0001
-
-    def test_call_alignment_register_args(self):
-            from pypy.rlib.libffi import types
-            cpu = self.cpu
-            if not cpu.supports_floats:
-                py.test.skip('requires floats')
-
-
-            def func(*args):
-                return sum(args)
-
-            F = lltype.Float
-            I = lltype.Signed
-            floats = [0.7, 5.8]
-            ints = [7, 11]
-            result = sum(floats + ints)
-            for args in itertools.permutations([I, I, F, F]):
-                local_floats = list(floats)
-                local_ints = list(ints)
-                FUNC = self.FuncType(args, F)
-                FPTR = self.Ptr(FUNC)
-                func_ptr = llhelper(FPTR, func)
-                calldescr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT)
-                funcbox = self.get_funcbox(cpu, func_ptr)
-                argslist = []
-                for x in args:
-                    if x is F:
-                        argslist.append(boxfloat(local_floats.pop()))
-                    else:
-                        argslist.append(BoxInt(local_ints.pop()))
-
-                res = self.execute_operation(rop.CALL,
-                                             [funcbox] + argslist,
-                                             'float', descr=calldescr)
-                assert abs(res.getfloat() - result) < 0.0001
-
-
-    def test_call_alignment_call_assembler(self):
-        from pypy.rlib.libffi import types
-        cpu = self.cpu
-        if not cpu.supports_floats:
-            py.test.skip('requires floats')
-
-        fdescr1 = BasicFailDescr(1)
-        fdescr2 = BasicFailDescr(2)
-        fdescr3 = BasicFailDescr(3)
-        fdescr4 = BasicFailDescr(4)
-
-        def assembler_helper(failindex, virtualizable):
-            assert 0, 'should not be called, but was with failindex (%d)' % 
failindex
-            return 13
-
-        FUNCPTR = lltype.Ptr(lltype.FuncType([lltype.Signed, llmemory.GCREF],
-                                             lltype.Signed))
-        class FakeJitDriverSD:
-            index_of_virtualizable = -1
-            _assembler_helper_ptr = llhelper(FUNCPTR, assembler_helper)
-            assembler_helper_adr = llmemory.cast_ptr_to_adr(
-                _assembler_helper_ptr)
-
-        arglist = ['f0', 'f1', 'f2', 'i0', 'f3']
-        floats = [0.7, 5.8, 0.1, 0.3]
-        ints = [7, 11, 23, 42]
-        def _prepare_args(args):
-            local_floats = list(floats)
-            local_ints = list(ints)
-            for i in range(len(args)):
-                x = args[i]
-                if x[0] == 'f':
-                    t = longlong.getfloatstorage(local_floats.pop())
-                    cpu.set_future_value_float(i, t)
-                else:
-                    cpu.set_future_value_int(i, (local_ints.pop()))
-
-        for args in itertools.permutations(arglist):
-            args += ('i1', 'i2', 'i3')
-            arguments = ', '.join(args)
-            called_ops = '''
-            [%s]
-            i4 = int_add(i0, i1)
-            i5 = int_add(i4, i2)
-            i6 = int_add(i5, i3)
-            guard_value(i6, 83, descr=fdescr1) [i4, i5, i6]
-            f4 = float_add(f0, f1)
-            f5 = float_add(f4, f2)
-            f6 = float_add(f5, f3)
-            i7 = float_lt(f6, 6.99)
-            guard_true(i7, descr=fdescr2) [f4, f5, f6]
-            finish(i6, f6, descr=fdescr3)''' % arguments
-            # compile called loop
-            called_loop = parse(called_ops, namespace=locals())
-            called_looptoken = LoopToken()
-            called_looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
-            done_number = 
self.cpu.get_fail_descr_number(called_loop.operations[-1].getdescr())
-            self.cpu.compile_loop(called_loop.inputargs, 
called_loop.operations, called_looptoken)
-
-            _prepare_args(args)
-            res = cpu.execute_token(called_looptoken)
-            assert res.identifier == 3
-            assert cpu.get_latest_value_int(0) == 83
-            t = longlong.getrealfloat(cpu.get_latest_value_float(1))
-            assert abs(t - 6.9) < 0.0001
-
-            ARGS = []
-            RES = lltype.Signed
-            for x in args:
-                if x[0] == 'f':
-                    ARGS.append(lltype.Float)
-                else:
-                    ARGS.append(lltype.Signed)
-            FakeJitDriverSD.portal_calldescr = self.cpu.calldescrof(
-                lltype.Ptr(lltype.FuncType(ARGS, RES)), ARGS, RES)
-            ops = '''
-            [%s]
-            i10 = call_assembler(%s, descr=called_looptoken)
-            guard_not_forced()[]
-            finish(i10, descr=fdescr4)
-            ''' % (arguments, arguments)
-            loop = parse(ops, namespace=locals())
-            # we want to take the fast path
-            self.cpu.done_with_this_frame_int_v = done_number
-            try:
-                othertoken = LoopToken()
-                self.cpu.compile_loop(loop.inputargs, loop.operations, 
othertoken)
-
-                # prepare call to called_loop
-                _prepare_args(args)
-                res = cpu.execute_token(othertoken)
-                x = cpu.get_latest_value_int(0)
-                assert res.identifier == 4
-                assert x == 83
-            finally:
-                del self.cpu.done_with_this_frame_int_v
+from pypy.jit.backend.test.calling_convention_test import TestCallingConv
diff --git a/pypy/jit/backend/arm/test/test_calling_convention.py 
b/pypy/jit/backend/test/calling_convention_test.py
copy from pypy/jit/backend/arm/test/test_calling_convention.py
copy to pypy/jit/backend/test/calling_convention_test.py
--- a/pypy/jit/backend/arm/test/test_calling_convention.py
+++ b/pypy/jit/backend/test/calling_convention_test.py
@@ -19,9 +19,6 @@
 from pypy.jit.backend.detect_cpu import getcpuclass
 from pypy.jit.backend.test.runner_test import Runner
 
-# XXX add a test that tests the direct call assembler thing
-# XXX add a test that generates combinations of calls
-
 def boxfloat(x):
     return BoxFloat(longlong.getfloatstorage(x))
 
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to