Author: Richard Plangger <planri...@gmail.com> Branch: ppc-vsx-support Changeset: r86440:eccd7c7028fc Date: 2016-08-23 11:27 +0200 http://bitbucket.org/pypy/pypy/changeset/eccd7c7028fc/
Log: implement unpacking for integers 8,16,32 bits if count == 1 diff --git a/rpython/jit/backend/ppc/vector_ext.py b/rpython/jit/backend/ppc/vector_ext.py --- a/rpython/jit/backend/ppc/vector_ext.py +++ b/rpython/jit/backend/ppc/vector_ext.py @@ -465,21 +465,25 @@ vector = vloc.value src = sourceloc.value size = op.bytesize + assert resultloc.is_vector_reg() # vector <- reg + self.mc.load_imm(r.SCRATCH2, PARAM_SAVE_AREA_OFFSET) + self.mc.stvx(vector, r.SCRATCH2.value, r.SP.value) if size == 8: - if resultloc.is_vector_reg(): # vector <- reg - self.mc.load_imm(r.SCRATCH2, PARAM_SAVE_AREA_OFFSET) - self.mc.stvx(vector, r.SCRATCH2.value, r.SP.value) - idx = residx - self.mc.store(src, r.SP.value, PARAM_SAVE_AREA_OFFSET+8*idx) - self.mc.lvx(res, r.SCRATCH2.value, r.SP.value) - else: - not_implemented("64 bit float") + idx = residx + self.mc.store(src, r.SP.value, PARAM_SAVE_AREA_OFFSET+8*idx) elif size == 4: - not_implemented("vec_pack_i") + for j in range(count): + i = j + residx + self.mc.stw(src, r.SP.value, PARAM_SAVE_AREA_OFFSET+4*i) elif size == 2: - not_implemented("vec_pack_i") + for j in range(count): + i = j + residx + self.mc.sth(src, r.SP.value, PARAM_SAVE_AREA_OFFSET+2*i) elif size == 1: - not_implemented("vec_pack_i") + for j in range(count): + i = j + residx + self.mc.stb(src, r.SP.value, PARAM_SAVE_AREA_OFFSET+i) + self.mc.lvx(res, r.SCRATCH2.value, r.SP.value) def emit_vec_unpack_i(self, op, arglocs, regalloc): assert isinstance(op, VectorOp) @@ -507,7 +511,7 @@ return elif size == 1: self.mc.lbz(res, r.SP.value, off) - self.mc.extsb(res, res) + #self.mc.extsb(res, res) return not_implemented("%d bit integer, count %d" % \ @@ -715,7 +719,7 @@ return [resloc, vloc, srcloc, imm(residx), imm(srcidx), imm(count.value)] def prepare_vec_pack_f(self, op): - # new_res = vec_pack_i(res, src, index, count) + # new_res = vec_pack_f(res, src, index, count) assert isinstance(op, VectorOp) arg = op.getarg(1) index = op.getarg(2) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit