Author: Richard Plangger <r...@pasra.at> Branch: vecopt Changeset: r77426:20eb63b24b80 Date: 2015-05-20 08:05 +0200 http://bitbucket.org/pypy/pypy/changeset/20eb63b24b80/
Log: helping the rtyper diff --git a/rpython/jit/backend/llsupport/descr.py b/rpython/jit/backend/llsupport/descr.py --- a/rpython/jit/backend/llsupport/descr.py +++ b/rpython/jit/backend/llsupport/descr.py @@ -194,12 +194,15 @@ vinfo = None concrete_type = '\x00' - def __init__(self, basesize, itemsize, lendescr, flag): + def __init__(self, basesize, itemsize, lendescr, flag, concrete_type='\x00'): self.basesize = basesize self.itemsize = itemsize self.lendescr = lendescr # or None, if no length self.flag = flag + def getconcrete_type(self): + return self.concrete_type + def is_array_of_pointers(self): return self.flag == FLAG_POINTER @@ -260,12 +263,13 @@ else: lendescr = get_field_arraylen_descr(gccache, ARRAY_OR_STRUCT) flag = get_type_flag(ARRAY_INSIDE.OF) - arraydescr = ArrayDescr(basesize, itemsize, lendescr, flag) + concreate_type = '\x00' if ARRAY_INSIDE.OF is lltype.SingleFloat or \ ARRAY_INSIDE.OF is lltype.Float: # it would be better to set the flag as FLOAT_TYPE # for single float -> leads to problems - arraydescr.concrete_type = FLOAT + concrete_type = FLOAT + arraydescr = ArrayDescr(basesize, itemsize, lendescr, flag, concreate_type) if ARRAY_OR_STRUCT._gckind == 'gc': gccache.init_array_descr(ARRAY_OR_STRUCT, arraydescr) cache[ARRAY_OR_STRUCT] = arraydescr diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py --- a/rpython/jit/backend/x86/regalloc.py +++ b/rpython/jit/backend/x86/regalloc.py @@ -1475,10 +1475,11 @@ def consider_vec_getarrayitem_raw(self, op): descr = op.getdescr() + assert isinstance(descr, ArrayDescr) assert not descr.is_array_of_pointers() and \ not descr.is_array_of_structs() itemsize, ofs, _ = unpack_arraydescr(descr) - integer = not (descr.is_array_of_floats() or descr.concrete_type == FLOAT) + integer = not (descr.is_array_of_floats() or descr.getconcrete_type() == FLOAT) aligned = False args = op.getarglist() base_loc = self.rm.make_sure_var_in_reg(op.getarg(0), args) @@ -1491,6 +1492,7 @@ def consider_vec_setarrayitem_raw(self, op): descr = op.getdescr() + assert isinstance(descr, ArrayDescr) assert not descr.is_array_of_pointers() and \ not descr.is_array_of_structs() itemsize, ofs, _ = unpack_arraydescr(descr) @@ -1499,7 +1501,7 @@ value_loc = self.make_sure_var_in_reg(op.getarg(2), args) ofs_loc = self.rm.make_sure_var_in_reg(op.getarg(1), args) - integer = not (descr.is_array_of_floats() or descr.concrete_type == FLOAT) + integer = not (descr.is_array_of_floats() or descr.getconcrete_type() == FLOAT) aligned = False self.perform_discard(op, [base_loc, ofs_loc, value_loc, imm(itemsize), imm(ofs), imm(integer), imm(aligned)]) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit