[pypy-commit] pypy ppc-vsx-support: implement unpacking for integers 8, 16, 32 bits if count == 1
plan_rich
pypy.commits at gmail.com
Tue Aug 23 05:28:04 EDT 2016
Author: Richard Plangger <planrichi at 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)
More information about the pypy-commit
mailing list