Author: Maciej Fijalkowski <fij...@gmail.com> Branch: inline-dict-ops Changeset: r45071:3fbc094334b3 Date: 2011-06-23 10:19 +0200 http://bitbucket.org/pypy/pypy/changeset/3fbc094334b3/
Log: some descr support for low level cpus diff --git a/pypy/jit/backend/llsupport/descr.py b/pypy/jit/backend/llsupport/descr.py --- a/pypy/jit/backend/llsupport/descr.py +++ b/pypy/jit/backend/llsupport/descr.py @@ -487,7 +487,8 @@ # if TYPE is lltype.Float or is_longlong(TYPE): setattr(Descr, floatattrname, True) - elif TYPE is not lltype.Bool and rffi.cast(TYPE, -1) == -1: + elif (TYPE is not lltype.Bool and isinstance(TYPE, lltype.Number) and + rffi.cast(TYPE, -1) == -1): setattr(Descr, signedattrname, True) # _cache[nameprefix, TYPE] = Descr diff --git a/pypy/jit/backend/llsupport/test/test_descr.py b/pypy/jit/backend/llsupport/test/test_descr.py --- a/pypy/jit/backend/llsupport/test/test_descr.py +++ b/pypy/jit/backend/llsupport/test/test_descr.py @@ -3,7 +3,6 @@ from pypy.jit.backend.llsupport import symbolic from pypy.rlib.objectmodel import Symbolic from pypy.rpython.annlowlevel import llhelper -from pypy.jit.metainterp.history import BoxInt, BoxFloat, BoxPtr from pypy.jit.metainterp import history from pypy.jit.codewriter import longlong import sys, struct, py @@ -135,6 +134,8 @@ A2 = lltype.GcArray(lltype.Ptr(T)) A3 = lltype.GcArray(lltype.Ptr(U)) A4 = lltype.GcArray(lltype.Float) + A5 = lltype.GcArray(lltype.Struct('x', ('v', lltype.Signed), + ('k', lltype.Signed))) assert getArrayDescrClass(A2) is GcPtrArrayDescr assert getArrayDescrClass(A3) is NonGcPtrArrayDescr cls = getArrayDescrClass(A1) @@ -149,6 +150,7 @@ descr2 = get_array_descr(c0, A2) descr3 = get_array_descr(c0, A3) descr4 = get_array_descr(c0, A4) + descr5 = get_array_descr(c0, A5) assert descr1.__class__ is cls assert descr2.__class__ is GcPtrArrayDescr assert descr3.__class__ is NonGcPtrArrayDescr @@ -158,10 +160,12 @@ assert descr2.is_array_of_pointers() assert not descr3.is_array_of_pointers() assert not descr4.is_array_of_pointers() + assert not descr5.is_array_of_pointers() assert not descr1.is_array_of_floats() assert not descr2.is_array_of_floats() assert not descr3.is_array_of_floats() assert descr4.is_array_of_floats() + assert not descr5.is_array_of_floats() # def get_alignment(code): # Retrieve default alignment for the compiler/platform @@ -178,6 +182,7 @@ assert descr2.get_item_size(False) == rffi.sizeof(lltype.Ptr(T)) assert descr3.get_item_size(False) == rffi.sizeof(lltype.Ptr(U)) assert descr4.get_item_size(False) == rffi.sizeof(lltype.Float) + assert descr5.get_item_size(False) == rffi.sizeof(lltype.Signed) * 2 # assert isinstance(descr1.get_base_size(True), Symbolic) assert isinstance(descr2.get_base_size(True), Symbolic) @@ -191,6 +196,7 @@ assert isinstance(descr2.get_item_size(True), Symbolic) assert isinstance(descr3.get_item_size(True), Symbolic) assert isinstance(descr4.get_item_size(True), Symbolic) + assert isinstance(descr5.get_item_size(True), Symbolic) CA = rffi.CArray(lltype.Signed) descr = get_array_descr(c0, CA) assert not descr.is_array_of_floats() @@ -305,7 +311,6 @@ (rffi.SHORT, True), (rffi.USHORT, False), (rffi.INT, True), (rffi.UINT, False), (rffi.LONG, True), (rffi.ULONG, False)]: - A = lltype.GcArray(RESTYPE) for tsc in [False, True]: c2 = GcCache(tsc) descr1 = get_call_descr(c2, [], RESTYPE) @@ -336,7 +341,6 @@ descr3i = get_array_descr(c0, lltype.GcArray(lltype.Char)) assert descr3i.repr_of_descr() == '<CharArrayDescr>' # - cache = {} descr4 = get_call_descr(c0, [lltype.Char, lltype.Ptr(S)], lltype.Ptr(S)) assert 'GcPtrCallDescr' in descr4.repr_of_descr() # @@ -364,10 +368,10 @@ ARGS = [lltype.Float, lltype.Ptr(ARRAY)] RES = lltype.Float - def f(a, b): + def f2(a, b): return float(b[0]) + a - fnptr = llhelper(lltype.Ptr(lltype.FuncType(ARGS, RES)), f) + fnptr = llhelper(lltype.Ptr(lltype.FuncType(ARGS, RES)), f2) descr2 = get_call_descr(c0, ARGS, RES) a = lltype.malloc(ARRAY, 3) opaquea = lltype.cast_opaque_ptr(llmemory.GCREF, a) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit