Author: Richard Plangger <[email protected]>
Branch: ppc-vsx-support
Changeset: r86442:05e0d7bb3077
Date: 2016-08-23 12:15 +0200
http://bitbucket.org/pypy/pypy/changeset/05e0d7bb3077/
Log: pass unpack several on ppc
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
@@ -513,6 +513,32 @@
self.mc.lbz(res, r.SP.value, off)
#self.mc.extsb(res, res)
return
+ else:
+ # count is not 1, but only 2 is supported for i32
+ # 4 for i16 and 8 for i8.
+ src = srcloc.value | 0b100000
+ res = resloc.value | 0b100000
+ residx = 0
+ #assert idx == 0 or idx == 8
+ if (size == 4 and count == 2) or \
+ (size == 2 and count == 4) or \
+ (size == 1 and count == 8):
+ if idx == 0:
+ self.mc.xxpermdi(res, src, res, permi(0,1))
+ else:
+ self.mc.xxpermdi(res, src, res, permi(1,1))
+ return
+
+ self.mc.load_imm(r.SCRATCH2, PARAM_SAVE_AREA_OFFSET)
+ self.mc.stvx(src, r.SCRATCH2.value, r.SP.value)
+ self.mc.load_imm(r.SCRATCH2, PARAM_SAVE_AREA_OFFSET+16)
+ self.mc.stvx(res, r.SCRATCH2.value, r.SP.value)
+ if count * size == 8:
+ off = PARAM_SAVE_AREA_OFFSET + idx * size
+ self.mc.load(r.SCRATCH.value, r.SP.value, off)
+ self.mc.store(r.SCRATCH.value, r.SP.value,
PARAM_SAVE_AREA_OFFSET+16)
+ self.mc.lvx(res, r.SCRATCH2.value, r.SP.value)
+ return
not_implemented("%d bit integer, count %d" % \
(size*8, count))
@@ -759,7 +785,10 @@
# unpack
srcloc = self.ensure_reg(arg0)
size = arg.bytesize
- resloc = self.force_allocate_reg(op)
+ if op.is_vector():
+ resloc = self.force_allocate_vector_reg(op)
+ else:
+ resloc = self.force_allocate_reg(op)
return [resloc, srcloc, imm(index.value), imm(count.value), imm(size)]
def expand_float(self, size, box):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit