Author: Richard Plangger <planri...@gmail.com> Branch: ppc-vsx-support Changeset: r87037:7ee75be77c56 Date: 2016-09-12 14:17 +0200 http://bitbucket.org/pypy/pypy/changeset/7ee75be77c56/
Log: update the llgraph runner to exec vec_load/store diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py --- a/rpython/jit/backend/llgraph/runner.py +++ b/rpython/jit/backend/llgraph/runner.py @@ -330,7 +330,9 @@ is_llgraph = True vector_ext = VectorExt() vector_ext.enable(16, accum=True) + vector_ext.setup_once = lambda asm: asm load_supported_factors = (1,2,4,8) + assembler = None def __init__(self, rtyper, stats=None, *ignored_args, **kwds): model.AbstractCPU.__init__(self) @@ -927,50 +929,32 @@ def bh_vec_int_signext(self, vx, ext, count): return [heaptracker.int_signext(_vx, ext) for _vx in vx] - def build_getarrayitem(func): - def method(self, struct, offset, descr, _count): + def build_load(func): + def method(self, struct, offset, scale, disp, descr, _count): values = [] count = self.vector_ext.vec_size() // descr.get_item_size_in_bytes() assert _count == count assert count > 0 + adr = struct + (offset * scale + disp) + a = support.cast_arg(lltype.Ptr(descr.A), adr) + array = a._obj for i in range(count): - val = func(self, struct, offset + i, descr) + val = support.cast_result(descr.A.OF, array.getitem(i)) values.append(val) return values return method - bh_vec_getarrayitem_gc_i = build_getarrayitem(bh_getarrayitem_gc) - bh_vec_getarrayitem_gc_f = build_getarrayitem(bh_getarrayitem_gc) - bh_vec_getarrayitem_raw_i = build_getarrayitem(bh_getarrayitem_raw) - bh_vec_getarrayitem_raw_f = build_getarrayitem(bh_getarrayitem_raw) - del build_getarrayitem + bh_vec_load_i = build_load(bh_getarrayitem_raw) + bh_vec_load_f = build_load(bh_getarrayitem_raw) + del build_load - def _bh_vec_raw_load(self, struct, offset, descr, _count): - values = [] + def bh_vec_store(self, struct, offset, newvalues, scale, disp, descr, count): stride = descr.get_item_size_in_bytes() - count = self.vector_ext.vec_size() // descr.get_item_size_in_bytes() - assert _count == count - assert count > 0 - for i in range(count): - val = self.bh_raw_load(struct, offset + i*stride, descr) - values.append(val) - return values - - bh_vec_raw_load_i = _bh_vec_raw_load - bh_vec_raw_load_f = _bh_vec_raw_load - - def bh_vec_raw_store(self, struct, offset, newvalues, descr, count): - stride = descr.get_item_size_in_bytes() + adr = struct + (offset * scale + disp) + a = support.cast_arg(lltype.Ptr(descr.A), adr) + array = a._obj for i,n in enumerate(newvalues): - self.bh_raw_store(struct, offset + i*stride, n, descr) - - def bh_vec_setarrayitem_raw(self, struct, offset, newvalues, descr, count): - for i,n in enumerate(newvalues): - self.bh_setarrayitem_raw(struct, offset + i, n, descr) - - def bh_vec_setarrayitem_gc(self, struct, offset, newvalues, descr, count): - for i,n in enumerate(newvalues): - self.bh_setarrayitem_gc(struct, offset + i, n, descr) + array.setitem(i, support.cast_arg(descr.A.OF, n)) def store_fail_descr(self, deadframe, descr): pass # I *think* diff --git a/rpython/jit/metainterp/test/support.py b/rpython/jit/metainterp/test/support.py --- a/rpython/jit/metainterp/test/support.py +++ b/rpython/jit/metainterp/test/support.py @@ -9,6 +9,7 @@ from rpython.jit.metainterp import pyjitpl, history, jitexc from rpython.jit.codewriter.policy import JitPolicy from rpython.jit.codewriter import codewriter, longlong +from rpython.jit.backend.llsupport.vector_ext import VectorExt from rpython.rlib.rfloat import isnan from rpython.rlib.jit import ENABLE_ALL_OPTS from rpython.translator.backendopt.all import backend_optimizations @@ -298,6 +299,9 @@ class LLJitMixin(JitMixin): CPUClass = runner.LLGraphCPU + def supports_vector_ext(self): + return True + @staticmethod def Ptr(T): return lltype.Ptr(T) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit