[pypy-commit] pypy ffi-backend: Fixes fixes fixes
arigo
noreply at buildbot.pypy.org
Tue Aug 7 15:56:52 CEST 2012
Author: Armin Rigo <arigo at 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)
More information about the pypy-commit
mailing list