Path: blob/master/test/jdk/jdk/incubator/vector/Int128VectorTests.java
41710 views
/*1* Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @modules jdk.incubator.vector26* @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Int128VectorTests27*/2829// -- This file was mechanically generated: Do not edit! -- //3031import jdk.incubator.vector.VectorShape;32import jdk.incubator.vector.VectorSpecies;33import jdk.incubator.vector.VectorShuffle;34import jdk.incubator.vector.VectorMask;35import jdk.incubator.vector.VectorOperators;36import jdk.incubator.vector.Vector;3738import jdk.incubator.vector.IntVector;3940import org.testng.Assert;41import org.testng.annotations.DataProvider;42import org.testng.annotations.Test;4344import java.lang.Integer;45import java.util.List;46import java.util.Arrays;47import java.util.function.BiFunction;48import java.util.function.IntFunction;49import java.util.Objects;50import java.util.stream.Collectors;51import java.util.stream.Stream;5253@Test54public class Int128VectorTests extends AbstractVectorTest {5556static final VectorSpecies<Integer> SPECIES =57IntVector.SPECIES_128;5859static final int INVOC_COUNT = Integer.getInteger("jdk.incubator.vector.test.loop-iterations", 100);606162static final int BUFFER_REPS = Integer.getInteger("jdk.incubator.vector.test.buffer-vectors", 25000 / 128);6364static final int BUFFER_SIZE = Integer.getInteger("jdk.incubator.vector.test.buffer-size", BUFFER_REPS * (128 / 8));6566interface FUnOp {67int apply(int a);68}6970static void assertArraysEquals(int[] r, int[] a, FUnOp f) {71int i = 0;72try {73for (; i < a.length; i++) {74Assert.assertEquals(r[i], f.apply(a[i]));75}76} catch (AssertionError e) {77Assert.assertEquals(r[i], f.apply(a[i]), "at index #" + i + ", input = " + a[i]);78}79}8081interface FUnArrayOp {82int[] apply(int a);83}8485static void assertArraysEquals(int[] r, int[] a, FUnArrayOp f) {86int i = 0;87try {88for (; i < a.length; i += SPECIES.length()) {89Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),90f.apply(a[i]));91}92} catch (AssertionError e) {93int[] ref = f.apply(a[i]);94int[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());95Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)96+ ", res: " + Arrays.toString(res)97+ "), at index #" + i);98}99}100101static void assertArraysEquals(int[] r, int[] a, boolean[] mask, FUnOp f) {102int i = 0;103try {104for (; i < a.length; i++) {105Assert.assertEquals(r[i], mask[i % SPECIES.length()] ? f.apply(a[i]) : a[i]);106}107} catch (AssertionError e) {108Assert.assertEquals(r[i], mask[i % SPECIES.length()] ? f.apply(a[i]) : a[i], "at index #" + i + ", input = " + a[i] + ", mask = " + mask[i % SPECIES.length()]);109}110}111112interface FReductionOp {113int apply(int[] a, int idx);114}115116interface FReductionAllOp {117int apply(int[] a);118}119120static void assertReductionArraysEquals(int[] r, int rc, int[] a,121FReductionOp f, FReductionAllOp fa) {122int i = 0;123try {124Assert.assertEquals(rc, fa.apply(a));125for (; i < a.length; i += SPECIES.length()) {126Assert.assertEquals(r[i], f.apply(a, i));127}128} catch (AssertionError e) {129Assert.assertEquals(rc, fa.apply(a), "Final result is incorrect!");130Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i);131}132}133134interface FReductionMaskedOp {135int apply(int[] a, int idx, boolean[] mask);136}137138interface FReductionAllMaskedOp {139int apply(int[] a, boolean[] mask);140}141142static void assertReductionArraysEqualsMasked(int[] r, int rc, int[] a, boolean[] mask,143FReductionMaskedOp f, FReductionAllMaskedOp fa) {144int i = 0;145try {146Assert.assertEquals(rc, fa.apply(a, mask));147for (; i < a.length; i += SPECIES.length()) {148Assert.assertEquals(r[i], f.apply(a, i, mask));149}150} catch (AssertionError e) {151Assert.assertEquals(rc, fa.apply(a, mask), "Final result is incorrect!");152Assert.assertEquals(r[i], f.apply(a, i, mask), "at index #" + i);153}154}155156interface FReductionOpLong {157long apply(int[] a, int idx);158}159160interface FReductionAllOpLong {161long apply(int[] a);162}163164static void assertReductionLongArraysEquals(long[] r, long rc, int[] a,165FReductionOpLong f, FReductionAllOpLong fa) {166int i = 0;167try {168Assert.assertEquals(rc, fa.apply(a));169for (; i < a.length; i += SPECIES.length()) {170Assert.assertEquals(r[i], f.apply(a, i));171}172} catch (AssertionError e) {173Assert.assertEquals(rc, fa.apply(a), "Final result is incorrect!");174Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i);175}176}177178interface FReductionMaskedOpLong {179long apply(int[] a, int idx, boolean[] mask);180}181182interface FReductionAllMaskedOpLong {183long apply(int[] a, boolean[] mask);184}185186static void assertReductionLongArraysEqualsMasked(long[] r, long rc, int[] a, boolean[] mask,187FReductionMaskedOpLong f, FReductionAllMaskedOpLong fa) {188int i = 0;189try {190Assert.assertEquals(rc, fa.apply(a, mask));191for (; i < a.length; i += SPECIES.length()) {192Assert.assertEquals(r[i], f.apply(a, i, mask));193}194} catch (AssertionError e) {195Assert.assertEquals(rc, fa.apply(a, mask), "Final result is incorrect!");196Assert.assertEquals(r[i], f.apply(a, i, mask), "at index #" + i);197}198}199200interface FBoolReductionOp {201boolean apply(boolean[] a, int idx);202}203204static void assertReductionBoolArraysEquals(boolean[] r, boolean[] a, FBoolReductionOp f) {205int i = 0;206try {207for (; i < a.length; i += SPECIES.length()) {208Assert.assertEquals(r[i], f.apply(a, i));209}210} catch (AssertionError e) {211Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i);212}213}214215static void assertInsertArraysEquals(int[] r, int[] a, int element, int index) {216int i = 0;217try {218for (; i < a.length; i += 1) {219if(i%SPECIES.length() == index) {220Assert.assertEquals(r[i], element);221} else {222Assert.assertEquals(r[i], a[i]);223}224}225} catch (AssertionError e) {226if (i%SPECIES.length() == index) {227Assert.assertEquals(r[i], element, "at index #" + i);228} else {229Assert.assertEquals(r[i], a[i], "at index #" + i);230}231}232}233234static void assertRearrangeArraysEquals(int[] r, int[] a, int[] order, int vector_len) {235int i = 0, j = 0;236try {237for (; i < a.length; i += vector_len) {238for (j = 0; j < vector_len; j++) {239Assert.assertEquals(r[i+j], a[i+order[i+j]]);240}241}242} catch (AssertionError e) {243int idx = i + j;244Assert.assertEquals(r[i+j], a[i+order[i+j]], "at index #" + idx + ", input = " + a[i+order[i+j]]);245}246}247248static void assertSelectFromArraysEquals(int[] r, int[] a, int[] order, int vector_len) {249int i = 0, j = 0;250try {251for (; i < a.length; i += vector_len) {252for (j = 0; j < vector_len; j++) {253Assert.assertEquals(r[i+j], a[i+(int)order[i+j]]);254}255}256} catch (AssertionError e) {257int idx = i + j;258Assert.assertEquals(r[i+j], a[i+(int)order[i+j]], "at index #" + idx + ", input = " + a[i+(int)order[i+j]]);259}260}261262static void assertRearrangeArraysEquals(int[] r, int[] a, int[] order, boolean[] mask, int vector_len) {263int i = 0, j = 0;264try {265for (; i < a.length; i += vector_len) {266for (j = 0; j < vector_len; j++) {267if (mask[j % SPECIES.length()])268Assert.assertEquals(r[i+j], a[i+order[i+j]]);269else270Assert.assertEquals(r[i+j], (int)0);271}272}273} catch (AssertionError e) {274int idx = i + j;275if (mask[j % SPECIES.length()])276Assert.assertEquals(r[i+j], a[i+order[i+j]], "at index #" + idx + ", input = " + a[i+order[i+j]] + ", mask = " + mask[j % SPECIES.length()]);277else278Assert.assertEquals(r[i+j], (int)0, "at index #" + idx + ", input = " + a[i+order[i+j]] + ", mask = " + mask[j % SPECIES.length()]);279}280}281282static void assertSelectFromArraysEquals(int[] r, int[] a, int[] order, boolean[] mask, int vector_len) {283int i = 0, j = 0;284try {285for (; i < a.length; i += vector_len) {286for (j = 0; j < vector_len; j++) {287if (mask[j % SPECIES.length()])288Assert.assertEquals(r[i+j], a[i+(int)order[i+j]]);289else290Assert.assertEquals(r[i+j], (int)0);291}292}293} catch (AssertionError e) {294int idx = i + j;295if (mask[j % SPECIES.length()])296Assert.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()]);297else298Assert.assertEquals(r[i+j], (int)0, "at index #" + idx + ", input = " + a[i+(int)order[i+j]] + ", mask = " + mask[j % SPECIES.length()]);299}300}301302static void assertBroadcastArraysEquals(int[] r, int[] a) {303int i = 0;304for (; i < a.length; i += SPECIES.length()) {305int idx = i;306for (int j = idx; j < (idx + SPECIES.length()); j++)307a[j]=a[idx];308}309310try {311for (i = 0; i < a.length; i++) {312Assert.assertEquals(r[i], a[i]);313}314} catch (AssertionError e) {315Assert.assertEquals(r[i], a[i], "at index #" + i + ", input = " + a[i]);316}317}318319interface FBinOp {320int apply(int a, int b);321}322323interface FBinMaskOp {324int apply(int a, int b, boolean m);325326static FBinMaskOp lift(FBinOp f) {327return (a, b, m) -> m ? f.apply(a, b) : a;328}329}330331static void assertArraysEquals(int[] r, int[] a, int[] b, FBinOp f) {332int i = 0;333try {334for (; i < a.length; i++) {335Assert.assertEquals(r[i], f.apply(a[i], b[i]));336}337} catch (AssertionError e) {338Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i);339}340}341342static void assertBroadcastArraysEquals(int[] r, int[] a, int[] b, FBinOp f) {343int i = 0;344try {345for (; i < a.length; i++) {346Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()]));347}348} catch (AssertionError e) {349Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()]),350"(" + a[i] + ", " + b[(i / SPECIES.length()) * SPECIES.length()] + ") at index #" + i);351}352}353354static void assertBroadcastLongArraysEquals(int[] r, int[] a, int[] b, FBinOp f) {355int i = 0;356try {357for (; i < a.length; i++) {358Assert.assertEquals(r[i], f.apply(a[i], (int)((long)b[(i / SPECIES.length()) * SPECIES.length()])));359}360} catch (AssertionError e) {361Assert.assertEquals(r[i], f.apply(a[i], (int)((long)b[(i / SPECIES.length()) * SPECIES.length()])),362"(" + a[i] + ", " + b[(i / SPECIES.length()) * SPECIES.length()] + ") at index #" + i);363}364}365366static void assertArraysEquals(int[] r, int[] a, int[] b, boolean[] mask, FBinOp f) {367assertArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));368}369370static void assertArraysEquals(int[] r, int[] a, int[] b, boolean[] mask, FBinMaskOp f) {371int i = 0;372try {373for (; i < a.length; i++) {374Assert.assertEquals(r[i], f.apply(a[i], b[i], mask[i % SPECIES.length()]));375}376} catch (AssertionError err) {377Assert.assertEquals(r[i], f.apply(a[i], b[i], mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", mask = " + mask[i % SPECIES.length()]);378}379}380381static void assertBroadcastArraysEquals(int[] r, int[] a, int[] b, boolean[] mask, FBinOp f) {382assertBroadcastArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));383}384385static void assertBroadcastArraysEquals(int[] r, int[] a, int[] b, boolean[] mask, FBinMaskOp f) {386int i = 0;387try {388for (; i < a.length; i++) {389Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], mask[i % SPECIES.length()]));390}391} catch (AssertionError err) {392Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()],393mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] +394", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " +395mask[i % SPECIES.length()]);396}397}398399static void assertBroadcastLongArraysEquals(int[] r, int[] a, int[] b, boolean[] mask, FBinOp f) {400assertBroadcastLongArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));401}402403static void assertBroadcastLongArraysEquals(int[] r, int[] a, int[] b, boolean[] mask, FBinMaskOp f) {404int i = 0;405try {406for (; i < a.length; i++) {407Assert.assertEquals(r[i], f.apply(a[i], (int)((long)b[(i / SPECIES.length()) * SPECIES.length()]), mask[i % SPECIES.length()]));408}409} catch (AssertionError err) {410Assert.assertEquals(r[i], f.apply(a[i], (int)((long)b[(i / SPECIES.length()) * SPECIES.length()]),411mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] +412", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " +413mask[i % SPECIES.length()]);414}415}416417static void assertShiftArraysEquals(int[] r, int[] a, int[] b, FBinOp f) {418int i = 0;419int j = 0;420try {421for (; j < a.length; j += SPECIES.length()) {422for (i = 0; i < SPECIES.length(); i++) {423Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j]));424}425}426} catch (AssertionError e) {427Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j]), "at index #" + i + ", " + j);428}429}430431static void assertShiftArraysEquals(int[] r, int[] a, int[] b, boolean[] mask, FBinOp f) {432assertShiftArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));433}434435static void assertShiftArraysEquals(int[] r, int[] a, int[] b, boolean[] mask, FBinMaskOp f) {436int i = 0;437int j = 0;438try {439for (; j < a.length; j += SPECIES.length()) {440for (i = 0; i < SPECIES.length(); i++) {441Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j], mask[i]));442}443}444} catch (AssertionError err) {445Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j], mask[i]), "at index #" + i + ", input1 = " + a[i+j] + ", input2 = " + b[j] + ", mask = " + mask[i]);446}447}448449interface FTernOp {450int apply(int a, int b, int c);451}452453interface FTernMaskOp {454int apply(int a, int b, int c, boolean m);455456static FTernMaskOp lift(FTernOp f) {457return (a, b, c, m) -> m ? f.apply(a, b, c) : a;458}459}460461static void assertArraysEquals(int[] r, int[] a, int[] b, int[] c, FTernOp f) {462int i = 0;463try {464for (; i < a.length; i++) {465Assert.assertEquals(r[i], f.apply(a[i], b[i], c[i]));466}467} catch (AssertionError e) {468Assert.assertEquals(r[i], f.apply(a[i], b[i], c[i]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " + c[i]);469}470}471472static void assertArraysEquals(int[] r, int[] a, int[] b, int[] c, boolean[] mask, FTernOp f) {473assertArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f));474}475476static void assertArraysEquals(int[] r, int[] a, int[] b, int[] c, boolean[] mask, FTernMaskOp f) {477int i = 0;478try {479for (; i < a.length; i++) {480Assert.assertEquals(r[i], f.apply(a[i], b[i], c[i], mask[i % SPECIES.length()]));481}482} catch (AssertionError err) {483Assert.assertEquals(r[i], f.apply(a[i], b[i], c[i], mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = "484+ b[i] + ", input3 = " + c[i] + ", mask = " + mask[i % SPECIES.length()]);485}486}487488static void assertBroadcastArraysEquals(int[] r, int[] a, int[] b, int[] c, FTernOp f) {489int i = 0;490try {491for (; i < a.length; i++) {492Assert.assertEquals(r[i], f.apply(a[i], b[i], c[(i / SPECIES.length()) * SPECIES.length()]));493}494} catch (AssertionError e) {495Assert.assertEquals(r[i], f.apply(a[i], b[i], c[(i / SPECIES.length()) * SPECIES.length()]), "at index #" +496i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " +497c[(i / SPECIES.length()) * SPECIES.length()]);498}499}500501static void assertAltBroadcastArraysEquals(int[] r, int[] a, int[] b, int[] c, FTernOp f) {502int i = 0;503try {504for (; i < a.length; i++) {505Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], c[i]));506}507} catch (AssertionError e) {508Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], c[i]), "at index #" +509i + ", input1 = " + a[i] + ", input2 = " +510b[(i / SPECIES.length()) * SPECIES.length()] + ", input3 = " + c[i]);511}512}513514static void assertBroadcastArraysEquals(int[] r, int[] a, int[] b, int[] c, boolean[] mask,515FTernOp f) {516assertBroadcastArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f));517}518519static void assertBroadcastArraysEquals(int[] r, int[] a, int[] b, int[] c, boolean[] mask,520FTernMaskOp f) {521int i = 0;522try {523for (; i < a.length; i++) {524Assert.assertEquals(r[i], f.apply(a[i], b[i], c[(i / SPECIES.length()) * SPECIES.length()],525mask[i % SPECIES.length()]));526}527} catch (AssertionError err) {528Assert.assertEquals(r[i], f.apply(a[i], b[i], c[(i / SPECIES.length()) * SPECIES.length()],529mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " +530b[i] + ", input3 = " + c[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " +531mask[i % SPECIES.length()]);532}533}534535static void assertAltBroadcastArraysEquals(int[] r, int[] a, int[] b, int[] c, boolean[] mask,536FTernOp f) {537assertAltBroadcastArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f));538}539540static void assertAltBroadcastArraysEquals(int[] r, int[] a, int[] b, int[] c, boolean[] mask,541FTernMaskOp f) {542int i = 0;543try {544for (; i < a.length; i++) {545Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], c[i],546mask[i % SPECIES.length()]));547}548} catch (AssertionError err) {549Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], c[i],550mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] +551", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] +552", input3 = " + c[i] + ", mask = " + mask[i % SPECIES.length()]);553}554}555556static void assertDoubleBroadcastArraysEquals(int[] r, int[] a, int[] b, int[] c, FTernOp f) {557int i = 0;558try {559for (; i < a.length; i++) {560Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()],561c[(i / SPECIES.length()) * SPECIES.length()]));562}563} catch (AssertionError e) {564Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()],565c[(i / SPECIES.length()) * SPECIES.length()]), "at index #" + i + ", input1 = " + a[i]566+ ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + ", input3 = " +567c[(i / SPECIES.length()) * SPECIES.length()]);568}569}570571static void assertDoubleBroadcastArraysEquals(int[] r, int[] a, int[] b, int[] c, boolean[] mask,572FTernOp f) {573assertDoubleBroadcastArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f));574}575576static void assertDoubleBroadcastArraysEquals(int[] r, int[] a, int[] b, int[] c, boolean[] mask,577FTernMaskOp f) {578int i = 0;579try {580for (; i < a.length; i++) {581Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()],582c[(i / SPECIES.length()) * SPECIES.length()], mask[i % SPECIES.length()]));583}584} catch (AssertionError err) {585Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()],586c[(i / SPECIES.length()) * SPECIES.length()], mask[i % SPECIES.length()]), "at index #"587+ i + ", input1 = " + a[i] + ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] +588", input3 = " + c[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " +589mask[i % SPECIES.length()]);590}591}592593594595interface FBinArrayOp {596int apply(int[] a, int b);597}598599static void assertArraysEquals(int[] r, int[] a, FBinArrayOp f) {600int i = 0;601try {602for (; i < a.length; i++) {603Assert.assertEquals(r[i], f.apply(a, i));604}605} catch (AssertionError e) {606Assert.assertEquals(r[i], f.apply(a,i), "at index #" + i);607}608}609610interface FGatherScatterOp {611int[] apply(int[] a, int ix, int[] b, int iy);612}613614static void assertArraysEquals(int[] r, int[] a, int[] b, FGatherScatterOp f) {615int i = 0;616try {617for (; i < a.length; i += SPECIES.length()) {618Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),619f.apply(a, i, b, i));620}621} catch (AssertionError e) {622int[] ref = f.apply(a, i, b, i);623int[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());624Assert.assertEquals(res, ref,625"(ref: " + Arrays.toString(ref) + ", res: " + Arrays.toString(res) + ", a: "626+ Arrays.toString(Arrays.copyOfRange(a, i, i+SPECIES.length()))627+ ", b: "628+ Arrays.toString(Arrays.copyOfRange(b, i, i+SPECIES.length()))629+ " at index #" + i);630}631}632633interface FGatherMaskedOp {634int[] apply(int[] a, int ix, boolean[] mask, int[] b, int iy);635}636637interface FScatterMaskedOp {638int[] apply(int[] r, int[] a, int ix, boolean[] mask, int[] b, int iy);639}640641static void assertArraysEquals(int[] r, int[] a, int[] b, boolean[] mask, FGatherMaskedOp f) {642int i = 0;643try {644for (; i < a.length; i += SPECIES.length()) {645Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),646f.apply(a, i, mask, b, i));647}648} catch (AssertionError e) {649int[] ref = f.apply(a, i, mask, b, i);650int[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());651Assert.assertEquals(res, ref,652"(ref: " + Arrays.toString(ref) + ", res: " + Arrays.toString(res) + ", a: "653+ Arrays.toString(Arrays.copyOfRange(a, i, i+SPECIES.length()))654+ ", b: "655+ Arrays.toString(Arrays.copyOfRange(b, i, i+SPECIES.length()))656+ ", mask: "657+ Arrays.toString(mask)658+ " at index #" + i);659}660}661662static void assertArraysEquals(int[] r, int[] a, int[] b, boolean[] mask, FScatterMaskedOp f) {663int i = 0;664try {665for (; i < a.length; i += SPECIES.length()) {666Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),667f.apply(r, a, i, mask, b, i));668}669} catch (AssertionError e) {670int[] ref = f.apply(r, a, i, mask, b, i);671int[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());672Assert.assertEquals(res, ref,673"(ref: " + Arrays.toString(ref) + ", res: " + Arrays.toString(res) + ", a: "674+ Arrays.toString(Arrays.copyOfRange(a, i, i+SPECIES.length()))675+ ", b: "676+ Arrays.toString(Arrays.copyOfRange(b, i, i+SPECIES.length()))677+ ", r: "678+ Arrays.toString(Arrays.copyOfRange(r, i, i+SPECIES.length()))679+ ", mask: "680+ Arrays.toString(mask)681+ " at index #" + i);682}683}684685interface FLaneOp {686int[] apply(int[] a, int origin, int idx);687}688689static void assertArraysEquals(int[] r, int[] a, int origin, FLaneOp f) {690int i = 0;691try {692for (; i < a.length; i += SPECIES.length()) {693Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),694f.apply(a, origin, i));695}696} catch (AssertionError e) {697int[] ref = f.apply(a, origin, i);698int[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());699Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)700+ ", res: " + Arrays.toString(res)701+ "), at index #" + i);702}703}704705interface FLaneBop {706int[] apply(int[] a, int[] b, int origin, int idx);707}708709static void assertArraysEquals(int[] r, int[] a, int[] b, int origin, FLaneBop f) {710int i = 0;711try {712for (; i < a.length; i += SPECIES.length()) {713Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),714f.apply(a, b, origin, i));715}716} catch (AssertionError e) {717int[] ref = f.apply(a, b, origin, i);718int[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());719Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)720+ ", res: " + Arrays.toString(res)721+ "), at index #" + i722+ ", at origin #" + origin);723}724}725726interface FLaneMaskedBop {727int[] apply(int[] a, int[] b, int origin, boolean[] mask, int idx);728}729730static void assertArraysEquals(int[] r, int[] a, int[] b, int origin, boolean[] mask, FLaneMaskedBop f) {731int i = 0;732try {733for (; i < a.length; i += SPECIES.length()) {734Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),735f.apply(a, b, origin, mask, i));736}737} catch (AssertionError e) {738int[] ref = f.apply(a, b, origin, mask, i);739int[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());740Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)741+ ", res: " + Arrays.toString(res)742+ "), at index #" + i743+ ", at origin #" + origin);744}745}746747interface FLanePartBop {748int[] apply(int[] a, int[] b, int origin, int part, int idx);749}750751static void assertArraysEquals(int[] r, int[] a, int[] b, int origin, int part, FLanePartBop f) {752int i = 0;753try {754for (; i < a.length; i += SPECIES.length()) {755Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),756f.apply(a, b, origin, part, i));757}758} catch (AssertionError e) {759int[] ref = f.apply(a, b, origin, part, i);760int[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());761Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)762+ ", res: " + Arrays.toString(res)763+ "), at index #" + i764+ ", at origin #" + origin765+ ", with part #" + part);766}767}768769interface FLanePartMaskedBop {770int[] apply(int[] a, int[] b, int origin, int part, boolean[] mask, int idx);771}772773static void assertArraysEquals(int[] r, int[] a, int[] b, int origin, int part, boolean[] mask, FLanePartMaskedBop f) {774int i = 0;775try {776for (; i < a.length; i += SPECIES.length()) {777Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),778f.apply(a, b, origin, part, mask, i));779}780} catch (AssertionError e) {781int[] ref = f.apply(a, b, origin, part, mask, i);782int[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());783Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)784+ ", res: " + Arrays.toString(res)785+ "), at index #" + i786+ ", at origin #" + origin787+ ", with part #" + part);788}789}790791792static void assertArraysEquals(int[] r, int[] a, int offs) {793int i = 0;794try {795for (; i < r.length; i++) {796Assert.assertEquals(r[i], (int)(a[i+offs]));797}798} catch (AssertionError e) {799Assert.assertEquals(r[i], (int)(a[i+offs]), "at index #" + i + ", input = " + a[i+offs]);800}801}802803804805static void assertArraysEquals(long[] r, int[] a, int offs) {806int i = 0;807try {808for (; i < r.length; i++) {809Assert.assertEquals(r[i], (long)(a[i+offs]));810}811} catch (AssertionError e) {812Assert.assertEquals(r[i], (long)(a[i+offs]), "at index #" + i + ", input = " + a[i+offs]);813}814}815816static void assertArraysEquals(double[] r, int[] a, int offs) {817int i = 0;818try {819for (; i < r.length; i++) {820Assert.assertEquals(r[i], (double)(a[i+offs]));821}822} catch (AssertionError e) {823Assert.assertEquals(r[i], (double)(a[i+offs]), "at index #" + i + ", input = " + a[i+offs]);824}825}826827828static int bits(int e) {829return e;830}831832static final List<IntFunction<int[]>> INT_GENERATORS = List.of(833withToString("int[-i * 5]", (int s) -> {834return fill(s * BUFFER_REPS,835i -> (int)(-i * 5));836}),837withToString("int[i * 5]", (int s) -> {838return fill(s * BUFFER_REPS,839i -> (int)(i * 5));840}),841withToString("int[i + 1]", (int s) -> {842return fill(s * BUFFER_REPS,843i -> (((int)(i + 1) == 0) ? 1 : (int)(i + 1)));844}),845withToString("int[cornerCaseValue(i)]", (int s) -> {846return fill(s * BUFFER_REPS,847i -> cornerCaseValue(i));848})849);850851// Create combinations of pairs852// @@@ Might be sensitive to order e.g. div by 0853static final List<List<IntFunction<int[]>>> INT_GENERATOR_PAIRS =854Stream.of(INT_GENERATORS.get(0)).855flatMap(fa -> INT_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))).856collect(Collectors.toList());857858@DataProvider859public Object[][] boolUnaryOpProvider() {860return BOOL_ARRAY_GENERATORS.stream().861map(f -> new Object[]{f}).862toArray(Object[][]::new);863}864865static final List<List<IntFunction<int[]>>> INT_GENERATOR_TRIPLES =866INT_GENERATOR_PAIRS.stream().867flatMap(pair -> INT_GENERATORS.stream().map(f -> List.of(pair.get(0), pair.get(1), f))).868collect(Collectors.toList());869870@DataProvider871public Object[][] intBinaryOpProvider() {872return INT_GENERATOR_PAIRS.stream().map(List::toArray).873toArray(Object[][]::new);874}875876@DataProvider877public Object[][] intIndexedOpProvider() {878return INT_GENERATOR_PAIRS.stream().map(List::toArray).879toArray(Object[][]::new);880}881882@DataProvider883public Object[][] intBinaryOpMaskProvider() {884return BOOLEAN_MASK_GENERATORS.stream().885flatMap(fm -> INT_GENERATOR_PAIRS.stream().map(lfa -> {886return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();887})).888toArray(Object[][]::new);889}890891@DataProvider892public Object[][] intTernaryOpProvider() {893return INT_GENERATOR_TRIPLES.stream().map(List::toArray).894toArray(Object[][]::new);895}896897@DataProvider898public Object[][] intTernaryOpMaskProvider() {899return BOOLEAN_MASK_GENERATORS.stream().900flatMap(fm -> INT_GENERATOR_TRIPLES.stream().map(lfa -> {901return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();902})).903toArray(Object[][]::new);904}905906@DataProvider907public Object[][] intUnaryOpProvider() {908return INT_GENERATORS.stream().909map(f -> new Object[]{f}).910toArray(Object[][]::new);911}912913@DataProvider914public Object[][] intUnaryOpMaskProvider() {915return BOOLEAN_MASK_GENERATORS.stream().916flatMap(fm -> INT_GENERATORS.stream().map(fa -> {917return new Object[] {fa, fm};918})).919toArray(Object[][]::new);920}921922923924@DataProvider925public Object[][] maskProvider() {926return BOOLEAN_MASK_GENERATORS.stream().927map(f -> new Object[]{f}).928toArray(Object[][]::new);929}930931@DataProvider932public Object[][] maskCompareOpProvider() {933return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray).934toArray(Object[][]::new);935}936937@DataProvider938public Object[][] shuffleProvider() {939return INT_SHUFFLE_GENERATORS.stream().940map(f -> new Object[]{f}).941toArray(Object[][]::new);942}943944@DataProvider945public Object[][] shuffleCompareOpProvider() {946return INT_SHUFFLE_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray).947toArray(Object[][]::new);948}949950@DataProvider951public Object[][] intUnaryOpShuffleProvider() {952return INT_SHUFFLE_GENERATORS.stream().953flatMap(fs -> INT_GENERATORS.stream().map(fa -> {954return new Object[] {fa, fs};955})).956toArray(Object[][]::new);957}958959@DataProvider960public Object[][] intUnaryOpShuffleMaskProvider() {961return BOOLEAN_MASK_GENERATORS.stream().962flatMap(fm -> INT_SHUFFLE_GENERATORS.stream().963flatMap(fs -> INT_GENERATORS.stream().map(fa -> {964return new Object[] {fa, fs, fm};965}))).966toArray(Object[][]::new);967}968969970@DataProvider971public Object[][] intUnaryOpIndexProvider() {972return INT_INDEX_GENERATORS.stream().973flatMap(fs -> INT_GENERATORS.stream().map(fa -> {974return new Object[] {fa, fs};975})).976toArray(Object[][]::new);977}978979@DataProvider980public Object[][] intUnaryMaskedOpIndexProvider() {981return BOOLEAN_MASK_GENERATORS.stream().982flatMap(fs -> INT_INDEX_GENERATORS.stream().flatMap(fm ->983INT_GENERATORS.stream().map(fa -> {984return new Object[] {fa, fm, fs};985}))).986toArray(Object[][]::new);987}988989@DataProvider990public Object[][] scatterMaskedOpIndexProvider() {991return BOOLEAN_MASK_GENERATORS.stream().992flatMap(fs -> INT_INDEX_GENERATORS.stream().flatMap(fm ->993INT_GENERATORS.stream().flatMap(fn ->994INT_GENERATORS.stream().map(fa -> {995return new Object[] {fa, fn, fm, fs};996})))).997toArray(Object[][]::new);998}9991000static final List<IntFunction<int[]>> INT_COMPARE_GENERATORS = List.of(1001withToString("int[i]", (int s) -> {1002return fill(s * BUFFER_REPS,1003i -> (int)i);1004}),1005withToString("int[i - length / 2]", (int s) -> {1006return fill(s * BUFFER_REPS,1007i -> (int)(i - (s * BUFFER_REPS / 2)));1008}),1009withToString("int[i + 1]", (int s) -> {1010return fill(s * BUFFER_REPS,1011i -> (int)(i + 1));1012}),1013withToString("int[i - 2]", (int s) -> {1014return fill(s * BUFFER_REPS,1015i -> (int)(i - 2));1016}),1017withToString("int[zigZag(i)]", (int s) -> {1018return fill(s * BUFFER_REPS,1019i -> i%3 == 0 ? (int)i : (i%3 == 1 ? (int)(i + 1) : (int)(i - 2)));1020}),1021withToString("int[cornerCaseValue(i)]", (int s) -> {1022return fill(s * BUFFER_REPS,1023i -> cornerCaseValue(i));1024})1025);10261027static final List<List<IntFunction<int[]>>> INT_TEST_GENERATOR_ARGS =1028INT_COMPARE_GENERATORS.stream().1029map(fa -> List.of(fa)).1030collect(Collectors.toList());10311032@DataProvider1033public Object[][] intTestOpProvider() {1034return INT_TEST_GENERATOR_ARGS.stream().map(List::toArray).1035toArray(Object[][]::new);1036}10371038@DataProvider1039public Object[][] intTestOpMaskProvider() {1040return BOOLEAN_MASK_GENERATORS.stream().1041flatMap(fm -> INT_TEST_GENERATOR_ARGS.stream().map(lfa -> {1042return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();1043})).1044toArray(Object[][]::new);1045}10461047static final List<List<IntFunction<int[]>>> INT_COMPARE_GENERATOR_PAIRS =1048INT_COMPARE_GENERATORS.stream().1049flatMap(fa -> INT_COMPARE_GENERATORS.stream().map(fb -> List.of(fa, fb))).1050collect(Collectors.toList());10511052@DataProvider1053public Object[][] intCompareOpProvider() {1054return INT_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray).1055toArray(Object[][]::new);1056}10571058@DataProvider1059public Object[][] intCompareOpMaskProvider() {1060return BOOLEAN_MASK_GENERATORS.stream().1061flatMap(fm -> INT_COMPARE_GENERATOR_PAIRS.stream().map(lfa -> {1062return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();1063})).1064toArray(Object[][]::new);1065}10661067interface ToIntF {1068int apply(int i);1069}10701071static int[] fill(int s , ToIntF f) {1072return fill(new int[s], f);1073}10741075static int[] fill(int[] a, ToIntF f) {1076for (int i = 0; i < a.length; i++) {1077a[i] = f.apply(i);1078}1079return a;1080}10811082static int cornerCaseValue(int i) {1083switch(i % 5) {1084case 0:1085return Integer.MAX_VALUE;1086case 1:1087return Integer.MIN_VALUE;1088case 2:1089return Integer.MIN_VALUE;1090case 3:1091return Integer.MAX_VALUE;1092default:1093return (int)0;1094}1095}10961097static int get(int[] a, int i) {1098return (int) a[i];1099}11001101static final IntFunction<int[]> fr = (vl) -> {1102int length = BUFFER_REPS * vl;1103return new int[length];1104};11051106static final IntFunction<boolean[]> fmr = (vl) -> {1107int length = BUFFER_REPS * vl;1108return new boolean[length];1109};11101111static final IntFunction<long[]> lfr = (vl) -> {1112int length = BUFFER_REPS * vl;1113return new long[length];1114};11151116static void replaceZero(int[] a, int v) {1117for (int i = 0; i < a.length; i++) {1118if (a[i] == 0) {1119a[i] = v;1120}1121}1122}11231124static void replaceZero(int[] a, boolean[] mask, int v) {1125for (int i = 0; i < a.length; i++) {1126if (mask[i % mask.length] && a[i] == 0) {1127a[i] = v;1128}1129}1130}11311132static boolean eq(int a, int b) {1133return a == b;1134}11351136static boolean neq(int a, int b) {1137return a != b;1138}11391140static boolean lt(int a, int b) {1141return a < b;1142}11431144static boolean le(int a, int b) {1145return a <= b;1146}11471148static boolean gt(int a, int b) {1149return a > b;1150}11511152static boolean ge(int a, int b) {1153return a >= b;1154}11551156static boolean ult(int a, int b) {1157return Integer.compareUnsigned(a, b) < 0;1158}11591160static boolean ule(int a, int b) {1161return Integer.compareUnsigned(a, b) <= 0;1162}11631164static boolean ugt(int a, int b) {1165return Integer.compareUnsigned(a, b) > 0;1166}11671168static boolean uge(int a, int b) {1169return Integer.compareUnsigned(a, b) >= 0;1170}11711172@Test1173static void smokeTest1() {1174IntVector three = IntVector.broadcast(SPECIES, (byte)-3);1175IntVector three2 = (IntVector) SPECIES.broadcast(-3);1176assert(three.eq(three2).allTrue());1177IntVector three3 = three2.broadcast(1).broadcast(-3);1178assert(three.eq(three3).allTrue());1179int scale = 2;1180Class<?> ETYPE = int.class;1181if (ETYPE == double.class || ETYPE == long.class)1182scale = 1000000;1183else if (ETYPE == byte.class && SPECIES.length() >= 64)1184scale = 1;1185IntVector higher = three.addIndex(scale);1186VectorMask<Integer> m = three.compare(VectorOperators.LE, higher);1187assert(m.allTrue());1188m = higher.min((int)-1).test(VectorOperators.IS_NEGATIVE);1189assert(m.allTrue());1190int max = higher.reduceLanes(VectorOperators.MAX);1191assert(max == -3 + scale * (SPECIES.length()-1));1192}11931194private static int[]1195bothToArray(IntVector a, IntVector b) {1196int[] r = new int[a.length() + b.length()];1197a.intoArray(r, 0);1198b.intoArray(r, a.length());1199return r;1200}12011202@Test1203static void smokeTest2() {1204// Do some zipping and shuffling.1205IntVector io = (IntVector) SPECIES.broadcast(0).addIndex(1);1206IntVector io2 = (IntVector) VectorShuffle.iota(SPECIES,0,1,false).toVector();1207Assert.assertEquals(io, io2);1208IntVector a = io.add((int)1); //[1,2]1209IntVector b = a.neg(); //[-1,-2]1210int[] abValues = bothToArray(a,b); //[1,2,-1,-2]1211VectorShuffle<Integer> zip0 = VectorShuffle.makeZip(SPECIES, 0);1212VectorShuffle<Integer> zip1 = VectorShuffle.makeZip(SPECIES, 1);1213IntVector zab0 = a.rearrange(zip0,b); //[1,-1]1214IntVector zab1 = a.rearrange(zip1,b); //[2,-2]1215int[] zabValues = bothToArray(zab0, zab1); //[1,-1,2,-2]1216// manually zip1217int[] manual = new int[zabValues.length];1218for (int i = 0; i < manual.length; i += 2) {1219manual[i+0] = abValues[i/2];1220manual[i+1] = abValues[a.length() + i/2];1221}1222Assert.assertEquals(Arrays.toString(zabValues), Arrays.toString(manual));1223VectorShuffle<Integer> unz0 = VectorShuffle.makeUnzip(SPECIES, 0);1224VectorShuffle<Integer> unz1 = VectorShuffle.makeUnzip(SPECIES, 1);1225IntVector uab0 = zab0.rearrange(unz0,zab1);1226IntVector uab1 = zab0.rearrange(unz1,zab1);1227int[] abValues1 = bothToArray(uab0, uab1);1228Assert.assertEquals(Arrays.toString(abValues), Arrays.toString(abValues1));1229}12301231static void iotaShuffle() {1232IntVector io = (IntVector) SPECIES.broadcast(0).addIndex(1);1233IntVector io2 = (IntVector) VectorShuffle.iota(SPECIES, 0 , 1, false).toVector();1234Assert.assertEquals(io, io2);1235}12361237@Test1238// Test all shuffle related operations.1239static void shuffleTest() {1240// To test backend instructions, make sure that C2 is used.1241for (int loop = 0; loop < INVOC_COUNT * INVOC_COUNT; loop++) {1242iotaShuffle();1243}1244}12451246@Test1247void viewAsIntegeralLanesTest() {1248Vector<?> asIntegral = SPECIES.zero().viewAsIntegralLanes();1249Assert.assertEquals(asIntegral.species(), SPECIES);1250}12511252@Test1253void viewAsFloatingLanesTest() {1254Vector<?> asFloating = SPECIES.zero().viewAsFloatingLanes();1255VectorSpecies<?> asFloatingSpecies = asFloating.species();1256Assert.assertNotEquals(asFloatingSpecies.elementType(), SPECIES.elementType());1257Assert.assertEquals(asFloatingSpecies.vectorShape(), SPECIES.vectorShape());1258Assert.assertEquals(asFloatingSpecies.length(), SPECIES.length());1259Assert.assertEquals(asFloating.viewAsIntegralLanes().species(), SPECIES);1260}12611262@Test1263// Test div by 0.1264static void bitwiseDivByZeroSmokeTest() {1265try {1266IntVector a = (IntVector) SPECIES.broadcast(0).addIndex(1);1267IntVector b = (IntVector) SPECIES.broadcast(0);1268a.div(b);1269Assert.fail();1270} catch (ArithmeticException e) {1271}12721273try {1274IntVector a = (IntVector) SPECIES.broadcast(0).addIndex(1);1275IntVector b = (IntVector) SPECIES.broadcast(0);1276VectorMask<Integer> m = a.lt((int) 1);1277a.div(b, m);1278Assert.fail();1279} catch (ArithmeticException e) {1280}1281}1282static int ADD(int a, int b) {1283return (int)(a + b);1284}12851286@Test(dataProvider = "intBinaryOpProvider")1287static void ADDInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1288int[] a = fa.apply(SPECIES.length());1289int[] b = fb.apply(SPECIES.length());1290int[] r = fr.apply(SPECIES.length());12911292for (int ic = 0; ic < INVOC_COUNT; ic++) {1293for (int i = 0; i < a.length; i += SPECIES.length()) {1294IntVector av = IntVector.fromArray(SPECIES, a, i);1295IntVector bv = IntVector.fromArray(SPECIES, b, i);1296av.lanewise(VectorOperators.ADD, bv).intoArray(r, i);1297}1298}12991300assertArraysEquals(r, a, b, Int128VectorTests::ADD);1301}1302static int add(int a, int b) {1303return (int)(a + b);1304}13051306@Test(dataProvider = "intBinaryOpProvider")1307static void addInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1308int[] a = fa.apply(SPECIES.length());1309int[] b = fb.apply(SPECIES.length());1310int[] r = fr.apply(SPECIES.length());13111312for (int i = 0; i < a.length; i += SPECIES.length()) {1313IntVector av = IntVector.fromArray(SPECIES, a, i);1314IntVector bv = IntVector.fromArray(SPECIES, b, i);1315av.add(bv).intoArray(r, i);1316}13171318assertArraysEquals(r, a, b, Int128VectorTests::add);1319}13201321@Test(dataProvider = "intBinaryOpMaskProvider")1322static void ADDInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1323IntFunction<boolean[]> fm) {1324int[] a = fa.apply(SPECIES.length());1325int[] b = fb.apply(SPECIES.length());1326int[] r = fr.apply(SPECIES.length());1327boolean[] mask = fm.apply(SPECIES.length());1328VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);13291330for (int ic = 0; ic < INVOC_COUNT; ic++) {1331for (int i = 0; i < a.length; i += SPECIES.length()) {1332IntVector av = IntVector.fromArray(SPECIES, a, i);1333IntVector bv = IntVector.fromArray(SPECIES, b, i);1334av.lanewise(VectorOperators.ADD, bv, vmask).intoArray(r, i);1335}1336}13371338assertArraysEquals(r, a, b, mask, Int128VectorTests::ADD);1339}13401341@Test(dataProvider = "intBinaryOpMaskProvider")1342static void addInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1343IntFunction<boolean[]> fm) {1344int[] a = fa.apply(SPECIES.length());1345int[] b = fb.apply(SPECIES.length());1346int[] r = fr.apply(SPECIES.length());1347boolean[] mask = fm.apply(SPECIES.length());1348VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);13491350for (int i = 0; i < a.length; i += SPECIES.length()) {1351IntVector av = IntVector.fromArray(SPECIES, a, i);1352IntVector bv = IntVector.fromArray(SPECIES, b, i);1353av.add(bv, vmask).intoArray(r, i);1354}13551356assertArraysEquals(r, a, b, mask, Int128VectorTests::add);1357}1358static int SUB(int a, int b) {1359return (int)(a - b);1360}13611362@Test(dataProvider = "intBinaryOpProvider")1363static void SUBInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1364int[] a = fa.apply(SPECIES.length());1365int[] b = fb.apply(SPECIES.length());1366int[] r = fr.apply(SPECIES.length());13671368for (int ic = 0; ic < INVOC_COUNT; ic++) {1369for (int i = 0; i < a.length; i += SPECIES.length()) {1370IntVector av = IntVector.fromArray(SPECIES, a, i);1371IntVector bv = IntVector.fromArray(SPECIES, b, i);1372av.lanewise(VectorOperators.SUB, bv).intoArray(r, i);1373}1374}13751376assertArraysEquals(r, a, b, Int128VectorTests::SUB);1377}1378static int sub(int a, int b) {1379return (int)(a - b);1380}13811382@Test(dataProvider = "intBinaryOpProvider")1383static void subInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1384int[] a = fa.apply(SPECIES.length());1385int[] b = fb.apply(SPECIES.length());1386int[] r = fr.apply(SPECIES.length());13871388for (int i = 0; i < a.length; i += SPECIES.length()) {1389IntVector av = IntVector.fromArray(SPECIES, a, i);1390IntVector bv = IntVector.fromArray(SPECIES, b, i);1391av.sub(bv).intoArray(r, i);1392}13931394assertArraysEquals(r, a, b, Int128VectorTests::sub);1395}13961397@Test(dataProvider = "intBinaryOpMaskProvider")1398static void SUBInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1399IntFunction<boolean[]> fm) {1400int[] a = fa.apply(SPECIES.length());1401int[] b = fb.apply(SPECIES.length());1402int[] r = fr.apply(SPECIES.length());1403boolean[] mask = fm.apply(SPECIES.length());1404VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);14051406for (int ic = 0; ic < INVOC_COUNT; ic++) {1407for (int i = 0; i < a.length; i += SPECIES.length()) {1408IntVector av = IntVector.fromArray(SPECIES, a, i);1409IntVector bv = IntVector.fromArray(SPECIES, b, i);1410av.lanewise(VectorOperators.SUB, bv, vmask).intoArray(r, i);1411}1412}14131414assertArraysEquals(r, a, b, mask, Int128VectorTests::SUB);1415}14161417@Test(dataProvider = "intBinaryOpMaskProvider")1418static void subInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1419IntFunction<boolean[]> fm) {1420int[] a = fa.apply(SPECIES.length());1421int[] b = fb.apply(SPECIES.length());1422int[] r = fr.apply(SPECIES.length());1423boolean[] mask = fm.apply(SPECIES.length());1424VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);14251426for (int i = 0; i < a.length; i += SPECIES.length()) {1427IntVector av = IntVector.fromArray(SPECIES, a, i);1428IntVector bv = IntVector.fromArray(SPECIES, b, i);1429av.sub(bv, vmask).intoArray(r, i);1430}14311432assertArraysEquals(r, a, b, mask, Int128VectorTests::sub);1433}1434static int MUL(int a, int b) {1435return (int)(a * b);1436}14371438@Test(dataProvider = "intBinaryOpProvider")1439static void MULInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1440int[] a = fa.apply(SPECIES.length());1441int[] b = fb.apply(SPECIES.length());1442int[] r = fr.apply(SPECIES.length());14431444for (int ic = 0; ic < INVOC_COUNT; ic++) {1445for (int i = 0; i < a.length; i += SPECIES.length()) {1446IntVector av = IntVector.fromArray(SPECIES, a, i);1447IntVector bv = IntVector.fromArray(SPECIES, b, i);1448av.lanewise(VectorOperators.MUL, bv).intoArray(r, i);1449}1450}14511452assertArraysEquals(r, a, b, Int128VectorTests::MUL);1453}1454static int mul(int a, int b) {1455return (int)(a * b);1456}14571458@Test(dataProvider = "intBinaryOpProvider")1459static void mulInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1460int[] a = fa.apply(SPECIES.length());1461int[] b = fb.apply(SPECIES.length());1462int[] r = fr.apply(SPECIES.length());14631464for (int i = 0; i < a.length; i += SPECIES.length()) {1465IntVector av = IntVector.fromArray(SPECIES, a, i);1466IntVector bv = IntVector.fromArray(SPECIES, b, i);1467av.mul(bv).intoArray(r, i);1468}14691470assertArraysEquals(r, a, b, Int128VectorTests::mul);1471}14721473@Test(dataProvider = "intBinaryOpMaskProvider")1474static void MULInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1475IntFunction<boolean[]> fm) {1476int[] a = fa.apply(SPECIES.length());1477int[] b = fb.apply(SPECIES.length());1478int[] r = fr.apply(SPECIES.length());1479boolean[] mask = fm.apply(SPECIES.length());1480VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);14811482for (int ic = 0; ic < INVOC_COUNT; ic++) {1483for (int i = 0; i < a.length; i += SPECIES.length()) {1484IntVector av = IntVector.fromArray(SPECIES, a, i);1485IntVector bv = IntVector.fromArray(SPECIES, b, i);1486av.lanewise(VectorOperators.MUL, bv, vmask).intoArray(r, i);1487}1488}14891490assertArraysEquals(r, a, b, mask, Int128VectorTests::MUL);1491}14921493@Test(dataProvider = "intBinaryOpMaskProvider")1494static void mulInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1495IntFunction<boolean[]> fm) {1496int[] a = fa.apply(SPECIES.length());1497int[] b = fb.apply(SPECIES.length());1498int[] r = fr.apply(SPECIES.length());1499boolean[] mask = fm.apply(SPECIES.length());1500VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);15011502for (int i = 0; i < a.length; i += SPECIES.length()) {1503IntVector av = IntVector.fromArray(SPECIES, a, i);1504IntVector bv = IntVector.fromArray(SPECIES, b, i);1505av.mul(bv, vmask).intoArray(r, i);1506}15071508assertArraysEquals(r, a, b, mask, Int128VectorTests::mul);1509}1510151115121513static int DIV(int a, int b) {1514return (int)(a / b);1515}15161517@Test(dataProvider = "intBinaryOpProvider")1518static void DIVInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1519int[] a = fa.apply(SPECIES.length());1520int[] b = fb.apply(SPECIES.length());1521int[] r = fr.apply(SPECIES.length());15221523replaceZero(b, (int) 1);15241525for (int ic = 0; ic < INVOC_COUNT; ic++) {1526for (int i = 0; i < a.length; i += SPECIES.length()) {1527IntVector av = IntVector.fromArray(SPECIES, a, i);1528IntVector bv = IntVector.fromArray(SPECIES, b, i);1529av.lanewise(VectorOperators.DIV, bv).intoArray(r, i);1530}1531}15321533assertArraysEquals(r, a, b, Int128VectorTests::DIV);1534}1535static int div(int a, int b) {1536return (int)(a / b);1537}15381539@Test(dataProvider = "intBinaryOpProvider")1540static void divInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1541int[] a = fa.apply(SPECIES.length());1542int[] b = fb.apply(SPECIES.length());1543int[] r = fr.apply(SPECIES.length());15441545replaceZero(b, (int) 1);15461547for (int ic = 0; ic < INVOC_COUNT; ic++) {1548for (int i = 0; i < a.length; i += SPECIES.length()) {1549IntVector av = IntVector.fromArray(SPECIES, a, i);1550IntVector bv = IntVector.fromArray(SPECIES, b, i);1551av.div(bv).intoArray(r, i);1552}1553}15541555assertArraysEquals(r, a, b, Int128VectorTests::div);1556}1557155815591560@Test(dataProvider = "intBinaryOpMaskProvider")1561static void DIVInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1562IntFunction<boolean[]> fm) {1563int[] a = fa.apply(SPECIES.length());1564int[] b = fb.apply(SPECIES.length());1565int[] r = fr.apply(SPECIES.length());1566boolean[] mask = fm.apply(SPECIES.length());1567VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);15681569replaceZero(b, mask, (int) 1);15701571for (int ic = 0; ic < INVOC_COUNT; ic++) {1572for (int i = 0; i < a.length; i += SPECIES.length()) {1573IntVector av = IntVector.fromArray(SPECIES, a, i);1574IntVector bv = IntVector.fromArray(SPECIES, b, i);1575av.lanewise(VectorOperators.DIV, bv, vmask).intoArray(r, i);1576}1577}15781579assertArraysEquals(r, a, b, mask, Int128VectorTests::DIV);1580}15811582@Test(dataProvider = "intBinaryOpMaskProvider")1583static void divInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1584IntFunction<boolean[]> fm) {1585int[] a = fa.apply(SPECIES.length());1586int[] b = fb.apply(SPECIES.length());1587int[] r = fr.apply(SPECIES.length());1588boolean[] mask = fm.apply(SPECIES.length());1589VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);15901591replaceZero(b, mask, (int) 1);15921593for (int ic = 0; ic < INVOC_COUNT; ic++) {1594for (int i = 0; i < a.length; i += SPECIES.length()) {1595IntVector av = IntVector.fromArray(SPECIES, a, i);1596IntVector bv = IntVector.fromArray(SPECIES, b, i);1597av.div(bv, vmask).intoArray(r, i);1598}1599}16001601assertArraysEquals(r, a, b, mask, Int128VectorTests::div);1602}16031604static int FIRST_NONZERO(int a, int b) {1605return (int)((a)!=0?a:b);1606}16071608@Test(dataProvider = "intBinaryOpProvider")1609static void FIRST_NONZEROInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1610int[] a = fa.apply(SPECIES.length());1611int[] b = fb.apply(SPECIES.length());1612int[] r = fr.apply(SPECIES.length());16131614for (int ic = 0; ic < INVOC_COUNT; ic++) {1615for (int i = 0; i < a.length; i += SPECIES.length()) {1616IntVector av = IntVector.fromArray(SPECIES, a, i);1617IntVector bv = IntVector.fromArray(SPECIES, b, i);1618av.lanewise(VectorOperators.FIRST_NONZERO, bv).intoArray(r, i);1619}1620}16211622assertArraysEquals(r, a, b, Int128VectorTests::FIRST_NONZERO);1623}16241625@Test(dataProvider = "intBinaryOpMaskProvider")1626static void FIRST_NONZEROInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1627IntFunction<boolean[]> fm) {1628int[] a = fa.apply(SPECIES.length());1629int[] b = fb.apply(SPECIES.length());1630int[] r = fr.apply(SPECIES.length());1631boolean[] mask = fm.apply(SPECIES.length());1632VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);16331634for (int ic = 0; ic < INVOC_COUNT; ic++) {1635for (int i = 0; i < a.length; i += SPECIES.length()) {1636IntVector av = IntVector.fromArray(SPECIES, a, i);1637IntVector bv = IntVector.fromArray(SPECIES, b, i);1638av.lanewise(VectorOperators.FIRST_NONZERO, bv, vmask).intoArray(r, i);1639}1640}16411642assertArraysEquals(r, a, b, mask, Int128VectorTests::FIRST_NONZERO);1643}16441645static int AND(int a, int b) {1646return (int)(a & b);1647}16481649@Test(dataProvider = "intBinaryOpProvider")1650static void ANDInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1651int[] a = fa.apply(SPECIES.length());1652int[] b = fb.apply(SPECIES.length());1653int[] r = fr.apply(SPECIES.length());16541655for (int ic = 0; ic < INVOC_COUNT; ic++) {1656for (int i = 0; i < a.length; i += SPECIES.length()) {1657IntVector av = IntVector.fromArray(SPECIES, a, i);1658IntVector bv = IntVector.fromArray(SPECIES, b, i);1659av.lanewise(VectorOperators.AND, bv).intoArray(r, i);1660}1661}16621663assertArraysEquals(r, a, b, Int128VectorTests::AND);1664}1665static int and(int a, int b) {1666return (int)(a & b);1667}16681669@Test(dataProvider = "intBinaryOpProvider")1670static void andInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1671int[] a = fa.apply(SPECIES.length());1672int[] b = fb.apply(SPECIES.length());1673int[] r = fr.apply(SPECIES.length());16741675for (int i = 0; i < a.length; i += SPECIES.length()) {1676IntVector av = IntVector.fromArray(SPECIES, a, i);1677IntVector bv = IntVector.fromArray(SPECIES, b, i);1678av.and(bv).intoArray(r, i);1679}16801681assertArraysEquals(r, a, b, Int128VectorTests::and);1682}1683168416851686@Test(dataProvider = "intBinaryOpMaskProvider")1687static void ANDInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1688IntFunction<boolean[]> fm) {1689int[] a = fa.apply(SPECIES.length());1690int[] b = fb.apply(SPECIES.length());1691int[] r = fr.apply(SPECIES.length());1692boolean[] mask = fm.apply(SPECIES.length());1693VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);16941695for (int ic = 0; ic < INVOC_COUNT; ic++) {1696for (int i = 0; i < a.length; i += SPECIES.length()) {1697IntVector av = IntVector.fromArray(SPECIES, a, i);1698IntVector bv = IntVector.fromArray(SPECIES, b, i);1699av.lanewise(VectorOperators.AND, bv, vmask).intoArray(r, i);1700}1701}17021703assertArraysEquals(r, a, b, mask, Int128VectorTests::AND);1704}170517061707static int AND_NOT(int a, int b) {1708return (int)(a & ~b);1709}17101711@Test(dataProvider = "intBinaryOpProvider")1712static void AND_NOTInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1713int[] a = fa.apply(SPECIES.length());1714int[] b = fb.apply(SPECIES.length());1715int[] r = fr.apply(SPECIES.length());17161717for (int ic = 0; ic < INVOC_COUNT; ic++) {1718for (int i = 0; i < a.length; i += SPECIES.length()) {1719IntVector av = IntVector.fromArray(SPECIES, a, i);1720IntVector bv = IntVector.fromArray(SPECIES, b, i);1721av.lanewise(VectorOperators.AND_NOT, bv).intoArray(r, i);1722}1723}17241725assertArraysEquals(r, a, b, Int128VectorTests::AND_NOT);1726}1727172817291730@Test(dataProvider = "intBinaryOpMaskProvider")1731static void AND_NOTInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1732IntFunction<boolean[]> fm) {1733int[] a = fa.apply(SPECIES.length());1734int[] b = fb.apply(SPECIES.length());1735int[] r = fr.apply(SPECIES.length());1736boolean[] mask = fm.apply(SPECIES.length());1737VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);17381739for (int ic = 0; ic < INVOC_COUNT; ic++) {1740for (int i = 0; i < a.length; i += SPECIES.length()) {1741IntVector av = IntVector.fromArray(SPECIES, a, i);1742IntVector bv = IntVector.fromArray(SPECIES, b, i);1743av.lanewise(VectorOperators.AND_NOT, bv, vmask).intoArray(r, i);1744}1745}17461747assertArraysEquals(r, a, b, mask, Int128VectorTests::AND_NOT);1748}174917501751static int OR(int a, int b) {1752return (int)(a | b);1753}17541755@Test(dataProvider = "intBinaryOpProvider")1756static void ORInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1757int[] a = fa.apply(SPECIES.length());1758int[] b = fb.apply(SPECIES.length());1759int[] r = fr.apply(SPECIES.length());17601761for (int ic = 0; ic < INVOC_COUNT; ic++) {1762for (int i = 0; i < a.length; i += SPECIES.length()) {1763IntVector av = IntVector.fromArray(SPECIES, a, i);1764IntVector bv = IntVector.fromArray(SPECIES, b, i);1765av.lanewise(VectorOperators.OR, bv).intoArray(r, i);1766}1767}17681769assertArraysEquals(r, a, b, Int128VectorTests::OR);1770}1771static int or(int a, int b) {1772return (int)(a | b);1773}17741775@Test(dataProvider = "intBinaryOpProvider")1776static void orInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1777int[] a = fa.apply(SPECIES.length());1778int[] b = fb.apply(SPECIES.length());1779int[] r = fr.apply(SPECIES.length());17801781for (int i = 0; i < a.length; i += SPECIES.length()) {1782IntVector av = IntVector.fromArray(SPECIES, a, i);1783IntVector bv = IntVector.fromArray(SPECIES, b, i);1784av.or(bv).intoArray(r, i);1785}17861787assertArraysEquals(r, a, b, Int128VectorTests::or);1788}1789179017911792@Test(dataProvider = "intBinaryOpMaskProvider")1793static void ORInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1794IntFunction<boolean[]> fm) {1795int[] a = fa.apply(SPECIES.length());1796int[] b = fb.apply(SPECIES.length());1797int[] r = fr.apply(SPECIES.length());1798boolean[] mask = fm.apply(SPECIES.length());1799VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);18001801for (int ic = 0; ic < INVOC_COUNT; ic++) {1802for (int i = 0; i < a.length; i += SPECIES.length()) {1803IntVector av = IntVector.fromArray(SPECIES, a, i);1804IntVector bv = IntVector.fromArray(SPECIES, b, i);1805av.lanewise(VectorOperators.OR, bv, vmask).intoArray(r, i);1806}1807}18081809assertArraysEquals(r, a, b, mask, Int128VectorTests::OR);1810}181118121813static int XOR(int a, int b) {1814return (int)(a ^ b);1815}18161817@Test(dataProvider = "intBinaryOpProvider")1818static void XORInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {1819int[] a = fa.apply(SPECIES.length());1820int[] b = fb.apply(SPECIES.length());1821int[] r = fr.apply(SPECIES.length());18221823for (int ic = 0; ic < INVOC_COUNT; ic++) {1824for (int i = 0; i < a.length; i += SPECIES.length()) {1825IntVector av = IntVector.fromArray(SPECIES, a, i);1826IntVector bv = IntVector.fromArray(SPECIES, b, i);1827av.lanewise(VectorOperators.XOR, bv).intoArray(r, i);1828}1829}18301831assertArraysEquals(r, a, b, Int128VectorTests::XOR);1832}1833183418351836@Test(dataProvider = "intBinaryOpMaskProvider")1837static void XORInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,1838IntFunction<boolean[]> fm) {1839int[] a = fa.apply(SPECIES.length());1840int[] b = fb.apply(SPECIES.length());1841int[] r = fr.apply(SPECIES.length());1842boolean[] mask = fm.apply(SPECIES.length());1843VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);18441845for (int ic = 0; ic < INVOC_COUNT; ic++) {1846for (int i = 0; i < a.length; i += SPECIES.length()) {1847IntVector av = IntVector.fromArray(SPECIES, a, i);1848IntVector bv = IntVector.fromArray(SPECIES, b, i);1849av.lanewise(VectorOperators.XOR, bv, vmask).intoArray(r, i);1850}1851}18521853assertArraysEquals(r, a, b, mask, Int128VectorTests::XOR);1854}185518561857@Test(dataProvider = "intBinaryOpProvider")1858static void addInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {1859int[] a = fa.apply(SPECIES.length());1860int[] b = fb.apply(SPECIES.length());1861int[] r = fr.apply(SPECIES.length());18621863for (int i = 0; i < a.length; i += SPECIES.length()) {1864IntVector av = IntVector.fromArray(SPECIES, a, i);1865av.add(b[i]).intoArray(r, i);1866}18671868assertBroadcastArraysEquals(r, a, b, Int128VectorTests::add);1869}18701871@Test(dataProvider = "intBinaryOpMaskProvider")1872static void addInt128VectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,1873IntFunction<boolean[]> fm) {1874int[] a = fa.apply(SPECIES.length());1875int[] b = fb.apply(SPECIES.length());1876int[] r = fr.apply(SPECIES.length());1877boolean[] mask = fm.apply(SPECIES.length());1878VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);18791880for (int i = 0; i < a.length; i += SPECIES.length()) {1881IntVector av = IntVector.fromArray(SPECIES, a, i);1882av.add(b[i], vmask).intoArray(r, i);1883}18841885assertBroadcastArraysEquals(r, a, b, mask, Int128VectorTests::add);1886}18871888@Test(dataProvider = "intBinaryOpProvider")1889static void subInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {1890int[] a = fa.apply(SPECIES.length());1891int[] b = fb.apply(SPECIES.length());1892int[] r = fr.apply(SPECIES.length());18931894for (int i = 0; i < a.length; i += SPECIES.length()) {1895IntVector av = IntVector.fromArray(SPECIES, a, i);1896av.sub(b[i]).intoArray(r, i);1897}18981899assertBroadcastArraysEquals(r, a, b, Int128VectorTests::sub);1900}19011902@Test(dataProvider = "intBinaryOpMaskProvider")1903static void subInt128VectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,1904IntFunction<boolean[]> fm) {1905int[] a = fa.apply(SPECIES.length());1906int[] b = fb.apply(SPECIES.length());1907int[] r = fr.apply(SPECIES.length());1908boolean[] mask = fm.apply(SPECIES.length());1909VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);19101911for (int i = 0; i < a.length; i += SPECIES.length()) {1912IntVector av = IntVector.fromArray(SPECIES, a, i);1913av.sub(b[i], vmask).intoArray(r, i);1914}19151916assertBroadcastArraysEquals(r, a, b, mask, Int128VectorTests::sub);1917}19181919@Test(dataProvider = "intBinaryOpProvider")1920static void mulInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {1921int[] a = fa.apply(SPECIES.length());1922int[] b = fb.apply(SPECIES.length());1923int[] r = fr.apply(SPECIES.length());19241925for (int i = 0; i < a.length; i += SPECIES.length()) {1926IntVector av = IntVector.fromArray(SPECIES, a, i);1927av.mul(b[i]).intoArray(r, i);1928}19291930assertBroadcastArraysEquals(r, a, b, Int128VectorTests::mul);1931}19321933@Test(dataProvider = "intBinaryOpMaskProvider")1934static void mulInt128VectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,1935IntFunction<boolean[]> fm) {1936int[] a = fa.apply(SPECIES.length());1937int[] b = fb.apply(SPECIES.length());1938int[] r = fr.apply(SPECIES.length());1939boolean[] mask = fm.apply(SPECIES.length());1940VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);19411942for (int i = 0; i < a.length; i += SPECIES.length()) {1943IntVector av = IntVector.fromArray(SPECIES, a, i);1944av.mul(b[i], vmask).intoArray(r, i);1945}19461947assertBroadcastArraysEquals(r, a, b, mask, Int128VectorTests::mul);1948}19491950195119521953@Test(dataProvider = "intBinaryOpProvider")1954static void divInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {1955int[] a = fa.apply(SPECIES.length());1956int[] b = fb.apply(SPECIES.length());1957int[] r = fr.apply(SPECIES.length());19581959replaceZero(b, (int) 1);19601961for (int i = 0; i < a.length; i += SPECIES.length()) {1962IntVector av = IntVector.fromArray(SPECIES, a, i);1963av.div(b[i]).intoArray(r, i);1964}19651966assertBroadcastArraysEquals(r, a, b, Int128VectorTests::div);1967}1968196919701971@Test(dataProvider = "intBinaryOpMaskProvider")1972static void divInt128VectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,1973IntFunction<boolean[]> fm) {1974int[] a = fa.apply(SPECIES.length());1975int[] b = fb.apply(SPECIES.length());1976int[] r = fr.apply(SPECIES.length());1977boolean[] mask = fm.apply(SPECIES.length());1978VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);19791980replaceZero(b, (int) 1);19811982for (int i = 0; i < a.length; i += SPECIES.length()) {1983IntVector av = IntVector.fromArray(SPECIES, a, i);1984av.div(b[i], vmask).intoArray(r, i);1985}19861987assertBroadcastArraysEquals(r, a, b, mask, Int128VectorTests::div);1988}1989199019911992@Test(dataProvider = "intBinaryOpProvider")1993static void ORInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {1994int[] a = fa.apply(SPECIES.length());1995int[] b = fb.apply(SPECIES.length());1996int[] r = fr.apply(SPECIES.length());19971998for (int i = 0; i < a.length; i += SPECIES.length()) {1999IntVector av = IntVector.fromArray(SPECIES, a, i);2000av.lanewise(VectorOperators.OR, b[i]).intoArray(r, i);2001}20022003assertBroadcastArraysEquals(r, a, b, Int128VectorTests::OR);2004}20052006@Test(dataProvider = "intBinaryOpProvider")2007static void orInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {2008int[] a = fa.apply(SPECIES.length());2009int[] b = fb.apply(SPECIES.length());2010int[] r = fr.apply(SPECIES.length());20112012for (int i = 0; i < a.length; i += SPECIES.length()) {2013IntVector av = IntVector.fromArray(SPECIES, a, i);2014av.or(b[i]).intoArray(r, i);2015}20162017assertBroadcastArraysEquals(r, a, b, Int128VectorTests::or);2018}2019202020212022@Test(dataProvider = "intBinaryOpMaskProvider")2023static void ORInt128VectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,2024IntFunction<boolean[]> fm) {2025int[] a = fa.apply(SPECIES.length());2026int[] b = fb.apply(SPECIES.length());2027int[] r = fr.apply(SPECIES.length());2028boolean[] mask = fm.apply(SPECIES.length());2029VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);20302031for (int i = 0; i < a.length; i += SPECIES.length()) {2032IntVector av = IntVector.fromArray(SPECIES, a, i);2033av.lanewise(VectorOperators.OR, b[i], vmask).intoArray(r, i);2034}20352036assertBroadcastArraysEquals(r, a, b, mask, Int128VectorTests::OR);2037}2038203920402041@Test(dataProvider = "intBinaryOpProvider")2042static void ANDInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {2043int[] a = fa.apply(SPECIES.length());2044int[] b = fb.apply(SPECIES.length());2045int[] r = fr.apply(SPECIES.length());20462047for (int i = 0; i < a.length; i += SPECIES.length()) {2048IntVector av = IntVector.fromArray(SPECIES, a, i);2049av.lanewise(VectorOperators.AND, b[i]).intoArray(r, i);2050}20512052assertBroadcastArraysEquals(r, a, b, Int128VectorTests::AND);2053}20542055@Test(dataProvider = "intBinaryOpProvider")2056static void andInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {2057int[] a = fa.apply(SPECIES.length());2058int[] b = fb.apply(SPECIES.length());2059int[] r = fr.apply(SPECIES.length());20602061for (int i = 0; i < a.length; i += SPECIES.length()) {2062IntVector av = IntVector.fromArray(SPECIES, a, i);2063av.and(b[i]).intoArray(r, i);2064}20652066assertBroadcastArraysEquals(r, a, b, Int128VectorTests::and);2067}2068206920702071@Test(dataProvider = "intBinaryOpMaskProvider")2072static void ANDInt128VectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,2073IntFunction<boolean[]> fm) {2074int[] a = fa.apply(SPECIES.length());2075int[] b = fb.apply(SPECIES.length());2076int[] r = fr.apply(SPECIES.length());2077boolean[] mask = fm.apply(SPECIES.length());2078VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);20792080for (int i = 0; i < a.length; i += SPECIES.length()) {2081IntVector av = IntVector.fromArray(SPECIES, a, i);2082av.lanewise(VectorOperators.AND, b[i], vmask).intoArray(r, i);2083}20842085assertBroadcastArraysEquals(r, a, b, mask, Int128VectorTests::AND);2086}2087208820892090@Test(dataProvider = "intBinaryOpProvider")2091static void ORInt128VectorTestsBroadcastLongSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {2092int[] a = fa.apply(SPECIES.length());2093int[] b = fb.apply(SPECIES.length());2094int[] r = fr.apply(SPECIES.length());20952096for (int i = 0; i < a.length; i += SPECIES.length()) {2097IntVector av = IntVector.fromArray(SPECIES, a, i);2098av.lanewise(VectorOperators.OR, (long)b[i]).intoArray(r, i);2099}21002101assertBroadcastLongArraysEquals(r, a, b, Int128VectorTests::OR);2102}2103210421052106@Test(dataProvider = "intBinaryOpMaskProvider")2107static void ORInt128VectorTestsBroadcastMaskedLongSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,2108IntFunction<boolean[]> fm) {2109int[] a = fa.apply(SPECIES.length());2110int[] b = fb.apply(SPECIES.length());2111int[] r = fr.apply(SPECIES.length());2112boolean[] mask = fm.apply(SPECIES.length());2113VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);21142115for (int i = 0; i < a.length; i += SPECIES.length()) {2116IntVector av = IntVector.fromArray(SPECIES, a, i);2117av.lanewise(VectorOperators.OR, (long)b[i], vmask).intoArray(r, i);2118}21192120assertBroadcastLongArraysEquals(r, a, b, mask, Int128VectorTests::OR);2121}212221232124@Test(dataProvider = "intBinaryOpProvider")2125static void ADDInt128VectorTestsBroadcastLongSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {2126int[] a = fa.apply(SPECIES.length());2127int[] b = fb.apply(SPECIES.length());2128int[] r = fr.apply(SPECIES.length());21292130for (int i = 0; i < a.length; i += SPECIES.length()) {2131IntVector av = IntVector.fromArray(SPECIES, a, i);2132av.lanewise(VectorOperators.ADD, (long)b[i]).intoArray(r, i);2133}21342135assertBroadcastLongArraysEquals(r, a, b, Int128VectorTests::ADD);2136}21372138@Test(dataProvider = "intBinaryOpMaskProvider")2139static void ADDInt128VectorTestsBroadcastMaskedLongSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,2140IntFunction<boolean[]> fm) {2141int[] a = fa.apply(SPECIES.length());2142int[] b = fb.apply(SPECIES.length());2143int[] r = fr.apply(SPECIES.length());2144boolean[] mask = fm.apply(SPECIES.length());2145VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);21462147for (int i = 0; i < a.length; i += SPECIES.length()) {2148IntVector av = IntVector.fromArray(SPECIES, a, i);2149av.lanewise(VectorOperators.ADD, (long)b[i], vmask).intoArray(r, i);2150}21512152assertBroadcastLongArraysEquals(r, a, b, mask, Int128VectorTests::ADD);2153}21542155static int LSHL(int a, int b) {2156return (int)((a << b));2157}21582159@Test(dataProvider = "intBinaryOpProvider")2160static void LSHLInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {2161int[] a = fa.apply(SPECIES.length());2162int[] b = fb.apply(SPECIES.length());2163int[] r = fr.apply(SPECIES.length());21642165for (int ic = 0; ic < INVOC_COUNT; ic++) {2166for (int i = 0; i < a.length; i += SPECIES.length()) {2167IntVector av = IntVector.fromArray(SPECIES, a, i);2168IntVector bv = IntVector.fromArray(SPECIES, b, i);2169av.lanewise(VectorOperators.LSHL, bv).intoArray(r, i);2170}2171}21722173assertArraysEquals(r, a, b, Int128VectorTests::LSHL);2174}2175217621772178@Test(dataProvider = "intBinaryOpMaskProvider")2179static void LSHLInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,2180IntFunction<boolean[]> fm) {2181int[] a = fa.apply(SPECIES.length());2182int[] b = fb.apply(SPECIES.length());2183int[] r = fr.apply(SPECIES.length());2184boolean[] mask = fm.apply(SPECIES.length());2185VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);21862187for (int ic = 0; ic < INVOC_COUNT; ic++) {2188for (int i = 0; i < a.length; i += SPECIES.length()) {2189IntVector av = IntVector.fromArray(SPECIES, a, i);2190IntVector bv = IntVector.fromArray(SPECIES, b, i);2191av.lanewise(VectorOperators.LSHL, bv, vmask).intoArray(r, i);2192}2193}21942195assertArraysEquals(r, a, b, mask, Int128VectorTests::LSHL);2196}2197219821992200220122022203static int ASHR(int a, int b) {2204return (int)((a >> b));2205}22062207@Test(dataProvider = "intBinaryOpProvider")2208static void ASHRInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {2209int[] a = fa.apply(SPECIES.length());2210int[] b = fb.apply(SPECIES.length());2211int[] r = fr.apply(SPECIES.length());22122213for (int ic = 0; ic < INVOC_COUNT; ic++) {2214for (int i = 0; i < a.length; i += SPECIES.length()) {2215IntVector av = IntVector.fromArray(SPECIES, a, i);2216IntVector bv = IntVector.fromArray(SPECIES, b, i);2217av.lanewise(VectorOperators.ASHR, bv).intoArray(r, i);2218}2219}22202221assertArraysEquals(r, a, b, Int128VectorTests::ASHR);2222}2223222422252226@Test(dataProvider = "intBinaryOpMaskProvider")2227static void ASHRInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,2228IntFunction<boolean[]> fm) {2229int[] a = fa.apply(SPECIES.length());2230int[] b = fb.apply(SPECIES.length());2231int[] r = fr.apply(SPECIES.length());2232boolean[] mask = fm.apply(SPECIES.length());2233VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);22342235for (int ic = 0; ic < INVOC_COUNT; ic++) {2236for (int i = 0; i < a.length; i += SPECIES.length()) {2237IntVector av = IntVector.fromArray(SPECIES, a, i);2238IntVector bv = IntVector.fromArray(SPECIES, b, i);2239av.lanewise(VectorOperators.ASHR, bv, vmask).intoArray(r, i);2240}2241}22422243assertArraysEquals(r, a, b, mask, Int128VectorTests::ASHR);2244}2245224622472248224922502251static int LSHR(int a, int b) {2252return (int)((a >>> b));2253}22542255@Test(dataProvider = "intBinaryOpProvider")2256static void LSHRInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {2257int[] a = fa.apply(SPECIES.length());2258int[] b = fb.apply(SPECIES.length());2259int[] r = fr.apply(SPECIES.length());22602261for (int ic = 0; ic < INVOC_COUNT; ic++) {2262for (int i = 0; i < a.length; i += SPECIES.length()) {2263IntVector av = IntVector.fromArray(SPECIES, a, i);2264IntVector bv = IntVector.fromArray(SPECIES, b, i);2265av.lanewise(VectorOperators.LSHR, bv).intoArray(r, i);2266}2267}22682269assertArraysEquals(r, a, b, Int128VectorTests::LSHR);2270}2271227222732274@Test(dataProvider = "intBinaryOpMaskProvider")2275static void LSHRInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,2276IntFunction<boolean[]> fm) {2277int[] a = fa.apply(SPECIES.length());2278int[] b = fb.apply(SPECIES.length());2279int[] r = fr.apply(SPECIES.length());2280boolean[] mask = fm.apply(SPECIES.length());2281VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);22822283for (int ic = 0; ic < INVOC_COUNT; ic++) {2284for (int i = 0; i < a.length; i += SPECIES.length()) {2285IntVector av = IntVector.fromArray(SPECIES, a, i);2286IntVector bv = IntVector.fromArray(SPECIES, b, i);2287av.lanewise(VectorOperators.LSHR, bv, vmask).intoArray(r, i);2288}2289}22902291assertArraysEquals(r, a, b, mask, Int128VectorTests::LSHR);2292}2293229422952296229722982299static int LSHL_unary(int a, int b) {2300return (int)((a << b));2301}23022303@Test(dataProvider = "intBinaryOpProvider")2304static void LSHLInt128VectorTestsShift(IntFunction<int[]> fa, IntFunction<int[]> fb) {2305int[] a = fa.apply(SPECIES.length());2306int[] b = fb.apply(SPECIES.length());2307int[] r = fr.apply(SPECIES.length());23082309for (int ic = 0; ic < INVOC_COUNT; ic++) {2310for (int i = 0; i < a.length; i += SPECIES.length()) {2311IntVector av = IntVector.fromArray(SPECIES, a, i);2312av.lanewise(VectorOperators.LSHL, (int)b[i]).intoArray(r, i);2313}2314}23152316assertShiftArraysEquals(r, a, b, Int128VectorTests::LSHL_unary);2317}2318231923202321@Test(dataProvider = "intBinaryOpMaskProvider")2322static void LSHLInt128VectorTestsShift(IntFunction<int[]> fa, IntFunction<int[]> fb,2323IntFunction<boolean[]> fm) {2324int[] a = fa.apply(SPECIES.length());2325int[] b = fb.apply(SPECIES.length());2326int[] r = fr.apply(SPECIES.length());2327boolean[] mask = fm.apply(SPECIES.length());2328VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);23292330for (int ic = 0; ic < INVOC_COUNT; ic++) {2331for (int i = 0; i < a.length; i += SPECIES.length()) {2332IntVector av = IntVector.fromArray(SPECIES, a, i);2333av.lanewise(VectorOperators.LSHL, (int)b[i], vmask).intoArray(r, i);2334}2335}23362337assertShiftArraysEquals(r, a, b, mask, Int128VectorTests::LSHL_unary);2338}2339234023412342234323442345static int LSHR_unary(int a, int b) {2346return (int)((a >>> b));2347}23482349@Test(dataProvider = "intBinaryOpProvider")2350static void LSHRInt128VectorTestsShift(IntFunction<int[]> fa, IntFunction<int[]> fb) {2351int[] a = fa.apply(SPECIES.length());2352int[] b = fb.apply(SPECIES.length());2353int[] r = fr.apply(SPECIES.length());23542355for (int ic = 0; ic < INVOC_COUNT; ic++) {2356for (int i = 0; i < a.length; i += SPECIES.length()) {2357IntVector av = IntVector.fromArray(SPECIES, a, i);2358av.lanewise(VectorOperators.LSHR, (int)b[i]).intoArray(r, i);2359}2360}23612362assertShiftArraysEquals(r, a, b, Int128VectorTests::LSHR_unary);2363}2364236523662367@Test(dataProvider = "intBinaryOpMaskProvider")2368static void LSHRInt128VectorTestsShift(IntFunction<int[]> fa, IntFunction<int[]> fb,2369IntFunction<boolean[]> fm) {2370int[] a = fa.apply(SPECIES.length());2371int[] b = fb.apply(SPECIES.length());2372int[] r = fr.apply(SPECIES.length());2373boolean[] mask = fm.apply(SPECIES.length());2374VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);23752376for (int ic = 0; ic < INVOC_COUNT; ic++) {2377for (int i = 0; i < a.length; i += SPECIES.length()) {2378IntVector av = IntVector.fromArray(SPECIES, a, i);2379av.lanewise(VectorOperators.LSHR, (int)b[i], vmask).intoArray(r, i);2380}2381}23822383assertShiftArraysEquals(r, a, b, mask, Int128VectorTests::LSHR_unary);2384}2385238623872388238923902391static int ASHR_unary(int a, int b) {2392return (int)((a >> b));2393}23942395@Test(dataProvider = "intBinaryOpProvider")2396static void ASHRInt128VectorTestsShift(IntFunction<int[]> fa, IntFunction<int[]> fb) {2397int[] a = fa.apply(SPECIES.length());2398int[] b = fb.apply(SPECIES.length());2399int[] r = fr.apply(SPECIES.length());24002401for (int ic = 0; ic < INVOC_COUNT; ic++) {2402for (int i = 0; i < a.length; i += SPECIES.length()) {2403IntVector av = IntVector.fromArray(SPECIES, a, i);2404av.lanewise(VectorOperators.ASHR, (int)b[i]).intoArray(r, i);2405}2406}24072408assertShiftArraysEquals(r, a, b, Int128VectorTests::ASHR_unary);2409}2410241124122413@Test(dataProvider = "intBinaryOpMaskProvider")2414static void ASHRInt128VectorTestsShift(IntFunction<int[]> fa, IntFunction<int[]> fb,2415IntFunction<boolean[]> fm) {2416int[] a = fa.apply(SPECIES.length());2417int[] b = fb.apply(SPECIES.length());2418int[] r = fr.apply(SPECIES.length());2419boolean[] mask = fm.apply(SPECIES.length());2420VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);24212422for (int ic = 0; ic < INVOC_COUNT; ic++) {2423for (int i = 0; i < a.length; i += SPECIES.length()) {2424IntVector av = IntVector.fromArray(SPECIES, a, i);2425av.lanewise(VectorOperators.ASHR, (int)b[i], vmask).intoArray(r, i);2426}2427}24282429assertShiftArraysEquals(r, a, b, mask, Int128VectorTests::ASHR_unary);2430}243124322433243424352436static int MIN(int a, int b) {2437return (int)(Math.min(a, b));2438}24392440@Test(dataProvider = "intBinaryOpProvider")2441static void MINInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {2442int[] a = fa.apply(SPECIES.length());2443int[] b = fb.apply(SPECIES.length());2444int[] r = fr.apply(SPECIES.length());24452446for (int ic = 0; ic < INVOC_COUNT; ic++) {2447for (int i = 0; i < a.length; i += SPECIES.length()) {2448IntVector av = IntVector.fromArray(SPECIES, a, i);2449IntVector bv = IntVector.fromArray(SPECIES, b, i);2450av.lanewise(VectorOperators.MIN, bv).intoArray(r, i);2451}2452}24532454assertArraysEquals(r, a, b, Int128VectorTests::MIN);2455}2456static int min(int a, int b) {2457return (int)(Math.min(a, b));2458}24592460@Test(dataProvider = "intBinaryOpProvider")2461static void minInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {2462int[] a = fa.apply(SPECIES.length());2463int[] b = fb.apply(SPECIES.length());2464int[] r = fr.apply(SPECIES.length());24652466for (int i = 0; i < a.length; i += SPECIES.length()) {2467IntVector av = IntVector.fromArray(SPECIES, a, i);2468IntVector bv = IntVector.fromArray(SPECIES, b, i);2469av.min(bv).intoArray(r, i);2470}24712472assertArraysEquals(r, a, b, Int128VectorTests::min);2473}2474static int MAX(int a, int b) {2475return (int)(Math.max(a, b));2476}24772478@Test(dataProvider = "intBinaryOpProvider")2479static void MAXInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {2480int[] a = fa.apply(SPECIES.length());2481int[] b = fb.apply(SPECIES.length());2482int[] r = fr.apply(SPECIES.length());24832484for (int ic = 0; ic < INVOC_COUNT; ic++) {2485for (int i = 0; i < a.length; i += SPECIES.length()) {2486IntVector av = IntVector.fromArray(SPECIES, a, i);2487IntVector bv = IntVector.fromArray(SPECIES, b, i);2488av.lanewise(VectorOperators.MAX, bv).intoArray(r, i);2489}2490}24912492assertArraysEquals(r, a, b, Int128VectorTests::MAX);2493}2494static int max(int a, int b) {2495return (int)(Math.max(a, b));2496}24972498@Test(dataProvider = "intBinaryOpProvider")2499static void maxInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {2500int[] a = fa.apply(SPECIES.length());2501int[] b = fb.apply(SPECIES.length());2502int[] r = fr.apply(SPECIES.length());25032504for (int i = 0; i < a.length; i += SPECIES.length()) {2505IntVector av = IntVector.fromArray(SPECIES, a, i);2506IntVector bv = IntVector.fromArray(SPECIES, b, i);2507av.max(bv).intoArray(r, i);2508}25092510assertArraysEquals(r, a, b, Int128VectorTests::max);2511}25122513@Test(dataProvider = "intBinaryOpProvider")2514static void MINInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {2515int[] a = fa.apply(SPECIES.length());2516int[] b = fb.apply(SPECIES.length());2517int[] r = fr.apply(SPECIES.length());25182519for (int i = 0; i < a.length; i += SPECIES.length()) {2520IntVector av = IntVector.fromArray(SPECIES, a, i);2521av.lanewise(VectorOperators.MIN, b[i]).intoArray(r, i);2522}25232524assertBroadcastArraysEquals(r, a, b, Int128VectorTests::MIN);2525}25262527@Test(dataProvider = "intBinaryOpProvider")2528static void minInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {2529int[] a = fa.apply(SPECIES.length());2530int[] b = fb.apply(SPECIES.length());2531int[] r = fr.apply(SPECIES.length());25322533for (int i = 0; i < a.length; i += SPECIES.length()) {2534IntVector av = IntVector.fromArray(SPECIES, a, i);2535av.min(b[i]).intoArray(r, i);2536}25372538assertBroadcastArraysEquals(r, a, b, Int128VectorTests::min);2539}25402541@Test(dataProvider = "intBinaryOpProvider")2542static void MAXInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {2543int[] a = fa.apply(SPECIES.length());2544int[] b = fb.apply(SPECIES.length());2545int[] r = fr.apply(SPECIES.length());25462547for (int i = 0; i < a.length; i += SPECIES.length()) {2548IntVector av = IntVector.fromArray(SPECIES, a, i);2549av.lanewise(VectorOperators.MAX, b[i]).intoArray(r, i);2550}25512552assertBroadcastArraysEquals(r, a, b, Int128VectorTests::MAX);2553}25542555@Test(dataProvider = "intBinaryOpProvider")2556static void maxInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {2557int[] a = fa.apply(SPECIES.length());2558int[] b = fb.apply(SPECIES.length());2559int[] r = fr.apply(SPECIES.length());25602561for (int i = 0; i < a.length; i += SPECIES.length()) {2562IntVector av = IntVector.fromArray(SPECIES, a, i);2563av.max(b[i]).intoArray(r, i);2564}25652566assertBroadcastArraysEquals(r, a, b, Int128VectorTests::max);2567}25682569static int ANDReduce(int[] a, int idx) {2570int res = -1;2571for (int i = idx; i < (idx + SPECIES.length()); i++) {2572res &= a[i];2573}25742575return res;2576}25772578static int ANDReduceAll(int[] a) {2579int res = -1;2580for (int i = 0; i < a.length; i += SPECIES.length()) {2581res &= ANDReduce(a, i);2582}25832584return res;2585}258625872588@Test(dataProvider = "intUnaryOpProvider")2589static void ANDReduceInt128VectorTests(IntFunction<int[]> fa) {2590int[] a = fa.apply(SPECIES.length());2591int[] r = fr.apply(SPECIES.length());2592int ra = -1;25932594for (int ic = 0; ic < INVOC_COUNT; ic++) {2595for (int i = 0; i < a.length; i += SPECIES.length()) {2596IntVector av = IntVector.fromArray(SPECIES, a, i);2597r[i] = av.reduceLanes(VectorOperators.AND);2598}2599}26002601for (int ic = 0; ic < INVOC_COUNT; ic++) {2602ra = -1;2603for (int i = 0; i < a.length; i += SPECIES.length()) {2604IntVector av = IntVector.fromArray(SPECIES, a, i);2605ra &= av.reduceLanes(VectorOperators.AND);2606}2607}26082609assertReductionArraysEquals(r, ra, a,2610Int128VectorTests::ANDReduce, Int128VectorTests::ANDReduceAll);2611}261226132614static int ANDReduceMasked(int[] a, int idx, boolean[] mask) {2615int res = -1;2616for (int i = idx; i < (idx + SPECIES.length()); i++) {2617if (mask[i % SPECIES.length()])2618res &= a[i];2619}26202621return res;2622}26232624static int ANDReduceAllMasked(int[] a, boolean[] mask) {2625int res = -1;2626for (int i = 0; i < a.length; i += SPECIES.length()) {2627res &= ANDReduceMasked(a, i, mask);2628}26292630return res;2631}263226332634@Test(dataProvider = "intUnaryOpMaskProvider")2635static void ANDReduceInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) {2636int[] a = fa.apply(SPECIES.length());2637int[] r = fr.apply(SPECIES.length());2638boolean[] mask = fm.apply(SPECIES.length());2639VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);2640int ra = -1;26412642for (int ic = 0; ic < INVOC_COUNT; ic++) {2643for (int i = 0; i < a.length; i += SPECIES.length()) {2644IntVector av = IntVector.fromArray(SPECIES, a, i);2645r[i] = av.reduceLanes(VectorOperators.AND, vmask);2646}2647}26482649for (int ic = 0; ic < INVOC_COUNT; ic++) {2650ra = -1;2651for (int i = 0; i < a.length; i += SPECIES.length()) {2652IntVector av = IntVector.fromArray(SPECIES, a, i);2653ra &= av.reduceLanes(VectorOperators.AND, vmask);2654}2655}26562657assertReductionArraysEqualsMasked(r, ra, a, mask,2658Int128VectorTests::ANDReduceMasked, Int128VectorTests::ANDReduceAllMasked);2659}266026612662static int ORReduce(int[] a, int idx) {2663int res = 0;2664for (int i = idx; i < (idx + SPECIES.length()); i++) {2665res |= a[i];2666}26672668return res;2669}26702671static int ORReduceAll(int[] a) {2672int res = 0;2673for (int i = 0; i < a.length; i += SPECIES.length()) {2674res |= ORReduce(a, i);2675}26762677return res;2678}267926802681@Test(dataProvider = "intUnaryOpProvider")2682static void ORReduceInt128VectorTests(IntFunction<int[]> fa) {2683int[] a = fa.apply(SPECIES.length());2684int[] r = fr.apply(SPECIES.length());2685int ra = 0;26862687for (int ic = 0; ic < INVOC_COUNT; ic++) {2688for (int i = 0; i < a.length; i += SPECIES.length()) {2689IntVector av = IntVector.fromArray(SPECIES, a, i);2690r[i] = av.reduceLanes(VectorOperators.OR);2691}2692}26932694for (int ic = 0; ic < INVOC_COUNT; ic++) {2695ra = 0;2696for (int i = 0; i < a.length; i += SPECIES.length()) {2697IntVector av = IntVector.fromArray(SPECIES, a, i);2698ra |= av.reduceLanes(VectorOperators.OR);2699}2700}27012702assertReductionArraysEquals(r, ra, a,2703Int128VectorTests::ORReduce, Int128VectorTests::ORReduceAll);2704}270527062707static int ORReduceMasked(int[] a, int idx, boolean[] mask) {2708int res = 0;2709for (int i = idx; i < (idx + SPECIES.length()); i++) {2710if (mask[i % SPECIES.length()])2711res |= a[i];2712}27132714return res;2715}27162717static int ORReduceAllMasked(int[] a, boolean[] mask) {2718int res = 0;2719for (int i = 0; i < a.length; i += SPECIES.length()) {2720res |= ORReduceMasked(a, i, mask);2721}27222723return res;2724}272527262727@Test(dataProvider = "intUnaryOpMaskProvider")2728static void ORReduceInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) {2729int[] a = fa.apply(SPECIES.length());2730int[] r = fr.apply(SPECIES.length());2731boolean[] mask = fm.apply(SPECIES.length());2732VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);2733int ra = 0;27342735for (int ic = 0; ic < INVOC_COUNT; ic++) {2736for (int i = 0; i < a.length; i += SPECIES.length()) {2737IntVector av = IntVector.fromArray(SPECIES, a, i);2738r[i] = av.reduceLanes(VectorOperators.OR, vmask);2739}2740}27412742for (int ic = 0; ic < INVOC_COUNT; ic++) {2743ra = 0;2744for (int i = 0; i < a.length; i += SPECIES.length()) {2745IntVector av = IntVector.fromArray(SPECIES, a, i);2746ra |= av.reduceLanes(VectorOperators.OR, vmask);2747}2748}27492750assertReductionArraysEqualsMasked(r, ra, a, mask,2751Int128VectorTests::ORReduceMasked, Int128VectorTests::ORReduceAllMasked);2752}275327542755static int XORReduce(int[] a, int idx) {2756int res = 0;2757for (int i = idx; i < (idx + SPECIES.length()); i++) {2758res ^= a[i];2759}27602761return res;2762}27632764static int XORReduceAll(int[] a) {2765int res = 0;2766for (int i = 0; i < a.length; i += SPECIES.length()) {2767res ^= XORReduce(a, i);2768}27692770return res;2771}277227732774@Test(dataProvider = "intUnaryOpProvider")2775static void XORReduceInt128VectorTests(IntFunction<int[]> fa) {2776int[] a = fa.apply(SPECIES.length());2777int[] r = fr.apply(SPECIES.length());2778int ra = 0;27792780for (int ic = 0; ic < INVOC_COUNT; ic++) {2781for (int i = 0; i < a.length; i += SPECIES.length()) {2782IntVector av = IntVector.fromArray(SPECIES, a, i);2783r[i] = av.reduceLanes(VectorOperators.XOR);2784}2785}27862787for (int ic = 0; ic < INVOC_COUNT; ic++) {2788ra = 0;2789for (int i = 0; i < a.length; i += SPECIES.length()) {2790IntVector av = IntVector.fromArray(SPECIES, a, i);2791ra ^= av.reduceLanes(VectorOperators.XOR);2792}2793}27942795assertReductionArraysEquals(r, ra, a,2796Int128VectorTests::XORReduce, Int128VectorTests::XORReduceAll);2797}279827992800static int XORReduceMasked(int[] a, int idx, boolean[] mask) {2801int res = 0;2802for (int i = idx; i < (idx + SPECIES.length()); i++) {2803if (mask[i % SPECIES.length()])2804res ^= a[i];2805}28062807return res;2808}28092810static int XORReduceAllMasked(int[] a, boolean[] mask) {2811int res = 0;2812for (int i = 0; i < a.length; i += SPECIES.length()) {2813res ^= XORReduceMasked(a, i, mask);2814}28152816return res;2817}281828192820@Test(dataProvider = "intUnaryOpMaskProvider")2821static void XORReduceInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) {2822int[] a = fa.apply(SPECIES.length());2823int[] r = fr.apply(SPECIES.length());2824boolean[] mask = fm.apply(SPECIES.length());2825VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);2826int ra = 0;28272828for (int ic = 0; ic < INVOC_COUNT; ic++) {2829for (int i = 0; i < a.length; i += SPECIES.length()) {2830IntVector av = IntVector.fromArray(SPECIES, a, i);2831r[i] = av.reduceLanes(VectorOperators.XOR, vmask);2832}2833}28342835for (int ic = 0; ic < INVOC_COUNT; ic++) {2836ra = 0;2837for (int i = 0; i < a.length; i += SPECIES.length()) {2838IntVector av = IntVector.fromArray(SPECIES, a, i);2839ra ^= av.reduceLanes(VectorOperators.XOR, vmask);2840}2841}28422843assertReductionArraysEqualsMasked(r, ra, a, mask,2844Int128VectorTests::XORReduceMasked, Int128VectorTests::XORReduceAllMasked);2845}28462847static int ADDReduce(int[] a, int idx) {2848int res = 0;2849for (int i = idx; i < (idx + SPECIES.length()); i++) {2850res += a[i];2851}28522853return res;2854}28552856static int ADDReduceAll(int[] a) {2857int res = 0;2858for (int i = 0; i < a.length; i += SPECIES.length()) {2859res += ADDReduce(a, i);2860}28612862return res;2863}2864@Test(dataProvider = "intUnaryOpProvider")2865static void ADDReduceInt128VectorTests(IntFunction<int[]> fa) {2866int[] a = fa.apply(SPECIES.length());2867int[] r = fr.apply(SPECIES.length());2868int ra = 0;28692870for (int ic = 0; ic < INVOC_COUNT; ic++) {2871for (int i = 0; i < a.length; i += SPECIES.length()) {2872IntVector av = IntVector.fromArray(SPECIES, a, i);2873r[i] = av.reduceLanes(VectorOperators.ADD);2874}2875}28762877for (int ic = 0; ic < INVOC_COUNT; ic++) {2878ra = 0;2879for (int i = 0; i < a.length; i += SPECIES.length()) {2880IntVector av = IntVector.fromArray(SPECIES, a, i);2881ra += av.reduceLanes(VectorOperators.ADD);2882}2883}28842885assertReductionArraysEquals(r, ra, a,2886Int128VectorTests::ADDReduce, Int128VectorTests::ADDReduceAll);2887}2888static int ADDReduceMasked(int[] a, int idx, boolean[] mask) {2889int res = 0;2890for (int i = idx; i < (idx + SPECIES.length()); i++) {2891if (mask[i % SPECIES.length()])2892res += a[i];2893}28942895return res;2896}28972898static int ADDReduceAllMasked(int[] a, boolean[] mask) {2899int res = 0;2900for (int i = 0; i < a.length; i += SPECIES.length()) {2901res += ADDReduceMasked(a, i, mask);2902}29032904return res;2905}2906@Test(dataProvider = "intUnaryOpMaskProvider")2907static void ADDReduceInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) {2908int[] a = fa.apply(SPECIES.length());2909int[] r = fr.apply(SPECIES.length());2910boolean[] mask = fm.apply(SPECIES.length());2911VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);2912int ra = 0;29132914for (int ic = 0; ic < INVOC_COUNT; ic++) {2915for (int i = 0; i < a.length; i += SPECIES.length()) {2916IntVector av = IntVector.fromArray(SPECIES, a, i);2917r[i] = av.reduceLanes(VectorOperators.ADD, vmask);2918}2919}29202921for (int ic = 0; ic < INVOC_COUNT; ic++) {2922ra = 0;2923for (int i = 0; i < a.length; i += SPECIES.length()) {2924IntVector av = IntVector.fromArray(SPECIES, a, i);2925ra += av.reduceLanes(VectorOperators.ADD, vmask);2926}2927}29282929assertReductionArraysEqualsMasked(r, ra, a, mask,2930Int128VectorTests::ADDReduceMasked, Int128VectorTests::ADDReduceAllMasked);2931}2932static int MULReduce(int[] a, int idx) {2933int res = 1;2934for (int i = idx; i < (idx + SPECIES.length()); i++) {2935res *= a[i];2936}29372938return res;2939}29402941static int MULReduceAll(int[] a) {2942int res = 1;2943for (int i = 0; i < a.length; i += SPECIES.length()) {2944res *= MULReduce(a, i);2945}29462947return res;2948}2949@Test(dataProvider = "intUnaryOpProvider")2950static void MULReduceInt128VectorTests(IntFunction<int[]> fa) {2951int[] a = fa.apply(SPECIES.length());2952int[] r = fr.apply(SPECIES.length());2953int ra = 1;29542955for (int ic = 0; ic < INVOC_COUNT; ic++) {2956for (int i = 0; i < a.length; i += SPECIES.length()) {2957IntVector av = IntVector.fromArray(SPECIES, a, i);2958r[i] = av.reduceLanes(VectorOperators.MUL);2959}2960}29612962for (int ic = 0; ic < INVOC_COUNT; ic++) {2963ra = 1;2964for (int i = 0; i < a.length; i += SPECIES.length()) {2965IntVector av = IntVector.fromArray(SPECIES, a, i);2966ra *= av.reduceLanes(VectorOperators.MUL);2967}2968}29692970assertReductionArraysEquals(r, ra, a,2971Int128VectorTests::MULReduce, Int128VectorTests::MULReduceAll);2972}2973static int MULReduceMasked(int[] a, int idx, boolean[] mask) {2974int res = 1;2975for (int i = idx; i < (idx + SPECIES.length()); i++) {2976if (mask[i % SPECIES.length()])2977res *= a[i];2978}29792980return res;2981}29822983static int MULReduceAllMasked(int[] a, boolean[] mask) {2984int res = 1;2985for (int i = 0; i < a.length; i += SPECIES.length()) {2986res *= MULReduceMasked(a, i, mask);2987}29882989return res;2990}2991@Test(dataProvider = "intUnaryOpMaskProvider")2992static void MULReduceInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) {2993int[] a = fa.apply(SPECIES.length());2994int[] r = fr.apply(SPECIES.length());2995boolean[] mask = fm.apply(SPECIES.length());2996VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);2997int ra = 1;29982999for (int ic = 0; ic < INVOC_COUNT; ic++) {3000for (int i = 0; i < a.length; i += SPECIES.length()) {3001IntVector av = IntVector.fromArray(SPECIES, a, i);3002r[i] = av.reduceLanes(VectorOperators.MUL, vmask);3003}3004}30053006for (int ic = 0; ic < INVOC_COUNT; ic++) {3007ra = 1;3008for (int i = 0; i < a.length; i += SPECIES.length()) {3009IntVector av = IntVector.fromArray(SPECIES, a, i);3010ra *= av.reduceLanes(VectorOperators.MUL, vmask);3011}3012}30133014assertReductionArraysEqualsMasked(r, ra, a, mask,3015Int128VectorTests::MULReduceMasked, Int128VectorTests::MULReduceAllMasked);3016}3017static int MINReduce(int[] a, int idx) {3018int res = Integer.MAX_VALUE;3019for (int i = idx; i < (idx + SPECIES.length()); i++) {3020res = (int)Math.min(res, a[i]);3021}30223023return res;3024}30253026static int MINReduceAll(int[] a) {3027int res = Integer.MAX_VALUE;3028for (int i = 0; i < a.length; i++) {3029res = (int)Math.min(res, a[i]);3030}30313032return res;3033}3034@Test(dataProvider = "intUnaryOpProvider")3035static void MINReduceInt128VectorTests(IntFunction<int[]> fa) {3036int[] a = fa.apply(SPECIES.length());3037int[] r = fr.apply(SPECIES.length());3038int ra = Integer.MAX_VALUE;30393040for (int ic = 0; ic < INVOC_COUNT; ic++) {3041for (int i = 0; i < a.length; i += SPECIES.length()) {3042IntVector av = IntVector.fromArray(SPECIES, a, i);3043r[i] = av.reduceLanes(VectorOperators.MIN);3044}3045}30463047for (int ic = 0; ic < INVOC_COUNT; ic++) {3048ra = Integer.MAX_VALUE;3049for (int i = 0; i < a.length; i += SPECIES.length()) {3050IntVector av = IntVector.fromArray(SPECIES, a, i);3051ra = (int)Math.min(ra, av.reduceLanes(VectorOperators.MIN));3052}3053}30543055assertReductionArraysEquals(r, ra, a,3056Int128VectorTests::MINReduce, Int128VectorTests::MINReduceAll);3057}3058static int MINReduceMasked(int[] a, int idx, boolean[] mask) {3059int res = Integer.MAX_VALUE;3060for (int i = idx; i < (idx + SPECIES.length()); i++) {3061if(mask[i % SPECIES.length()])3062res = (int)Math.min(res, a[i]);3063}30643065return res;3066}30673068static int MINReduceAllMasked(int[] a, boolean[] mask) {3069int res = Integer.MAX_VALUE;3070for (int i = 0; i < a.length; i++) {3071if(mask[i % SPECIES.length()])3072res = (int)Math.min(res, a[i]);3073}30743075return res;3076}3077@Test(dataProvider = "intUnaryOpMaskProvider")3078static void MINReduceInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) {3079int[] a = fa.apply(SPECIES.length());3080int[] r = fr.apply(SPECIES.length());3081boolean[] mask = fm.apply(SPECIES.length());3082VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);3083int ra = Integer.MAX_VALUE;30843085for (int ic = 0; ic < INVOC_COUNT; ic++) {3086for (int i = 0; i < a.length; i += SPECIES.length()) {3087IntVector av = IntVector.fromArray(SPECIES, a, i);3088r[i] = av.reduceLanes(VectorOperators.MIN, vmask);3089}3090}30913092for (int ic = 0; ic < INVOC_COUNT; ic++) {3093ra = Integer.MAX_VALUE;3094for (int i = 0; i < a.length; i += SPECIES.length()) {3095IntVector av = IntVector.fromArray(SPECIES, a, i);3096ra = (int)Math.min(ra, av.reduceLanes(VectorOperators.MIN, vmask));3097}3098}30993100assertReductionArraysEqualsMasked(r, ra, a, mask,3101Int128VectorTests::MINReduceMasked, Int128VectorTests::MINReduceAllMasked);3102}3103static int MAXReduce(int[] a, int idx) {3104int res = Integer.MIN_VALUE;3105for (int i = idx; i < (idx + SPECIES.length()); i++) {3106res = (int)Math.max(res, a[i]);3107}31083109return res;3110}31113112static int MAXReduceAll(int[] a) {3113int res = Integer.MIN_VALUE;3114for (int i = 0; i < a.length; i++) {3115res = (int)Math.max(res, a[i]);3116}31173118return res;3119}3120@Test(dataProvider = "intUnaryOpProvider")3121static void MAXReduceInt128VectorTests(IntFunction<int[]> fa) {3122int[] a = fa.apply(SPECIES.length());3123int[] r = fr.apply(SPECIES.length());3124int ra = Integer.MIN_VALUE;31253126for (int ic = 0; ic < INVOC_COUNT; ic++) {3127for (int i = 0; i < a.length; i += SPECIES.length()) {3128IntVector av = IntVector.fromArray(SPECIES, a, i);3129r[i] = av.reduceLanes(VectorOperators.MAX);3130}3131}31323133for (int ic = 0; ic < INVOC_COUNT; ic++) {3134ra = Integer.MIN_VALUE;3135for (int i = 0; i < a.length; i += SPECIES.length()) {3136IntVector av = IntVector.fromArray(SPECIES, a, i);3137ra = (int)Math.max(ra, av.reduceLanes(VectorOperators.MAX));3138}3139}31403141assertReductionArraysEquals(r, ra, a,3142Int128VectorTests::MAXReduce, Int128VectorTests::MAXReduceAll);3143}3144static int MAXReduceMasked(int[] a, int idx, boolean[] mask) {3145int res = Integer.MIN_VALUE;3146for (int i = idx; i < (idx + SPECIES.length()); i++) {3147if(mask[i % SPECIES.length()])3148res = (int)Math.max(res, a[i]);3149}31503151return res;3152}31533154static int MAXReduceAllMasked(int[] a, boolean[] mask) {3155int res = Integer.MIN_VALUE;3156for (int i = 0; i < a.length; i++) {3157if(mask[i % SPECIES.length()])3158res = (int)Math.max(res, a[i]);3159}31603161return res;3162}3163@Test(dataProvider = "intUnaryOpMaskProvider")3164static void MAXReduceInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) {3165int[] a = fa.apply(SPECIES.length());3166int[] r = fr.apply(SPECIES.length());3167boolean[] mask = fm.apply(SPECIES.length());3168VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);3169int ra = Integer.MIN_VALUE;31703171for (int ic = 0; ic < INVOC_COUNT; ic++) {3172for (int i = 0; i < a.length; i += SPECIES.length()) {3173IntVector av = IntVector.fromArray(SPECIES, a, i);3174r[i] = av.reduceLanes(VectorOperators.MAX, vmask);3175}3176}31773178for (int ic = 0; ic < INVOC_COUNT; ic++) {3179ra = Integer.MIN_VALUE;3180for (int i = 0; i < a.length; i += SPECIES.length()) {3181IntVector av = IntVector.fromArray(SPECIES, a, i);3182ra = (int)Math.max(ra, av.reduceLanes(VectorOperators.MAX, vmask));3183}3184}31853186assertReductionArraysEqualsMasked(r, ra, a, mask,3187Int128VectorTests::MAXReduceMasked, Int128VectorTests::MAXReduceAllMasked);3188}31893190static boolean anyTrue(boolean[] a, int idx) {3191boolean res = false;3192for (int i = idx; i < (idx + SPECIES.length()); i++) {3193res |= a[i];3194}31953196return res;3197}319831993200@Test(dataProvider = "boolUnaryOpProvider")3201static void anyTrueInt128VectorTests(IntFunction<boolean[]> fm) {3202boolean[] mask = fm.apply(SPECIES.length());3203boolean[] r = fmr.apply(SPECIES.length());32043205for (int ic = 0; ic < INVOC_COUNT; ic++) {3206for (int i = 0; i < mask.length; i += SPECIES.length()) {3207VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, i);3208r[i] = vmask.anyTrue();3209}3210}32113212assertReductionBoolArraysEquals(r, mask, Int128VectorTests::anyTrue);3213}321432153216static boolean allTrue(boolean[] a, int idx) {3217boolean res = true;3218for (int i = idx; i < (idx + SPECIES.length()); i++) {3219res &= a[i];3220}32213222return res;3223}322432253226@Test(dataProvider = "boolUnaryOpProvider")3227static void allTrueInt128VectorTests(IntFunction<boolean[]> fm) {3228boolean[] mask = fm.apply(SPECIES.length());3229boolean[] r = fmr.apply(SPECIES.length());32303231for (int ic = 0; ic < INVOC_COUNT; ic++) {3232for (int i = 0; i < mask.length; i += SPECIES.length()) {3233VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, i);3234r[i] = vmask.allTrue();3235}3236}32373238assertReductionBoolArraysEquals(r, mask, Int128VectorTests::allTrue);3239}324032413242@Test(dataProvider = "intUnaryOpProvider")3243static void withInt128VectorTests(IntFunction<int []> fa) {3244int[] a = fa.apply(SPECIES.length());3245int[] r = fr.apply(SPECIES.length());32463247for (int ic = 0; ic < INVOC_COUNT; ic++) {3248for (int i = 0; i < a.length; i += SPECIES.length()) {3249IntVector av = IntVector.fromArray(SPECIES, a, i);3250av.withLane(0, (int)4).intoArray(r, i);3251}3252}32533254assertInsertArraysEquals(r, a, (int)4, 0);3255}3256static boolean testIS_DEFAULT(int a) {3257return bits(a)==0;3258}32593260@Test(dataProvider = "intTestOpProvider")3261static void IS_DEFAULTInt128VectorTests(IntFunction<int[]> fa) {3262int[] a = fa.apply(SPECIES.length());32633264for (int ic = 0; ic < INVOC_COUNT; ic++) {3265for (int i = 0; i < a.length; i += SPECIES.length()) {3266IntVector av = IntVector.fromArray(SPECIES, a, i);3267VectorMask<Integer> mv = av.test(VectorOperators.IS_DEFAULT);32683269// Check results as part of computation.3270for (int j = 0; j < SPECIES.length(); j++) {3271Assert.assertEquals(mv.laneIsSet(j), testIS_DEFAULT(a[i + j]));3272}3273}3274}3275}32763277@Test(dataProvider = "intTestOpMaskProvider")3278static void IS_DEFAULTMaskedInt128VectorTestsSmokeTest(IntFunction<int[]> fa,3279IntFunction<boolean[]> fm) {3280int[] a = fa.apply(SPECIES.length());3281boolean[] mask = fm.apply(SPECIES.length());3282VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);32833284for (int i = 0; i < a.length; i += SPECIES.length()) {3285IntVector av = IntVector.fromArray(SPECIES, a, i);3286VectorMask<Integer> mv = av.test(VectorOperators.IS_DEFAULT, vmask);32873288// Check results as part of computation.3289for (int j = 0; j < SPECIES.length(); j++) {3290Assert.assertEquals(mv.laneIsSet(j), vmask.laneIsSet(j) && testIS_DEFAULT(a[i + j]));3291}3292}3293}3294static boolean testIS_NEGATIVE(int a) {3295return bits(a)<0;3296}32973298@Test(dataProvider = "intTestOpProvider")3299static void IS_NEGATIVEInt128VectorTests(IntFunction<int[]> fa) {3300int[] a = fa.apply(SPECIES.length());33013302for (int ic = 0; ic < INVOC_COUNT; ic++) {3303for (int i = 0; i < a.length; i += SPECIES.length()) {3304IntVector av = IntVector.fromArray(SPECIES, a, i);3305VectorMask<Integer> mv = av.test(VectorOperators.IS_NEGATIVE);33063307// Check results as part of computation.3308for (int j = 0; j < SPECIES.length(); j++) {3309Assert.assertEquals(mv.laneIsSet(j), testIS_NEGATIVE(a[i + j]));3310}3311}3312}3313}33143315@Test(dataProvider = "intTestOpMaskProvider")3316static void IS_NEGATIVEMaskedInt128VectorTestsSmokeTest(IntFunction<int[]> fa,3317IntFunction<boolean[]> fm) {3318int[] a = fa.apply(SPECIES.length());3319boolean[] mask = fm.apply(SPECIES.length());3320VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);33213322for (int i = 0; i < a.length; i += SPECIES.length()) {3323IntVector av = IntVector.fromArray(SPECIES, a, i);3324VectorMask<Integer> mv = av.test(VectorOperators.IS_NEGATIVE, vmask);33253326// Check results as part of computation.3327for (int j = 0; j < SPECIES.length(); j++) {3328Assert.assertEquals(mv.laneIsSet(j), vmask.laneIsSet(j) && testIS_NEGATIVE(a[i + j]));3329}3330}3331}33323333333433353336@Test(dataProvider = "intCompareOpProvider")3337static void LTInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {3338int[] a = fa.apply(SPECIES.length());3339int[] b = fb.apply(SPECIES.length());33403341for (int ic = 0; ic < INVOC_COUNT; ic++) {3342for (int i = 0; i < a.length; i += SPECIES.length()) {3343IntVector av = IntVector.fromArray(SPECIES, a, i);3344IntVector bv = IntVector.fromArray(SPECIES, b, i);3345VectorMask<Integer> mv = av.compare(VectorOperators.LT, bv);33463347// Check results as part of computation.3348for (int j = 0; j < SPECIES.length(); j++) {3349Assert.assertEquals(mv.laneIsSet(j), lt(a[i + j], b[i + j]));3350}3351}3352}3353}335433553356@Test(dataProvider = "intCompareOpProvider")3357static void ltInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {3358int[] a = fa.apply(SPECIES.length());3359int[] b = fb.apply(SPECIES.length());33603361for (int ic = 0; ic < INVOC_COUNT; ic++) {3362for (int i = 0; i < a.length; i += SPECIES.length()) {3363IntVector av = IntVector.fromArray(SPECIES, a, i);3364IntVector bv = IntVector.fromArray(SPECIES, b, i);3365VectorMask<Integer> mv = av.lt(bv);33663367// Check results as part of computation.3368for (int j = 0; j < SPECIES.length(); j++) {3369Assert.assertEquals(mv.laneIsSet(j), lt(a[i + j], b[i + j]));3370}3371}3372}3373}33743375@Test(dataProvider = "intCompareOpMaskProvider")3376static void LTInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,3377IntFunction<boolean[]> fm) {3378int[] a = fa.apply(SPECIES.length());3379int[] b = fb.apply(SPECIES.length());3380boolean[] mask = fm.apply(SPECIES.length());33813382VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);33833384for (int ic = 0; ic < INVOC_COUNT; ic++) {3385for (int i = 0; i < a.length; i += SPECIES.length()) {3386IntVector av = IntVector.fromArray(SPECIES, a, i);3387IntVector bv = IntVector.fromArray(SPECIES, b, i);3388VectorMask<Integer> mv = av.compare(VectorOperators.LT, bv, vmask);33893390// Check results as part of computation.3391for (int j = 0; j < SPECIES.length(); j++) {3392Assert.assertEquals(mv.laneIsSet(j), mask[j] && lt(a[i + j], b[i + j]));3393}3394}3395}3396}339733983399@Test(dataProvider = "intCompareOpProvider")3400static void GTInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {3401int[] a = fa.apply(SPECIES.length());3402int[] b = fb.apply(SPECIES.length());34033404for (int ic = 0; ic < INVOC_COUNT; ic++) {3405for (int i = 0; i < a.length; i += SPECIES.length()) {3406IntVector av = IntVector.fromArray(SPECIES, a, i);3407IntVector bv = IntVector.fromArray(SPECIES, b, i);3408VectorMask<Integer> mv = av.compare(VectorOperators.GT, bv);34093410// Check results as part of computation.3411for (int j = 0; j < SPECIES.length(); j++) {3412Assert.assertEquals(mv.laneIsSet(j), gt(a[i + j], b[i + j]));3413}3414}3415}3416}34173418@Test(dataProvider = "intCompareOpMaskProvider")3419static void GTInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,3420IntFunction<boolean[]> fm) {3421int[] a = fa.apply(SPECIES.length());3422int[] b = fb.apply(SPECIES.length());3423boolean[] mask = fm.apply(SPECIES.length());34243425VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);34263427for (int ic = 0; ic < INVOC_COUNT; ic++) {3428for (int i = 0; i < a.length; i += SPECIES.length()) {3429IntVector av = IntVector.fromArray(SPECIES, a, i);3430IntVector bv = IntVector.fromArray(SPECIES, b, i);3431VectorMask<Integer> mv = av.compare(VectorOperators.GT, bv, vmask);34323433// Check results as part of computation.3434for (int j = 0; j < SPECIES.length(); j++) {3435Assert.assertEquals(mv.laneIsSet(j), mask[j] && gt(a[i + j], b[i + j]));3436}3437}3438}3439}344034413442@Test(dataProvider = "intCompareOpProvider")3443static void EQInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {3444int[] a = fa.apply(SPECIES.length());3445int[] b = fb.apply(SPECIES.length());34463447for (int ic = 0; ic < INVOC_COUNT; ic++) {3448for (int i = 0; i < a.length; i += SPECIES.length()) {3449IntVector av = IntVector.fromArray(SPECIES, a, i);3450IntVector bv = IntVector.fromArray(SPECIES, b, i);3451VectorMask<Integer> mv = av.compare(VectorOperators.EQ, bv);34523453// Check results as part of computation.3454for (int j = 0; j < SPECIES.length(); j++) {3455Assert.assertEquals(mv.laneIsSet(j), eq(a[i + j], b[i + j]));3456}3457}3458}3459}346034613462@Test(dataProvider = "intCompareOpProvider")3463static void eqInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {3464int[] a = fa.apply(SPECIES.length());3465int[] b = fb.apply(SPECIES.length());34663467for (int ic = 0; ic < INVOC_COUNT; ic++) {3468for (int i = 0; i < a.length; i += SPECIES.length()) {3469IntVector av = IntVector.fromArray(SPECIES, a, i);3470IntVector bv = IntVector.fromArray(SPECIES, b, i);3471VectorMask<Integer> mv = av.eq(bv);34723473// Check results as part of computation.3474for (int j = 0; j < SPECIES.length(); j++) {3475Assert.assertEquals(mv.laneIsSet(j), eq(a[i + j], b[i + j]));3476}3477}3478}3479}34803481@Test(dataProvider = "intCompareOpMaskProvider")3482static void EQInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,3483IntFunction<boolean[]> fm) {3484int[] a = fa.apply(SPECIES.length());3485int[] b = fb.apply(SPECIES.length());3486boolean[] mask = fm.apply(SPECIES.length());34873488VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);34893490for (int ic = 0; ic < INVOC_COUNT; ic++) {3491for (int i = 0; i < a.length; i += SPECIES.length()) {3492IntVector av = IntVector.fromArray(SPECIES, a, i);3493IntVector bv = IntVector.fromArray(SPECIES, b, i);3494VectorMask<Integer> mv = av.compare(VectorOperators.EQ, bv, vmask);34953496// Check results as part of computation.3497for (int j = 0; j < SPECIES.length(); j++) {3498Assert.assertEquals(mv.laneIsSet(j), mask[j] && eq(a[i + j], b[i + j]));3499}3500}3501}3502}350335043505@Test(dataProvider = "intCompareOpProvider")3506static void NEInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {3507int[] a = fa.apply(SPECIES.length());3508int[] b = fb.apply(SPECIES.length());35093510for (int ic = 0; ic < INVOC_COUNT; ic++) {3511for (int i = 0; i < a.length; i += SPECIES.length()) {3512IntVector av = IntVector.fromArray(SPECIES, a, i);3513IntVector bv = IntVector.fromArray(SPECIES, b, i);3514VectorMask<Integer> mv = av.compare(VectorOperators.NE, bv);35153516// Check results as part of computation.3517for (int j = 0; j < SPECIES.length(); j++) {3518Assert.assertEquals(mv.laneIsSet(j), neq(a[i + j], b[i + j]));3519}3520}3521}3522}35233524@Test(dataProvider = "intCompareOpMaskProvider")3525static void NEInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,3526IntFunction<boolean[]> fm) {3527int[] a = fa.apply(SPECIES.length());3528int[] b = fb.apply(SPECIES.length());3529boolean[] mask = fm.apply(SPECIES.length());35303531VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);35323533for (int ic = 0; ic < INVOC_COUNT; ic++) {3534for (int i = 0; i < a.length; i += SPECIES.length()) {3535IntVector av = IntVector.fromArray(SPECIES, a, i);3536IntVector bv = IntVector.fromArray(SPECIES, b, i);3537VectorMask<Integer> mv = av.compare(VectorOperators.NE, bv, vmask);35383539// Check results as part of computation.3540for (int j = 0; j < SPECIES.length(); j++) {3541Assert.assertEquals(mv.laneIsSet(j), mask[j] && neq(a[i + j], b[i + j]));3542}3543}3544}3545}354635473548@Test(dataProvider = "intCompareOpProvider")3549static void LEInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {3550int[] a = fa.apply(SPECIES.length());3551int[] b = fb.apply(SPECIES.length());35523553for (int ic = 0; ic < INVOC_COUNT; ic++) {3554for (int i = 0; i < a.length; i += SPECIES.length()) {3555IntVector av = IntVector.fromArray(SPECIES, a, i);3556IntVector bv = IntVector.fromArray(SPECIES, b, i);3557VectorMask<Integer> mv = av.compare(VectorOperators.LE, bv);35583559// Check results as part of computation.3560for (int j = 0; j < SPECIES.length(); j++) {3561Assert.assertEquals(mv.laneIsSet(j), le(a[i + j], b[i + j]));3562}3563}3564}3565}35663567@Test(dataProvider = "intCompareOpMaskProvider")3568static void LEInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,3569IntFunction<boolean[]> fm) {3570int[] a = fa.apply(SPECIES.length());3571int[] b = fb.apply(SPECIES.length());3572boolean[] mask = fm.apply(SPECIES.length());35733574VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);35753576for (int ic = 0; ic < INVOC_COUNT; ic++) {3577for (int i = 0; i < a.length; i += SPECIES.length()) {3578IntVector av = IntVector.fromArray(SPECIES, a, i);3579IntVector bv = IntVector.fromArray(SPECIES, b, i);3580VectorMask<Integer> mv = av.compare(VectorOperators.LE, bv, vmask);35813582// Check results as part of computation.3583for (int j = 0; j < SPECIES.length(); j++) {3584Assert.assertEquals(mv.laneIsSet(j), mask[j] && le(a[i + j], b[i + j]));3585}3586}3587}3588}358935903591@Test(dataProvider = "intCompareOpProvider")3592static void GEInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {3593int[] a = fa.apply(SPECIES.length());3594int[] b = fb.apply(SPECIES.length());35953596for (int ic = 0; ic < INVOC_COUNT; ic++) {3597for (int i = 0; i < a.length; i += SPECIES.length()) {3598IntVector av = IntVector.fromArray(SPECIES, a, i);3599IntVector bv = IntVector.fromArray(SPECIES, b, i);3600VectorMask<Integer> mv = av.compare(VectorOperators.GE, bv);36013602// Check results as part of computation.3603for (int j = 0; j < SPECIES.length(); j++) {3604Assert.assertEquals(mv.laneIsSet(j), ge(a[i + j], b[i + j]));3605}3606}3607}3608}36093610@Test(dataProvider = "intCompareOpMaskProvider")3611static void GEInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,3612IntFunction<boolean[]> fm) {3613int[] a = fa.apply(SPECIES.length());3614int[] b = fb.apply(SPECIES.length());3615boolean[] mask = fm.apply(SPECIES.length());36163617VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);36183619for (int ic = 0; ic < INVOC_COUNT; ic++) {3620for (int i = 0; i < a.length; i += SPECIES.length()) {3621IntVector av = IntVector.fromArray(SPECIES, a, i);3622IntVector bv = IntVector.fromArray(SPECIES, b, i);3623VectorMask<Integer> mv = av.compare(VectorOperators.GE, bv, vmask);36243625// Check results as part of computation.3626for (int j = 0; j < SPECIES.length(); j++) {3627Assert.assertEquals(mv.laneIsSet(j), mask[j] && ge(a[i + j], b[i + j]));3628}3629}3630}3631}3632363336343635@Test(dataProvider = "intCompareOpProvider")3636static void UNSIGNED_LTInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {3637int[] a = fa.apply(SPECIES.length());3638int[] b = fb.apply(SPECIES.length());36393640for (int ic = 0; ic < INVOC_COUNT; ic++) {3641for (int i = 0; i < a.length; i += SPECIES.length()) {3642IntVector av = IntVector.fromArray(SPECIES, a, i);3643IntVector bv = IntVector.fromArray(SPECIES, b, i);3644VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_LT, bv);36453646// Check results as part of computation.3647for (int j = 0; j < SPECIES.length(); j++) {3648Assert.assertEquals(mv.laneIsSet(j), ult(a[i + j], b[i + j]));3649}3650}3651}3652}3653365436553656@Test(dataProvider = "intCompareOpMaskProvider")3657static void UNSIGNED_LTInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,3658IntFunction<boolean[]> fm) {3659int[] a = fa.apply(SPECIES.length());3660int[] b = fb.apply(SPECIES.length());3661boolean[] mask = fm.apply(SPECIES.length());36623663VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);36643665for (int ic = 0; ic < INVOC_COUNT; ic++) {3666for (int i = 0; i < a.length; i += SPECIES.length()) {3667IntVector av = IntVector.fromArray(SPECIES, a, i);3668IntVector bv = IntVector.fromArray(SPECIES, b, i);3669VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_LT, bv, vmask);36703671// Check results as part of computation.3672for (int j = 0; j < SPECIES.length(); j++) {3673Assert.assertEquals(mv.laneIsSet(j), mask[j] && ult(a[i + j], b[i + j]));3674}3675}3676}3677}36783679368036813682@Test(dataProvider = "intCompareOpProvider")3683static void UNSIGNED_GTInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {3684int[] a = fa.apply(SPECIES.length());3685int[] b = fb.apply(SPECIES.length());36863687for (int ic = 0; ic < INVOC_COUNT; ic++) {3688for (int i = 0; i < a.length; i += SPECIES.length()) {3689IntVector av = IntVector.fromArray(SPECIES, a, i);3690IntVector bv = IntVector.fromArray(SPECIES, b, i);3691VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_GT, bv);36923693// Check results as part of computation.3694for (int j = 0; j < SPECIES.length(); j++) {3695Assert.assertEquals(mv.laneIsSet(j), ugt(a[i + j], b[i + j]));3696}3697}3698}3699}3700370137023703@Test(dataProvider = "intCompareOpMaskProvider")3704static void UNSIGNED_GTInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,3705IntFunction<boolean[]> fm) {3706int[] a = fa.apply(SPECIES.length());3707int[] b = fb.apply(SPECIES.length());3708boolean[] mask = fm.apply(SPECIES.length());37093710VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);37113712for (int ic = 0; ic < INVOC_COUNT; ic++) {3713for (int i = 0; i < a.length; i += SPECIES.length()) {3714IntVector av = IntVector.fromArray(SPECIES, a, i);3715IntVector bv = IntVector.fromArray(SPECIES, b, i);3716VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_GT, bv, vmask);37173718// Check results as part of computation.3719for (int j = 0; j < SPECIES.length(); j++) {3720Assert.assertEquals(mv.laneIsSet(j), mask[j] && ugt(a[i + j], b[i + j]));3721}3722}3723}3724}37253726372737283729@Test(dataProvider = "intCompareOpProvider")3730static void UNSIGNED_LEInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {3731int[] a = fa.apply(SPECIES.length());3732int[] b = fb.apply(SPECIES.length());37333734for (int ic = 0; ic < INVOC_COUNT; ic++) {3735for (int i = 0; i < a.length; i += SPECIES.length()) {3736IntVector av = IntVector.fromArray(SPECIES, a, i);3737IntVector bv = IntVector.fromArray(SPECIES, b, i);3738VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_LE, bv);37393740// Check results as part of computation.3741for (int j = 0; j < SPECIES.length(); j++) {3742Assert.assertEquals(mv.laneIsSet(j), ule(a[i + j], b[i + j]));3743}3744}3745}3746}3747374837493750@Test(dataProvider = "intCompareOpMaskProvider")3751static void UNSIGNED_LEInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,3752IntFunction<boolean[]> fm) {3753int[] a = fa.apply(SPECIES.length());3754int[] b = fb.apply(SPECIES.length());3755boolean[] mask = fm.apply(SPECIES.length());37563757VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);37583759for (int ic = 0; ic < INVOC_COUNT; ic++) {3760for (int i = 0; i < a.length; i += SPECIES.length()) {3761IntVector av = IntVector.fromArray(SPECIES, a, i);3762IntVector bv = IntVector.fromArray(SPECIES, b, i);3763VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_LE, bv, vmask);37643765// Check results as part of computation.3766for (int j = 0; j < SPECIES.length(); j++) {3767Assert.assertEquals(mv.laneIsSet(j), mask[j] && ule(a[i + j], b[i + j]));3768}3769}3770}3771}37723773377437753776@Test(dataProvider = "intCompareOpProvider")3777static void UNSIGNED_GEInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {3778int[] a = fa.apply(SPECIES.length());3779int[] b = fb.apply(SPECIES.length());37803781for (int ic = 0; ic < INVOC_COUNT; ic++) {3782for (int i = 0; i < a.length; i += SPECIES.length()) {3783IntVector av = IntVector.fromArray(SPECIES, a, i);3784IntVector bv = IntVector.fromArray(SPECIES, b, i);3785VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_GE, bv);37863787// Check results as part of computation.3788for (int j = 0; j < SPECIES.length(); j++) {3789Assert.assertEquals(mv.laneIsSet(j), uge(a[i + j], b[i + j]));3790}3791}3792}3793}3794379537963797@Test(dataProvider = "intCompareOpMaskProvider")3798static void UNSIGNED_GEInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,3799IntFunction<boolean[]> fm) {3800int[] a = fa.apply(SPECIES.length());3801int[] b = fb.apply(SPECIES.length());3802boolean[] mask = fm.apply(SPECIES.length());38033804VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);38053806for (int ic = 0; ic < INVOC_COUNT; ic++) {3807for (int i = 0; i < a.length; i += SPECIES.length()) {3808IntVector av = IntVector.fromArray(SPECIES, a, i);3809IntVector bv = IntVector.fromArray(SPECIES, b, i);3810VectorMask<Integer> mv = av.compare(VectorOperators.UNSIGNED_GE, bv, vmask);38113812// Check results as part of computation.3813for (int j = 0; j < SPECIES.length(); j++) {3814Assert.assertEquals(mv.laneIsSet(j), mask[j] && uge(a[i + j], b[i + j]));3815}3816}3817}3818}3819382038213822@Test(dataProvider = "intCompareOpProvider")3823static void LTInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {3824int[] a = fa.apply(SPECIES.length());3825int[] b = fb.apply(SPECIES.length());38263827for (int i = 0; i < a.length; i += SPECIES.length()) {3828IntVector av = IntVector.fromArray(SPECIES, a, i);3829VectorMask<Integer> mv = av.compare(VectorOperators.LT, b[i]);38303831// Check results as part of computation.3832for (int j = 0; j < SPECIES.length(); j++) {3833Assert.assertEquals(mv.laneIsSet(j), a[i + j] < b[i]);3834}3835}3836}383738383839@Test(dataProvider = "intCompareOpMaskProvider")3840static void LTInt128VectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa,3841IntFunction<int[]> fb, IntFunction<boolean[]> fm) {3842int[] a = fa.apply(SPECIES.length());3843int[] b = fb.apply(SPECIES.length());3844boolean[] mask = fm.apply(SPECIES.length());38453846VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);38473848for (int i = 0; i < a.length; i += SPECIES.length()) {3849IntVector av = IntVector.fromArray(SPECIES, a, i);3850VectorMask<Integer> mv = av.compare(VectorOperators.LT, b[i], vmask);38513852// Check results as part of computation.3853for (int j = 0; j < SPECIES.length(); j++) {3854Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] < b[i]));3855}3856}3857}38583859@Test(dataProvider = "intCompareOpProvider")3860static void LTInt128VectorTestsBroadcastLongSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {3861int[] a = fa.apply(SPECIES.length());3862int[] b = fb.apply(SPECIES.length());38633864for (int i = 0; i < a.length; i += SPECIES.length()) {3865IntVector av = IntVector.fromArray(SPECIES, a, i);3866VectorMask<Integer> mv = av.compare(VectorOperators.LT, (long)b[i]);38673868// Check results as part of computation.3869for (int j = 0; j < SPECIES.length(); j++) {3870Assert.assertEquals(mv.laneIsSet(j), a[i + j] < (int)((long)b[i]));3871}3872}3873}387438753876@Test(dataProvider = "intCompareOpMaskProvider")3877static void LTInt128VectorTestsBroadcastLongMaskedSmokeTest(IntFunction<int[]> fa,3878IntFunction<int[]> fb, IntFunction<boolean[]> fm) {3879int[] a = fa.apply(SPECIES.length());3880int[] b = fb.apply(SPECIES.length());3881boolean[] mask = fm.apply(SPECIES.length());38823883VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);38843885for (int i = 0; i < a.length; i += SPECIES.length()) {3886IntVector av = IntVector.fromArray(SPECIES, a, i);3887VectorMask<Integer> mv = av.compare(VectorOperators.LT, (long)b[i], vmask);38883889// Check results as part of computation.3890for (int j = 0; j < SPECIES.length(); j++) {3891Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] < (int)((long)b[i])));3892}3893}3894}38953896@Test(dataProvider = "intCompareOpProvider")3897static void EQInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {3898int[] a = fa.apply(SPECIES.length());3899int[] b = fb.apply(SPECIES.length());39003901for (int i = 0; i < a.length; i += SPECIES.length()) {3902IntVector av = IntVector.fromArray(SPECIES, a, i);3903VectorMask<Integer> mv = av.compare(VectorOperators.EQ, b[i]);39043905// Check results as part of computation.3906for (int j = 0; j < SPECIES.length(); j++) {3907Assert.assertEquals(mv.laneIsSet(j), a[i + j] == b[i]);3908}3909}3910}391139123913@Test(dataProvider = "intCompareOpMaskProvider")3914static void EQInt128VectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa,3915IntFunction<int[]> fb, IntFunction<boolean[]> fm) {3916int[] a = fa.apply(SPECIES.length());3917int[] b = fb.apply(SPECIES.length());3918boolean[] mask = fm.apply(SPECIES.length());39193920VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);39213922for (int i = 0; i < a.length; i += SPECIES.length()) {3923IntVector av = IntVector.fromArray(SPECIES, a, i);3924VectorMask<Integer> mv = av.compare(VectorOperators.EQ, b[i], vmask);39253926// Check results as part of computation.3927for (int j = 0; j < SPECIES.length(); j++) {3928Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] == b[i]));3929}3930}3931}39323933@Test(dataProvider = "intCompareOpProvider")3934static void EQInt128VectorTestsBroadcastLongSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {3935int[] a = fa.apply(SPECIES.length());3936int[] b = fb.apply(SPECIES.length());39373938for (int i = 0; i < a.length; i += SPECIES.length()) {3939IntVector av = IntVector.fromArray(SPECIES, a, i);3940VectorMask<Integer> mv = av.compare(VectorOperators.EQ, (long)b[i]);39413942// Check results as part of computation.3943for (int j = 0; j < SPECIES.length(); j++) {3944Assert.assertEquals(mv.laneIsSet(j), a[i + j] == (int)((long)b[i]));3945}3946}3947}394839493950@Test(dataProvider = "intCompareOpMaskProvider")3951static void EQInt128VectorTestsBroadcastLongMaskedSmokeTest(IntFunction<int[]> fa,3952IntFunction<int[]> fb, IntFunction<boolean[]> fm) {3953int[] a = fa.apply(SPECIES.length());3954int[] b = fb.apply(SPECIES.length());3955boolean[] mask = fm.apply(SPECIES.length());39563957VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);39583959for (int i = 0; i < a.length; i += SPECIES.length()) {3960IntVector av = IntVector.fromArray(SPECIES, a, i);3961VectorMask<Integer> mv = av.compare(VectorOperators.EQ, (long)b[i], vmask);39623963// Check results as part of computation.3964for (int j = 0; j < SPECIES.length(); j++) {3965Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] == (int)((long)b[i])));3966}3967}3968}39693970static int blend(int a, int b, boolean mask) {3971return mask ? b : a;3972}39733974@Test(dataProvider = "intBinaryOpMaskProvider")3975static void blendInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb,3976IntFunction<boolean[]> fm) {3977int[] a = fa.apply(SPECIES.length());3978int[] b = fb.apply(SPECIES.length());3979int[] r = fr.apply(SPECIES.length());3980boolean[] mask = fm.apply(SPECIES.length());3981VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);39823983for (int ic = 0; ic < INVOC_COUNT; ic++) {3984for (int i = 0; i < a.length; i += SPECIES.length()) {3985IntVector av = IntVector.fromArray(SPECIES, a, i);3986IntVector bv = IntVector.fromArray(SPECIES, b, i);3987av.blend(bv, vmask).intoArray(r, i);3988}3989}39903991assertArraysEquals(r, a, b, mask, Int128VectorTests::blend);3992}39933994@Test(dataProvider = "intUnaryOpShuffleProvider")3995static void RearrangeInt128VectorTests(IntFunction<int[]> fa,3996BiFunction<Integer,Integer,int[]> fs) {3997int[] a = fa.apply(SPECIES.length());3998int[] order = fs.apply(a.length, SPECIES.length());3999int[] r = fr.apply(SPECIES.length());40004001for (int ic = 0; ic < INVOC_COUNT; ic++) {4002for (int i = 0; i < a.length; i += SPECIES.length()) {4003IntVector av = IntVector.fromArray(SPECIES, a, i);4004av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);4005}4006}40074008assertRearrangeArraysEquals(r, a, order, SPECIES.length());4009}40104011@Test(dataProvider = "intUnaryOpShuffleMaskProvider")4012static void RearrangeInt128VectorTestsMaskedSmokeTest(IntFunction<int[]> fa,4013BiFunction<Integer,Integer,int[]> fs,4014IntFunction<boolean[]> fm) {4015int[] a = fa.apply(SPECIES.length());4016int[] order = fs.apply(a.length, SPECIES.length());4017int[] r = fr.apply(SPECIES.length());4018boolean[] mask = fm.apply(SPECIES.length());4019VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);40204021for (int i = 0; i < a.length; i += SPECIES.length()) {4022IntVector av = IntVector.fromArray(SPECIES, a, i);4023av.rearrange(VectorShuffle.fromArray(SPECIES, order, i), vmask).intoArray(r, i);4024}40254026assertRearrangeArraysEquals(r, a, order, mask, SPECIES.length());4027}4028@Test(dataProvider = "intUnaryOpProvider")4029static void getInt128VectorTests(IntFunction<int[]> fa) {4030int[] a = fa.apply(SPECIES.length());4031int[] r = fr.apply(SPECIES.length());40324033for (int ic = 0; ic < INVOC_COUNT; ic++) {4034for (int i = 0; i < a.length; i += SPECIES.length()) {4035IntVector av = IntVector.fromArray(SPECIES, a, i);4036int num_lanes = SPECIES.length();4037// Manually unroll because full unroll happens after intrinsification.4038// Unroll is needed because get intrinsic requires for index to be a known constant.4039if (num_lanes == 1) {4040r[i]=av.lane(0);4041} else if (num_lanes == 2) {4042r[i]=av.lane(0);4043r[i+1]=av.lane(1);4044} else if (num_lanes == 4) {4045r[i]=av.lane(0);4046r[i+1]=av.lane(1);4047r[i+2]=av.lane(2);4048r[i+3]=av.lane(3);4049} else if (num_lanes == 8) {4050r[i]=av.lane(0);4051r[i+1]=av.lane(1);4052r[i+2]=av.lane(2);4053r[i+3]=av.lane(3);4054r[i+4]=av.lane(4);4055r[i+5]=av.lane(5);4056r[i+6]=av.lane(6);4057r[i+7]=av.lane(7);4058} else if (num_lanes == 16) {4059r[i]=av.lane(0);4060r[i+1]=av.lane(1);4061r[i+2]=av.lane(2);4062r[i+3]=av.lane(3);4063r[i+4]=av.lane(4);4064r[i+5]=av.lane(5);4065r[i+6]=av.lane(6);4066r[i+7]=av.lane(7);4067r[i+8]=av.lane(8);4068r[i+9]=av.lane(9);4069r[i+10]=av.lane(10);4070r[i+11]=av.lane(11);4071r[i+12]=av.lane(12);4072r[i+13]=av.lane(13);4073r[i+14]=av.lane(14);4074r[i+15]=av.lane(15);4075} else if (num_lanes == 32) {4076r[i]=av.lane(0);4077r[i+1]=av.lane(1);4078r[i+2]=av.lane(2);4079r[i+3]=av.lane(3);4080r[i+4]=av.lane(4);4081r[i+5]=av.lane(5);4082r[i+6]=av.lane(6);4083r[i+7]=av.lane(7);4084r[i+8]=av.lane(8);4085r[i+9]=av.lane(9);4086r[i+10]=av.lane(10);4087r[i+11]=av.lane(11);4088r[i+12]=av.lane(12);4089r[i+13]=av.lane(13);4090r[i+14]=av.lane(14);4091r[i+15]=av.lane(15);4092r[i+16]=av.lane(16);4093r[i+17]=av.lane(17);4094r[i+18]=av.lane(18);4095r[i+19]=av.lane(19);4096r[i+20]=av.lane(20);4097r[i+21]=av.lane(21);4098r[i+22]=av.lane(22);4099r[i+23]=av.lane(23);4100r[i+24]=av.lane(24);4101r[i+25]=av.lane(25);4102r[i+26]=av.lane(26);4103r[i+27]=av.lane(27);4104r[i+28]=av.lane(28);4105r[i+29]=av.lane(29);4106r[i+30]=av.lane(30);4107r[i+31]=av.lane(31);4108} else if (num_lanes == 64) {4109r[i]=av.lane(0);4110r[i+1]=av.lane(1);4111r[i+2]=av.lane(2);4112r[i+3]=av.lane(3);4113r[i+4]=av.lane(4);4114r[i+5]=av.lane(5);4115r[i+6]=av.lane(6);4116r[i+7]=av.lane(7);4117r[i+8]=av.lane(8);4118r[i+9]=av.lane(9);4119r[i+10]=av.lane(10);4120r[i+11]=av.lane(11);4121r[i+12]=av.lane(12);4122r[i+13]=av.lane(13);4123r[i+14]=av.lane(14);4124r[i+15]=av.lane(15);4125r[i+16]=av.lane(16);4126r[i+17]=av.lane(17);4127r[i+18]=av.lane(18);4128r[i+19]=av.lane(19);4129r[i+20]=av.lane(20);4130r[i+21]=av.lane(21);4131r[i+22]=av.lane(22);4132r[i+23]=av.lane(23);4133r[i+24]=av.lane(24);4134r[i+25]=av.lane(25);4135r[i+26]=av.lane(26);4136r[i+27]=av.lane(27);4137r[i+28]=av.lane(28);4138r[i+29]=av.lane(29);4139r[i+30]=av.lane(30);4140r[i+31]=av.lane(31);4141r[i+32]=av.lane(32);4142r[i+33]=av.lane(33);4143r[i+34]=av.lane(34);4144r[i+35]=av.lane(35);4145r[i+36]=av.lane(36);4146r[i+37]=av.lane(37);4147r[i+38]=av.lane(38);4148r[i+39]=av.lane(39);4149r[i+40]=av.lane(40);4150r[i+41]=av.lane(41);4151r[i+42]=av.lane(42);4152r[i+43]=av.lane(43);4153r[i+44]=av.lane(44);4154r[i+45]=av.lane(45);4155r[i+46]=av.lane(46);4156r[i+47]=av.lane(47);4157r[i+48]=av.lane(48);4158r[i+49]=av.lane(49);4159r[i+50]=av.lane(50);4160r[i+51]=av.lane(51);4161r[i+52]=av.lane(52);4162r[i+53]=av.lane(53);4163r[i+54]=av.lane(54);4164r[i+55]=av.lane(55);4165r[i+56]=av.lane(56);4166r[i+57]=av.lane(57);4167r[i+58]=av.lane(58);4168r[i+59]=av.lane(59);4169r[i+60]=av.lane(60);4170r[i+61]=av.lane(61);4171r[i+62]=av.lane(62);4172r[i+63]=av.lane(63);4173} else {4174for (int j = 0; j < SPECIES.length(); j++) {4175r[i+j]=av.lane(j);4176}4177}4178}4179}41804181assertArraysEquals(r, a, Int128VectorTests::get);4182}41834184@Test(dataProvider = "intUnaryOpProvider")4185static void BroadcastInt128VectorTests(IntFunction<int[]> fa) {4186int[] a = fa.apply(SPECIES.length());4187int[] r = new int[a.length];41884189for (int ic = 0; ic < INVOC_COUNT; ic++) {4190for (int i = 0; i < a.length; i += SPECIES.length()) {4191IntVector.broadcast(SPECIES, a[i]).intoArray(r, i);4192}4193}41944195assertBroadcastArraysEquals(r, a);4196}419741984199420042014202@Test(dataProvider = "intUnaryOpProvider")4203static void ZeroInt128VectorTests(IntFunction<int[]> fa) {4204int[] a = fa.apply(SPECIES.length());4205int[] r = new int[a.length];42064207for (int ic = 0; ic < INVOC_COUNT; ic++) {4208for (int i = 0; i < a.length; i += SPECIES.length()) {4209IntVector.zero(SPECIES).intoArray(a, i);4210}4211}42124213Assert.assertEquals(a, r);4214}42154216421742184219static int[] sliceUnary(int[] a, int origin, int idx) {4220int[] res = new int[SPECIES.length()];4221for (int i = 0; i < SPECIES.length(); i++){4222if(i+origin < SPECIES.length())4223res[i] = a[idx+i+origin];4224else4225res[i] = (int)0;4226}4227return res;4228}42294230@Test(dataProvider = "intUnaryOpProvider")4231static void sliceUnaryInt128VectorTests(IntFunction<int[]> fa) {4232int[] a = fa.apply(SPECIES.length());4233int[] r = new int[a.length];4234int origin = (new java.util.Random()).nextInt(SPECIES.length());4235for (int ic = 0; ic < INVOC_COUNT; ic++) {4236for (int i = 0; i < a.length; i += SPECIES.length()) {4237IntVector av = IntVector.fromArray(SPECIES, a, i);4238av.slice(origin).intoArray(r, i);4239}4240}42414242assertArraysEquals(r, a, origin, Int128VectorTests::sliceUnary);4243}4244static int[] sliceBinary(int[] a, int[] b, int origin, int idx) {4245int[] res = new int[SPECIES.length()];4246for (int i = 0, j = 0; i < SPECIES.length(); i++){4247if(i+origin < SPECIES.length())4248res[i] = a[idx+i+origin];4249else {4250res[i] = b[idx+j];4251j++;4252}4253}4254return res;4255}42564257@Test(dataProvider = "intBinaryOpProvider")4258static void sliceBinaryInt128VectorTestsBinary(IntFunction<int[]> fa, IntFunction<int[]> fb) {4259int[] a = fa.apply(SPECIES.length());4260int[] b = fb.apply(SPECIES.length());4261int[] r = new int[a.length];4262int origin = (new java.util.Random()).nextInt(SPECIES.length());4263for (int ic = 0; ic < INVOC_COUNT; ic++) {4264for (int i = 0; i < a.length; i += SPECIES.length()) {4265IntVector av = IntVector.fromArray(SPECIES, a, i);4266IntVector bv = IntVector.fromArray(SPECIES, b, i);4267av.slice(origin, bv).intoArray(r, i);4268}4269}42704271assertArraysEquals(r, a, b, origin, Int128VectorTests::sliceBinary);4272}4273static int[] slice(int[] a, int[] b, int origin, boolean[] mask, int idx) {4274int[] res = new int[SPECIES.length()];4275for (int i = 0, j = 0; i < SPECIES.length(); i++){4276if(i+origin < SPECIES.length())4277res[i] = mask[i] ? a[idx+i+origin] : (int)0;4278else {4279res[i] = mask[i] ? b[idx+j] : (int)0;4280j++;4281}4282}4283return res;4284}42854286@Test(dataProvider = "intBinaryOpMaskProvider")4287static void sliceInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,4288IntFunction<boolean[]> fm) {4289int[] a = fa.apply(SPECIES.length());4290int[] b = fb.apply(SPECIES.length());4291boolean[] mask = fm.apply(SPECIES.length());4292VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);42934294int[] r = new int[a.length];4295int origin = (new java.util.Random()).nextInt(SPECIES.length());4296for (int ic = 0; ic < INVOC_COUNT; ic++) {4297for (int i = 0; i < a.length; i += SPECIES.length()) {4298IntVector av = IntVector.fromArray(SPECIES, a, i);4299IntVector bv = IntVector.fromArray(SPECIES, b, i);4300av.slice(origin, bv, vmask).intoArray(r, i);4301}4302}43034304assertArraysEquals(r, a, b, origin, mask, Int128VectorTests::slice);4305}4306static int[] unsliceUnary(int[] a, int origin, int idx) {4307int[] res = new int[SPECIES.length()];4308for (int i = 0, j = 0; i < SPECIES.length(); i++){4309if(i < origin)4310res[i] = (int)0;4311else {4312res[i] = a[idx+j];4313j++;4314}4315}4316return res;4317}43184319@Test(dataProvider = "intUnaryOpProvider")4320static void unsliceUnaryInt128VectorTests(IntFunction<int[]> fa) {4321int[] a = fa.apply(SPECIES.length());4322int[] r = new int[a.length];4323int origin = (new java.util.Random()).nextInt(SPECIES.length());4324for (int ic = 0; ic < INVOC_COUNT; ic++) {4325for (int i = 0; i < a.length; i += SPECIES.length()) {4326IntVector av = IntVector.fromArray(SPECIES, a, i);4327av.unslice(origin).intoArray(r, i);4328}4329}43304331assertArraysEquals(r, a, origin, Int128VectorTests::unsliceUnary);4332}4333static int[] unsliceBinary(int[] a, int[] b, int origin, int part, int idx) {4334int[] res = new int[SPECIES.length()];4335for (int i = 0, j = 0; i < SPECIES.length(); i++){4336if (part == 0) {4337if (i < origin)4338res[i] = b[idx+i];4339else {4340res[i] = a[idx+j];4341j++;4342}4343} else if (part == 1) {4344if (i < origin)4345res[i] = a[idx+SPECIES.length()-origin+i];4346else {4347res[i] = b[idx+origin+j];4348j++;4349}4350}4351}4352return res;4353}43544355@Test(dataProvider = "intBinaryOpProvider")4356static void unsliceBinaryInt128VectorTestsBinary(IntFunction<int[]> fa, IntFunction<int[]> fb) {4357int[] a = fa.apply(SPECIES.length());4358int[] b = fb.apply(SPECIES.length());4359int[] r = new int[a.length];4360int origin = (new java.util.Random()).nextInt(SPECIES.length());4361int part = (new java.util.Random()).nextInt(2);4362for (int ic = 0; ic < INVOC_COUNT; ic++) {4363for (int i = 0; i < a.length; i += SPECIES.length()) {4364IntVector av = IntVector.fromArray(SPECIES, a, i);4365IntVector bv = IntVector.fromArray(SPECIES, b, i);4366av.unslice(origin, bv, part).intoArray(r, i);4367}4368}43694370assertArraysEquals(r, a, b, origin, part, Int128VectorTests::unsliceBinary);4371}4372static int[] unslice(int[] a, int[] b, int origin, int part, boolean[] mask, int idx) {4373int[] res = new int[SPECIES.length()];4374for (int i = 0, j = 0; i < SPECIES.length(); i++){4375if(i+origin < SPECIES.length())4376res[i] = b[idx+i+origin];4377else {4378res[i] = b[idx+j];4379j++;4380}4381}4382for (int i = 0; i < SPECIES.length(); i++){4383res[i] = mask[i] ? a[idx+i] : res[i];4384}4385int[] res1 = new int[SPECIES.length()];4386if (part == 0) {4387for (int i = 0, j = 0; i < SPECIES.length(); i++){4388if (i < origin)4389res1[i] = b[idx+i];4390else {4391res1[i] = res[j];4392j++;4393}4394}4395} else if (part == 1) {4396for (int i = 0, j = 0; i < SPECIES.length(); i++){4397if (i < origin)4398res1[i] = res[SPECIES.length()-origin+i];4399else {4400res1[i] = b[idx+origin+j];4401j++;4402}4403}4404}4405return res1;4406}44074408@Test(dataProvider = "intBinaryOpMaskProvider")4409static void unsliceInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,4410IntFunction<boolean[]> fm) {4411int[] a = fa.apply(SPECIES.length());4412int[] b = fb.apply(SPECIES.length());4413boolean[] mask = fm.apply(SPECIES.length());4414VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);4415int[] r = new int[a.length];4416int origin = (new java.util.Random()).nextInt(SPECIES.length());4417int part = (new java.util.Random()).nextInt(2);4418for (int ic = 0; ic < INVOC_COUNT; ic++) {4419for (int i = 0; i < a.length; i += SPECIES.length()) {4420IntVector av = IntVector.fromArray(SPECIES, a, i);4421IntVector bv = IntVector.fromArray(SPECIES, b, i);4422av.unslice(origin, bv, part, vmask).intoArray(r, i);4423}4424}44254426assertArraysEquals(r, a, b, origin, part, mask, Int128VectorTests::unslice);4427}442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451static int BITWISE_BLEND(int a, int b, int c) {4452return (int)((a&~(c))|(b&c));4453}4454static int bitwiseBlend(int a, int b, int c) {4455return (int)((a&~(c))|(b&c));4456}445744584459@Test(dataProvider = "intTernaryOpProvider")4460static void BITWISE_BLENDInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) {4461int[] a = fa.apply(SPECIES.length());4462int[] b = fb.apply(SPECIES.length());4463int[] c = fc.apply(SPECIES.length());4464int[] r = fr.apply(SPECIES.length());44654466for (int ic = 0; ic < INVOC_COUNT; ic++) {4467for (int i = 0; i < a.length; i += SPECIES.length()) {4468IntVector av = IntVector.fromArray(SPECIES, a, i);4469IntVector bv = IntVector.fromArray(SPECIES, b, i);4470IntVector cv = IntVector.fromArray(SPECIES, c, i);4471av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv).intoArray(r, i);4472}4473}44744475assertArraysEquals(r, a, b, c, Int128VectorTests::BITWISE_BLEND);4476}4477@Test(dataProvider = "intTernaryOpProvider")4478static void bitwiseBlendInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) {4479int[] a = fa.apply(SPECIES.length());4480int[] b = fb.apply(SPECIES.length());4481int[] c = fc.apply(SPECIES.length());4482int[] r = fr.apply(SPECIES.length());44834484for (int i = 0; i < a.length; i += SPECIES.length()) {4485IntVector av = IntVector.fromArray(SPECIES, a, i);4486IntVector bv = IntVector.fromArray(SPECIES, b, i);4487IntVector cv = IntVector.fromArray(SPECIES, c, i);4488av.bitwiseBlend(bv, cv).intoArray(r, i);4489}44904491assertArraysEquals(r, a, b, c, Int128VectorTests::bitwiseBlend);4492}449344944495@Test(dataProvider = "intTernaryOpMaskProvider")4496static void BITWISE_BLENDInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,4497IntFunction<int[]> fc, IntFunction<boolean[]> fm) {4498int[] a = fa.apply(SPECIES.length());4499int[] b = fb.apply(SPECIES.length());4500int[] c = fc.apply(SPECIES.length());4501int[] r = fr.apply(SPECIES.length());4502boolean[] mask = fm.apply(SPECIES.length());4503VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);45044505for (int ic = 0; ic < INVOC_COUNT; ic++) {4506for (int i = 0; i < a.length; i += SPECIES.length()) {4507IntVector av = IntVector.fromArray(SPECIES, a, i);4508IntVector bv = IntVector.fromArray(SPECIES, b, i);4509IntVector cv = IntVector.fromArray(SPECIES, c, i);4510av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv, vmask).intoArray(r, i);4511}4512}45134514assertArraysEquals(r, a, b, c, mask, Int128VectorTests::BITWISE_BLEND);4515}45164517451845194520@Test(dataProvider = "intTernaryOpProvider")4521static void BITWISE_BLENDInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) {4522int[] a = fa.apply(SPECIES.length());4523int[] b = fb.apply(SPECIES.length());4524int[] c = fc.apply(SPECIES.length());4525int[] r = fr.apply(SPECIES.length());45264527for (int i = 0; i < a.length; i += SPECIES.length()) {4528IntVector av = IntVector.fromArray(SPECIES, a, i);4529IntVector bv = IntVector.fromArray(SPECIES, b, i);4530av.lanewise(VectorOperators.BITWISE_BLEND, bv, c[i]).intoArray(r, i);4531}4532assertBroadcastArraysEquals(r, a, b, c, Int128VectorTests::BITWISE_BLEND);4533}45344535@Test(dataProvider = "intTernaryOpProvider")4536static void BITWISE_BLENDInt128VectorTestsAltBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) {4537int[] a = fa.apply(SPECIES.length());4538int[] b = fb.apply(SPECIES.length());4539int[] c = fc.apply(SPECIES.length());4540int[] r = fr.apply(SPECIES.length());45414542for (int i = 0; i < a.length; i += SPECIES.length()) {4543IntVector av = IntVector.fromArray(SPECIES, a, i);4544IntVector cv = IntVector.fromArray(SPECIES, c, i);4545av.lanewise(VectorOperators.BITWISE_BLEND, b[i], cv).intoArray(r, i);4546}4547assertAltBroadcastArraysEquals(r, a, b, c, Int128VectorTests::BITWISE_BLEND);4548}4549@Test(dataProvider = "intTernaryOpProvider")4550static void bitwiseBlendInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) {4551int[] a = fa.apply(SPECIES.length());4552int[] b = fb.apply(SPECIES.length());4553int[] c = fc.apply(SPECIES.length());4554int[] r = fr.apply(SPECIES.length());45554556for (int i = 0; i < a.length; i += SPECIES.length()) {4557IntVector av = IntVector.fromArray(SPECIES, a, i);4558IntVector bv = IntVector.fromArray(SPECIES, b, i);4559av.bitwiseBlend(bv, c[i]).intoArray(r, i);4560}4561assertBroadcastArraysEquals(r, a, b, c, Int128VectorTests::bitwiseBlend);4562}45634564@Test(dataProvider = "intTernaryOpProvider")4565static void bitwiseBlendInt128VectorTestsAltBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) {4566int[] a = fa.apply(SPECIES.length());4567int[] b = fb.apply(SPECIES.length());4568int[] c = fc.apply(SPECIES.length());4569int[] r = fr.apply(SPECIES.length());45704571for (int i = 0; i < a.length; i += SPECIES.length()) {4572IntVector av = IntVector.fromArray(SPECIES, a, i);4573IntVector cv = IntVector.fromArray(SPECIES, c, i);4574av.bitwiseBlend(b[i], cv).intoArray(r, i);4575}4576assertAltBroadcastArraysEquals(r, a, b, c, Int128VectorTests::bitwiseBlend);4577}457845794580@Test(dataProvider = "intTernaryOpMaskProvider")4581static void BITWISE_BLENDInt128VectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,4582IntFunction<int[]> fc, IntFunction<boolean[]> fm) {4583int[] a = fa.apply(SPECIES.length());4584int[] b = fb.apply(SPECIES.length());4585int[] c = fc.apply(SPECIES.length());4586int[] r = fr.apply(SPECIES.length());4587boolean[] mask = fm.apply(SPECIES.length());4588VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);45894590for (int i = 0; i < a.length; i += SPECIES.length()) {4591IntVector av = IntVector.fromArray(SPECIES, a, i);4592IntVector bv = IntVector.fromArray(SPECIES, b, i);4593av.lanewise(VectorOperators.BITWISE_BLEND, bv, c[i], vmask).intoArray(r, i);4594}45954596assertBroadcastArraysEquals(r, a, b, c, mask, Int128VectorTests::BITWISE_BLEND);4597}45984599@Test(dataProvider = "intTernaryOpMaskProvider")4600static void BITWISE_BLENDInt128VectorTestsAltBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,4601IntFunction<int[]> fc, IntFunction<boolean[]> fm) {4602int[] a = fa.apply(SPECIES.length());4603int[] b = fb.apply(SPECIES.length());4604int[] c = fc.apply(SPECIES.length());4605int[] r = fr.apply(SPECIES.length());4606boolean[] mask = fm.apply(SPECIES.length());4607VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);46084609for (int i = 0; i < a.length; i += SPECIES.length()) {4610IntVector av = IntVector.fromArray(SPECIES, a, i);4611IntVector cv = IntVector.fromArray(SPECIES, c, i);4612av.lanewise(VectorOperators.BITWISE_BLEND, b[i], cv, vmask).intoArray(r, i);4613}46144615assertAltBroadcastArraysEquals(r, a, b, c, mask, Int128VectorTests::BITWISE_BLEND);4616}46174618461946204621@Test(dataProvider = "intTernaryOpProvider")4622static void BITWISE_BLENDInt128VectorTestsDoubleBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) {4623int[] a = fa.apply(SPECIES.length());4624int[] b = fb.apply(SPECIES.length());4625int[] c = fc.apply(SPECIES.length());4626int[] r = fr.apply(SPECIES.length());46274628for (int i = 0; i < a.length; i += SPECIES.length()) {4629IntVector av = IntVector.fromArray(SPECIES, a, i);4630av.lanewise(VectorOperators.BITWISE_BLEND, b[i], c[i]).intoArray(r, i);4631}46324633assertDoubleBroadcastArraysEquals(r, a, b, c, Int128VectorTests::BITWISE_BLEND);4634}4635@Test(dataProvider = "intTernaryOpProvider")4636static void bitwiseBlendInt128VectorTestsDoubleBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, IntFunction<int[]> fc) {4637int[] a = fa.apply(SPECIES.length());4638int[] b = fb.apply(SPECIES.length());4639int[] c = fc.apply(SPECIES.length());4640int[] r = fr.apply(SPECIES.length());46414642for (int i = 0; i < a.length; i += SPECIES.length()) {4643IntVector av = IntVector.fromArray(SPECIES, a, i);4644av.bitwiseBlend(b[i], c[i]).intoArray(r, i);4645}46464647assertDoubleBroadcastArraysEquals(r, a, b, c, Int128VectorTests::bitwiseBlend);4648}464946504651@Test(dataProvider = "intTernaryOpMaskProvider")4652static void BITWISE_BLENDInt128VectorTestsDoubleBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,4653IntFunction<int[]> fc, IntFunction<boolean[]> fm) {4654int[] a = fa.apply(SPECIES.length());4655int[] b = fb.apply(SPECIES.length());4656int[] c = fc.apply(SPECIES.length());4657int[] r = fr.apply(SPECIES.length());4658boolean[] mask = fm.apply(SPECIES.length());4659VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);46604661for (int i = 0; i < a.length; i += SPECIES.length()) {4662IntVector av = IntVector.fromArray(SPECIES, a, i);4663av.lanewise(VectorOperators.BITWISE_BLEND, b[i], c[i], vmask).intoArray(r, i);4664}46654666assertDoubleBroadcastArraysEquals(r, a, b, c, mask, Int128VectorTests::BITWISE_BLEND);4667}466846694670static int NEG(int a) {4671return (int)(-((int)a));4672}46734674static int neg(int a) {4675return (int)(-((int)a));4676}46774678@Test(dataProvider = "intUnaryOpProvider")4679static void NEGInt128VectorTests(IntFunction<int[]> fa) {4680int[] a = fa.apply(SPECIES.length());4681int[] r = fr.apply(SPECIES.length());46824683for (int ic = 0; ic < INVOC_COUNT; ic++) {4684for (int i = 0; i < a.length; i += SPECIES.length()) {4685IntVector av = IntVector.fromArray(SPECIES, a, i);4686av.lanewise(VectorOperators.NEG).intoArray(r, i);4687}4688}46894690assertArraysEquals(r, a, Int128VectorTests::NEG);4691}46924693@Test(dataProvider = "intUnaryOpProvider")4694static void negInt128VectorTests(IntFunction<int[]> fa) {4695int[] a = fa.apply(SPECIES.length());4696int[] r = fr.apply(SPECIES.length());46974698for (int ic = 0; ic < INVOC_COUNT; ic++) {4699for (int i = 0; i < a.length; i += SPECIES.length()) {4700IntVector av = IntVector.fromArray(SPECIES, a, i);4701av.neg().intoArray(r, i);4702}4703}47044705assertArraysEquals(r, a, Int128VectorTests::neg);4706}47074708@Test(dataProvider = "intUnaryOpMaskProvider")4709static void NEGMaskedInt128VectorTests(IntFunction<int[]> fa,4710IntFunction<boolean[]> fm) {4711int[] a = fa.apply(SPECIES.length());4712int[] r = fr.apply(SPECIES.length());4713boolean[] mask = fm.apply(SPECIES.length());4714VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);47154716for (int ic = 0; ic < INVOC_COUNT; ic++) {4717for (int i = 0; i < a.length; i += SPECIES.length()) {4718IntVector av = IntVector.fromArray(SPECIES, a, i);4719av.lanewise(VectorOperators.NEG, vmask).intoArray(r, i);4720}4721}47224723assertArraysEquals(r, a, mask, Int128VectorTests::NEG);4724}47254726static int ABS(int a) {4727return (int)(Math.abs((int)a));4728}47294730static int abs(int a) {4731return (int)(Math.abs((int)a));4732}47334734@Test(dataProvider = "intUnaryOpProvider")4735static void ABSInt128VectorTests(IntFunction<int[]> fa) {4736int[] a = fa.apply(SPECIES.length());4737int[] r = fr.apply(SPECIES.length());47384739for (int ic = 0; ic < INVOC_COUNT; ic++) {4740for (int i = 0; i < a.length; i += SPECIES.length()) {4741IntVector av = IntVector.fromArray(SPECIES, a, i);4742av.lanewise(VectorOperators.ABS).intoArray(r, i);4743}4744}47454746assertArraysEquals(r, a, Int128VectorTests::ABS);4747}47484749@Test(dataProvider = "intUnaryOpProvider")4750static void absInt128VectorTests(IntFunction<int[]> fa) {4751int[] a = fa.apply(SPECIES.length());4752int[] r = fr.apply(SPECIES.length());47534754for (int ic = 0; ic < INVOC_COUNT; ic++) {4755for (int i = 0; i < a.length; i += SPECIES.length()) {4756IntVector av = IntVector.fromArray(SPECIES, a, i);4757av.abs().intoArray(r, i);4758}4759}47604761assertArraysEquals(r, a, Int128VectorTests::abs);4762}47634764@Test(dataProvider = "intUnaryOpMaskProvider")4765static void ABSMaskedInt128VectorTests(IntFunction<int[]> fa,4766IntFunction<boolean[]> fm) {4767int[] a = fa.apply(SPECIES.length());4768int[] r = fr.apply(SPECIES.length());4769boolean[] mask = fm.apply(SPECIES.length());4770VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);47714772for (int ic = 0; ic < INVOC_COUNT; ic++) {4773for (int i = 0; i < a.length; i += SPECIES.length()) {4774IntVector av = IntVector.fromArray(SPECIES, a, i);4775av.lanewise(VectorOperators.ABS, vmask).intoArray(r, i);4776}4777}47784779assertArraysEquals(r, a, mask, Int128VectorTests::ABS);4780}478147824783static int NOT(int a) {4784return (int)(~((int)a));4785}47864787static int not(int a) {4788return (int)(~((int)a));4789}4790479147924793@Test(dataProvider = "intUnaryOpProvider")4794static void NOTInt128VectorTests(IntFunction<int[]> fa) {4795int[] a = fa.apply(SPECIES.length());4796int[] r = fr.apply(SPECIES.length());47974798for (int ic = 0; ic < INVOC_COUNT; ic++) {4799for (int i = 0; i < a.length; i += SPECIES.length()) {4800IntVector av = IntVector.fromArray(SPECIES, a, i);4801av.lanewise(VectorOperators.NOT).intoArray(r, i);4802}4803}48044805assertArraysEquals(r, a, Int128VectorTests::NOT);4806}48074808@Test(dataProvider = "intUnaryOpProvider")4809static void notInt128VectorTests(IntFunction<int[]> fa) {4810int[] a = fa.apply(SPECIES.length());4811int[] r = fr.apply(SPECIES.length());48124813for (int ic = 0; ic < INVOC_COUNT; ic++) {4814for (int i = 0; i < a.length; i += SPECIES.length()) {4815IntVector av = IntVector.fromArray(SPECIES, a, i);4816av.not().intoArray(r, i);4817}4818}48194820assertArraysEquals(r, a, Int128VectorTests::not);4821}4822482348244825@Test(dataProvider = "intUnaryOpMaskProvider")4826static void NOTMaskedInt128VectorTests(IntFunction<int[]> fa,4827IntFunction<boolean[]> fm) {4828int[] a = fa.apply(SPECIES.length());4829int[] r = fr.apply(SPECIES.length());4830boolean[] mask = fm.apply(SPECIES.length());4831VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);48324833for (int ic = 0; ic < INVOC_COUNT; ic++) {4834for (int i = 0; i < a.length; i += SPECIES.length()) {4835IntVector av = IntVector.fromArray(SPECIES, a, i);4836av.lanewise(VectorOperators.NOT, vmask).intoArray(r, i);4837}4838}48394840assertArraysEquals(r, a, mask, Int128VectorTests::NOT);4841}4842484348444845static int ZOMO(int a) {4846return (int)((a==0?0:-1));4847}4848484948504851@Test(dataProvider = "intUnaryOpProvider")4852static void ZOMOInt128VectorTests(IntFunction<int[]> fa) {4853int[] a = fa.apply(SPECIES.length());4854int[] r = fr.apply(SPECIES.length());48554856for (int ic = 0; ic < INVOC_COUNT; ic++) {4857for (int i = 0; i < a.length; i += SPECIES.length()) {4858IntVector av = IntVector.fromArray(SPECIES, a, i);4859av.lanewise(VectorOperators.ZOMO).intoArray(r, i);4860}4861}48624863assertArraysEquals(r, a, Int128VectorTests::ZOMO);4864}4865486648674868@Test(dataProvider = "intUnaryOpMaskProvider")4869static void ZOMOMaskedInt128VectorTests(IntFunction<int[]> fa,4870IntFunction<boolean[]> fm) {4871int[] a = fa.apply(SPECIES.length());4872int[] r = fr.apply(SPECIES.length());4873boolean[] mask = fm.apply(SPECIES.length());4874VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);48754876for (int ic = 0; ic < INVOC_COUNT; ic++) {4877for (int i = 0; i < a.length; i += SPECIES.length()) {4878IntVector av = IntVector.fromArray(SPECIES, a, i);4879av.lanewise(VectorOperators.ZOMO, vmask).intoArray(r, i);4880}4881}48824883assertArraysEquals(r, a, mask, Int128VectorTests::ZOMO);4884}48854886488748884889static int[] gather(int a[], int ix, int[] b, int iy) {4890int[] res = new int[SPECIES.length()];4891for (int i = 0; i < SPECIES.length(); i++) {4892int bi = iy + i;4893res[i] = a[b[bi] + ix];4894}4895return res;4896}48974898@Test(dataProvider = "intUnaryOpIndexProvider")4899static void gatherInt128VectorTests(IntFunction<int[]> fa, BiFunction<Integer,Integer,int[]> fs) {4900int[] a = fa.apply(SPECIES.length());4901int[] b = fs.apply(a.length, SPECIES.length());4902int[] r = new int[a.length];49034904for (int ic = 0; ic < INVOC_COUNT; ic++) {4905for (int i = 0; i < a.length; i += SPECIES.length()) {4906IntVector av = IntVector.fromArray(SPECIES, a, i, b, i);4907av.intoArray(r, i);4908}4909}49104911assertArraysEquals(r, a, b, Int128VectorTests::gather);4912}4913static int[] gatherMasked(int a[], int ix, boolean[] mask, int[] b, int iy) {4914int[] res = new int[SPECIES.length()];4915for (int i = 0; i < SPECIES.length(); i++) {4916int bi = iy + i;4917if (mask[i]) {4918res[i] = a[b[bi] + ix];4919}4920}4921return res;4922}49234924@Test(dataProvider = "intUnaryMaskedOpIndexProvider")4925static void gatherMaskedInt128VectorTests(IntFunction<int[]> fa, BiFunction<Integer,Integer,int[]> fs, IntFunction<boolean[]> fm) {4926int[] a = fa.apply(SPECIES.length());4927int[] b = fs.apply(a.length, SPECIES.length());4928int[] r = new int[a.length];4929boolean[] mask = fm.apply(SPECIES.length());4930VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);49314932for (int ic = 0; ic < INVOC_COUNT; ic++) {4933for (int i = 0; i < a.length; i += SPECIES.length()) {4934IntVector av = IntVector.fromArray(SPECIES, a, i, b, i, vmask);4935av.intoArray(r, i);4936}4937}49384939assertArraysEquals(r, a, b, mask, Int128VectorTests::gatherMasked);4940}49414942static int[] scatter(int a[], int ix, int[] b, int iy) {4943int[] res = new int[SPECIES.length()];4944for (int i = 0; i < SPECIES.length(); i++) {4945int bi = iy + i;4946res[b[bi]] = a[i + ix];4947}4948return res;4949}49504951@Test(dataProvider = "intUnaryOpIndexProvider")4952static void scatterInt128VectorTests(IntFunction<int[]> fa, BiFunction<Integer,Integer,int[]> fs) {4953int[] a = fa.apply(SPECIES.length());4954int[] b = fs.apply(a.length, SPECIES.length());4955int[] r = new int[a.length];49564957for (int ic = 0; ic < INVOC_COUNT; ic++) {4958for (int i = 0; i < a.length; i += SPECIES.length()) {4959IntVector av = IntVector.fromArray(SPECIES, a, i);4960av.intoArray(r, i, b, i);4961}4962}49634964assertArraysEquals(r, a, b, Int128VectorTests::scatter);4965}49664967static int[] scatterMasked(int r[], int a[], int ix, boolean[] mask, int[] b, int iy) {4968// First, gather r.4969int[] oldVal = gather(r, ix, b, iy);4970int[] newVal = new int[SPECIES.length()];49714972// Second, blending it with a.4973for (int i = 0; i < SPECIES.length(); i++) {4974newVal[i] = blend(oldVal[i], a[i+ix], mask[i]);4975}49764977// Third, scatter: copy old value of r, and scatter it manually.4978int[] res = Arrays.copyOfRange(r, ix, ix+SPECIES.length());4979for (int i = 0; i < SPECIES.length(); i++) {4980int bi = iy + i;4981res[b[bi]] = newVal[i];4982}49834984return res;4985}49864987@Test(dataProvider = "scatterMaskedOpIndexProvider")4988static void scatterMaskedInt128VectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb, BiFunction<Integer,Integer,int[]> fs, IntFunction<boolean[]> fm) {4989int[] a = fa.apply(SPECIES.length());4990int[] b = fs.apply(a.length, SPECIES.length());4991int[] r = fb.apply(SPECIES.length());4992boolean[] mask = fm.apply(SPECIES.length());4993VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);49944995for (int ic = 0; ic < INVOC_COUNT; ic++) {4996for (int i = 0; i < a.length; i += SPECIES.length()) {4997IntVector av = IntVector.fromArray(SPECIES, a, i);4998av.intoArray(r, i, b, i, vmask);4999}5000}50015002assertArraysEquals(r, a, b, mask, Int128VectorTests::scatterMasked);5003}500450055006@Test(dataProvider = "intCompareOpProvider")5007static void ltInt128VectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {5008int[] a = fa.apply(SPECIES.length());5009int[] b = fb.apply(SPECIES.length());50105011for (int i = 0; i < a.length; i += SPECIES.length()) {5012IntVector av = IntVector.fromArray(SPECIES, a, i);5013VectorMask<Integer> mv = av.lt(b[i]);50145015// Check results as part of computation.5016for (int j = 0; j < SPECIES.length(); j++) {5017Assert.assertEquals(mv.laneIsSet(j), a[i + j] < b[i]);5018}5019}5020}50215022@Test(dataProvider = "intCompareOpProvider")5023static void eqInt128VectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {5024int[] a = fa.apply(SPECIES.length());5025int[] b = fb.apply(SPECIES.length());50265027for (int i = 0; i < a.length; i += SPECIES.length()) {5028IntVector av = IntVector.fromArray(SPECIES, a, i);5029VectorMask<Integer> mv = av.eq(b[i]);50305031// Check results as part of computation.5032for (int j = 0; j < SPECIES.length(); j++) {5033Assert.assertEquals(mv.laneIsSet(j), a[i + j] == b[i]);5034}5035}5036}50375038@Test(dataProvider = "intUnaryOpProvider")5039static void toIntArrayInt128VectorTestsSmokeTest(IntFunction<int[]> fa) {5040int[] a = fa.apply(SPECIES.length());50415042for (int i = 0; i < a.length; i += SPECIES.length()) {5043IntVector av = IntVector.fromArray(SPECIES, a, i);5044int[] r = av.toIntArray();5045assertArraysEquals(r, a, i);5046}5047}50485049@Test(dataProvider = "intUnaryOpProvider")5050static void toLongArrayInt128VectorTestsSmokeTest(IntFunction<int[]> fa) {5051int[] a = fa.apply(SPECIES.length());50525053for (int i = 0; i < a.length; i += SPECIES.length()) {5054IntVector av = IntVector.fromArray(SPECIES, a, i);5055long[] r = av.toLongArray();5056assertArraysEquals(r, a, i);5057}5058}50595060@Test(dataProvider = "intUnaryOpProvider")5061static void toDoubleArrayInt128VectorTestsSmokeTest(IntFunction<int[]> fa) {5062int[] a = fa.apply(SPECIES.length());50635064for (int i = 0; i < a.length; i += SPECIES.length()) {5065IntVector av = IntVector.fromArray(SPECIES, a, i);5066double[] r = av.toDoubleArray();5067assertArraysEquals(r, a, i);5068}5069}50705071@Test(dataProvider = "intUnaryOpProvider")5072static void toStringInt128VectorTestsSmokeTest(IntFunction<int[]> fa) {5073int[] a = fa.apply(SPECIES.length());50745075for (int i = 0; i < a.length; i += SPECIES.length()) {5076IntVector av = IntVector.fromArray(SPECIES, a, i);5077String str = av.toString();50785079int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());5080Assert.assertTrue(str.equals(Arrays.toString(subarr)), "at index " + i + ", string should be = " + Arrays.toString(subarr) + ", but is = " + str);5081}5082}50835084@Test(dataProvider = "intUnaryOpProvider")5085static void hashCodeInt128VectorTestsSmokeTest(IntFunction<int[]> fa) {5086int[] a = fa.apply(SPECIES.length());50875088for (int i = 0; i < a.length; i += SPECIES.length()) {5089IntVector av = IntVector.fromArray(SPECIES, a, i);5090int hash = av.hashCode();50915092int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());5093int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr));5094Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash);5095}5096}509750985099static long ADDReduceLong(int[] a, int idx) {5100int res = 0;5101for (int i = idx; i < (idx + SPECIES.length()); i++) {5102res += a[i];5103}51045105return (long)res;5106}51075108static long ADDReduceAllLong(int[] a) {5109long res = 0;5110for (int i = 0; i < a.length; i += SPECIES.length()) {5111res += ADDReduceLong(a, i);5112}51135114return res;5115}51165117@Test(dataProvider = "intUnaryOpProvider")5118static void ADDReduceLongInt128VectorTests(IntFunction<int[]> fa) {5119int[] a = fa.apply(SPECIES.length());5120long[] r = lfr.apply(SPECIES.length());5121long ra = 0;51225123for (int i = 0; i < a.length; i += SPECIES.length()) {5124IntVector av = IntVector.fromArray(SPECIES, a, i);5125r[i] = av.reduceLanesToLong(VectorOperators.ADD);5126}51275128ra = 0;5129for (int i = 0; i < a.length; i ++) {5130ra += r[i];5131}51325133assertReductionLongArraysEquals(r, ra, a,5134Int128VectorTests::ADDReduceLong, Int128VectorTests::ADDReduceAllLong);5135}51365137static long ADDReduceLongMasked(int[] a, int idx, boolean[] mask) {5138int res = 0;5139for (int i = idx; i < (idx + SPECIES.length()); i++) {5140if(mask[i % SPECIES.length()])5141res += a[i];5142}51435144return (long)res;5145}51465147static long ADDReduceAllLongMasked(int[] a, boolean[] mask) {5148long res = 0;5149for (int i = 0; i < a.length; i += SPECIES.length()) {5150res += ADDReduceLongMasked(a, i, mask);5151}51525153return res;5154}51555156@Test(dataProvider = "intUnaryOpMaskProvider")5157static void ADDReduceLongInt128VectorTestsMasked(IntFunction<int[]> fa, IntFunction<boolean[]> fm) {5158int[] a = fa.apply(SPECIES.length());5159long[] r = lfr.apply(SPECIES.length());5160boolean[] mask = fm.apply(SPECIES.length());5161VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);5162long ra = 0;51635164for (int i = 0; i < a.length; i += SPECIES.length()) {5165IntVector av = IntVector.fromArray(SPECIES, a, i);5166r[i] = av.reduceLanesToLong(VectorOperators.ADD, vmask);5167}51685169ra = 0;5170for (int i = 0; i < a.length; i ++) {5171ra += r[i];5172}51735174assertReductionLongArraysEqualsMasked(r, ra, a, mask,5175Int128VectorTests::ADDReduceLongMasked, Int128VectorTests::ADDReduceAllLongMasked);5176}51775178@Test(dataProvider = "intUnaryOpProvider")5179static void BroadcastLongInt128VectorTestsSmokeTest(IntFunction<int[]> fa) {5180int[] a = fa.apply(SPECIES.length());5181int[] r = new int[a.length];51825183for (int i = 0; i < a.length; i += SPECIES.length()) {5184IntVector.broadcast(SPECIES, (long)a[i]).intoArray(r, i);5185}5186assertBroadcastArraysEquals(r, a);5187}51885189@Test(dataProvider = "intBinaryOpMaskProvider")5190static void blendInt128VectorTestsBroadcastLongSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,5191IntFunction<boolean[]> fm) {5192int[] a = fa.apply(SPECIES.length());5193int[] b = fb.apply(SPECIES.length());5194int[] r = fr.apply(SPECIES.length());5195boolean[] mask = fm.apply(SPECIES.length());5196VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);51975198for (int ic = 0; ic < INVOC_COUNT; ic++) {5199for (int i = 0; i < a.length; i += SPECIES.length()) {5200IntVector av = IntVector.fromArray(SPECIES, a, i);5201av.blend((long)b[i], vmask).intoArray(r, i);5202}5203}5204assertBroadcastLongArraysEquals(r, a, b, mask, Int128VectorTests::blend);5205}520652075208@Test(dataProvider = "intUnaryOpShuffleProvider")5209static void SelectFromInt128VectorTests(IntFunction<int[]> fa,5210BiFunction<Integer,Integer,int[]> fs) {5211int[] a = fa.apply(SPECIES.length());5212int[] order = fs.apply(a.length, SPECIES.length());5213int[] r = fr.apply(SPECIES.length());52145215for (int i = 0; i < a.length; i += SPECIES.length()) {5216IntVector av = IntVector.fromArray(SPECIES, a, i);5217IntVector bv = IntVector.fromArray(SPECIES, order, i);5218bv.selectFrom(av).intoArray(r, i);5219}52205221assertSelectFromArraysEquals(r, a, order, SPECIES.length());5222}52235224@Test(dataProvider = "intUnaryOpShuffleMaskProvider")5225static void SelectFromInt128VectorTestsMaskedSmokeTest(IntFunction<int[]> fa,5226BiFunction<Integer,Integer,int[]> fs,5227IntFunction<boolean[]> fm) {5228int[] a = fa.apply(SPECIES.length());5229int[] order = fs.apply(a.length, SPECIES.length());5230int[] r = fr.apply(SPECIES.length());5231boolean[] mask = fm.apply(SPECIES.length());5232VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);52335234for (int i = 0; i < a.length; i += SPECIES.length()) {5235IntVector av = IntVector.fromArray(SPECIES, a, i);5236IntVector bv = IntVector.fromArray(SPECIES, order, i);5237bv.selectFrom(av, vmask).intoArray(r, i);5238}52395240assertSelectFromArraysEquals(r, a, order, mask, SPECIES.length());5241}52425243@Test(dataProvider = "shuffleProvider")5244static void shuffleMiscellaneousInt128VectorTestsSmokeTest(BiFunction<Integer,Integer,int[]> fs) {5245int[] a = fs.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length());52465247for (int i = 0; i < a.length; i += SPECIES.length()) {5248var shuffle = VectorShuffle.fromArray(SPECIES, a, i);5249int hash = shuffle.hashCode();5250int length = shuffle.length();52515252int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());5253int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr));5254Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash);5255Assert.assertEquals(length, SPECIES.length());5256}5257}52585259@Test(dataProvider = "shuffleProvider")5260static void shuffleToStringInt128VectorTestsSmokeTest(BiFunction<Integer,Integer,int[]> fs) {5261int[] a = fs.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length());52625263for (int i = 0; i < a.length; i += SPECIES.length()) {5264var shuffle = VectorShuffle.fromArray(SPECIES, a, i);5265String str = shuffle.toString();52665267int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());5268Assert.assertTrue(str.equals("Shuffle" + Arrays.toString(subarr)), "at index " +5269i + ", string should be = " + Arrays.toString(subarr) + ", but is = " + str);5270}5271}52725273@Test(dataProvider = "shuffleCompareOpProvider")5274static void shuffleEqualsInt128VectorTestsSmokeTest(BiFunction<Integer,Integer,int[]> fa, BiFunction<Integer,Integer,int[]> fb) {5275int[] a = fa.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length());5276int[] b = fb.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length());52775278for (int i = 0; i < a.length; i += SPECIES.length()) {5279var av = VectorShuffle.fromArray(SPECIES, a, i);5280var bv = VectorShuffle.fromArray(SPECIES, b, i);5281boolean eq = av.equals(bv);5282int to = i + SPECIES.length();5283Assert.assertEquals(eq, Arrays.equals(a, i, to, b, i, to));5284}5285}52865287@Test(dataProvider = "maskCompareOpProvider")5288static void maskEqualsInt128VectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) {5289boolean[] a = fa.apply(SPECIES.length());5290boolean[] b = fb.apply(SPECIES.length());52915292for (int i = 0; i < a.length; i += SPECIES.length()) {5293var av = SPECIES.loadMask(a, i);5294var bv = SPECIES.loadMask(b, i);5295boolean equals = av.equals(bv);5296int to = i + SPECIES.length();5297Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to));5298}5299}53005301static boolean beq(boolean a, boolean b) {5302return (a == b);5303}53045305@Test(dataProvider = "maskCompareOpProvider")5306static void maskEqInt128VectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) {5307boolean[] a = fa.apply(SPECIES.length());5308boolean[] b = fb.apply(SPECIES.length());5309boolean[] r = new boolean[a.length];53105311for (int i = 0; i < a.length; i += SPECIES.length()) {5312var av = SPECIES.loadMask(a, i);5313var bv = SPECIES.loadMask(b, i);5314var cv = av.eq(bv);5315cv.intoArray(r, i);5316}5317assertArraysEquals(r, a, b, Int128VectorTests::beq);5318}53195320@Test(dataProvider = "maskProvider")5321static void maskHashCodeInt128VectorTestsSmokeTest(IntFunction<boolean[]> fa) {5322boolean[] a = fa.apply(SPECIES.length());53235324for (int i = 0; i < a.length; i += SPECIES.length()) {5325var vmask = SPECIES.loadMask(a, i);5326int hash = vmask.hashCode();53275328boolean subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());5329int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr));5330Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash);5331}5332}53335334@Test(dataProvider = "maskProvider")5335static void maskTrueCountInt128VectorTestsSmokeTest(IntFunction<boolean[]> fa) {5336boolean[] a = fa.apply(SPECIES.length());53375338for (int i = 0; i < a.length; i += SPECIES.length()) {5339var vmask = SPECIES.loadMask(a, i);5340int tcount = vmask.trueCount();5341int expectedTcount = 0;5342for (int j = i; j < i + SPECIES.length(); j++) {5343expectedTcount += a[j] ? 1 : 0;5344}5345Assert.assertTrue(tcount == expectedTcount, "at index " + i + ", trueCount should be = " + expectedTcount + ", but is = " + tcount);5346}5347}53485349@Test(dataProvider = "maskProvider")5350static void maskLastTrueInt128VectorTestsSmokeTest(IntFunction<boolean[]> fa) {5351boolean[] a = fa.apply(SPECIES.length());53525353for (int i = 0; i < a.length; i += SPECIES.length()) {5354var vmask = SPECIES.loadMask(a, i);5355int ltrue = vmask.lastTrue();5356int j = i + SPECIES.length() - 1;5357for (; j >= i; j--) {5358if (a[j]) break;5359}5360int expectedLtrue = j - i;53615362Assert.assertTrue(ltrue == expectedLtrue, "at index " + i +5363", lastTrue should be = " + expectedLtrue + ", but is = " + ltrue);5364}5365}53665367@Test(dataProvider = "maskProvider")5368static void maskFirstTrueInt128VectorTestsSmokeTest(IntFunction<boolean[]> fa) {5369boolean[] a = fa.apply(SPECIES.length());53705371for (int i = 0; i < a.length; i += SPECIES.length()) {5372var vmask = SPECIES.loadMask(a, i);5373int ftrue = vmask.firstTrue();5374int j = i;5375for (; j < i + SPECIES.length() ; j++) {5376if (a[j]) break;5377}5378int expectedFtrue = j - i;53795380Assert.assertTrue(ftrue == expectedFtrue, "at index " + i +5381", firstTrue should be = " + expectedFtrue + ", but is = " + ftrue);5382}5383}53845385@DataProvider5386public static Object[][] longMaskProvider() {5387return new Object[][]{5388{0xFFFFFFFFFFFFFFFFL},5389{0x0000000000000000L},5390{0x5555555555555555L},5391{0x0123456789abcdefL},5392};5393}53945395@Test(dataProvider = "longMaskProvider")5396static void maskFromToLongInt128VectorTestsSmokeTest(long inputLong) {5397var vmask = VectorMask.fromLong(SPECIES, inputLong);5398long outputLong = vmask.toLong();5399Assert.assertEquals(outputLong, inputLong & (((1L << (SPECIES.length() - 1)) << 1) - 1));5400}54015402@DataProvider5403public static Object[][] offsetProvider() {5404return new Object[][]{5405{0},5406{-1},5407{+1},5408{+2},5409{-2},5410};5411}54125413@Test(dataProvider = "offsetProvider")5414static void indexInRangeInt128VectorTestsSmokeTest(int offset) {5415int limit = SPECIES.length() * BUFFER_REPS;5416for (int i = 0; i < limit; i += SPECIES.length()) {5417var actualMask = SPECIES.indexInRange(i + offset, limit);5418var expectedMask = SPECIES.maskAll(true).indexInRange(i + offset, limit);5419assert(actualMask.equals(expectedMask));5420for (int j = 0; j < SPECIES.length(); j++) {5421int index = i + j + offset;5422Assert.assertEquals(actualMask.laneIsSet(j), index >= 0 && index < limit);5423}5424}5425}54265427@DataProvider5428public static Object[][] lengthProvider() {5429return new Object[][]{5430{0},5431{1},5432{32},5433{37},5434{1024},5435{1024+1},5436{1024+5},5437};5438}54395440@Test(dataProvider = "lengthProvider")5441static void loopBoundInt128VectorTestsSmokeTest(int length) {5442int actualLoopBound = SPECIES.loopBound(length);5443int expectedLoopBound = length - Math.floorMod(length, SPECIES.length());5444Assert.assertEquals(actualLoopBound, expectedLoopBound);5445}54465447@Test5448static void ElementSizeInt128VectorTestsSmokeTest() {5449IntVector av = IntVector.zero(SPECIES);5450int elsize = av.elementSize();5451Assert.assertEquals(elsize, Integer.SIZE);5452}54535454@Test5455static void VectorShapeInt128VectorTestsSmokeTest() {5456IntVector av = IntVector.zero(SPECIES);5457VectorShape vsh = av.shape();5458assert(vsh.equals(VectorShape.S_128_BIT));5459}54605461@Test5462static void ShapeWithLanesInt128VectorTestsSmokeTest() {5463IntVector av = IntVector.zero(SPECIES);5464VectorShape vsh = av.shape();5465VectorSpecies species = vsh.withLanes(int.class);5466assert(species.equals(SPECIES));5467}54685469@Test5470static void ElementTypeInt128VectorTestsSmokeTest() {5471IntVector av = IntVector.zero(SPECIES);5472assert(av.species().elementType() == int.class);5473}54745475@Test5476static void SpeciesElementSizeInt128VectorTestsSmokeTest() {5477IntVector av = IntVector.zero(SPECIES);5478assert(av.species().elementSize() == Integer.SIZE);5479}54805481@Test5482static void VectorTypeInt128VectorTestsSmokeTest() {5483IntVector av = IntVector.zero(SPECIES);5484assert(av.species().vectorType() == av.getClass());5485}54865487@Test5488static void WithLanesInt128VectorTestsSmokeTest() {5489IntVector av = IntVector.zero(SPECIES);5490VectorSpecies species = av.species().withLanes(int.class);5491assert(species.equals(SPECIES));5492}54935494@Test5495static void WithShapeInt128VectorTestsSmokeTest() {5496IntVector av = IntVector.zero(SPECIES);5497VectorShape vsh = av.shape();5498VectorSpecies species = av.species().withShape(vsh);5499assert(species.equals(SPECIES));5500}5501}5502550355045505