/* * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
staticvoid assertArraysEquals(int[] r, int[] a, FUnOp f) { int i = 0; try { for (; i < a.length; i++) { Assert.assertEquals(r[i], f.apply(a[i]));
}
} catch (AssertionError e) { Assert.assertEquals(r[i], f.apply(a[i]), "at index #" + i + ", input = " + a[i]);
}
}
interface FUnArrayOp { int[] apply(int a);
}
staticvoid assertArraysEquals(int[] r, int[] a, FUnArrayOp f) { int i = 0; try { for (; i < a.length; i += SPECIES.length()) { Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),
f.apply(a[i]));
}
} catch (AssertionError e) { int[] ref = f.apply(a[i]); int[] res = Arrays.copyOfRange(r, i, i+SPECIES.length()); Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)
+ ", res: " + Arrays.toString(res)
+ "), at index #" + i);
}
}
staticvoid assertArraysEquals(int[] r, int[] a, boolean[] mask, FUnOp f) { int i = 0; try { for (; i < a.length; i++) { Assert.assertEquals(r[i], mask[i % SPECIES.length()] ? f.apply(a[i]) : a[i]);
}
} catch (AssertionError e) { Assert.assertEquals(r[i], mask[i % SPECIES.length()] ? f.apply(a[i]) : a[i], "at index #" + i + ", input = " + a[i] + ", mask = " + mask[i % SPECIES.length()]);
}
}
interface FReductionOp { int apply(int[] a, int idx);
}
interface FReductionAllOp { int apply(int[] a);
}
staticvoid assertReductionArraysEquals(int[] r, int rc, int[] a,
FReductionOp f, FReductionAllOp fa) { int i = 0; try { Assert.assertEquals(rc, fa.apply(a)); for (; i < a.length; i += SPECIES.length()) { Assert.assertEquals(r[i], f.apply(a, i));
}
} catch (AssertionError e) { Assert.assertEquals(rc, fa.apply(a), "Final result is incorrect!"); Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i);
}
}
interface FReductionMaskedOp { int apply(int[] a, int idx, boolean[] mask);
}
interface FReductionAllMaskedOp { int apply(int[] a, boolean[] mask);
}
staticvoid assertReductionArraysEqualsMasked(int[] r, int rc, int[] a, boolean[] mask,
FReductionMaskedOp f, FReductionAllMaskedOp fa) { int i = 0; try { Assert.assertEquals(rc, fa.apply(a, mask)); for (; i < a.length; i += SPECIES.length()) { Assert.assertEquals(r[i], f.apply(a, i, mask));
}
} catch (AssertionError e) { Assert.assertEquals(rc, fa.apply(a, mask), "Final result is incorrect!"); Assert.assertEquals(r[i], f.apply(a, i, mask), "at index #" + i);
}
}
interface FReductionOpLong { long apply(int[] a, int idx);
}
interface FReductionAllOpLong { long apply(int[] a);
}
staticvoid assertReductionLongArraysEquals(long[] r, long rc, int[] a,
FReductionOpLong f, FReductionAllOpLong fa) { int i = 0; try { Assert.assertEquals(rc, fa.apply(a)); for (; i < a.length; i += SPECIES.length()) { Assert.assertEquals(r[i], f.apply(a, i));
}
} catch (AssertionError e) { Assert.assertEquals(rc, fa.apply(a), "Final result is incorrect!"); Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i);
}
}
interface FReductionMaskedOpLong { long apply(int[] a, int idx, boolean[] mask);
}
interface FReductionAllMaskedOpLong { long apply(int[] a, boolean[] mask);
}
staticvoid assertReductionLongArraysEqualsMasked(long[] r, long rc, int[] a, boolean[] mask,
FReductionMaskedOpLong f, FReductionAllMaskedOpLong fa) { int i = 0; try { Assert.assertEquals(rc, fa.apply(a, mask)); for (; i < a.length; i += SPECIES.length()) { Assert.assertEquals(r[i], f.apply(a, i, mask));
}
} catch (AssertionError e) { Assert.assertEquals(rc, fa.apply(a, mask), "Final result is incorrect!"); Assert.assertEquals(r[i], f.apply(a, i, mask), "at index #" + i);
}
}
interface FBoolReductionOp { boolean apply(boolean[] a, int idx);
}
staticvoid assertReductionBoolArraysEquals(boolean[] r, boolean[] a, FBoolReductionOp f) { int i = 0; try { for (; i < a.length; i += SPECIES.length()) { Assert.assertEquals(r[i], f.apply(a, i));
}
} catch (AssertionError e) { Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i);
}
}
interface FMaskReductionOp { int apply(boolean[] a, int idx);
}
staticvoid assertMaskReductionArraysEquals(int[] r, boolean[] a, FMaskReductionOp f) { int i = 0; try { for (; i < a.length; i += SPECIES.length()) { Assert.assertEquals(r[i], f.apply(a, i));
}
} catch (AssertionError e) { Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i);
}
}
staticvoid assertInsertArraysEquals(int[] r, int[] a, int element, int index, int start, int end) { int i = start; try { for (; i < end; i += 1) { if(i%SPECIES.length() == index) { Assert.assertEquals(r[i], element);
} else { Assert.assertEquals(r[i], a[i]);
}
}
} catch (AssertionError e) { if (i%SPECIES.length() == index) { Assert.assertEquals(r[i], element, "at index #" + i);
} else { Assert.assertEquals(r[i], a[i], "at index #" + i);
}
}
}
staticvoid assertRearrangeArraysEquals(int[] r, int[] a, int[] order, int vector_len) { int i = 0, j = 0; try { for (; i < a.length; i += vector_len) { for (j = 0; j < vector_len; j++) { Assert.assertEquals(r[i+j], a[i+order[i+j]]);
}
}
} catch (AssertionError e) { int idx = i + j; Assert.assertEquals(r[i+j], a[i+order[i+j]], "at index #" + idx + ", input = " + a[i+order[i+j]]);
}
}
staticvoid assertcompressArraysEquals(int[] r, int[] a, boolean[] m, int vector_len) { int i = 0, j = 0, k = 0; try { for (; i < a.length; i += vector_len) {
k = 0; for (j = 0; j < vector_len; j++) { if (m[(i + j) % SPECIES.length()]) { Assert.assertEquals(r[i + k], a[i + j]);
k++;
}
} for (; k < vector_len; k++) { Assert.assertEquals(r[i + k], (int)0);
}
}
} catch (AssertionError e) { int idx = i + k; if (m[(i + j) % SPECIES.length()]) { Assert.assertEquals(r[idx], a[i + j], "at index #" + idx);
} else { Assert.assertEquals(r[idx], (int)0, "at index #" + idx);
}
}
}
staticvoid assertexpandArraysEquals(int[] r, int[] a, boolean[] m, int vector_len) { int i = 0, j = 0, k = 0; try { for (; i < a.length; i += vector_len) {
k = 0; for (j = 0; j < vector_len; j++) { if (m[(i + j) % SPECIES.length()]) { Assert.assertEquals(r[i + j], a[i + k]);
k++;
} else { Assert.assertEquals(r[i + j], (int)0);
}
}
}
} catch (AssertionError e) { int idx = i + j; if (m[idx % SPECIES.length()]) { Assert.assertEquals(r[idx], a[i + k], "at index #" + idx);
} else { Assert.assertEquals(r[idx], (int)0, "at index #" + idx);
}
}
}
staticvoid assertSelectFromArraysEquals(int[] r, int[] a, int[] order, int vector_len) { int i = 0, j = 0; try { for (; i < a.length; i += vector_len) { for (j = 0; j < vector_len; j++) { Assert.assertEquals(r[i+j], a[i+(int)order[i+j]]);
}
}
} catch (AssertionError e) { int idx = i + j; Assert.assertEquals(r[i+j], a[i+(int)order[i+j]], "at index #" + idx + ", input = " + a[i+(int)order[i+j]]);
}
}
staticvoid assertRearrangeArraysEquals(int[] r, int[] a, int[] order, boolean[] mask, intvector_len) { int i = 0, j = 0; try { for (; i < a.length; i += vector_len) { for (j = 0; j < vector_len; j++) { if (mask[j % SPECIES.length()]) Assert.assertEquals(r[i+j], a[i+order[i+j]]); else Assert.assertEquals(r[i+j], (int)0);
}
}
} catch (AssertionError e) { int idx = i + j; if (mask[j % SPECIES.length()]) Assert.assertEquals(r[i+j], a[i+order[i+j]], "at index #" + idx + ", input = " + a[i+order[i+j]] + ", mask = " + mask[j % SPECIES.length()]); else Assert.assertEquals(r[i+j], (int)0, "at index #" + idx + ", input = " + a[i+order[i+j]] + ", mask = " + mask[j % SPECIES.length()]);
}
}
staticvoid assertSelectFromArraysEquals(int[] r, int[] a, int[] order, boolean[] mask, int vector_len) { int i = 0, j = 0; try { for (; i < a.length; i += vector_len) { for (j = 0; j < vector_len; j++) { if (mask[j % SPECIES.length()]) Assert.assertEquals(r[i+j], a[i+(int)order[i+j]]); else Assert.assertEquals(r[i+j], (int)0);
}
}
} catch (AssertionError e) { int idx = i + j; if (mask[j % SPECIES.length()]) Assert.assertEquals(r[i+j], a[i+(int)order[i+j]], "at index #" + idx + ", input = " + a[i+(int)order[i+j]] + ", mask = " + mask[j % SPECIES.length()]); else Assert.assertEquals(r[i+j], (int)0, "at index #" + idx + ", input = " + a[i+(int)order[i+j]] + ", mask = " + mask[j % SPECIES.length()]);
}
}
staticvoid assertBroadcastArraysEquals(int[] r, int[] a) { int i = 0; for (; i < a.length; i += SPECIES.length()) { int idx = i; for (int j = idx; j < (idx + SPECIES.length()); j++)
a[j]=a[idx];
}
try { for (i = 0; i < a.length; i++) { Assert.assertEquals(r[i], a[i]);
}
} catch (AssertionError e) { Assert.assertEquals(r[i], a[i], "at index #" + i + ", input = " + a[i]);
}
}
interface FBinOp { int apply(int a, int b);
}
interface FBinMaskOp { int apply(int a, int b, boolean m);
static FBinMaskOp lift(FBinOp f) { return (a, b, m) -> m ? f.apply(a, b) : a;
}
}
staticvoid assertArraysEquals(int[] r, int[] a, int[] b, FBinOp f) { int i = 0; try { for (; i < a.length; i++) { Assert.assertEquals(r[i], f.apply(a[i], b[i]));
}
} catch (AssertionError e) { Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i);
}
}
staticvoid assertBroadcastArraysEquals(int[] r, int[] a, int[] b, FBinOp f) { int i = 0; try { for (; i < a.length; i++) { Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()]));
}
} catch (AssertionError e) { Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()]), "(" + a[i] + ", " + b[(i / SPECIES.length()) * SPECIES.length()] + ") at index #" + i);
}
}
staticvoid assertBroadcastLongArraysEquals(int[] r, int[] a, int[] b, FBinOp f) { int i = 0; try { for (; i < a.length; i++) { Assert.assertEquals(r[i], f.apply(a[i], (int)((long)b[(i / SPECIES.length()) * SPECIES.length()])));
}
} catch (AssertionError e) { Assert.assertEquals(r[i], f.apply(a[i], (int)((long)b[(i / SPECIES.length()) * SPECIES.length()])), "(" + a[i] + ", " + b[(i / SPECIES.length()) * SPECIES.length()] + ") at index #" + i);
}
}
staticvoid assertArraysEquals(int[] r, int[] a, int[] b, boolean[] mask, FBinOp f) {
assertArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));
}
// Create combinations of pairs // @@@ Might be sensitive to order e.g. div by 0 staticfinal List<List<IntFunction<int[]>>> INT_GENERATOR_PAIRS =
Stream.of(INT_GENERATORS.get(0)).
flatMap(fa -> INT_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))).
collect(Collectors.toList());
@DataProvider public Object[][] boolUnaryOpProvider() { return BOOL_ARRAY_GENERATORS.stream().
map(f -> new Object[]{f}).
toArray(Object[][]::new);
}
@Test // Test all shuffle related operations. staticvoid shuffleTest() { // To test backend instructions, make sure that C2 is used. for (int loop = 0; loop < INVOC_COUNT * INVOC_COUNT; loop++) {
iotaShuffle();
}
}
@Test // Test div by 0. staticvoid bitwiseDivByZeroSmokeTest() { try {
IntVector a = (IntVector) SPECIES.broadcast(0).addIndex(1);
IntVector b = (IntVector) SPECIES.broadcast(0);
a.div(b); Assert.fail();
} catch (ArithmeticException e) {
}
try {
IntVector a = (IntVector) SPECIES.broadcast(0).addIndex(1);
IntVector b = (IntVector) SPECIES.broadcast(0);
VectorMask<Integer> m = a.lt((int) 1);
a.div(b, m); Assert.fail();
} catch (ArithmeticException e) {
}
}
staticint ADD(int a, int b) { return (int)(a + b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid ADDInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.ADD, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::ADD);
}
staticint add(int a, int b) { return (int)(a + b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid addInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.add(bv).intoArray(r, i);
}
assertArraysEquals(r, a, b, Int64VectorTests::add);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.ADD, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::ADD);
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.add(bv, vmask).intoArray(r, i);
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::add);
}
staticint SUB(int a, int b) { return (int)(a - b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid SUBInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.SUB, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::SUB);
}
staticint sub(int a, int b) { return (int)(a - b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid subInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.sub(bv).intoArray(r, i);
}
assertArraysEquals(r, a, b, Int64VectorTests::sub);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.SUB, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::SUB);
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.sub(bv, vmask).intoArray(r, i);
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::sub);
}
staticint MUL(int a, int b) { return (int)(a * b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid MULInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.MUL, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::MUL);
}
staticint mul(int a, int b) { return (int)(a * b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid mulInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.mul(bv).intoArray(r, i);
}
assertArraysEquals(r, a, b, Int64VectorTests::mul);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.MUL, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::MUL);
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.mul(bv, vmask).intoArray(r, i);
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::mul);
}
staticint DIV(int a, int b) { return (int)(a / b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid DIVInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
replaceZero(b, (int) 1);
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.DIV, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::DIV);
}
staticint div(int a, int b) { return (int)(a / b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid divInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
replaceZero(b, (int) 1);
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.div(bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::div);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.DIV, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::DIV);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.div(bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::div);
}
staticint FIRST_NONZERO(int a, int b) { return (int)((a)!=0?a:b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid FIRST_NONZEROInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.FIRST_NONZERO, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::FIRST_NONZERO);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.FIRST_NONZERO, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::FIRST_NONZERO);
}
staticint AND(int a, int b) { return (int)(a & b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid ANDInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.AND, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::AND);
}
staticint and(int a, int b) { return (int)(a & b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid andInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.and(bv).intoArray(r, i);
}
assertArraysEquals(r, a, b, Int64VectorTests::and);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.AND, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::AND);
}
staticint AND_NOT(int a, int b) { return (int)(a & ~b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid AND_NOTInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.AND_NOT, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::AND_NOT);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.AND_NOT, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::AND_NOT);
}
staticint OR(int a, int b) { return (int)(a | b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid ORInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.OR, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::OR);
}
staticint or(int a, int b) { return (int)(a | b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid orInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.or(bv).intoArray(r, i);
}
assertArraysEquals(r, a, b, Int64VectorTests::or);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.OR, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::OR);
}
staticint XOR(int a, int b) { return (int)(a ^ b);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid XORInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.XOR, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::XOR);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.XOR, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::XOR);
}
staticint COMPRESS_BITS(int a, int b) { return (int)(Integer.compress(a, b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid COMPRESS_BITSInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.COMPRESS_BITS, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::COMPRESS_BITS);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.COMPRESS_BITS, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::COMPRESS_BITS);
}
staticint EXPAND_BITS(int a, int b) { return (int)(Integer.expand(a, b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid EXPAND_BITSInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.EXPAND_BITS, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::EXPAND_BITS);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.EXPAND_BITS, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::EXPAND_BITS);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid addInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.add(b[i]).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, Int64VectorTests::add);
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.div(b[i], vmask).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, mask, Int64VectorTests::div);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid ORInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.OR, b[i]).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, Int64VectorTests::OR);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid orInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.or(b[i]).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, Int64VectorTests::or);
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.OR, b[i], vmask).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, mask, Int64VectorTests::OR);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid ANDInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.AND, b[i]).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, Int64VectorTests::AND);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid andInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.and(b[i]).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, Int64VectorTests::and);
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.AND, b[i], vmask).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, mask, Int64VectorTests::AND);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid ORInt64VectorTestsBroadcastLongSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.OR, (long)b[i]).intoArray(r, i);
}
assertBroadcastLongArraysEquals(r, a, b, Int64VectorTests::OR);
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.OR, (long)b[i], vmask).intoArray(r, i);
}
assertBroadcastLongArraysEquals(r, a, b, mask, Int64VectorTests::OR);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid ADDInt64VectorTestsBroadcastLongSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ADD, (long)b[i]).intoArray(r, i);
}
assertBroadcastLongArraysEquals(r, a, b, Int64VectorTests::ADD);
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ADD, (long)b[i], vmask).intoArray(r, i);
}
assertBroadcastLongArraysEquals(r, a, b, mask, Int64VectorTests::ADD);
}
staticint LSHL(int a, int b) { return (int)((a << b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid LSHLInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.LSHL, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::LSHL);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.LSHL, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::LSHL);
}
staticint ASHR(int a, int b) { return (int)((a >> b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid ASHRInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.ASHR, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::ASHR);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.ASHR, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::ASHR);
}
staticint LSHR(int a, int b) { return (int)((a >>> b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid LSHRInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.LSHR, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::LSHR);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.LSHR, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::LSHR);
}
staticint LSHL_unary(int a, int b) { return (int)((a << b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid LSHLInt64VectorTestsScalarShift(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.LSHL, (int)b[i]).intoArray(r, i);
}
}
assertShiftArraysEquals(r, a, b, Int64VectorTests::LSHL_unary);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.LSHL, (int)b[i], vmask).intoArray(r, i);
}
}
assertShiftArraysEquals(r, a, b, mask, Int64VectorTests::LSHL_unary);
}
staticint LSHR_unary(int a, int b) { return (int)((a >>> b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid LSHRInt64VectorTestsScalarShift(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.LSHR, (int)b[i]).intoArray(r, i);
}
}
assertShiftArraysEquals(r, a, b, Int64VectorTests::LSHR_unary);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.LSHR, (int)b[i], vmask).intoArray(r, i);
}
}
assertShiftArraysEquals(r, a, b, mask, Int64VectorTests::LSHR_unary);
}
staticint ASHR_unary(int a, int b) { return (int)((a >> b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid ASHRInt64VectorTestsScalarShift(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ASHR, (int)b[i]).intoArray(r, i);
}
}
assertShiftArraysEquals(r, a, b, Int64VectorTests::ASHR_unary);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ASHR, (int)b[i], vmask).intoArray(r, i);
}
}
assertShiftArraysEquals(r, a, b, mask, Int64VectorTests::ASHR_unary);
}
staticint ROR(int a, int b) { return (int)(ROR_scalar(a,b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid RORInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.ROR, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::ROR);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.ROR, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::ROR);
}
staticint ROL(int a, int b) { return (int)(ROL_scalar(a,b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid ROLInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.ROL, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::ROL);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.ROL, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::ROL);
}
staticint ROR_unary(int a, int b) { return (int)(ROR_scalar(a, b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid RORInt64VectorTestsScalarShift(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ROR, (int)b[i]).intoArray(r, i);
}
}
assertShiftArraysEquals(r, a, b, Int64VectorTests::ROR_unary);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ROR, (int)b[i], vmask).intoArray(r, i);
}
}
assertShiftArraysEquals(r, a, b, mask, Int64VectorTests::ROR_unary);
}
staticint ROL_unary(int a, int b) { return (int)(ROL_scalar(a, b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid ROLInt64VectorTestsScalarShift(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ROL, (int)b[i]).intoArray(r, i);
}
}
assertShiftArraysEquals(r, a, b, Int64VectorTests::ROL_unary);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ROL, (int)b[i], vmask).intoArray(r, i);
}
}
assertShiftArraysEquals(r, a, b, mask, Int64VectorTests::ROL_unary);
} staticint LSHR_binary_const(int a) { return (int)((a >>> CONST_SHIFT));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid LSHRInt64VectorTestsScalarShiftConst(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.LSHR, CONST_SHIFT).intoArray(r, i);
}
}
assertShiftConstEquals(r, a, Int64VectorTests::LSHR_binary_const);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.LSHR, CONST_SHIFT, vmask).intoArray(r, i);
}
}
assertShiftConstEquals(r, a, mask, Int64VectorTests::LSHR_binary_const);
}
staticint LSHL_binary_const(int a) { return (int)((a << CONST_SHIFT));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid LSHLInt64VectorTestsScalarShiftConst(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.LSHL, CONST_SHIFT).intoArray(r, i);
}
}
assertShiftConstEquals(r, a, Int64VectorTests::LSHL_binary_const);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.LSHL, CONST_SHIFT, vmask).intoArray(r, i);
}
}
assertShiftConstEquals(r, a, mask, Int64VectorTests::LSHL_binary_const);
}
staticint ASHR_binary_const(int a) { return (int)((a >> CONST_SHIFT));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid ASHRInt64VectorTestsScalarShiftConst(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ASHR, CONST_SHIFT).intoArray(r, i);
}
}
assertShiftConstEquals(r, a, Int64VectorTests::ASHR_binary_const);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ASHR, CONST_SHIFT, vmask).intoArray(r, i);
}
}
assertShiftConstEquals(r, a, mask, Int64VectorTests::ASHR_binary_const);
}
staticint ROR_binary_const(int a) { return (int)(ROR_scalar(a, CONST_SHIFT));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid RORInt64VectorTestsScalarShiftConst(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ROR, CONST_SHIFT).intoArray(r, i);
}
}
assertShiftConstEquals(r, a, Int64VectorTests::ROR_binary_const);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ROR, CONST_SHIFT, vmask).intoArray(r, i);
}
}
assertShiftConstEquals(r, a, mask, Int64VectorTests::ROR_binary_const);
}
staticint ROL_binary_const(int a) { return (int)(ROL_scalar(a, CONST_SHIFT));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid ROLInt64VectorTestsScalarShiftConst(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ROL, CONST_SHIFT).intoArray(r, i);
}
}
assertShiftConstEquals(r, a, Int64VectorTests::ROL_binary_const);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ROL, CONST_SHIFT, vmask).intoArray(r, i);
}
}
assertShiftConstEquals(r, a, mask, Int64VectorTests::ROL_binary_const);
}
staticint MIN(int a, int b) { return (int)(Math.min(a, b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid MINInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.MIN, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::MIN);
}
staticint min(int a, int b) { return (int)(Math.min(a, b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid minInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.min(bv).intoArray(r, i);
}
assertArraysEquals(r, a, b, Int64VectorTests::min);
}
staticint MAX(int a, int b) { return (int)(Math.max(a, b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid MAXInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.MAX, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, Int64VectorTests::MAX);
}
staticint max(int a, int b) { return (int)(Math.max(a, b));
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid maxInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.max(bv).intoArray(r, i);
}
assertArraysEquals(r, a, b, Int64VectorTests::max);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid MINInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.MIN, b[i]).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, Int64VectorTests::MIN);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid minInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.min(b[i]).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, Int64VectorTests::min);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid MAXInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.MAX, b[i]).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, Int64VectorTests::MAX);
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid maxInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.max(b[i]).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, Int64VectorTests::max);
}
staticint ANDReduce(int[] a, int idx) { int res = -1; for (int i = idx; i < (idx + SPECIES.length()); i++) {
res &= a[i];
}
return res;
}
staticint ANDReduceAll(int[] a) { int res = -1; for (int i = 0; i < a.length; i += SPECIES.length()) {
res &= ANDReduce(a, i);
}
return res;
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid ANDReduceInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); int ra = -1;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.AND);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = -1; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra &= av.reduceLanes(VectorOperators.AND);
}
}
assertReductionArraysEquals(r, ra, a,
Int64VectorTests::ANDReduce, Int64VectorTests::ANDReduceAll);
}
staticint ANDReduceMasked(int[] a, int idx, boolean[] mask) { int res = -1; for (int i = idx; i < (idx + SPECIES.length()); i++) { if (mask[i % SPECIES.length()])
res &= a[i];
}
return res;
}
staticint ANDReduceAllMasked(int[] a, boolean[] mask) { int res = -1; for (int i = 0; i < a.length; i += SPECIES.length()) {
res &= ANDReduceMasked(a, i, mask);
}
return res;
}
@Test(dataProvider = "intUnaryOpMaskProvider") staticvoid ANDReduceInt64VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); int ra = -1;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.AND, vmask);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = -1; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra &= av.reduceLanes(VectorOperators.AND, vmask);
}
}
assertReductionArraysEqualsMasked(r, ra, a, mask,
Int64VectorTests::ANDReduceMasked, Int64VectorTests::ANDReduceAllMasked);
}
staticint ORReduce(int[] a, int idx) { int res = 0; for (int i = idx; i < (idx + SPECIES.length()); i++) {
res |= a[i];
}
return res;
}
staticint ORReduceAll(int[] a) { int res = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
res |= ORReduce(a, i);
}
return res;
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid ORReduceInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); int ra = 0;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.OR);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra |= av.reduceLanes(VectorOperators.OR);
}
}
assertReductionArraysEquals(r, ra, a,
Int64VectorTests::ORReduce, Int64VectorTests::ORReduceAll);
}
staticint ORReduceMasked(int[] a, int idx, boolean[] mask) { int res = 0; for (int i = idx; i < (idx + SPECIES.length()); i++) { if (mask[i % SPECIES.length()])
res |= a[i];
}
return res;
}
staticint ORReduceAllMasked(int[] a, boolean[] mask) { int res = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
res |= ORReduceMasked(a, i, mask);
}
return res;
}
@Test(dataProvider = "intUnaryOpMaskProvider") staticvoid ORReduceInt64VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); int ra = 0;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.OR, vmask);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra |= av.reduceLanes(VectorOperators.OR, vmask);
}
}
assertReductionArraysEqualsMasked(r, ra, a, mask,
Int64VectorTests::ORReduceMasked, Int64VectorTests::ORReduceAllMasked);
}
staticint XORReduce(int[] a, int idx) { int res = 0; for (int i = idx; i < (idx + SPECIES.length()); i++) {
res ^= a[i];
}
return res;
}
staticint XORReduceAll(int[] a) { int res = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
res ^= XORReduce(a, i);
}
return res;
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid XORReduceInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); int ra = 0;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.XOR);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra ^= av.reduceLanes(VectorOperators.XOR);
}
}
assertReductionArraysEquals(r, ra, a,
Int64VectorTests::XORReduce, Int64VectorTests::XORReduceAll);
}
staticint XORReduceMasked(int[] a, int idx, boolean[] mask) { int res = 0; for (int i = idx; i < (idx + SPECIES.length()); i++) { if (mask[i % SPECIES.length()])
res ^= a[i];
}
return res;
}
staticint XORReduceAllMasked(int[] a, boolean[] mask) { int res = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
res ^= XORReduceMasked(a, i, mask);
}
return res;
}
@Test(dataProvider = "intUnaryOpMaskProvider") staticvoid XORReduceInt64VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); int ra = 0;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.XOR, vmask);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra ^= av.reduceLanes(VectorOperators.XOR, vmask);
}
}
assertReductionArraysEqualsMasked(r, ra, a, mask,
Int64VectorTests::XORReduceMasked, Int64VectorTests::XORReduceAllMasked);
}
staticint ADDReduce(int[] a, int idx) { int res = 0; for (int i = idx; i < (idx + SPECIES.length()); i++) {
res += a[i];
}
return res;
}
staticint ADDReduceAll(int[] a) { int res = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
res += ADDReduce(a, i);
}
return res;
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid ADDReduceInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); int ra = 0;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.ADD);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra += av.reduceLanes(VectorOperators.ADD);
}
}
assertReductionArraysEquals(r, ra, a,
Int64VectorTests::ADDReduce, Int64VectorTests::ADDReduceAll);
}
staticint ADDReduceMasked(int[] a, int idx, boolean[] mask) { int res = 0; for (int i = idx; i < (idx + SPECIES.length()); i++) { if (mask[i % SPECIES.length()])
res += a[i];
}
return res;
}
staticint ADDReduceAllMasked(int[] a, boolean[] mask) { int res = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
res += ADDReduceMasked(a, i, mask);
}
return res;
}
@Test(dataProvider = "intUnaryOpMaskProvider") staticvoid ADDReduceInt64VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); int ra = 0;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.ADD, vmask);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra += av.reduceLanes(VectorOperators.ADD, vmask);
}
}
assertReductionArraysEqualsMasked(r, ra, a, mask,
Int64VectorTests::ADDReduceMasked, Int64VectorTests::ADDReduceAllMasked);
}
staticint MULReduce(int[] a, int idx) { int res = 1; for (int i = idx; i < (idx + SPECIES.length()); i++) {
res *= a[i];
}
return res;
}
staticint MULReduceAll(int[] a) { int res = 1; for (int i = 0; i < a.length; i += SPECIES.length()) {
res *= MULReduce(a, i);
}
return res;
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid MULReduceInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); int ra = 1;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.MUL);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = 1; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra *= av.reduceLanes(VectorOperators.MUL);
}
}
assertReductionArraysEquals(r, ra, a,
Int64VectorTests::MULReduce, Int64VectorTests::MULReduceAll);
}
staticint MULReduceMasked(int[] a, int idx, boolean[] mask) { int res = 1; for (int i = idx; i < (idx + SPECIES.length()); i++) { if (mask[i % SPECIES.length()])
res *= a[i];
}
return res;
}
staticint MULReduceAllMasked(int[] a, boolean[] mask) { int res = 1; for (int i = 0; i < a.length; i += SPECIES.length()) {
res *= MULReduceMasked(a, i, mask);
}
return res;
}
@Test(dataProvider = "intUnaryOpMaskProvider") staticvoid MULReduceInt64VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); int ra = 1;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.MUL, vmask);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = 1; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra *= av.reduceLanes(VectorOperators.MUL, vmask);
}
}
assertReductionArraysEqualsMasked(r, ra, a, mask,
Int64VectorTests::MULReduceMasked, Int64VectorTests::MULReduceAllMasked);
}
staticint MINReduce(int[] a, int idx) { int res = Integer.MAX_VALUE; for (int i = idx; i < (idx + SPECIES.length()); i++) {
res = (int) Math.min(res, a[i]);
}
return res;
}
staticint MINReduceAll(int[] a) { int res = Integer.MAX_VALUE; for (int i = 0; i < a.length; i += SPECIES.length()) {
res = (int) Math.min(res, MINReduce(a, i));
}
return res;
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid MINReduceInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); int ra = Integer.MAX_VALUE;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.MIN);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = Integer.MAX_VALUE; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra = (int) Math.min(ra, av.reduceLanes(VectorOperators.MIN));
}
}
assertReductionArraysEquals(r, ra, a,
Int64VectorTests::MINReduce, Int64VectorTests::MINReduceAll);
}
staticint MINReduceMasked(int[] a, int idx, boolean[] mask) { int res = Integer.MAX_VALUE; for (int i = idx; i < (idx + SPECIES.length()); i++) { if (mask[i % SPECIES.length()])
res = (int) Math.min(res, a[i]);
}
return res;
}
staticint MINReduceAllMasked(int[] a, boolean[] mask) { int res = Integer.MAX_VALUE; for (int i = 0; i < a.length; i += SPECIES.length()) {
res = (int) Math.min(res, MINReduceMasked(a, i, mask));
}
return res;
}
@Test(dataProvider = "intUnaryOpMaskProvider") staticvoid MINReduceInt64VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); int ra = Integer.MAX_VALUE;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.MIN, vmask);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = Integer.MAX_VALUE; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra = (int) Math.min(ra, av.reduceLanes(VectorOperators.MIN, vmask));
}
}
assertReductionArraysEqualsMasked(r, ra, a, mask,
Int64VectorTests::MINReduceMasked, Int64VectorTests::MINReduceAllMasked);
}
staticint MAXReduce(int[] a, int idx) { int res = Integer.MIN_VALUE; for (int i = idx; i < (idx + SPECIES.length()); i++) {
res = (int) Math.max(res, a[i]);
}
return res;
}
staticint MAXReduceAll(int[] a) { int res = Integer.MIN_VALUE; for (int i = 0; i < a.length; i += SPECIES.length()) {
res = (int) Math.max(res, MAXReduce(a, i));
}
return res;
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid MAXReduceInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); int ra = Integer.MIN_VALUE;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.MAX);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = Integer.MIN_VALUE; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra = (int) Math.max(ra, av.reduceLanes(VectorOperators.MAX));
}
}
assertReductionArraysEquals(r, ra, a,
Int64VectorTests::MAXReduce, Int64VectorTests::MAXReduceAll);
}
staticint MAXReduceMasked(int[] a, int idx, boolean[] mask) { int res = Integer.MIN_VALUE; for (int i = idx; i < (idx + SPECIES.length()); i++) { if (mask[i % SPECIES.length()])
res = (int) Math.max(res, a[i]);
}
return res;
}
staticint MAXReduceAllMasked(int[] a, boolean[] mask) { int res = Integer.MIN_VALUE; for (int i = 0; i < a.length; i += SPECIES.length()) {
res = (int) Math.max(res, MAXReduceMasked(a, i, mask));
}
return res;
}
@Test(dataProvider = "intUnaryOpMaskProvider") staticvoid MAXReduceInt64VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); int ra = Integer.MIN_VALUE;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.MAX, vmask);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = Integer.MIN_VALUE; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra = (int) Math.max(ra, av.reduceLanes(VectorOperators.MAX, vmask));
}
}
assertReductionArraysEqualsMasked(r, ra, a, mask,
Int64VectorTests::MAXReduceMasked, Int64VectorTests::MAXReduceAllMasked);
}
staticint FIRST_NONZEROReduce(int[] a, int idx) { int res = (int) 0; for (int i = idx; i < (idx + SPECIES.length()); i++) {
res = firstNonZero(res, a[i]);
}
return res;
}
staticint FIRST_NONZEROReduceAll(int[] a) { int res = (int) 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
res = firstNonZero(res, FIRST_NONZEROReduce(a, i));
}
return res;
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid FIRST_NONZEROReduceInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); int ra = (int) 0;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.FIRST_NONZERO);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = (int) 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra = firstNonZero(ra, av.reduceLanes(VectorOperators.FIRST_NONZERO));
}
}
assertReductionArraysEquals(r, ra, a,
Int64VectorTests::FIRST_NONZEROReduce, Int64VectorTests::FIRST_NONZEROReduceAll);
}
staticint FIRST_NONZEROReduceMasked(int[] a, int idx, boolean[] mask) { int res = (int) 0; for (int i = idx; i < (idx + SPECIES.length()); i++) { if (mask[i % SPECIES.length()])
res = firstNonZero(res, a[i]);
}
return res;
}
staticint FIRST_NONZEROReduceAllMasked(int[] a, boolean[] mask) { int res = (int) 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
res = firstNonZero(res, FIRST_NONZEROReduceMasked(a, i, mask));
}
return res;
}
@Test(dataProvider = "intUnaryOpMaskProvider") staticvoid FIRST_NONZEROReduceInt64VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); int ra = (int) 0;
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanes(VectorOperators.FIRST_NONZERO, vmask);
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) {
ra = (int) 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
ra = firstNonZero(ra, av.reduceLanes(VectorOperators.FIRST_NONZERO, vmask));
}
}
assertReductionArraysEqualsMasked(r, ra, a, mask,
Int64VectorTests::FIRST_NONZEROReduceMasked, Int64VectorTests::FIRST_NONZEROReduceAllMasked);
}
staticboolean anyTrue(boolean[] a, int idx) { boolean res = false; for (int i = idx; i < (idx + SPECIES.length()); i++) {
res |= a[i];
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < mask.length; i += SPECIES.length()) {
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, i);
r[i] = vmask.anyTrue();
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < mask.length; i += SPECIES.length()) {
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, i);
r[i] = vmask.allTrue();
}
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid withInt64VectorTests(IntFunction<int []> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0, j = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.withLane((j++ & (SPECIES.length()-1)), (int)(65535+i)).intoArray(r, i);
}
}
for (int i = 0, j = 0; i < a.length; i += SPECIES.length()) {
assertInsertArraysEquals(r, a, (int)(65535+i), (j++ & (SPECIES.length()-1)), i , i + SPECIES.length());
}
}
staticboolean testIS_DEFAULT(int a) { return bits(a)==0;
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.test(VectorOperators.IS_DEFAULT);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), testIS_DEFAULT(a[i + j]));
}
}
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.test(VectorOperators.IS_DEFAULT, vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), vmask.laneIsSet(j) && testIS_DEFAULT(a[i + j]));
}
}
}
}
staticboolean testIS_NEGATIVE(int a) { return bits(a)<0;
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.test(VectorOperators.IS_NEGATIVE);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), testIS_NEGATIVE(a[i + j]));
}
}
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.test(VectorOperators.IS_NEGATIVE, vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), vmask.laneIsSet(j) && testIS_NEGATIVE(a[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid LTInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.LT, bv);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), lt(a[i + j], b[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid ltInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.lt(bv);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), lt(a[i + j], b[i + j]));
}
}
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.LT, bv, vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && lt(a[i + j], b[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid GTInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.GT, bv);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), gt(a[i + j], b[i + j]));
}
}
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.GT, bv, vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && gt(a[i + j], b[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid EQInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.EQ, bv);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), eq(a[i + j], b[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid eqInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.eq(bv);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), eq(a[i + j], b[i + j]));
}
}
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.EQ, bv, vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && eq(a[i + j], b[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid NEInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.NE, bv);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), neq(a[i + j], b[i + j]));
}
}
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.NE, bv, vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && neq(a[i + j], b[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid LEInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.LE, bv);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), le(a[i + j], b[i + j]));
}
}
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.LE, bv, vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && le(a[i + j], b[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid GEInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.GE, bv);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), ge(a[i + j], b[i + j]));
}
}
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.GE, bv, vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && ge(a[i + j], b[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid UNSIGNED_LTInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_LT, bv);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), ult(a[i + j], b[i + j]));
}
}
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_LT, bv, vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && ult(a[i + j], b[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid UNSIGNED_GTInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_GT, bv);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), ugt(a[i + j], b[i + j]));
}
}
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_GT, bv, vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && ugt(a[i + j], b[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid UNSIGNED_LEInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_LE, bv);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), ule(a[i + j], b[i + j]));
}
}
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_LE, bv, vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && ule(a[i + j], b[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid UNSIGNED_GEInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_GE, bv);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), uge(a[i + j], b[i + j]));
}
}
}
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_GE, bv, vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && uge(a[i + j], b[i + j]));
}
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid LTInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.compare(VectorOperators.LT, b[i]);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), a[i + j] < b[i]);
}
}
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.compare(VectorOperators.LT, b[i], vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] < b[i]));
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid LTInt64VectorTestsBroadcastLongSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.compare(VectorOperators.LT, (long)b[i]);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), a[i + j] < (int)((long)b[i]));
}
}
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.compare(VectorOperators.LT, (long)b[i], vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] < (int)((long)b[i])));
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid EQInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.compare(VectorOperators.EQ, b[i]);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), a[i + j] == b[i]);
}
}
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.compare(VectorOperators.EQ, b[i], vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] == b[i]));
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid EQInt64VectorTestsBroadcastLongSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.compare(VectorOperators.EQ, (long)b[i]);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), a[i + j] == (int)((long)b[i]));
}
}
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.compare(VectorOperators.EQ, (long)b[i], vmask);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] == (int)((long)b[i])));
}
}
}
staticint blend(int a, int b, boolean mask) { return mask ? b : a;
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.blend(bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, mask, Int64VectorTests::blend);
}
@Test(dataProvider = "intUnaryOpShuffleProvider") staticvoid RearrangeInt64VectorTests(IntFunction<int[]> fa,
BiFunction<Integer,Integer,int[]> fs) { int[] a = fa.apply(SPECIES.length()); int[] order = fs.apply(a.length, SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);
}
}
assertRearrangeArraysEquals(r, a, order, SPECIES.length());
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.rearrange(VectorShuffle.fromArray(SPECIES, order, i), vmask).intoArray(r, i);
}
assertRearrangeArraysEquals(r, a, order, mask, SPECIES.length());
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.compress(vmask).intoArray(r, i);
}
}
assertcompressArraysEquals(r, a, mask, SPECIES.length());
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.expand(vmask).intoArray(r, i);
}
}
assertexpandArraysEquals(r, a, mask, SPECIES.length());
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid getInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
assertArraysEquals(r, a, Int64VectorTests::get);
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid BroadcastInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = newint[a.length];
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector.broadcast(SPECIES, a[i]).intoArray(r, i);
}
}
assertBroadcastArraysEquals(r, a);
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid ZeroInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = newint[a.length];
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector.zero(SPECIES).intoArray(a, i);
}
}
Assert.assertEquals(a, r);
}
staticint[] sliceUnary(int[] a, int origin, int idx) { int[] res = newint[SPECIES.length()]; for (int i = 0; i < SPECIES.length(); i++){ if(i+origin < SPECIES.length())
res[i] = a[idx+i+origin]; else
res[i] = (int)0;
} return res;
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid sliceUnaryInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = newint[a.length]; int origin = (new java.util.Random()).nextInt(SPECIES.length()); for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.slice(origin).intoArray(r, i);
}
}
assertArraysEquals(r, a, origin, Int64VectorTests::sliceUnary);
}
staticint[] sliceBinary(int[] a, int[] b, int origin, int idx) { int[] res = newint[SPECIES.length()]; for (int i = 0, j = 0; i < SPECIES.length(); i++){ if(i+origin < SPECIES.length())
res[i] = a[idx+i+origin]; else {
res[i] = b[idx+j];
j++;
}
} return res;
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid sliceBinaryInt64VectorTestsBinary(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = newint[a.length]; int origin = (new java.util.Random()).nextInt(SPECIES.length()); for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.slice(origin, bv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, origin, Int64VectorTests::sliceBinary);
}
staticint[] slice(int[] a, int[] b, int origin, boolean[] mask, int idx) { int[] res = newint[SPECIES.length()]; for (int i = 0, j = 0; i < SPECIES.length(); i++){ if(i+origin < SPECIES.length())
res[i] = mask[i] ? a[idx+i+origin] : (int)0; else {
res[i] = mask[i] ? b[idx+j] : (int)0;
j++;
}
} return res;
}
int[] r = newint[a.length]; int origin = (new java.util.Random()).nextInt(SPECIES.length()); for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.slice(origin, bv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, origin, mask, Int64VectorTests::slice);
}
staticint[] unsliceUnary(int[] a, int origin, int idx) { int[] res = newint[SPECIES.length()]; for (int i = 0, j = 0; i < SPECIES.length(); i++){ if(i < origin)
res[i] = (int)0; else {
res[i] = a[idx+j];
j++;
}
} return res;
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid unsliceUnaryInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = newint[a.length]; int origin = (new java.util.Random()).nextInt(SPECIES.length()); for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.unslice(origin).intoArray(r, i);
}
}
assertArraysEquals(r, a, origin, Int64VectorTests::unsliceUnary);
}
staticint[] unsliceBinary(int[] a, int[] b, int origin, int part, int idx) { int[] res = newint[SPECIES.length()]; for (int i = 0, j = 0; i < SPECIES.length(); i++){ if (part == 0) { if (i < origin)
res[i] = b[idx+i]; else {
res[i] = a[idx+j];
j++;
}
} elseif (part == 1) { if (i < origin)
res[i] = a[idx+SPECIES.length()-origin+i]; else {
res[i] = b[idx+origin+j];
j++;
}
}
} return res;
}
@Test(dataProvider = "intBinaryOpProvider") staticvoid unsliceBinaryInt64VectorTestsBinary(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] r = newint[a.length]; int origin = (new java.util.Random()).nextInt(SPECIES.length()); int part = (new java.util.Random()).nextInt(2); for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.unslice(origin, bv, part).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, origin, part, Int64VectorTests::unsliceBinary);
}
staticint[] unslice(int[] a, int[] b, int origin, int part, boolean[] mask, int idx) { int[] res = newint[SPECIES.length()]; for (int i = 0, j = 0; i < SPECIES.length(); i++){ if(i+origin < SPECIES.length())
res[i] = b[idx+i+origin]; else {
res[i] = b[idx+j];
j++;
}
} for (int i = 0; i < SPECIES.length(); i++){
res[i] = mask[i] ? a[idx+i] : res[i];
} int[] res1 = newint[SPECIES.length()]; if (part == 0) { for (int i = 0, j = 0; i < SPECIES.length(); i++){ if (i < origin)
res1[i] = b[idx+i]; else {
res1[i] = res[j];
j++;
}
}
} elseif (part == 1) { for (int i = 0, j = 0; i < SPECIES.length(); i++){ if (i < origin)
res1[i] = res[SPECIES.length()-origin+i]; else {
res1[i] = b[idx+origin+j];
j++;
}
}
} return res1;
}
@Test(dataProvider = "intBinaryOpMaskProvider") staticvoid unsliceInt64VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,
IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); int[] r = newint[a.length]; int origin = (new java.util.Random()).nextInt(SPECIES.length()); int part = (new java.util.Random()).nextInt(2); for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.unslice(origin, bv, part, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, origin, part, mask, Int64VectorTests::unslice);
}
staticint BITWISE_BLEND(int a, int b, int c) { return (int)((a&~(c))|(b&c));
}
staticint bitwiseBlend(int a, int b, int c) { return (int)((a&~(c))|(b&c));
}
@Test(dataProvider = "intTernaryOpProvider") staticvoid BITWISE_BLENDInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] c = fc.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
IntVector cv = IntVector.fromArray(SPECIES, c, i);
av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, c, Int64VectorTests::BITWISE_BLEND);
}
@Test(dataProvider = "intTernaryOpProvider") staticvoid bitwiseBlendInt64VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] c = fc.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
IntVector cv = IntVector.fromArray(SPECIES, c, i);
av.bitwiseBlend(bv, cv).intoArray(r, i);
}
assertArraysEquals(r, a, b, c, Int64VectorTests::bitwiseBlend);
}
@Test(dataProvider = "intTernaryOpMaskProvider") staticvoid BITWISE_BLENDInt64VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,
IntFunction<int[]> fc, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] c = fc.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
IntVector cv = IntVector.fromArray(SPECIES, c, i);
av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, b, c, mask, Int64VectorTests::BITWISE_BLEND);
}
@Test(dataProvider = "intTernaryOpProvider") staticvoid BITWISE_BLENDInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] c = fc.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.BITWISE_BLEND, bv, c[i]).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, c, Int64VectorTests::BITWISE_BLEND);
}
@Test(dataProvider = "intTernaryOpProvider") staticvoid BITWISE_BLENDInt64VectorTestsAltBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] c = fc.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector cv = IntVector.fromArray(SPECIES, c, i);
av.lanewise(VectorOperators.BITWISE_BLEND, b[i], cv).intoArray(r, i);
}
assertAltBroadcastArraysEquals(r, a, b, c, Int64VectorTests::BITWISE_BLEND);
}
@Test(dataProvider = "intTernaryOpProvider") staticvoid bitwiseBlendInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] c = fc.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.bitwiseBlend(bv, c[i]).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, c, Int64VectorTests::bitwiseBlend);
}
@Test(dataProvider = "intTernaryOpProvider") staticvoid bitwiseBlendInt64VectorTestsAltBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] c = fc.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector cv = IntVector.fromArray(SPECIES, c, i);
av.bitwiseBlend(b[i], cv).intoArray(r, i);
}
assertAltBroadcastArraysEquals(r, a, b, c, Int64VectorTests::bitwiseBlend);
}
@Test(dataProvider = "intTernaryOpMaskProvider") staticvoid BITWISE_BLENDInt64VectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,
IntFunction<int[]> fc, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] c = fc.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, b, i);
av.lanewise(VectorOperators.BITWISE_BLEND, bv, c[i], vmask).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a, b, c, mask, Int64VectorTests::BITWISE_BLEND);
}
@Test(dataProvider = "intTernaryOpMaskProvider") staticvoid BITWISE_BLENDInt64VectorTestsAltBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,
IntFunction<int[]> fc, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] c = fc.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector cv = IntVector.fromArray(SPECIES, c, i);
av.lanewise(VectorOperators.BITWISE_BLEND, b[i], cv, vmask).intoArray(r, i);
}
assertAltBroadcastArraysEquals(r, a, b, c, mask, Int64VectorTests::BITWISE_BLEND);
}
@Test(dataProvider = "intTernaryOpProvider") staticvoid BITWISE_BLENDInt64VectorTestsDoubleBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] c = fc.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.BITWISE_BLEND, b[i], c[i]).intoArray(r, i);
}
assertDoubleBroadcastArraysEquals(r, a, b, c, Int64VectorTests::BITWISE_BLEND);
}
@Test(dataProvider = "intTernaryOpProvider") staticvoid bitwiseBlendInt64VectorTestsDoubleBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] c = fc.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.bitwiseBlend(b[i], c[i]).intoArray(r, i);
}
assertDoubleBroadcastArraysEquals(r, a, b, c, Int64VectorTests::bitwiseBlend);
}
@Test(dataProvider = "intTernaryOpMaskProvider") staticvoid BITWISE_BLENDInt64VectorTestsDoubleBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,
IntFunction<int[]> fc, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length()); int[] c = fc.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.BITWISE_BLEND, b[i], c[i], vmask).intoArray(r, i);
}
assertDoubleBroadcastArraysEquals(r, a, b, c, mask, Int64VectorTests::BITWISE_BLEND);
}
staticint NEG(int a) { return (int)(-((int)a));
}
staticint neg(int a) { return (int)(-((int)a));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid NEGInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.NEG).intoArray(r, i);
}
}
assertArraysEquals(r, a, Int64VectorTests::NEG);
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid negInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.neg().intoArray(r, i);
}
}
assertArraysEquals(r, a, Int64VectorTests::neg);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.NEG, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, mask, Int64VectorTests::NEG);
}
staticint ABS(int a) { return (int)(Math.abs((int)a));
}
staticint abs(int a) { return (int)(Math.abs((int)a));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid ABSInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ABS).intoArray(r, i);
}
}
assertArraysEquals(r, a, Int64VectorTests::ABS);
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid absInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.abs().intoArray(r, i);
}
}
assertArraysEquals(r, a, Int64VectorTests::abs);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ABS, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, mask, Int64VectorTests::ABS);
}
staticint NOT(int a) { return (int)(~((int)a));
}
staticint not(int a) { return (int)(~((int)a));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid NOTInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.NOT).intoArray(r, i);
}
}
assertArraysEquals(r, a, Int64VectorTests::NOT);
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid notInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.not().intoArray(r, i);
}
}
assertArraysEquals(r, a, Int64VectorTests::not);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.NOT, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, mask, Int64VectorTests::NOT);
}
staticint ZOMO(int a) { return (int)((a==0?0:-1));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid ZOMOInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ZOMO).intoArray(r, i);
}
}
assertArraysEquals(r, a, Int64VectorTests::ZOMO);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.ZOMO, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, mask, Int64VectorTests::ZOMO);
}
staticint BIT_COUNT(int a) { return (int)(Integer.bitCount(a));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid BIT_COUNTInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.BIT_COUNT).intoArray(r, i);
}
}
assertArraysEquals(r, a, Int64VectorTests::BIT_COUNT);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.BIT_COUNT, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, mask, Int64VectorTests::BIT_COUNT);
}
staticint TRAILING_ZEROS_COUNT(int a) { return (int)(TRAILING_ZEROS_COUNT_scalar(a));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid TRAILING_ZEROS_COUNTInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.TRAILING_ZEROS_COUNT).intoArray(r, i);
}
}
assertArraysEquals(r, a, Int64VectorTests::TRAILING_ZEROS_COUNT);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.TRAILING_ZEROS_COUNT, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, mask, Int64VectorTests::TRAILING_ZEROS_COUNT);
}
staticint LEADING_ZEROS_COUNT(int a) { return (int)(LEADING_ZEROS_COUNT_scalar(a));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid LEADING_ZEROS_COUNTInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.LEADING_ZEROS_COUNT).intoArray(r, i);
}
}
assertArraysEquals(r, a, Int64VectorTests::LEADING_ZEROS_COUNT);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.LEADING_ZEROS_COUNT, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, mask, Int64VectorTests::LEADING_ZEROS_COUNT);
}
staticint REVERSE(int a) { return (int)(REVERSE_scalar(a));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid REVERSEInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.REVERSE).intoArray(r, i);
}
}
assertArraysEquals(r, a, Int64VectorTests::REVERSE);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.REVERSE, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, mask, Int64VectorTests::REVERSE);
}
staticint REVERSE_BYTES(int a) { return (int)(Integer.reverseBytes(a));
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid REVERSE_BYTESInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.REVERSE_BYTES).intoArray(r, i);
}
}
assertArraysEquals(r, a, Int64VectorTests::REVERSE_BYTES);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.lanewise(VectorOperators.REVERSE_BYTES, vmask).intoArray(r, i);
}
}
assertArraysEquals(r, a, mask, Int64VectorTests::REVERSE_BYTES);
}
@Test(dataProvider = "intCompareOpProvider") staticvoid ltInt64VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.lt(b[i]);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), a[i + j] < b[i]);
}
}
}
@Test(dataProvider = "intCompareOpProvider") staticvoid eqInt64VectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { int[] a = fa.apply(SPECIES.length()); int[] b = fb.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
VectorMask<Integer> mv = av.eq(b[i]);
// Check results as part of computation. for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(mv.laneIsSet(j), a[i + j] == b[i]);
}
}
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i); int[] r = av.toIntArray();
assertArraysEquals(r, a, i);
}
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i); long[] r = av.toLongArray();
assertArraysEquals(r, a, i);
}
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i); double[] r = av.toDoubleArray();
assertArraysEquals(r, a, i);
}
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
String str = av.toString();
int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length()); Assert.assertTrue(str.equals(Arrays.toString(subarr)), "at index " + i + ", string should be = " + Arrays.toString(subarr) + ", but is = " + str);
}
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i); int hash = av.hashCode();
int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length()); int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr)); Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash);
}
}
staticlong ADDReduceLong(int[] a, int idx) { int res = 0; for (int i = idx; i < (idx + SPECIES.length()); i++) {
res += a[i];
}
return (long)res;
}
staticlong ADDReduceAllLong(int[] a) { long res = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
res += ADDReduceLong(a, i);
}
return res;
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid ADDReduceLongInt64VectorTests(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); long[] r = lfr.apply(SPECIES.length()); long ra = 0;
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanesToLong(VectorOperators.ADD);
}
ra = 0; for (int i = 0; i < a.length; i ++) {
ra += r[i];
}
assertReductionLongArraysEquals(r, ra, a,
Int64VectorTests::ADDReduceLong, Int64VectorTests::ADDReduceAllLong);
}
staticlong ADDReduceLongMasked(int[] a, int idx, boolean[] mask) { int res = 0; for (int i = idx; i < (idx + SPECIES.length()); i++) { if(mask[i % SPECIES.length()])
res += a[i];
}
return (long)res;
}
staticlong ADDReduceAllLongMasked(int[] a, boolean[] mask) { long res = 0; for (int i = 0; i < a.length; i += SPECIES.length()) {
res += ADDReduceLongMasked(a, i, mask);
}
return res;
}
@Test(dataProvider = "intUnaryOpMaskProvider") staticvoid ADDReduceLongInt64VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) { int[] a = fa.apply(SPECIES.length()); long[] r = lfr.apply(SPECIES.length()); boolean[] mask = fm.apply(SPECIES.length());
VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); long ra = 0;
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
r[i] = av.reduceLanesToLong(VectorOperators.ADD, vmask);
}
ra = 0; for (int i = 0; i < a.length; i ++) {
ra += r[i];
}
assertReductionLongArraysEqualsMasked(r, ra, a, mask,
Int64VectorTests::ADDReduceLongMasked, Int64VectorTests::ADDReduceAllLongMasked);
}
@Test(dataProvider = "intUnaryOpProvider") staticvoid BroadcastLongInt64VectorTestsSmokeTest(IntFunction<int[]> fa) { int[] a = fa.apply(SPECIES.length()); int[] r = newint[a.length];
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector.broadcast(SPECIES, (long)a[i]).intoArray(r, i);
}
assertBroadcastArraysEquals(r, a);
}
for (int ic = 0; ic < INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
av.blend((long)b[i], vmask).intoArray(r, i);
}
}
assertBroadcastLongArraysEquals(r, a, b, mask, Int64VectorTests::blend);
}
@Test(dataProvider = "intUnaryOpShuffleProvider") staticvoid SelectFromInt64VectorTests(IntFunction<int[]> fa,
BiFunction<Integer,Integer,int[]> fs) { int[] a = fa.apply(SPECIES.length()); int[] order = fs.apply(a.length, SPECIES.length()); int[] r = fr.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, order, i);
bv.selectFrom(av).intoArray(r, i);
}
assertSelectFromArraysEquals(r, a, order, SPECIES.length());
}
for (int i = 0; i < a.length; i += SPECIES.length()) {
IntVector av = IntVector.fromArray(SPECIES, a, i);
IntVector bv = IntVector.fromArray(SPECIES, order, i);
bv.selectFrom(av, vmask).intoArray(r, i);
}
assertSelectFromArraysEquals(r, a, order, mask, SPECIES.length());
}
for (int i = 0; i < a.length; i += SPECIES.length()) { var shuffle = VectorShuffle.fromArray(SPECIES, a, i); int hash = shuffle.hashCode(); int length = shuffle.length();
int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length()); int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr)); Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash); Assert.assertEquals(length, SPECIES.length());
}
}
for (int i = 0; i < a.length; i += SPECIES.length()) { var shuffle = VectorShuffle.fromArray(SPECIES, a, i);
String str = shuffle.toString();
int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length()); Assert.assertTrue(str.equals("Shuffle" + Arrays.toString(subarr)), "at index " +
i + ", string should be = " + Arrays.toString(subarr) + ", but is = " + str);
}
}
for (int i = 0; i < a.length; i += SPECIES.length()) { var av = VectorShuffle.fromArray(SPECIES, a, i); var bv = VectorShuffle.fromArray(SPECIES, b, i); boolean eq = av.equals(bv); int to = i + SPECIES.length(); Assert.assertEquals(eq, Arrays.equals(a, i, to, b, i, to));
}
}
@Test(dataProvider = "maskCompareOpProvider") staticvoid maskEqualsInt64VectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length());
for (int i = 0; i < a.length; i += SPECIES.length()) { var av = SPECIES.loadMask(a, i); var bv = SPECIES.loadMask(b, i); boolean equals = av.equals(bv); int to = i + SPECIES.length(); Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to));
}
}
staticboolean beq(boolean a, boolean b) { return (a == b);
}
@Test(dataProvider = "maskCompareOpProvider") staticvoid maskEqInt64VectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); boolean[] r = newboolean[a.length];
for (int i = 0; i < a.length; i += SPECIES.length()) { var av = SPECIES.loadMask(a, i); var bv = SPECIES.loadMask(b, i); var cv = av.eq(bv);
cv.intoArray(r, i);
}
assertArraysEquals(r, a, b, Int64VectorTests::beq);
}
for (int i = 0; i < a.length; i += SPECIES.length()) { var vmask = SPECIES.loadMask(a, i); int hash = vmask.hashCode();
boolean subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length()); int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr)); Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash);
}
}
staticint maskTrueCount(boolean[] a, int idx) { int trueCount = 0; for (int i = idx; i < idx + SPECIES.length(); i++) {
trueCount += a[i] ? 1 : 0;
} return trueCount;
}
@Test(dataProvider = "maskProvider") staticvoid maskTrueCountInt64VectorTestsSmokeTest(IntFunction<boolean[]> fa) { boolean[] a = fa.apply(SPECIES.length()); int[] r = newint[a.length];
for (int ic = 0; ic < INVOC_COUNT * INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) { var vmask = SPECIES.loadMask(a, i);
r[i] = vmask.trueCount();
}
}
assertMaskReductionArraysEquals(r, a, Int64VectorTests::maskTrueCount);
}
staticint maskLastTrue(boolean[] a, int idx) { int i = idx + SPECIES.length() - 1; for (; i >= idx; i--) { if (a[i]) { break;
}
} return i - idx;
}
@Test(dataProvider = "maskProvider") staticvoid maskLastTrueInt64VectorTestsSmokeTest(IntFunction<boolean[]> fa) { boolean[] a = fa.apply(SPECIES.length()); int[] r = newint[a.length];
for (int ic = 0; ic < INVOC_COUNT * INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) { var vmask = SPECIES.loadMask(a, i);
r[i] = vmask.lastTrue();
}
}
assertMaskReductionArraysEquals(r, a, Int64VectorTests::maskLastTrue);
}
staticint maskFirstTrue(boolean[] a, int idx) { int i = idx; for (; i < idx + SPECIES.length(); i++) { if (a[i]) { break;
}
} return i - idx;
}
@Test(dataProvider = "maskProvider") staticvoid maskFirstTrueInt64VectorTestsSmokeTest(IntFunction<boolean[]> fa) { boolean[] a = fa.apply(SPECIES.length()); int[] r = newint[a.length];
for (int ic = 0; ic < INVOC_COUNT * INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) { var vmask = SPECIES.loadMask(a, i);
r[i] = vmask.firstTrue();
}
}
assertMaskReductionArraysEquals(r, a, Int64VectorTests::maskFirstTrue);
}
@Test(dataProvider = "maskProvider") staticvoid maskCompressInt64VectorTestsSmokeTest(IntFunction<boolean[]> fa) { int trueCount = 0; boolean[] a = fa.apply(SPECIES.length());
for (int ic = 0; ic < INVOC_COUNT * INVOC_COUNT; ic++) { for (int i = 0; i < a.length; i += SPECIES.length()) { var vmask = SPECIES.loadMask(a, i);
trueCount = vmask.trueCount(); var rmask = vmask.compress(); for (int j = 0; j < SPECIES.length(); j++) { Assert.assertEquals(rmask.laneIsSet(j), j < trueCount);
}
}
}
}
@Test staticvoid WithLanesInt64VectorTestsSmokeTest() {
IntVector av = IntVector.zero(SPECIES);
VectorSpecies species = av.species().withLanes(int.class); assert(species.equals(SPECIES));
}
@Test staticvoid WithShapeInt64VectorTestsSmokeTest() {
IntVector av = IntVector.zero(SPECIES);
VectorShape vsh = av.shape();
VectorSpecies species = av.species().withShape(vsh); assert(species.equals(SPECIES));
}
@Test staticvoid MaskAllTrueInt64VectorTestsSmokeTest() { for (int ic = 0; ic < INVOC_COUNT; ic++) { Assert.assertEquals(SPECIES.maskAll(true).toLong(), -1L >>> (64 - SPECIES.length()));
}
}
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.201Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-06-05)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.