Author: Armin Rigo <ar...@tunes.org> Branch: ffi-backend Changeset: r56633:5ba6d28ae49e Date: 2012-08-07 11:56 +0200 http://bitbucket.org/pypy/pypy/changeset/5ba6d28ae49e/
Log: Fixes fixes fixes diff --git a/pypy/jit/backend/llgraph/runner.py b/pypy/jit/backend/llgraph/runner.py --- a/pypy/jit/backend/llgraph/runner.py +++ b/pypy/jit/backend/llgraph/runner.py @@ -376,6 +376,11 @@ arg_types=''.join(arg_types), ffi_flags=cif_description.abi) + def _calldescr_dynamic_for_tests(self, atypes, rtype, + abiname='FFI_DEFAULT_ABI'): + from pypy.jit.backend.llsupport import ffisupport + return ffisupport.calldescr_dynamic_for_tests(self, atypes, rtype, + abiname) def grab_exc_value(self): return llimpl.grab_exc_value() diff --git a/pypy/jit/backend/llsupport/ffisupport.py b/pypy/jit/backend/llsupport/ffisupport.py --- a/pypy/jit/backend/llsupport/ffisupport.py +++ b/pypy/jit/backend/llsupport/ffisupport.py @@ -79,3 +79,18 @@ else: size = 0 return _get_ffi2descr_dict(cpu)[kind, size] + +def calldescr_dynamic_for_tests(cpu, atypes, rtype, abiname='FFI_DEFAULT_ABI'): + from pypy.rlib import clibffi + from pypy.rlib.jit_libffi import CIF_DESCRIPTION, FFI_TYPE_PP + # + p = lltype.malloc(CIF_DESCRIPTION, len(atypes), + flavor='raw', immortal=True) + rffi.setintfield(p, 'abi', getattr(clibffi, abiname)) + p.nargs = len(atypes) + p.rtype = rtype + p.atypes = lltype.malloc(FFI_TYPE_PP.TO, len(atypes), + flavor='raw', immortal=True) + for i in range(len(atypes)): + p.atypes[i] = atypes[i] + return cpu.calldescrof_dynamic(p, None) diff --git a/pypy/jit/backend/llsupport/llmodel.py b/pypy/jit/backend/llsupport/llmodel.py --- a/pypy/jit/backend/llsupport/llmodel.py +++ b/pypy/jit/backend/llsupport/llmodel.py @@ -285,6 +285,12 @@ return ffisupport.get_call_descr_dynamic(self, cif_description, extrainfo) + def _calldescr_dynamic_for_tests(self, atypes, rtype, + abiname='FFI_DEFAULT_ABI'): + from pypy.jit.backend.llsupport import ffisupport + return ffisupport.calldescr_dynamic_for_tests(self, atypes, rtype, + abiname) + def get_overflow_error(self): ovf_vtable = self.cast_adr_to_int(self._ovf_error_vtable) ovf_inst = lltype.cast_opaque_ptr(llmemory.GCREF, diff --git a/pypy/jit/backend/llsupport/test/test_ffisupport.py b/pypy/jit/backend/llsupport/test/test_ffisupport.py --- a/pypy/jit/backend/llsupport/test/test_ffisupport.py +++ b/pypy/jit/backend/llsupport/test/test_ffisupport.py @@ -1,4 +1,5 @@ from pypy.rlib.jit_libffi import types, CIF_DESCRIPTION, FFI_TYPE_PP +from pypy.rlib.clibffi import FFI_DEFAULT_ABI from pypy.rpython.lltypesystem import lltype, rffi from pypy.jit.codewriter.longlong import is_64_bit from pypy.jit.backend.llsupport.descr import * @@ -13,61 +14,52 @@ self.supports_longlong = supports_longlong self.supports_singlefloats = supports_singlefloats -def grab(cpu, atypes, rtype): - p = lltype.malloc(CIF_DESCRIPTION, len(atypes), - flavor='raw', immortal=True) - rffi.setintfield(p, 'abi', 42) - p.nargs = len(atypes) - p.rtype = rtype - p.atypes = lltype.malloc(FFI_TYPE_PP.TO, len(atypes), - flavor='raw', immortal=True) - for i in range(len(atypes)): - p.atypes[i] = atypes[i] - return get_call_descr_dynamic(cpu, p, None) - def test_call_descr_dynamic(): args = [types.sint, types.pointer] - descr = grab(FakeCPU(), args, types.sint) + descr = calldescr_dynamic_for_tests(FakeCPU(), args, types.sint) assert isinstance(descr, CallDescr) assert descr.result_type == 'i' assert descr.result_flag == FLAG_SIGNED assert descr.arg_classes == 'ii' - assert descr.get_ffi_flags() == 42 + assert descr.get_ffi_flags() == FFI_DEFAULT_ABI args = [types.sint, types.double, types.pointer] - descr = grab(FakeCPU(), args, types.void) + descr = calldescr_dynamic_for_tests(FakeCPU(), args, types.void) assert descr is None # missing floats - descr = grab(FakeCPU(supports_floats=True), args, types.void) + descr = calldescr_dynamic_for_tests(FakeCPU(supports_floats=True), + args, types.void) assert descr.result_type == 'v' assert descr.result_flag == FLAG_VOID assert descr.arg_classes == 'ifi' - assert descr.get_ffi_flags() == 42 + assert descr.get_ffi_flags() == FFI_DEFAULT_ABI - descr = grab(FakeCPU(), [], types.sint8) + descr = calldescr_dynamic_for_tests(FakeCPU(), [], types.sint8) assert descr.get_result_size() == 1 assert descr.result_flag == FLAG_SIGNED assert descr.is_result_signed() == True - descr = grab(FakeCPU(), [], types.uint8) + descr = calldescr_dynamic_for_tests(FakeCPU(), [], types.uint8) assert isinstance(descr, CallDescr) assert descr.get_result_size() == 1 assert descr.result_flag == FLAG_UNSIGNED assert descr.is_result_signed() == False if not is_64_bit or is_emulated_long: - descr = grab(FakeCPU(), [], types.slonglong) + descr = calldescr_dynamic_for_tests(FakeCPU(), [], types.slonglong) assert descr is None # missing longlongs - descr = grab(FakeCPU(supports_longlong=True), [], types.slonglong) + descr = calldescr_dynamic_for_tests(FakeCPU(supports_longlong=True), + [], types.slonglong) assert isinstance(descr, CallDescr) assert descr.result_flag == FLAG_FLOAT assert descr.result_type == 'L' - assert descr.get_ffi_flags() == 42 + assert descr.get_ffi_flags() == FFI_DEFAULT_ABI else: assert types.slonglong is types.slong - descr = grab(FakeCPU(), [], types.float) + descr = calldescr_dynamic_for_tests(FakeCPU(), [], types.float) assert descr is None # missing singlefloats - descr = grab(FakeCPU(supports_singlefloats=True), [], types.float) + descr = calldescr_dynamic_for_tests(FakeCPU(supports_singlefloats=True), + [], types.float) assert descr.result_flag == FLAG_UNSIGNED assert descr.result_type == 'S' - assert descr.get_ffi_flags() == 42 + assert descr.get_ffi_flags() == FFI_DEFAULT_ABI diff --git a/pypy/jit/backend/test/runner_test.py b/pypy/jit/backend/test/runner_test.py --- a/pypy/jit/backend/test/runner_test.py +++ b/pypy/jit/backend/test/runner_test.py @@ -514,21 +514,6 @@ [42], None, [longlong.getfloatstorage(3.5)]) assert longlong.getrealfloat(x) == 3.5 - 42 - def _calldescr_dynamic(self, atypes, rtype, abiname='FFI_DEFAULT_ABI'): - from pypy.rlib import clibffi - from pypy.rlib.jit_libffi import CIF_DESCRIPTION, FFI_TYPE_PP - # - p = lltype.malloc(CIF_DESCRIPTION, len(atypes), - flavor='raw', immortal=True) - rffi.setintfield(p, 'abi', getattr(clibffi, abiname)) - p.nargs = len(atypes) - p.rtype = rtype - p.atypes = lltype.malloc(FFI_TYPE_PP.TO, len(atypes), - flavor='raw', immortal=True) - for i in range(len(atypes)): - p.atypes[i] = atypes[i] - return self.cpu.calldescrof_dynamic(p, None) - def test_call(self): from pypy.rlib.jit_libffi import types @@ -558,8 +543,8 @@ 'int', descr=calldescr) assert res.value == 2 * num # then, try it with the dynamic calldescr - dyn_calldescr = self._calldescr_dynamic([ffi_type, ffi_type], - ffi_type) + dyn_calldescr = cpu._calldescr_dynamic_for_tests( + [ffi_type, ffi_type], ffi_type) res = self.execute_operation(rop.CALL, [funcbox, BoxInt(num), BoxInt(num)], 'int', descr=dyn_calldescr) @@ -2181,7 +2166,7 @@ cpu = self.cpu func_adr = llmemory.cast_ptr_to_adr(c_tolower.funcsym) funcbox = ConstInt(heaptracker.adr2int(func_adr)) - calldescr = self._calldescr_dynamic([types.uchar], types.sint) + calldescr = cpu._calldescr_dynamic_for_tests([types.uchar], types.sint) i1 = BoxInt() i2 = BoxInt() tok = BoxInt() @@ -2234,9 +2219,9 @@ cpu = self.cpu func_adr = llmemory.cast_ptr_to_adr(c_qsort.funcsym) funcbox = ConstInt(heaptracker.adr2int(func_adr)) - calldescr = self._calldescr_dynamic([types.pointer, types_size_t, - types_size_t, types.pointer], - types.void) + calldescr = cpu._calldescr_dynamic_for_tests( + [types.pointer, types_size_t, types_size_t, types.pointer], + types.void) i0 = BoxInt() i1 = BoxInt() i2 = BoxInt() @@ -2285,9 +2270,10 @@ cpu = self.cpu func_adr = llmemory.cast_ptr_to_adr(c_GetCurrentDir.funcsym) funcbox = ConstInt(heaptracker.adr2int(func_adr)) - calldescr = self._calldescr_dynamic([types.ulong, types.pointer], - types.ulong, - abiname='FFI_STDCALL') + calldescr = cpu._calldescr_dynamic_for_tests( + [types.ulong, types.pointer], + types.ulong, + abiname='FFI_STDCALL') i1 = BoxInt() i2 = BoxInt() faildescr = BasicFailDescr(1) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit