[pypy-commit] pypy ppc-vsx-support: another test testing unpack operation (mostly integer)
plan_rich
pypy.commits at gmail.com
Tue Aug 9 04:23:19 EDT 2016
Author: Richard Plangger <planrichi at gmail.com>
Branch: ppc-vsx-support
Changeset: r86096:5d676fb9307f
Date: 2016-08-09 10:22 +0200
http://bitbucket.org/pypy/pypy/changeset/5d676fb9307f/
Log: another test testing unpack operation (mostly integer)
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
@@ -754,17 +754,36 @@
vars['x'] = v
packs = '\n '.join(pack)
resvar = suffix + '{'+suffix+'}'
+
+ # format the resoperations, take care that the lhs of =
+ # is formated later with a new variable name
+ unpackops = unpack
+ if isinstance(unpack, str):
+ unpackops = [unpack]
+ unpacksf = []
+ for up in unpackops:
+ lhs, rhs = up.split("=")
+ rhsf = rhs.format(**vars)
+ newvar('i'); newvar('f'); newvar('v')
+ lhsf = lhs.format(**vars)
+ unpacksf.append(lhsf + '=' + rhsf)
+ unpacks = '\n '.join(unpacksf)
+
source = '''
[{args}]
label({args}, descr=targettoken)
{packs}
- {unpack}
+ {unpacks}
finish({resvar}, descr=finaldescr)
- '''.format(args=','.join(args),packs=packs, unpack=unpack.format(**vars),
+ '''.format(args=','.join(args),packs=packs, unpacks=unpacks,
resvar=resvar.format(**vars))
- loop = parse(source, namespace={'targettoken': targettoken,
- 'finaldescr': finaldescr})
+ print(source)
+ return self._compile_and_run(source, args_values, float,
+ ns={'targettoken': targettoken, 'finaldescr': finaldescr})
+
+ def _compile_and_run(self, source, args_values, float=True, ns={}):
+ loop = parse(source, namespace=ns)
cpu = self.CPUClass(rtyper=None, stats=None)
cpu.setup_once()
#
@@ -792,11 +811,37 @@
## integer unpack (byte)
for i in range(16):
op = "i{i} = vec_unpack_i({x}, %d, 1)" % i
- assert self.run_unpack(op, "[16xi8]", {'x': [127,1]*8}, float=False) == (127 if i%2==0 else 1)
+ assert self.run_unpack(op, "[16xi8]", {'x': [127,1]*8}, float=False) == \
+ (127 if i%2==0 else 1)
if i < 8:
- assert self.run_unpack(op, "[2xi16]", {'x': [2**15-1,0]*4}, float=False) == (2**15-1 if i%2==0 else 0)
+ assert self.run_unpack(op, "[8xi16]", {'x': [2**15-1,0]*4}, float=False) == \
+ (2**15-1 if i%2==0 else 0)
if i < 4:
- assert self.run_unpack(op, "[2xi32]", {'x': [2**31-1,0]*4}, float=False) == (2**31-1 if i%2==0 else 0)
+ assert self.run_unpack(op, "[4xi32]", {'x': [2**31-1,0]*4}, float=False) == \
+ (2**31-1 if i%2==0 else 0)
+
+ def test_unpack_several(self):
+ # count == 2
+ values = [1,2,3,4]
+ for i,v in enumerate(values):
+ j = (i // 2) * 2
+ op = ["v{v}[2xi32] = vec_unpack_i({x}, %d, 2)" % j,
+ "i{i} = vec_unpack_i(v{v}[2xi32], %d, 1)" % i]
+ assert self.run_unpack(op, "[4xi32]", {'x': values}, float=False) == v
+
+ values = [1,2,3,4,5,6,7,8]
+ for i,v in enumerate(values):
+ j = (i // 4) * 4
+ op = ["v{v}[4xi16] = vec_unpack_i({x}, %d, 4)" % j,
+ "i{i} = vec_unpack_i(v{v}[4xi16], %d, 1)" % i]
+ assert self.run_unpack(op, "[8xi16]", {'x': values}, float=False) == v
+
+ values = [1,2,3,4,5,6,7,8] * 2
+ for i,v in enumerate(values):
+ j = (i // 8) * 8
+ op = ["v{v}[8xi8] = vec_unpack_i({x}, %d, 8)" % j,
+ "i{i} = vec_unpack_i(v{v}[8xi8], %d, 1)" % i]
+ assert self.run_unpack(op, "[16xi8]", {'x': values}, float=False) == v
class TestLLtype(LLJitMixin, VectorizeTests):
More information about the pypy-commit
mailing list