Author: Richard Plangger <[email protected]>
Branch: ppc-vsx-support
Changeset: r88027:dd5a308d5427
Date: 2016-11-01 13:59 +0100
http://bitbucket.org/pypy/pypy/changeset/dd5a308d5427/
Log: translation issue, moved function in file
diff --git a/rpython/jit/backend/x86/vector_ext.py
b/rpython/jit/backend/x86/vector_ext.py
--- a/rpython/jit/backend/x86/vector_ext.py
+++ b/rpython/jit/backend/x86/vector_ext.py
@@ -43,8 +43,8 @@
return "<TempVector at %s>" % (id(self),)
class TempInt(TempVar):
- def __init__(self):
- self.type = INT
+ type = INT
+
def __repr__(self):
return "<TempInt at %s>" % (id(self),)
diff --git a/rpython/jit/backend/zarch/vector_ext.py
b/rpython/jit/backend/zarch/vector_ext.py
--- a/rpython/jit/backend/zarch/vector_ext.py
+++ b/rpython/jit/backend/zarch/vector_ext.py
@@ -180,6 +180,32 @@
self.regalloc_mov(scalar_loc, orig_scalar_loc)
accum_info = accum_info.next()
+ def _accum_reduce(self, op, arg, accumloc, targetloc):
+ # Currently the accumulator can ONLY be 64 bit float/int
+ if arg.type == FLOAT:
+ self.mc.VX(targetloc, targetloc, targetloc)
+ self.mc.VPDI(targetloc, accumloc, accumloc, permi(1,0))
+ if op == '+':
+ self.mc.VFA(targetloc, targetloc, accumloc, l.imm3,
l.imm(0b1000), l.imm(0))
+ return
+ elif op == '*':
+ self.mc.VFM(targetloc, targetloc, accumloc, l.imm3,
l.imm(0b1000), l.imm(0))
+ return
+ else:
+ assert arg.type == INT
+ # store the vector onto the stack, just below the stack pointer
+ self.mc.VLGV(r.SCRATCH, accumloc, l.addr(0), l.itemsize_to_mask(8))
+ self.mc.VLGV(targetloc, accumloc, l.addr(1), l.itemsize_to_mask(8))
+ if op == '+':
+ self.mc.AGR(targetloc, r.SCRATCH)
+ return
+ elif op == '*':
+ self.mc.MSGR(targetloc, r.SCRATCH)
+ return
+ not_implemented("reduce sum for %s not impl." % arg)
+
+
+
def emit_vec_int_is_true(self, op, arglocs, regalloc):
assert isinstance(op, VectorOp)
resloc, argloc, sizeloc = arglocs
@@ -259,30 +285,6 @@
else:
self.mc.VLREP(resloc, loc0, l.itemsize_to_mask(size))
- def _accum_reduce(self, op, arg, accumloc, targetloc):
- # Currently the accumulator can ONLY be 64 bit float/int
- if arg.type == FLOAT:
- self.mc.VPDI(targetloc, accumloc, accumloc, permi(1,0))
- if op == '+':
- self.mc.VFA(targetloc, targetloc, accumloc, l.imm3,
l.imm(0b1000), l.imm(0))
- return
- elif op == '*':
- self.mc.VFM(targetloc, targetloc, accumloc, l.imm3,
l.imm(0b1000), l.imm(0))
- return
- else:
- assert arg.type == INT
- # store the vector onto the stack, just below the stack pointer
- self.mc.VLGV(r.SCRATCH, accumloc, l.addr(0), l.itemsize_to_mask(8))
- self.mc.VLGV(targetloc, accumloc, l.addr(1), l.itemsize_to_mask(8))
- if op == '+':
- self.mc.AGR(targetloc, r.SCRATCH)
- return
- elif op == '*':
- self.mc.MSGR(targetloc, r.SCRATCH)
- return
- not_implemented("reduce sum for %s not impl." % arg)
-
-
def emit_vec_pack_i(self, op, arglocs, regalloc):
assert isinstance(op, VectorOp)
resloc, vecloc, sourceloc, residxloc, srcidxloc, countloc, sizeloc =
arglocs
diff --git a/rpython/jit/metainterp/test/test_vector.py
b/rpython/jit/metainterp/test/test_vector.py
--- a/rpython/jit/metainterp/test/test_vector.py
+++ b/rpython/jit/metainterp/test/test_vector.py
@@ -215,9 +215,6 @@
la = data.draw(st.lists(integers, min_size=10, max_size=150))
l = len(la)
lb = data.draw(st.lists(integers, min_size=l, max_size=l))
- #la = [0] * 10
- #l = 10
- #lb = [0] * 10
rawstorage = RawStorage()
va = rawstorage.new(la, type)
@@ -422,7 +419,8 @@
test_vec_int_sum = vec_reduce(st.integers(min_value=-2**(64-1),
max_value=2**(64-1)-1),
lambda a,b:
lltype.intmask(lltype.intmask(a)+lltype.intmask(b)), lltype.Signed)
test_vec_float_sum = vec_reduce(st.floats(), lambda a,b: a+b, rffi.DOUBLE)
- test_vec_float_prod = vec_reduce(st.floats(), lambda a,b: a*b, rffi.DOUBLE)
+ test_vec_float_prod = vec_reduce(st.floats(min_value=-100, max_value=100,
+ allow_nan=False,
allow_infinity=False), lambda a,b: a*b, rffi.DOUBLE)
def test_constant_expand(self):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit