Path: blob/master/test/jdk/jdk/incubator/vector/Byte256VectorTests.java
41241 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 Byte256VectorTests27*/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.ByteVector;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 Byte256VectorTests extends AbstractVectorTest {5556static final VectorSpecies<Byte> SPECIES =57ByteVector.SPECIES_256;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 / 256);6364static final int BUFFER_SIZE = Integer.getInteger("jdk.incubator.vector.test.buffer-size", BUFFER_REPS * (256 / 8));6566interface FUnOp {67byte apply(byte a);68}6970static void assertArraysEquals(byte[] r, byte[] 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 {82byte[] apply(byte a);83}8485static void assertArraysEquals(byte[] r, byte[] 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) {93byte[] ref = f.apply(a[i]);94byte[] 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(byte[] r, byte[] 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 {113byte apply(byte[] a, int idx);114}115116interface FReductionAllOp {117byte apply(byte[] a);118}119120static void assertReductionArraysEquals(byte[] r, byte rc, byte[] 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 {135byte apply(byte[] a, int idx, boolean[] mask);136}137138interface FReductionAllMaskedOp {139byte apply(byte[] a, boolean[] mask);140}141142static void assertReductionArraysEqualsMasked(byte[] r, byte rc, byte[] 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(byte[] a, int idx);158}159160interface FReductionAllOpLong {161long apply(byte[] a);162}163164static void assertReductionLongArraysEquals(long[] r, long rc, byte[] 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(byte[] a, int idx, boolean[] mask);180}181182interface FReductionAllMaskedOpLong {183long apply(byte[] a, boolean[] mask);184}185186static void assertReductionLongArraysEqualsMasked(long[] r, long rc, byte[] 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(byte[] r, byte[] a, byte 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(byte[] r, byte[] 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(byte[] r, byte[] a, byte[] 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(byte[] r, byte[] 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], (byte)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], (byte)0, "at index #" + idx + ", input = " + a[i+order[i+j]] + ", mask = " + mask[j % SPECIES.length()]);279}280}281282static void assertSelectFromArraysEquals(byte[] r, byte[] a, byte[] 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], (byte)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], (byte)0, "at index #" + idx + ", input = " + a[i+(int)order[i+j]] + ", mask = " + mask[j % SPECIES.length()]);299}300}301302static void assertBroadcastArraysEquals(byte[] r, byte[] 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 {320byte apply(byte a, byte b);321}322323interface FBinMaskOp {324byte apply(byte a, byte b, boolean m);325326static FBinMaskOp lift(FBinOp f) {327return (a, b, m) -> m ? f.apply(a, b) : a;328}329}330331static void assertArraysEquals(byte[] r, byte[] a, byte[] 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(byte[] r, byte[] a, byte[] 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(byte[] r, byte[] a, byte[] b, FBinOp f) {355int i = 0;356try {357for (; i < a.length; i++) {358Assert.assertEquals(r[i], f.apply(a[i], (byte)((long)b[(i / SPECIES.length()) * SPECIES.length()])));359}360} catch (AssertionError e) {361Assert.assertEquals(r[i], f.apply(a[i], (byte)((long)b[(i / SPECIES.length()) * SPECIES.length()])),362"(" + a[i] + ", " + b[(i / SPECIES.length()) * SPECIES.length()] + ") at index #" + i);363}364}365366static void assertArraysEquals(byte[] r, byte[] a, byte[] b, boolean[] mask, FBinOp f) {367assertArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));368}369370static void assertArraysEquals(byte[] r, byte[] a, byte[] 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(byte[] r, byte[] a, byte[] b, boolean[] mask, FBinOp f) {382assertBroadcastArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));383}384385static void assertBroadcastArraysEquals(byte[] r, byte[] a, byte[] 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(byte[] r, byte[] a, byte[] b, boolean[] mask, FBinOp f) {400assertBroadcastLongArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));401}402403static void assertBroadcastLongArraysEquals(byte[] r, byte[] a, byte[] b, boolean[] mask, FBinMaskOp f) {404int i = 0;405try {406for (; i < a.length; i++) {407Assert.assertEquals(r[i], f.apply(a[i], (byte)((long)b[(i / SPECIES.length()) * SPECIES.length()]), mask[i % SPECIES.length()]));408}409} catch (AssertionError err) {410Assert.assertEquals(r[i], f.apply(a[i], (byte)((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(byte[] r, byte[] a, byte[] 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(byte[] r, byte[] a, byte[] b, boolean[] mask, FBinOp f) {432assertShiftArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));433}434435static void assertShiftArraysEquals(byte[] r, byte[] a, byte[] 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 {450byte apply(byte a, byte b, byte c);451}452453interface FTernMaskOp {454byte apply(byte a, byte b, byte 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(byte[] r, byte[] a, byte[] b, byte[] 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(byte[] r, byte[] a, byte[] b, byte[] c, boolean[] mask, FTernOp f) {473assertArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f));474}475476static void assertArraysEquals(byte[] r, byte[] a, byte[] b, byte[] 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(byte[] r, byte[] a, byte[] b, byte[] 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(byte[] r, byte[] a, byte[] b, byte[] 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(byte[] r, byte[] a, byte[] b, byte[] c, boolean[] mask,515FTernOp f) {516assertBroadcastArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f));517}518519static void assertBroadcastArraysEquals(byte[] r, byte[] a, byte[] b, byte[] 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(byte[] r, byte[] a, byte[] b, byte[] c, boolean[] mask,536FTernOp f) {537assertAltBroadcastArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f));538}539540static void assertAltBroadcastArraysEquals(byte[] r, byte[] a, byte[] b, byte[] 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(byte[] r, byte[] a, byte[] b, byte[] 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(byte[] r, byte[] a, byte[] b, byte[] c, boolean[] mask,572FTernOp f) {573assertDoubleBroadcastArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f));574}575576static void assertDoubleBroadcastArraysEquals(byte[] r, byte[] a, byte[] b, byte[] 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 {596byte apply(byte[] a, int b);597}598599static void assertArraysEquals(byte[] r, byte[] 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 {611byte[] apply(byte[] a, int ix, int[] b, int iy);612}613614static void assertArraysEquals(byte[] r, byte[] 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) {622byte[] ref = f.apply(a, i, b, i);623byte[] 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 {634byte[] apply(byte[] a, int ix, boolean[] mask, int[] b, int iy);635}636637interface FScatterMaskedOp {638byte[] apply(byte[] r, byte[] a, int ix, boolean[] mask, int[] b, int iy);639}640641static void assertArraysEquals(byte[] r, byte[] 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) {649byte[] ref = f.apply(a, i, mask, b, i);650byte[] 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(byte[] r, byte[] 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) {670byte[] ref = f.apply(r, a, i, mask, b, i);671byte[] 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 {686byte[] apply(byte[] a, int origin, int idx);687}688689static void assertArraysEquals(byte[] r, byte[] 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) {697byte[] ref = f.apply(a, origin, i);698byte[] 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 {706byte[] apply(byte[] a, byte[] b, int origin, int idx);707}708709static void assertArraysEquals(byte[] r, byte[] a, byte[] 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) {717byte[] ref = f.apply(a, b, origin, i);718byte[] 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 {727byte[] apply(byte[] a, byte[] b, int origin, boolean[] mask, int idx);728}729730static void assertArraysEquals(byte[] r, byte[] a, byte[] 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) {738byte[] ref = f.apply(a, b, origin, mask, i);739byte[] 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 {748byte[] apply(byte[] a, byte[] b, int origin, int part, int idx);749}750751static void assertArraysEquals(byte[] r, byte[] a, byte[] 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) {759byte[] ref = f.apply(a, b, origin, part, i);760byte[] 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 {770byte[] apply(byte[] a, byte[] b, int origin, int part, boolean[] mask, int idx);771}772773static void assertArraysEquals(byte[] r, byte[] a, byte[] 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) {781byte[] ref = f.apply(a, b, origin, part, mask, i);782byte[] 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, byte[] 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}802803804static void assertArraysEquals(byte[] r, byte[] a, int offs) {805int i = 0;806try {807for (; i < r.length; i++) {808Assert.assertEquals(r[i], (long)(a[i+offs]));809}810} catch (AssertionError e) {811Assert.assertEquals(r[i], (long)(a[i+offs]), "at index #" + i + ", input = " + a[i+offs]);812}813}814815static void assertArraysEquals(long[] r, byte[] a, int offs) {816int i = 0;817try {818for (; i < r.length; i++) {819Assert.assertEquals(r[i], (long)(a[i+offs]));820}821} catch (AssertionError e) {822Assert.assertEquals(r[i], (long)(a[i+offs]), "at index #" + i + ", input = " + a[i+offs]);823}824}825826static void assertArraysEquals(double[] r, byte[] a, int offs) {827int i = 0;828try {829for (; i < r.length; i++) {830Assert.assertEquals(r[i], (double)(a[i+offs]));831}832} catch (AssertionError e) {833Assert.assertEquals(r[i], (double)(a[i+offs]), "at index #" + i + ", input = " + a[i+offs]);834}835}836837838static byte bits(byte e) {839return e;840}841842static final List<IntFunction<byte[]>> BYTE_GENERATORS = List.of(843withToString("byte[-i * 5]", (int s) -> {844return fill(s * BUFFER_REPS,845i -> (byte)(-i * 5));846}),847withToString("byte[i * 5]", (int s) -> {848return fill(s * BUFFER_REPS,849i -> (byte)(i * 5));850}),851withToString("byte[i + 1]", (int s) -> {852return fill(s * BUFFER_REPS,853i -> (((byte)(i + 1) == 0) ? 1 : (byte)(i + 1)));854}),855withToString("byte[cornerCaseValue(i)]", (int s) -> {856return fill(s * BUFFER_REPS,857i -> cornerCaseValue(i));858})859);860861// Create combinations of pairs862// @@@ Might be sensitive to order e.g. div by 0863static final List<List<IntFunction<byte[]>>> BYTE_GENERATOR_PAIRS =864Stream.of(BYTE_GENERATORS.get(0)).865flatMap(fa -> BYTE_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))).866collect(Collectors.toList());867868@DataProvider869public Object[][] boolUnaryOpProvider() {870return BOOL_ARRAY_GENERATORS.stream().871map(f -> new Object[]{f}).872toArray(Object[][]::new);873}874875static final List<List<IntFunction<byte[]>>> BYTE_GENERATOR_TRIPLES =876BYTE_GENERATOR_PAIRS.stream().877flatMap(pair -> BYTE_GENERATORS.stream().map(f -> List.of(pair.get(0), pair.get(1), f))).878collect(Collectors.toList());879880@DataProvider881public Object[][] byteBinaryOpProvider() {882return BYTE_GENERATOR_PAIRS.stream().map(List::toArray).883toArray(Object[][]::new);884}885886@DataProvider887public Object[][] byteIndexedOpProvider() {888return BYTE_GENERATOR_PAIRS.stream().map(List::toArray).889toArray(Object[][]::new);890}891892@DataProvider893public Object[][] byteBinaryOpMaskProvider() {894return BOOLEAN_MASK_GENERATORS.stream().895flatMap(fm -> BYTE_GENERATOR_PAIRS.stream().map(lfa -> {896return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();897})).898toArray(Object[][]::new);899}900901@DataProvider902public Object[][] byteTernaryOpProvider() {903return BYTE_GENERATOR_TRIPLES.stream().map(List::toArray).904toArray(Object[][]::new);905}906907@DataProvider908public Object[][] byteTernaryOpMaskProvider() {909return BOOLEAN_MASK_GENERATORS.stream().910flatMap(fm -> BYTE_GENERATOR_TRIPLES.stream().map(lfa -> {911return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();912})).913toArray(Object[][]::new);914}915916@DataProvider917public Object[][] byteUnaryOpProvider() {918return BYTE_GENERATORS.stream().919map(f -> new Object[]{f}).920toArray(Object[][]::new);921}922923@DataProvider924public Object[][] byteUnaryOpMaskProvider() {925return BOOLEAN_MASK_GENERATORS.stream().926flatMap(fm -> BYTE_GENERATORS.stream().map(fa -> {927return new Object[] {fa, fm};928})).929toArray(Object[][]::new);930}931932933934@DataProvider935public Object[][] maskProvider() {936return BOOLEAN_MASK_GENERATORS.stream().937map(f -> new Object[]{f}).938toArray(Object[][]::new);939}940941@DataProvider942public Object[][] maskCompareOpProvider() {943return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray).944toArray(Object[][]::new);945}946947@DataProvider948public Object[][] shuffleProvider() {949return INT_SHUFFLE_GENERATORS.stream().950map(f -> new Object[]{f}).951toArray(Object[][]::new);952}953954@DataProvider955public Object[][] shuffleCompareOpProvider() {956return INT_SHUFFLE_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray).957toArray(Object[][]::new);958}959960@DataProvider961public Object[][] byteUnaryOpShuffleProvider() {962return INT_SHUFFLE_GENERATORS.stream().963flatMap(fs -> BYTE_GENERATORS.stream().map(fa -> {964return new Object[] {fa, fs};965})).966toArray(Object[][]::new);967}968969@DataProvider970public Object[][] byteUnaryOpShuffleMaskProvider() {971return BOOLEAN_MASK_GENERATORS.stream().972flatMap(fm -> INT_SHUFFLE_GENERATORS.stream().973flatMap(fs -> BYTE_GENERATORS.stream().map(fa -> {974return new Object[] {fa, fs, fm};975}))).976toArray(Object[][]::new);977}978979static final List<BiFunction<Integer,Integer,byte[]>> BYTE_SHUFFLE_GENERATORS = List.of(980withToStringBi("shuffle[random]", (Integer l, Integer m) -> {981byte[] a = new byte[l];982int upper = m;983for (int i = 0; i < 1; i++) {984a[i] = (byte)RAND.nextInt(upper);985}986return a;987})988);989990@DataProvider991public Object[][] byteUnaryOpSelectFromProvider() {992return BYTE_SHUFFLE_GENERATORS.stream().993flatMap(fs -> BYTE_GENERATORS.stream().map(fa -> {994return new Object[] {fa, fs};995})).996toArray(Object[][]::new);997}998999@DataProvider1000public Object[][] byteUnaryOpSelectFromMaskProvider() {1001return BOOLEAN_MASK_GENERATORS.stream().1002flatMap(fm -> BYTE_SHUFFLE_GENERATORS.stream().1003flatMap(fs -> BYTE_GENERATORS.stream().map(fa -> {1004return new Object[] {fa, fs, fm};1005}))).1006toArray(Object[][]::new);1007}100810091010@DataProvider1011public Object[][] byteUnaryOpIndexProvider() {1012return INT_INDEX_GENERATORS.stream().1013flatMap(fs -> BYTE_GENERATORS.stream().map(fa -> {1014return new Object[] {fa, fs};1015})).1016toArray(Object[][]::new);1017}10181019@DataProvider1020public Object[][] byteUnaryMaskedOpIndexProvider() {1021return BOOLEAN_MASK_GENERATORS.stream().1022flatMap(fs -> INT_INDEX_GENERATORS.stream().flatMap(fm ->1023BYTE_GENERATORS.stream().map(fa -> {1024return new Object[] {fa, fm, fs};1025}))).1026toArray(Object[][]::new);1027}10281029@DataProvider1030public Object[][] scatterMaskedOpIndexProvider() {1031return BOOLEAN_MASK_GENERATORS.stream().1032flatMap(fs -> INT_INDEX_GENERATORS.stream().flatMap(fm ->1033BYTE_GENERATORS.stream().flatMap(fn ->1034BYTE_GENERATORS.stream().map(fa -> {1035return new Object[] {fa, fn, fm, fs};1036})))).1037toArray(Object[][]::new);1038}10391040static final List<IntFunction<byte[]>> BYTE_COMPARE_GENERATORS = List.of(1041withToString("byte[i]", (int s) -> {1042return fill(s * BUFFER_REPS,1043i -> (byte)i);1044}),1045withToString("byte[i - length / 2]", (int s) -> {1046return fill(s * BUFFER_REPS,1047i -> (byte)(i - (s * BUFFER_REPS / 2)));1048}),1049withToString("byte[i + 1]", (int s) -> {1050return fill(s * BUFFER_REPS,1051i -> (byte)(i + 1));1052}),1053withToString("byte[i - 2]", (int s) -> {1054return fill(s * BUFFER_REPS,1055i -> (byte)(i - 2));1056}),1057withToString("byte[zigZag(i)]", (int s) -> {1058return fill(s * BUFFER_REPS,1059i -> i%3 == 0 ? (byte)i : (i%3 == 1 ? (byte)(i + 1) : (byte)(i - 2)));1060}),1061withToString("byte[cornerCaseValue(i)]", (int s) -> {1062return fill(s * BUFFER_REPS,1063i -> cornerCaseValue(i));1064})1065);10661067static final List<List<IntFunction<byte[]>>> BYTE_TEST_GENERATOR_ARGS =1068BYTE_COMPARE_GENERATORS.stream().1069map(fa -> List.of(fa)).1070collect(Collectors.toList());10711072@DataProvider1073public Object[][] byteTestOpProvider() {1074return BYTE_TEST_GENERATOR_ARGS.stream().map(List::toArray).1075toArray(Object[][]::new);1076}10771078@DataProvider1079public Object[][] byteTestOpMaskProvider() {1080return BOOLEAN_MASK_GENERATORS.stream().1081flatMap(fm -> BYTE_TEST_GENERATOR_ARGS.stream().map(lfa -> {1082return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();1083})).1084toArray(Object[][]::new);1085}10861087static final List<List<IntFunction<byte[]>>> BYTE_COMPARE_GENERATOR_PAIRS =1088BYTE_COMPARE_GENERATORS.stream().1089flatMap(fa -> BYTE_COMPARE_GENERATORS.stream().map(fb -> List.of(fa, fb))).1090collect(Collectors.toList());10911092@DataProvider1093public Object[][] byteCompareOpProvider() {1094return BYTE_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray).1095toArray(Object[][]::new);1096}10971098@DataProvider1099public Object[][] byteCompareOpMaskProvider() {1100return BOOLEAN_MASK_GENERATORS.stream().1101flatMap(fm -> BYTE_COMPARE_GENERATOR_PAIRS.stream().map(lfa -> {1102return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();1103})).1104toArray(Object[][]::new);1105}11061107interface ToByteF {1108byte apply(int i);1109}11101111static byte[] fill(int s , ToByteF f) {1112return fill(new byte[s], f);1113}11141115static byte[] fill(byte[] a, ToByteF f) {1116for (int i = 0; i < a.length; i++) {1117a[i] = f.apply(i);1118}1119return a;1120}11211122static byte cornerCaseValue(int i) {1123switch(i % 5) {1124case 0:1125return Byte.MAX_VALUE;1126case 1:1127return Byte.MIN_VALUE;1128case 2:1129return Byte.MIN_VALUE;1130case 3:1131return Byte.MAX_VALUE;1132default:1133return (byte)0;1134}1135}11361137static byte get(byte[] a, int i) {1138return (byte) a[i];1139}11401141static final IntFunction<byte[]> fr = (vl) -> {1142int length = BUFFER_REPS * vl;1143return new byte[length];1144};11451146static final IntFunction<boolean[]> fmr = (vl) -> {1147int length = BUFFER_REPS * vl;1148return new boolean[length];1149};11501151static final IntFunction<long[]> lfr = (vl) -> {1152int length = BUFFER_REPS * vl;1153return new long[length];1154};11551156static void replaceZero(byte[] a, byte v) {1157for (int i = 0; i < a.length; i++) {1158if (a[i] == 0) {1159a[i] = v;1160}1161}1162}11631164static void replaceZero(byte[] a, boolean[] mask, byte v) {1165for (int i = 0; i < a.length; i++) {1166if (mask[i % mask.length] && a[i] == 0) {1167a[i] = v;1168}1169}1170}11711172static boolean eq(byte a, byte b) {1173return a == b;1174}11751176static boolean neq(byte a, byte b) {1177return a != b;1178}11791180static boolean lt(byte a, byte b) {1181return a < b;1182}11831184static boolean le(byte a, byte b) {1185return a <= b;1186}11871188static boolean gt(byte a, byte b) {1189return a > b;1190}11911192static boolean ge(byte a, byte b) {1193return a >= b;1194}11951196static boolean ult(byte a, byte b) {1197return Byte.compareUnsigned(a, b) < 0;1198}11991200static boolean ule(byte a, byte b) {1201return Byte.compareUnsigned(a, b) <= 0;1202}12031204static boolean ugt(byte a, byte b) {1205return Byte.compareUnsigned(a, b) > 0;1206}12071208static boolean uge(byte a, byte b) {1209return Byte.compareUnsigned(a, b) >= 0;1210}12111212@Test1213static void smokeTest1() {1214ByteVector three = ByteVector.broadcast(SPECIES, (byte)-3);1215ByteVector three2 = (ByteVector) SPECIES.broadcast(-3);1216assert(three.eq(three2).allTrue());1217ByteVector three3 = three2.broadcast(1).broadcast(-3);1218assert(three.eq(three3).allTrue());1219int scale = 2;1220Class<?> ETYPE = byte.class;1221if (ETYPE == double.class || ETYPE == long.class)1222scale = 1000000;1223else if (ETYPE == byte.class && SPECIES.length() >= 64)1224scale = 1;1225ByteVector higher = three.addIndex(scale);1226VectorMask<Byte> m = three.compare(VectorOperators.LE, higher);1227assert(m.allTrue());1228m = higher.min((byte)-1).test(VectorOperators.IS_NEGATIVE);1229assert(m.allTrue());1230byte max = higher.reduceLanes(VectorOperators.MAX);1231assert(max == -3 + scale * (SPECIES.length()-1));1232}12331234private static byte[]1235bothToArray(ByteVector a, ByteVector b) {1236byte[] r = new byte[a.length() + b.length()];1237a.intoArray(r, 0);1238b.intoArray(r, a.length());1239return r;1240}12411242@Test1243static void smokeTest2() {1244// Do some zipping and shuffling.1245ByteVector io = (ByteVector) SPECIES.broadcast(0).addIndex(1);1246ByteVector io2 = (ByteVector) VectorShuffle.iota(SPECIES,0,1,false).toVector();1247Assert.assertEquals(io, io2);1248ByteVector a = io.add((byte)1); //[1,2]1249ByteVector b = a.neg(); //[-1,-2]1250byte[] abValues = bothToArray(a,b); //[1,2,-1,-2]1251VectorShuffle<Byte> zip0 = VectorShuffle.makeZip(SPECIES, 0);1252VectorShuffle<Byte> zip1 = VectorShuffle.makeZip(SPECIES, 1);1253ByteVector zab0 = a.rearrange(zip0,b); //[1,-1]1254ByteVector zab1 = a.rearrange(zip1,b); //[2,-2]1255byte[] zabValues = bothToArray(zab0, zab1); //[1,-1,2,-2]1256// manually zip1257byte[] manual = new byte[zabValues.length];1258for (int i = 0; i < manual.length; i += 2) {1259manual[i+0] = abValues[i/2];1260manual[i+1] = abValues[a.length() + i/2];1261}1262Assert.assertEquals(Arrays.toString(zabValues), Arrays.toString(manual));1263VectorShuffle<Byte> unz0 = VectorShuffle.makeUnzip(SPECIES, 0);1264VectorShuffle<Byte> unz1 = VectorShuffle.makeUnzip(SPECIES, 1);1265ByteVector uab0 = zab0.rearrange(unz0,zab1);1266ByteVector uab1 = zab0.rearrange(unz1,zab1);1267byte[] abValues1 = bothToArray(uab0, uab1);1268Assert.assertEquals(Arrays.toString(abValues), Arrays.toString(abValues1));1269}12701271static void iotaShuffle() {1272ByteVector io = (ByteVector) SPECIES.broadcast(0).addIndex(1);1273ByteVector io2 = (ByteVector) VectorShuffle.iota(SPECIES, 0 , 1, false).toVector();1274Assert.assertEquals(io, io2);1275}12761277@Test1278// Test all shuffle related operations.1279static void shuffleTest() {1280// To test backend instructions, make sure that C2 is used.1281for (int loop = 0; loop < INVOC_COUNT * INVOC_COUNT; loop++) {1282iotaShuffle();1283}1284}12851286@Test1287void viewAsIntegeralLanesTest() {1288Vector<?> asIntegral = SPECIES.zero().viewAsIntegralLanes();1289Assert.assertEquals(asIntegral.species(), SPECIES);1290}12911292@Test(expectedExceptions = UnsupportedOperationException.class)1293void viewAsFloatingLanesTest() {1294SPECIES.zero().viewAsFloatingLanes();1295}12961297@Test1298// Test div by 0.1299static void bitwiseDivByZeroSmokeTest() {1300try {1301ByteVector a = (ByteVector) SPECIES.broadcast(0).addIndex(1);1302ByteVector b = (ByteVector) SPECIES.broadcast(0);1303a.div(b);1304Assert.fail();1305} catch (ArithmeticException e) {1306}13071308try {1309ByteVector a = (ByteVector) SPECIES.broadcast(0).addIndex(1);1310ByteVector b = (ByteVector) SPECIES.broadcast(0);1311VectorMask<Byte> m = a.lt((byte) 1);1312a.div(b, m);1313Assert.fail();1314} catch (ArithmeticException e) {1315}1316}1317static byte ADD(byte a, byte b) {1318return (byte)(a + b);1319}13201321@Test(dataProvider = "byteBinaryOpProvider")1322static void ADDByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1323byte[] a = fa.apply(SPECIES.length());1324byte[] b = fb.apply(SPECIES.length());1325byte[] r = fr.apply(SPECIES.length());13261327for (int ic = 0; ic < INVOC_COUNT; ic++) {1328for (int i = 0; i < a.length; i += SPECIES.length()) {1329ByteVector av = ByteVector.fromArray(SPECIES, a, i);1330ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1331av.lanewise(VectorOperators.ADD, bv).intoArray(r, i);1332}1333}13341335assertArraysEquals(r, a, b, Byte256VectorTests::ADD);1336}1337static byte add(byte a, byte b) {1338return (byte)(a + b);1339}13401341@Test(dataProvider = "byteBinaryOpProvider")1342static void addByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1343byte[] a = fa.apply(SPECIES.length());1344byte[] b = fb.apply(SPECIES.length());1345byte[] r = fr.apply(SPECIES.length());13461347for (int i = 0; i < a.length; i += SPECIES.length()) {1348ByteVector av = ByteVector.fromArray(SPECIES, a, i);1349ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1350av.add(bv).intoArray(r, i);1351}13521353assertArraysEquals(r, a, b, Byte256VectorTests::add);1354}13551356@Test(dataProvider = "byteBinaryOpMaskProvider")1357static void ADDByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1358IntFunction<boolean[]> fm) {1359byte[] a = fa.apply(SPECIES.length());1360byte[] b = fb.apply(SPECIES.length());1361byte[] r = fr.apply(SPECIES.length());1362boolean[] mask = fm.apply(SPECIES.length());1363VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);13641365for (int ic = 0; ic < INVOC_COUNT; ic++) {1366for (int i = 0; i < a.length; i += SPECIES.length()) {1367ByteVector av = ByteVector.fromArray(SPECIES, a, i);1368ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1369av.lanewise(VectorOperators.ADD, bv, vmask).intoArray(r, i);1370}1371}13721373assertArraysEquals(r, a, b, mask, Byte256VectorTests::ADD);1374}13751376@Test(dataProvider = "byteBinaryOpMaskProvider")1377static void addByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1378IntFunction<boolean[]> fm) {1379byte[] a = fa.apply(SPECIES.length());1380byte[] b = fb.apply(SPECIES.length());1381byte[] r = fr.apply(SPECIES.length());1382boolean[] mask = fm.apply(SPECIES.length());1383VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);13841385for (int i = 0; i < a.length; i += SPECIES.length()) {1386ByteVector av = ByteVector.fromArray(SPECIES, a, i);1387ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1388av.add(bv, vmask).intoArray(r, i);1389}13901391assertArraysEquals(r, a, b, mask, Byte256VectorTests::add);1392}1393static byte SUB(byte a, byte b) {1394return (byte)(a - b);1395}13961397@Test(dataProvider = "byteBinaryOpProvider")1398static void SUBByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1399byte[] a = fa.apply(SPECIES.length());1400byte[] b = fb.apply(SPECIES.length());1401byte[] r = fr.apply(SPECIES.length());14021403for (int ic = 0; ic < INVOC_COUNT; ic++) {1404for (int i = 0; i < a.length; i += SPECIES.length()) {1405ByteVector av = ByteVector.fromArray(SPECIES, a, i);1406ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1407av.lanewise(VectorOperators.SUB, bv).intoArray(r, i);1408}1409}14101411assertArraysEquals(r, a, b, Byte256VectorTests::SUB);1412}1413static byte sub(byte a, byte b) {1414return (byte)(a - b);1415}14161417@Test(dataProvider = "byteBinaryOpProvider")1418static void subByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1419byte[] a = fa.apply(SPECIES.length());1420byte[] b = fb.apply(SPECIES.length());1421byte[] r = fr.apply(SPECIES.length());14221423for (int i = 0; i < a.length; i += SPECIES.length()) {1424ByteVector av = ByteVector.fromArray(SPECIES, a, i);1425ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1426av.sub(bv).intoArray(r, i);1427}14281429assertArraysEquals(r, a, b, Byte256VectorTests::sub);1430}14311432@Test(dataProvider = "byteBinaryOpMaskProvider")1433static void SUBByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1434IntFunction<boolean[]> fm) {1435byte[] a = fa.apply(SPECIES.length());1436byte[] b = fb.apply(SPECIES.length());1437byte[] r = fr.apply(SPECIES.length());1438boolean[] mask = fm.apply(SPECIES.length());1439VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);14401441for (int ic = 0; ic < INVOC_COUNT; ic++) {1442for (int i = 0; i < a.length; i += SPECIES.length()) {1443ByteVector av = ByteVector.fromArray(SPECIES, a, i);1444ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1445av.lanewise(VectorOperators.SUB, bv, vmask).intoArray(r, i);1446}1447}14481449assertArraysEquals(r, a, b, mask, Byte256VectorTests::SUB);1450}14511452@Test(dataProvider = "byteBinaryOpMaskProvider")1453static void subByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1454IntFunction<boolean[]> fm) {1455byte[] a = fa.apply(SPECIES.length());1456byte[] b = fb.apply(SPECIES.length());1457byte[] r = fr.apply(SPECIES.length());1458boolean[] mask = fm.apply(SPECIES.length());1459VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);14601461for (int i = 0; i < a.length; i += SPECIES.length()) {1462ByteVector av = ByteVector.fromArray(SPECIES, a, i);1463ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1464av.sub(bv, vmask).intoArray(r, i);1465}14661467assertArraysEquals(r, a, b, mask, Byte256VectorTests::sub);1468}1469static byte MUL(byte a, byte b) {1470return (byte)(a * b);1471}14721473@Test(dataProvider = "byteBinaryOpProvider")1474static void MULByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1475byte[] a = fa.apply(SPECIES.length());1476byte[] b = fb.apply(SPECIES.length());1477byte[] r = fr.apply(SPECIES.length());14781479for (int ic = 0; ic < INVOC_COUNT; ic++) {1480for (int i = 0; i < a.length; i += SPECIES.length()) {1481ByteVector av = ByteVector.fromArray(SPECIES, a, i);1482ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1483av.lanewise(VectorOperators.MUL, bv).intoArray(r, i);1484}1485}14861487assertArraysEquals(r, a, b, Byte256VectorTests::MUL);1488}1489static byte mul(byte a, byte b) {1490return (byte)(a * b);1491}14921493@Test(dataProvider = "byteBinaryOpProvider")1494static void mulByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1495byte[] a = fa.apply(SPECIES.length());1496byte[] b = fb.apply(SPECIES.length());1497byte[] r = fr.apply(SPECIES.length());14981499for (int i = 0; i < a.length; i += SPECIES.length()) {1500ByteVector av = ByteVector.fromArray(SPECIES, a, i);1501ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1502av.mul(bv).intoArray(r, i);1503}15041505assertArraysEquals(r, a, b, Byte256VectorTests::mul);1506}15071508@Test(dataProvider = "byteBinaryOpMaskProvider")1509static void MULByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1510IntFunction<boolean[]> fm) {1511byte[] a = fa.apply(SPECIES.length());1512byte[] b = fb.apply(SPECIES.length());1513byte[] r = fr.apply(SPECIES.length());1514boolean[] mask = fm.apply(SPECIES.length());1515VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);15161517for (int ic = 0; ic < INVOC_COUNT; ic++) {1518for (int i = 0; i < a.length; i += SPECIES.length()) {1519ByteVector av = ByteVector.fromArray(SPECIES, a, i);1520ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1521av.lanewise(VectorOperators.MUL, bv, vmask).intoArray(r, i);1522}1523}15241525assertArraysEquals(r, a, b, mask, Byte256VectorTests::MUL);1526}15271528@Test(dataProvider = "byteBinaryOpMaskProvider")1529static void mulByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1530IntFunction<boolean[]> fm) {1531byte[] a = fa.apply(SPECIES.length());1532byte[] b = fb.apply(SPECIES.length());1533byte[] r = fr.apply(SPECIES.length());1534boolean[] mask = fm.apply(SPECIES.length());1535VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);15361537for (int i = 0; i < a.length; i += SPECIES.length()) {1538ByteVector av = ByteVector.fromArray(SPECIES, a, i);1539ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1540av.mul(bv, vmask).intoArray(r, i);1541}15421543assertArraysEquals(r, a, b, mask, Byte256VectorTests::mul);1544}1545154615471548static byte DIV(byte a, byte b) {1549return (byte)(a / b);1550}15511552@Test(dataProvider = "byteBinaryOpProvider")1553static void DIVByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1554byte[] a = fa.apply(SPECIES.length());1555byte[] b = fb.apply(SPECIES.length());1556byte[] r = fr.apply(SPECIES.length());15571558replaceZero(b, (byte) 1);15591560for (int ic = 0; ic < INVOC_COUNT; ic++) {1561for (int i = 0; i < a.length; i += SPECIES.length()) {1562ByteVector av = ByteVector.fromArray(SPECIES, a, i);1563ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1564av.lanewise(VectorOperators.DIV, bv).intoArray(r, i);1565}1566}15671568assertArraysEquals(r, a, b, Byte256VectorTests::DIV);1569}1570static byte div(byte a, byte b) {1571return (byte)(a / b);1572}15731574@Test(dataProvider = "byteBinaryOpProvider")1575static void divByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1576byte[] a = fa.apply(SPECIES.length());1577byte[] b = fb.apply(SPECIES.length());1578byte[] r = fr.apply(SPECIES.length());15791580replaceZero(b, (byte) 1);15811582for (int ic = 0; ic < INVOC_COUNT; ic++) {1583for (int i = 0; i < a.length; i += SPECIES.length()) {1584ByteVector av = ByteVector.fromArray(SPECIES, a, i);1585ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1586av.div(bv).intoArray(r, i);1587}1588}15891590assertArraysEquals(r, a, b, Byte256VectorTests::div);1591}1592159315941595@Test(dataProvider = "byteBinaryOpMaskProvider")1596static void DIVByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1597IntFunction<boolean[]> fm) {1598byte[] a = fa.apply(SPECIES.length());1599byte[] b = fb.apply(SPECIES.length());1600byte[] r = fr.apply(SPECIES.length());1601boolean[] mask = fm.apply(SPECIES.length());1602VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);16031604replaceZero(b, mask, (byte) 1);16051606for (int ic = 0; ic < INVOC_COUNT; ic++) {1607for (int i = 0; i < a.length; i += SPECIES.length()) {1608ByteVector av = ByteVector.fromArray(SPECIES, a, i);1609ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1610av.lanewise(VectorOperators.DIV, bv, vmask).intoArray(r, i);1611}1612}16131614assertArraysEquals(r, a, b, mask, Byte256VectorTests::DIV);1615}16161617@Test(dataProvider = "byteBinaryOpMaskProvider")1618static void divByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1619IntFunction<boolean[]> fm) {1620byte[] a = fa.apply(SPECIES.length());1621byte[] b = fb.apply(SPECIES.length());1622byte[] r = fr.apply(SPECIES.length());1623boolean[] mask = fm.apply(SPECIES.length());1624VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);16251626replaceZero(b, mask, (byte) 1);16271628for (int ic = 0; ic < INVOC_COUNT; ic++) {1629for (int i = 0; i < a.length; i += SPECIES.length()) {1630ByteVector av = ByteVector.fromArray(SPECIES, a, i);1631ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1632av.div(bv, vmask).intoArray(r, i);1633}1634}16351636assertArraysEquals(r, a, b, mask, Byte256VectorTests::div);1637}16381639static byte FIRST_NONZERO(byte a, byte b) {1640return (byte)((a)!=0?a:b);1641}16421643@Test(dataProvider = "byteBinaryOpProvider")1644static void FIRST_NONZEROByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1645byte[] a = fa.apply(SPECIES.length());1646byte[] b = fb.apply(SPECIES.length());1647byte[] r = fr.apply(SPECIES.length());16481649for (int ic = 0; ic < INVOC_COUNT; ic++) {1650for (int i = 0; i < a.length; i += SPECIES.length()) {1651ByteVector av = ByteVector.fromArray(SPECIES, a, i);1652ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1653av.lanewise(VectorOperators.FIRST_NONZERO, bv).intoArray(r, i);1654}1655}16561657assertArraysEquals(r, a, b, Byte256VectorTests::FIRST_NONZERO);1658}16591660@Test(dataProvider = "byteBinaryOpMaskProvider")1661static void FIRST_NONZEROByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1662IntFunction<boolean[]> fm) {1663byte[] a = fa.apply(SPECIES.length());1664byte[] b = fb.apply(SPECIES.length());1665byte[] r = fr.apply(SPECIES.length());1666boolean[] mask = fm.apply(SPECIES.length());1667VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);16681669for (int ic = 0; ic < INVOC_COUNT; ic++) {1670for (int i = 0; i < a.length; i += SPECIES.length()) {1671ByteVector av = ByteVector.fromArray(SPECIES, a, i);1672ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1673av.lanewise(VectorOperators.FIRST_NONZERO, bv, vmask).intoArray(r, i);1674}1675}16761677assertArraysEquals(r, a, b, mask, Byte256VectorTests::FIRST_NONZERO);1678}16791680static byte AND(byte a, byte b) {1681return (byte)(a & b);1682}16831684@Test(dataProvider = "byteBinaryOpProvider")1685static void ANDByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1686byte[] a = fa.apply(SPECIES.length());1687byte[] b = fb.apply(SPECIES.length());1688byte[] r = fr.apply(SPECIES.length());16891690for (int ic = 0; ic < INVOC_COUNT; ic++) {1691for (int i = 0; i < a.length; i += SPECIES.length()) {1692ByteVector av = ByteVector.fromArray(SPECIES, a, i);1693ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1694av.lanewise(VectorOperators.AND, bv).intoArray(r, i);1695}1696}16971698assertArraysEquals(r, a, b, Byte256VectorTests::AND);1699}1700static byte and(byte a, byte b) {1701return (byte)(a & b);1702}17031704@Test(dataProvider = "byteBinaryOpProvider")1705static void andByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1706byte[] a = fa.apply(SPECIES.length());1707byte[] b = fb.apply(SPECIES.length());1708byte[] r = fr.apply(SPECIES.length());17091710for (int i = 0; i < a.length; i += SPECIES.length()) {1711ByteVector av = ByteVector.fromArray(SPECIES, a, i);1712ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1713av.and(bv).intoArray(r, i);1714}17151716assertArraysEquals(r, a, b, Byte256VectorTests::and);1717}1718171917201721@Test(dataProvider = "byteBinaryOpMaskProvider")1722static void ANDByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1723IntFunction<boolean[]> fm) {1724byte[] a = fa.apply(SPECIES.length());1725byte[] b = fb.apply(SPECIES.length());1726byte[] r = fr.apply(SPECIES.length());1727boolean[] mask = fm.apply(SPECIES.length());1728VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);17291730for (int ic = 0; ic < INVOC_COUNT; ic++) {1731for (int i = 0; i < a.length; i += SPECIES.length()) {1732ByteVector av = ByteVector.fromArray(SPECIES, a, i);1733ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1734av.lanewise(VectorOperators.AND, bv, vmask).intoArray(r, i);1735}1736}17371738assertArraysEquals(r, a, b, mask, Byte256VectorTests::AND);1739}174017411742static byte AND_NOT(byte a, byte b) {1743return (byte)(a & ~b);1744}17451746@Test(dataProvider = "byteBinaryOpProvider")1747static void AND_NOTByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1748byte[] a = fa.apply(SPECIES.length());1749byte[] b = fb.apply(SPECIES.length());1750byte[] r = fr.apply(SPECIES.length());17511752for (int ic = 0; ic < INVOC_COUNT; ic++) {1753for (int i = 0; i < a.length; i += SPECIES.length()) {1754ByteVector av = ByteVector.fromArray(SPECIES, a, i);1755ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1756av.lanewise(VectorOperators.AND_NOT, bv).intoArray(r, i);1757}1758}17591760assertArraysEquals(r, a, b, Byte256VectorTests::AND_NOT);1761}1762176317641765@Test(dataProvider = "byteBinaryOpMaskProvider")1766static void AND_NOTByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1767IntFunction<boolean[]> fm) {1768byte[] a = fa.apply(SPECIES.length());1769byte[] b = fb.apply(SPECIES.length());1770byte[] r = fr.apply(SPECIES.length());1771boolean[] mask = fm.apply(SPECIES.length());1772VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);17731774for (int ic = 0; ic < INVOC_COUNT; ic++) {1775for (int i = 0; i < a.length; i += SPECIES.length()) {1776ByteVector av = ByteVector.fromArray(SPECIES, a, i);1777ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1778av.lanewise(VectorOperators.AND_NOT, bv, vmask).intoArray(r, i);1779}1780}17811782assertArraysEquals(r, a, b, mask, Byte256VectorTests::AND_NOT);1783}178417851786static byte OR(byte a, byte b) {1787return (byte)(a | b);1788}17891790@Test(dataProvider = "byteBinaryOpProvider")1791static void ORByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1792byte[] a = fa.apply(SPECIES.length());1793byte[] b = fb.apply(SPECIES.length());1794byte[] r = fr.apply(SPECIES.length());17951796for (int ic = 0; ic < INVOC_COUNT; ic++) {1797for (int i = 0; i < a.length; i += SPECIES.length()) {1798ByteVector av = ByteVector.fromArray(SPECIES, a, i);1799ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1800av.lanewise(VectorOperators.OR, bv).intoArray(r, i);1801}1802}18031804assertArraysEquals(r, a, b, Byte256VectorTests::OR);1805}1806static byte or(byte a, byte b) {1807return (byte)(a | b);1808}18091810@Test(dataProvider = "byteBinaryOpProvider")1811static void orByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1812byte[] a = fa.apply(SPECIES.length());1813byte[] b = fb.apply(SPECIES.length());1814byte[] r = fr.apply(SPECIES.length());18151816for (int i = 0; i < a.length; i += SPECIES.length()) {1817ByteVector av = ByteVector.fromArray(SPECIES, a, i);1818ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1819av.or(bv).intoArray(r, i);1820}18211822assertArraysEquals(r, a, b, Byte256VectorTests::or);1823}1824182518261827@Test(dataProvider = "byteBinaryOpMaskProvider")1828static void ORByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1829IntFunction<boolean[]> fm) {1830byte[] a = fa.apply(SPECIES.length());1831byte[] b = fb.apply(SPECIES.length());1832byte[] r = fr.apply(SPECIES.length());1833boolean[] mask = fm.apply(SPECIES.length());1834VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);18351836for (int ic = 0; ic < INVOC_COUNT; ic++) {1837for (int i = 0; i < a.length; i += SPECIES.length()) {1838ByteVector av = ByteVector.fromArray(SPECIES, a, i);1839ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1840av.lanewise(VectorOperators.OR, bv, vmask).intoArray(r, i);1841}1842}18431844assertArraysEquals(r, a, b, mask, Byte256VectorTests::OR);1845}184618471848static byte XOR(byte a, byte b) {1849return (byte)(a ^ b);1850}18511852@Test(dataProvider = "byteBinaryOpProvider")1853static void XORByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1854byte[] a = fa.apply(SPECIES.length());1855byte[] b = fb.apply(SPECIES.length());1856byte[] r = fr.apply(SPECIES.length());18571858for (int ic = 0; ic < INVOC_COUNT; ic++) {1859for (int i = 0; i < a.length; i += SPECIES.length()) {1860ByteVector av = ByteVector.fromArray(SPECIES, a, i);1861ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1862av.lanewise(VectorOperators.XOR, bv).intoArray(r, i);1863}1864}18651866assertArraysEquals(r, a, b, Byte256VectorTests::XOR);1867}1868186918701871@Test(dataProvider = "byteBinaryOpMaskProvider")1872static void XORByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1873IntFunction<boolean[]> fm) {1874byte[] a = fa.apply(SPECIES.length());1875byte[] b = fb.apply(SPECIES.length());1876byte[] r = fr.apply(SPECIES.length());1877boolean[] mask = fm.apply(SPECIES.length());1878VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);18791880for (int ic = 0; ic < INVOC_COUNT; ic++) {1881for (int i = 0; i < a.length; i += SPECIES.length()) {1882ByteVector av = ByteVector.fromArray(SPECIES, a, i);1883ByteVector bv = ByteVector.fromArray(SPECIES, b, i);1884av.lanewise(VectorOperators.XOR, bv, vmask).intoArray(r, i);1885}1886}18871888assertArraysEquals(r, a, b, mask, Byte256VectorTests::XOR);1889}189018911892@Test(dataProvider = "byteBinaryOpProvider")1893static void addByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1894byte[] a = fa.apply(SPECIES.length());1895byte[] b = fb.apply(SPECIES.length());1896byte[] r = fr.apply(SPECIES.length());18971898for (int i = 0; i < a.length; i += SPECIES.length()) {1899ByteVector av = ByteVector.fromArray(SPECIES, a, i);1900av.add(b[i]).intoArray(r, i);1901}19021903assertBroadcastArraysEquals(r, a, b, Byte256VectorTests::add);1904}19051906@Test(dataProvider = "byteBinaryOpMaskProvider")1907static void addByte256VectorTestsBroadcastMaskedSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1908IntFunction<boolean[]> fm) {1909byte[] a = fa.apply(SPECIES.length());1910byte[] b = fb.apply(SPECIES.length());1911byte[] r = fr.apply(SPECIES.length());1912boolean[] mask = fm.apply(SPECIES.length());1913VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);19141915for (int i = 0; i < a.length; i += SPECIES.length()) {1916ByteVector av = ByteVector.fromArray(SPECIES, a, i);1917av.add(b[i], vmask).intoArray(r, i);1918}19191920assertBroadcastArraysEquals(r, a, b, mask, Byte256VectorTests::add);1921}19221923@Test(dataProvider = "byteBinaryOpProvider")1924static void subByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1925byte[] a = fa.apply(SPECIES.length());1926byte[] b = fb.apply(SPECIES.length());1927byte[] r = fr.apply(SPECIES.length());19281929for (int i = 0; i < a.length; i += SPECIES.length()) {1930ByteVector av = ByteVector.fromArray(SPECIES, a, i);1931av.sub(b[i]).intoArray(r, i);1932}19331934assertBroadcastArraysEquals(r, a, b, Byte256VectorTests::sub);1935}19361937@Test(dataProvider = "byteBinaryOpMaskProvider")1938static void subByte256VectorTestsBroadcastMaskedSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1939IntFunction<boolean[]> fm) {1940byte[] a = fa.apply(SPECIES.length());1941byte[] b = fb.apply(SPECIES.length());1942byte[] r = fr.apply(SPECIES.length());1943boolean[] mask = fm.apply(SPECIES.length());1944VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);19451946for (int i = 0; i < a.length; i += SPECIES.length()) {1947ByteVector av = ByteVector.fromArray(SPECIES, a, i);1948av.sub(b[i], vmask).intoArray(r, i);1949}19501951assertBroadcastArraysEquals(r, a, b, mask, Byte256VectorTests::sub);1952}19531954@Test(dataProvider = "byteBinaryOpProvider")1955static void mulByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1956byte[] a = fa.apply(SPECIES.length());1957byte[] b = fb.apply(SPECIES.length());1958byte[] r = fr.apply(SPECIES.length());19591960for (int i = 0; i < a.length; i += SPECIES.length()) {1961ByteVector av = ByteVector.fromArray(SPECIES, a, i);1962av.mul(b[i]).intoArray(r, i);1963}19641965assertBroadcastArraysEquals(r, a, b, Byte256VectorTests::mul);1966}19671968@Test(dataProvider = "byteBinaryOpMaskProvider")1969static void mulByte256VectorTestsBroadcastMaskedSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb,1970IntFunction<boolean[]> fm) {1971byte[] a = fa.apply(SPECIES.length());1972byte[] b = fb.apply(SPECIES.length());1973byte[] r = fr.apply(SPECIES.length());1974boolean[] mask = fm.apply(SPECIES.length());1975VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);19761977for (int i = 0; i < a.length; i += SPECIES.length()) {1978ByteVector av = ByteVector.fromArray(SPECIES, a, i);1979av.mul(b[i], vmask).intoArray(r, i);1980}19811982assertBroadcastArraysEquals(r, a, b, mask, Byte256VectorTests::mul);1983}19841985198619871988@Test(dataProvider = "byteBinaryOpProvider")1989static void divByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {1990byte[] a = fa.apply(SPECIES.length());1991byte[] b = fb.apply(SPECIES.length());1992byte[] r = fr.apply(SPECIES.length());19931994replaceZero(b, (byte) 1);19951996for (int i = 0; i < a.length; i += SPECIES.length()) {1997ByteVector av = ByteVector.fromArray(SPECIES, a, i);1998av.div(b[i]).intoArray(r, i);1999}20002001assertBroadcastArraysEquals(r, a, b, Byte256VectorTests::div);2002}2003200420052006@Test(dataProvider = "byteBinaryOpMaskProvider")2007static void divByte256VectorTestsBroadcastMaskedSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb,2008IntFunction<boolean[]> fm) {2009byte[] a = fa.apply(SPECIES.length());2010byte[] b = fb.apply(SPECIES.length());2011byte[] r = fr.apply(SPECIES.length());2012boolean[] mask = fm.apply(SPECIES.length());2013VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);20142015replaceZero(b, (byte) 1);20162017for (int i = 0; i < a.length; i += SPECIES.length()) {2018ByteVector av = ByteVector.fromArray(SPECIES, a, i);2019av.div(b[i], vmask).intoArray(r, i);2020}20212022assertBroadcastArraysEquals(r, a, b, mask, Byte256VectorTests::div);2023}2024202520262027@Test(dataProvider = "byteBinaryOpProvider")2028static void ORByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2029byte[] a = fa.apply(SPECIES.length());2030byte[] b = fb.apply(SPECIES.length());2031byte[] r = fr.apply(SPECIES.length());20322033for (int i = 0; i < a.length; i += SPECIES.length()) {2034ByteVector av = ByteVector.fromArray(SPECIES, a, i);2035av.lanewise(VectorOperators.OR, b[i]).intoArray(r, i);2036}20372038assertBroadcastArraysEquals(r, a, b, Byte256VectorTests::OR);2039}20402041@Test(dataProvider = "byteBinaryOpProvider")2042static void orByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2043byte[] a = fa.apply(SPECIES.length());2044byte[] b = fb.apply(SPECIES.length());2045byte[] r = fr.apply(SPECIES.length());20462047for (int i = 0; i < a.length; i += SPECIES.length()) {2048ByteVector av = ByteVector.fromArray(SPECIES, a, i);2049av.or(b[i]).intoArray(r, i);2050}20512052assertBroadcastArraysEquals(r, a, b, Byte256VectorTests::or);2053}2054205520562057@Test(dataProvider = "byteBinaryOpMaskProvider")2058static void ORByte256VectorTestsBroadcastMaskedSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb,2059IntFunction<boolean[]> fm) {2060byte[] a = fa.apply(SPECIES.length());2061byte[] b = fb.apply(SPECIES.length());2062byte[] r = fr.apply(SPECIES.length());2063boolean[] mask = fm.apply(SPECIES.length());2064VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);20652066for (int i = 0; i < a.length; i += SPECIES.length()) {2067ByteVector av = ByteVector.fromArray(SPECIES, a, i);2068av.lanewise(VectorOperators.OR, b[i], vmask).intoArray(r, i);2069}20702071assertBroadcastArraysEquals(r, a, b, mask, Byte256VectorTests::OR);2072}2073207420752076@Test(dataProvider = "byteBinaryOpProvider")2077static void ANDByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2078byte[] a = fa.apply(SPECIES.length());2079byte[] b = fb.apply(SPECIES.length());2080byte[] r = fr.apply(SPECIES.length());20812082for (int i = 0; i < a.length; i += SPECIES.length()) {2083ByteVector av = ByteVector.fromArray(SPECIES, a, i);2084av.lanewise(VectorOperators.AND, b[i]).intoArray(r, i);2085}20862087assertBroadcastArraysEquals(r, a, b, Byte256VectorTests::AND);2088}20892090@Test(dataProvider = "byteBinaryOpProvider")2091static void andByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2092byte[] a = fa.apply(SPECIES.length());2093byte[] b = fb.apply(SPECIES.length());2094byte[] r = fr.apply(SPECIES.length());20952096for (int i = 0; i < a.length; i += SPECIES.length()) {2097ByteVector av = ByteVector.fromArray(SPECIES, a, i);2098av.and(b[i]).intoArray(r, i);2099}21002101assertBroadcastArraysEquals(r, a, b, Byte256VectorTests::and);2102}2103210421052106@Test(dataProvider = "byteBinaryOpMaskProvider")2107static void ANDByte256VectorTestsBroadcastMaskedSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb,2108IntFunction<boolean[]> fm) {2109byte[] a = fa.apply(SPECIES.length());2110byte[] b = fb.apply(SPECIES.length());2111byte[] r = fr.apply(SPECIES.length());2112boolean[] mask = fm.apply(SPECIES.length());2113VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);21142115for (int i = 0; i < a.length; i += SPECIES.length()) {2116ByteVector av = ByteVector.fromArray(SPECIES, a, i);2117av.lanewise(VectorOperators.AND, b[i], vmask).intoArray(r, i);2118}21192120assertBroadcastArraysEquals(r, a, b, mask, Byte256VectorTests::AND);2121}2122212321242125@Test(dataProvider = "byteBinaryOpProvider")2126static void ORByte256VectorTestsBroadcastLongSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2127byte[] a = fa.apply(SPECIES.length());2128byte[] b = fb.apply(SPECIES.length());2129byte[] r = fr.apply(SPECIES.length());21302131for (int i = 0; i < a.length; i += SPECIES.length()) {2132ByteVector av = ByteVector.fromArray(SPECIES, a, i);2133av.lanewise(VectorOperators.OR, (long)b[i]).intoArray(r, i);2134}21352136assertBroadcastLongArraysEquals(r, a, b, Byte256VectorTests::OR);2137}2138213921402141@Test(dataProvider = "byteBinaryOpMaskProvider")2142static void ORByte256VectorTestsBroadcastMaskedLongSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb,2143IntFunction<boolean[]> fm) {2144byte[] a = fa.apply(SPECIES.length());2145byte[] b = fb.apply(SPECIES.length());2146byte[] r = fr.apply(SPECIES.length());2147boolean[] mask = fm.apply(SPECIES.length());2148VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);21492150for (int i = 0; i < a.length; i += SPECIES.length()) {2151ByteVector av = ByteVector.fromArray(SPECIES, a, i);2152av.lanewise(VectorOperators.OR, (long)b[i], vmask).intoArray(r, i);2153}21542155assertBroadcastLongArraysEquals(r, a, b, mask, Byte256VectorTests::OR);2156}215721582159@Test(dataProvider = "byteBinaryOpProvider")2160static void ADDByte256VectorTestsBroadcastLongSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2161byte[] a = fa.apply(SPECIES.length());2162byte[] b = fb.apply(SPECIES.length());2163byte[] r = fr.apply(SPECIES.length());21642165for (int i = 0; i < a.length; i += SPECIES.length()) {2166ByteVector av = ByteVector.fromArray(SPECIES, a, i);2167av.lanewise(VectorOperators.ADD, (long)b[i]).intoArray(r, i);2168}21692170assertBroadcastLongArraysEquals(r, a, b, Byte256VectorTests::ADD);2171}21722173@Test(dataProvider = "byteBinaryOpMaskProvider")2174static void ADDByte256VectorTestsBroadcastMaskedLongSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb,2175IntFunction<boolean[]> fm) {2176byte[] a = fa.apply(SPECIES.length());2177byte[] b = fb.apply(SPECIES.length());2178byte[] r = fr.apply(SPECIES.length());2179boolean[] mask = fm.apply(SPECIES.length());2180VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);21812182for (int i = 0; i < a.length; i += SPECIES.length()) {2183ByteVector av = ByteVector.fromArray(SPECIES, a, i);2184av.lanewise(VectorOperators.ADD, (long)b[i], vmask).intoArray(r, i);2185}21862187assertBroadcastLongArraysEquals(r, a, b, mask, Byte256VectorTests::ADD);2188}2189219021912192static byte LSHL(byte a, byte b) {2193return (byte)((a << (b & 0x7)));2194}21952196@Test(dataProvider = "byteBinaryOpProvider")2197static void LSHLByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2198byte[] a = fa.apply(SPECIES.length());2199byte[] b = fb.apply(SPECIES.length());2200byte[] r = fr.apply(SPECIES.length());22012202for (int ic = 0; ic < INVOC_COUNT; ic++) {2203for (int i = 0; i < a.length; i += SPECIES.length()) {2204ByteVector av = ByteVector.fromArray(SPECIES, a, i);2205ByteVector bv = ByteVector.fromArray(SPECIES, b, i);2206av.lanewise(VectorOperators.LSHL, bv).intoArray(r, i);2207}2208}22092210assertArraysEquals(r, a, b, Byte256VectorTests::LSHL);2211}2212221322142215@Test(dataProvider = "byteBinaryOpMaskProvider")2216static void LSHLByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,2217IntFunction<boolean[]> fm) {2218byte[] a = fa.apply(SPECIES.length());2219byte[] b = fb.apply(SPECIES.length());2220byte[] r = fr.apply(SPECIES.length());2221boolean[] mask = fm.apply(SPECIES.length());2222VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);22232224for (int ic = 0; ic < INVOC_COUNT; ic++) {2225for (int i = 0; i < a.length; i += SPECIES.length()) {2226ByteVector av = ByteVector.fromArray(SPECIES, a, i);2227ByteVector bv = ByteVector.fromArray(SPECIES, b, i);2228av.lanewise(VectorOperators.LSHL, bv, vmask).intoArray(r, i);2229}2230}22312232assertArraysEquals(r, a, b, mask, Byte256VectorTests::LSHL);2233}2234223522362237223822392240static byte ASHR(byte a, byte b) {2241return (byte)((a >> (b & 0x7)));2242}22432244@Test(dataProvider = "byteBinaryOpProvider")2245static void ASHRByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2246byte[] a = fa.apply(SPECIES.length());2247byte[] b = fb.apply(SPECIES.length());2248byte[] r = fr.apply(SPECIES.length());22492250for (int ic = 0; ic < INVOC_COUNT; ic++) {2251for (int i = 0; i < a.length; i += SPECIES.length()) {2252ByteVector av = ByteVector.fromArray(SPECIES, a, i);2253ByteVector bv = ByteVector.fromArray(SPECIES, b, i);2254av.lanewise(VectorOperators.ASHR, bv).intoArray(r, i);2255}2256}22572258assertArraysEquals(r, a, b, Byte256VectorTests::ASHR);2259}2260226122622263@Test(dataProvider = "byteBinaryOpMaskProvider")2264static void ASHRByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,2265IntFunction<boolean[]> fm) {2266byte[] a = fa.apply(SPECIES.length());2267byte[] b = fb.apply(SPECIES.length());2268byte[] r = fr.apply(SPECIES.length());2269boolean[] mask = fm.apply(SPECIES.length());2270VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);22712272for (int ic = 0; ic < INVOC_COUNT; ic++) {2273for (int i = 0; i < a.length; i += SPECIES.length()) {2274ByteVector av = ByteVector.fromArray(SPECIES, a, i);2275ByteVector bv = ByteVector.fromArray(SPECIES, b, i);2276av.lanewise(VectorOperators.ASHR, bv, vmask).intoArray(r, i);2277}2278}22792280assertArraysEquals(r, a, b, mask, Byte256VectorTests::ASHR);2281}2282228322842285228622872288static byte LSHR(byte a, byte b) {2289return (byte)(((a & 0xFF) >>> (b & 0x7)));2290}22912292@Test(dataProvider = "byteBinaryOpProvider")2293static void LSHRByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2294byte[] a = fa.apply(SPECIES.length());2295byte[] b = fb.apply(SPECIES.length());2296byte[] r = fr.apply(SPECIES.length());22972298for (int ic = 0; ic < INVOC_COUNT; ic++) {2299for (int i = 0; i < a.length; i += SPECIES.length()) {2300ByteVector av = ByteVector.fromArray(SPECIES, a, i);2301ByteVector bv = ByteVector.fromArray(SPECIES, b, i);2302av.lanewise(VectorOperators.LSHR, bv).intoArray(r, i);2303}2304}23052306assertArraysEquals(r, a, b, Byte256VectorTests::LSHR);2307}2308230923102311@Test(dataProvider = "byteBinaryOpMaskProvider")2312static void LSHRByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,2313IntFunction<boolean[]> fm) {2314byte[] a = fa.apply(SPECIES.length());2315byte[] b = fb.apply(SPECIES.length());2316byte[] r = fr.apply(SPECIES.length());2317boolean[] mask = fm.apply(SPECIES.length());2318VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);23192320for (int ic = 0; ic < INVOC_COUNT; ic++) {2321for (int i = 0; i < a.length; i += SPECIES.length()) {2322ByteVector av = ByteVector.fromArray(SPECIES, a, i);2323ByteVector bv = ByteVector.fromArray(SPECIES, b, i);2324av.lanewise(VectorOperators.LSHR, bv, vmask).intoArray(r, i);2325}2326}23272328assertArraysEquals(r, a, b, mask, Byte256VectorTests::LSHR);2329}2330233123322333233423352336static byte LSHL_unary(byte a, byte b) {2337return (byte)((a << (b & 7)));2338}23392340@Test(dataProvider = "byteBinaryOpProvider")2341static void LSHLByte256VectorTestsShift(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2342byte[] a = fa.apply(SPECIES.length());2343byte[] b = fb.apply(SPECIES.length());2344byte[] r = fr.apply(SPECIES.length());23452346for (int ic = 0; ic < INVOC_COUNT; ic++) {2347for (int i = 0; i < a.length; i += SPECIES.length()) {2348ByteVector av = ByteVector.fromArray(SPECIES, a, i);2349av.lanewise(VectorOperators.LSHL, (int)b[i]).intoArray(r, i);2350}2351}23522353assertShiftArraysEquals(r, a, b, Byte256VectorTests::LSHL_unary);2354}2355235623572358@Test(dataProvider = "byteBinaryOpMaskProvider")2359static void LSHLByte256VectorTestsShift(IntFunction<byte[]> fa, IntFunction<byte[]> fb,2360IntFunction<boolean[]> fm) {2361byte[] a = fa.apply(SPECIES.length());2362byte[] b = fb.apply(SPECIES.length());2363byte[] r = fr.apply(SPECIES.length());2364boolean[] mask = fm.apply(SPECIES.length());2365VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);23662367for (int ic = 0; ic < INVOC_COUNT; ic++) {2368for (int i = 0; i < a.length; i += SPECIES.length()) {2369ByteVector av = ByteVector.fromArray(SPECIES, a, i);2370av.lanewise(VectorOperators.LSHL, (int)b[i], vmask).intoArray(r, i);2371}2372}23732374assertShiftArraysEquals(r, a, b, mask, Byte256VectorTests::LSHL_unary);2375}2376237723782379238023812382static byte LSHR_unary(byte a, byte b) {2383return (byte)(((a & 0xFF) >>> (b & 7)));2384}23852386@Test(dataProvider = "byteBinaryOpProvider")2387static void LSHRByte256VectorTestsShift(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2388byte[] a = fa.apply(SPECIES.length());2389byte[] b = fb.apply(SPECIES.length());2390byte[] r = fr.apply(SPECIES.length());23912392for (int ic = 0; ic < INVOC_COUNT; ic++) {2393for (int i = 0; i < a.length; i += SPECIES.length()) {2394ByteVector av = ByteVector.fromArray(SPECIES, a, i);2395av.lanewise(VectorOperators.LSHR, (int)b[i]).intoArray(r, i);2396}2397}23982399assertShiftArraysEquals(r, a, b, Byte256VectorTests::LSHR_unary);2400}2401240224032404@Test(dataProvider = "byteBinaryOpMaskProvider")2405static void LSHRByte256VectorTestsShift(IntFunction<byte[]> fa, IntFunction<byte[]> fb,2406IntFunction<boolean[]> fm) {2407byte[] a = fa.apply(SPECIES.length());2408byte[] b = fb.apply(SPECIES.length());2409byte[] r = fr.apply(SPECIES.length());2410boolean[] mask = fm.apply(SPECIES.length());2411VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);24122413for (int ic = 0; ic < INVOC_COUNT; ic++) {2414for (int i = 0; i < a.length; i += SPECIES.length()) {2415ByteVector av = ByteVector.fromArray(SPECIES, a, i);2416av.lanewise(VectorOperators.LSHR, (int)b[i], vmask).intoArray(r, i);2417}2418}24192420assertShiftArraysEquals(r, a, b, mask, Byte256VectorTests::LSHR_unary);2421}2422242324242425242624272428static byte ASHR_unary(byte a, byte b) {2429return (byte)((a >> (b & 7)));2430}24312432@Test(dataProvider = "byteBinaryOpProvider")2433static void ASHRByte256VectorTestsShift(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2434byte[] a = fa.apply(SPECIES.length());2435byte[] b = fb.apply(SPECIES.length());2436byte[] r = fr.apply(SPECIES.length());24372438for (int ic = 0; ic < INVOC_COUNT; ic++) {2439for (int i = 0; i < a.length; i += SPECIES.length()) {2440ByteVector av = ByteVector.fromArray(SPECIES, a, i);2441av.lanewise(VectorOperators.ASHR, (int)b[i]).intoArray(r, i);2442}2443}24442445assertShiftArraysEquals(r, a, b, Byte256VectorTests::ASHR_unary);2446}2447244824492450@Test(dataProvider = "byteBinaryOpMaskProvider")2451static void ASHRByte256VectorTestsShift(IntFunction<byte[]> fa, IntFunction<byte[]> fb,2452IntFunction<boolean[]> fm) {2453byte[] a = fa.apply(SPECIES.length());2454byte[] b = fb.apply(SPECIES.length());2455byte[] r = fr.apply(SPECIES.length());2456boolean[] mask = fm.apply(SPECIES.length());2457VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);24582459for (int ic = 0; ic < INVOC_COUNT; ic++) {2460for (int i = 0; i < a.length; i += SPECIES.length()) {2461ByteVector av = ByteVector.fromArray(SPECIES, a, i);2462av.lanewise(VectorOperators.ASHR, (int)b[i], vmask).intoArray(r, i);2463}2464}24652466assertShiftArraysEquals(r, a, b, mask, Byte256VectorTests::ASHR_unary);2467}2468246924702471static byte MIN(byte a, byte b) {2472return (byte)(Math.min(a, b));2473}24742475@Test(dataProvider = "byteBinaryOpProvider")2476static void MINByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2477byte[] a = fa.apply(SPECIES.length());2478byte[] b = fb.apply(SPECIES.length());2479byte[] r = fr.apply(SPECIES.length());24802481for (int ic = 0; ic < INVOC_COUNT; ic++) {2482for (int i = 0; i < a.length; i += SPECIES.length()) {2483ByteVector av = ByteVector.fromArray(SPECIES, a, i);2484ByteVector bv = ByteVector.fromArray(SPECIES, b, i);2485av.lanewise(VectorOperators.MIN, bv).intoArray(r, i);2486}2487}24882489assertArraysEquals(r, a, b, Byte256VectorTests::MIN);2490}2491static byte min(byte a, byte b) {2492return (byte)(Math.min(a, b));2493}24942495@Test(dataProvider = "byteBinaryOpProvider")2496static void minByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2497byte[] a = fa.apply(SPECIES.length());2498byte[] b = fb.apply(SPECIES.length());2499byte[] r = fr.apply(SPECIES.length());25002501for (int i = 0; i < a.length; i += SPECIES.length()) {2502ByteVector av = ByteVector.fromArray(SPECIES, a, i);2503ByteVector bv = ByteVector.fromArray(SPECIES, b, i);2504av.min(bv).intoArray(r, i);2505}25062507assertArraysEquals(r, a, b, Byte256VectorTests::min);2508}2509static byte MAX(byte a, byte b) {2510return (byte)(Math.max(a, b));2511}25122513@Test(dataProvider = "byteBinaryOpProvider")2514static void MAXByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2515byte[] a = fa.apply(SPECIES.length());2516byte[] b = fb.apply(SPECIES.length());2517byte[] r = fr.apply(SPECIES.length());25182519for (int ic = 0; ic < INVOC_COUNT; ic++) {2520for (int i = 0; i < a.length; i += SPECIES.length()) {2521ByteVector av = ByteVector.fromArray(SPECIES, a, i);2522ByteVector bv = ByteVector.fromArray(SPECIES, b, i);2523av.lanewise(VectorOperators.MAX, bv).intoArray(r, i);2524}2525}25262527assertArraysEquals(r, a, b, Byte256VectorTests::MAX);2528}2529static byte max(byte a, byte b) {2530return (byte)(Math.max(a, b));2531}25322533@Test(dataProvider = "byteBinaryOpProvider")2534static void maxByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2535byte[] a = fa.apply(SPECIES.length());2536byte[] b = fb.apply(SPECIES.length());2537byte[] r = fr.apply(SPECIES.length());25382539for (int i = 0; i < a.length; i += SPECIES.length()) {2540ByteVector av = ByteVector.fromArray(SPECIES, a, i);2541ByteVector bv = ByteVector.fromArray(SPECIES, b, i);2542av.max(bv).intoArray(r, i);2543}25442545assertArraysEquals(r, a, b, Byte256VectorTests::max);2546}25472548@Test(dataProvider = "byteBinaryOpProvider")2549static void MINByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2550byte[] a = fa.apply(SPECIES.length());2551byte[] b = fb.apply(SPECIES.length());2552byte[] r = fr.apply(SPECIES.length());25532554for (int i = 0; i < a.length; i += SPECIES.length()) {2555ByteVector av = ByteVector.fromArray(SPECIES, a, i);2556av.lanewise(VectorOperators.MIN, b[i]).intoArray(r, i);2557}25582559assertBroadcastArraysEquals(r, a, b, Byte256VectorTests::MIN);2560}25612562@Test(dataProvider = "byteBinaryOpProvider")2563static void minByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2564byte[] a = fa.apply(SPECIES.length());2565byte[] b = fb.apply(SPECIES.length());2566byte[] r = fr.apply(SPECIES.length());25672568for (int i = 0; i < a.length; i += SPECIES.length()) {2569ByteVector av = ByteVector.fromArray(SPECIES, a, i);2570av.min(b[i]).intoArray(r, i);2571}25722573assertBroadcastArraysEquals(r, a, b, Byte256VectorTests::min);2574}25752576@Test(dataProvider = "byteBinaryOpProvider")2577static void MAXByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2578byte[] a = fa.apply(SPECIES.length());2579byte[] b = fb.apply(SPECIES.length());2580byte[] r = fr.apply(SPECIES.length());25812582for (int i = 0; i < a.length; i += SPECIES.length()) {2583ByteVector av = ByteVector.fromArray(SPECIES, a, i);2584av.lanewise(VectorOperators.MAX, b[i]).intoArray(r, i);2585}25862587assertBroadcastArraysEquals(r, a, b, Byte256VectorTests::MAX);2588}25892590@Test(dataProvider = "byteBinaryOpProvider")2591static void maxByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {2592byte[] a = fa.apply(SPECIES.length());2593byte[] b = fb.apply(SPECIES.length());2594byte[] r = fr.apply(SPECIES.length());25952596for (int i = 0; i < a.length; i += SPECIES.length()) {2597ByteVector av = ByteVector.fromArray(SPECIES, a, i);2598av.max(b[i]).intoArray(r, i);2599}26002601assertBroadcastArraysEquals(r, a, b, Byte256VectorTests::max);2602}26032604static byte ANDReduce(byte[] a, int idx) {2605byte res = -1;2606for (int i = idx; i < (idx + SPECIES.length()); i++) {2607res &= a[i];2608}26092610return res;2611}26122613static byte ANDReduceAll(byte[] a) {2614byte res = -1;2615for (int i = 0; i < a.length; i += SPECIES.length()) {2616res &= ANDReduce(a, i);2617}26182619return res;2620}262126222623@Test(dataProvider = "byteUnaryOpProvider")2624static void ANDReduceByte256VectorTests(IntFunction<byte[]> fa) {2625byte[] a = fa.apply(SPECIES.length());2626byte[] r = fr.apply(SPECIES.length());2627byte ra = -1;26282629for (int ic = 0; ic < INVOC_COUNT; ic++) {2630for (int i = 0; i < a.length; i += SPECIES.length()) {2631ByteVector av = ByteVector.fromArray(SPECIES, a, i);2632r[i] = av.reduceLanes(VectorOperators.AND);2633}2634}26352636for (int ic = 0; ic < INVOC_COUNT; ic++) {2637ra = -1;2638for (int i = 0; i < a.length; i += SPECIES.length()) {2639ByteVector av = ByteVector.fromArray(SPECIES, a, i);2640ra &= av.reduceLanes(VectorOperators.AND);2641}2642}26432644assertReductionArraysEquals(r, ra, a,2645Byte256VectorTests::ANDReduce, Byte256VectorTests::ANDReduceAll);2646}264726482649static byte ANDReduceMasked(byte[] a, int idx, boolean[] mask) {2650byte res = -1;2651for (int i = idx; i < (idx + SPECIES.length()); i++) {2652if (mask[i % SPECIES.length()])2653res &= a[i];2654}26552656return res;2657}26582659static byte ANDReduceAllMasked(byte[] a, boolean[] mask) {2660byte res = -1;2661for (int i = 0; i < a.length; i += SPECIES.length()) {2662res &= ANDReduceMasked(a, i, mask);2663}26642665return res;2666}266726682669@Test(dataProvider = "byteUnaryOpMaskProvider")2670static void ANDReduceByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<boolean[]> fm) {2671byte[] a = fa.apply(SPECIES.length());2672byte[] r = fr.apply(SPECIES.length());2673boolean[] mask = fm.apply(SPECIES.length());2674VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);2675byte ra = -1;26762677for (int ic = 0; ic < INVOC_COUNT; ic++) {2678for (int i = 0; i < a.length; i += SPECIES.length()) {2679ByteVector av = ByteVector.fromArray(SPECIES, a, i);2680r[i] = av.reduceLanes(VectorOperators.AND, vmask);2681}2682}26832684for (int ic = 0; ic < INVOC_COUNT; ic++) {2685ra = -1;2686for (int i = 0; i < a.length; i += SPECIES.length()) {2687ByteVector av = ByteVector.fromArray(SPECIES, a, i);2688ra &= av.reduceLanes(VectorOperators.AND, vmask);2689}2690}26912692assertReductionArraysEqualsMasked(r, ra, a, mask,2693Byte256VectorTests::ANDReduceMasked, Byte256VectorTests::ANDReduceAllMasked);2694}269526962697static byte ORReduce(byte[] a, int idx) {2698byte res = 0;2699for (int i = idx; i < (idx + SPECIES.length()); i++) {2700res |= a[i];2701}27022703return res;2704}27052706static byte ORReduceAll(byte[] a) {2707byte res = 0;2708for (int i = 0; i < a.length; i += SPECIES.length()) {2709res |= ORReduce(a, i);2710}27112712return res;2713}271427152716@Test(dataProvider = "byteUnaryOpProvider")2717static void ORReduceByte256VectorTests(IntFunction<byte[]> fa) {2718byte[] a = fa.apply(SPECIES.length());2719byte[] r = fr.apply(SPECIES.length());2720byte ra = 0;27212722for (int ic = 0; ic < INVOC_COUNT; ic++) {2723for (int i = 0; i < a.length; i += SPECIES.length()) {2724ByteVector av = ByteVector.fromArray(SPECIES, a, i);2725r[i] = av.reduceLanes(VectorOperators.OR);2726}2727}27282729for (int ic = 0; ic < INVOC_COUNT; ic++) {2730ra = 0;2731for (int i = 0; i < a.length; i += SPECIES.length()) {2732ByteVector av = ByteVector.fromArray(SPECIES, a, i);2733ra |= av.reduceLanes(VectorOperators.OR);2734}2735}27362737assertReductionArraysEquals(r, ra, a,2738Byte256VectorTests::ORReduce, Byte256VectorTests::ORReduceAll);2739}274027412742static byte ORReduceMasked(byte[] a, int idx, boolean[] mask) {2743byte res = 0;2744for (int i = idx; i < (idx + SPECIES.length()); i++) {2745if (mask[i % SPECIES.length()])2746res |= a[i];2747}27482749return res;2750}27512752static byte ORReduceAllMasked(byte[] a, boolean[] mask) {2753byte res = 0;2754for (int i = 0; i < a.length; i += SPECIES.length()) {2755res |= ORReduceMasked(a, i, mask);2756}27572758return res;2759}276027612762@Test(dataProvider = "byteUnaryOpMaskProvider")2763static void ORReduceByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<boolean[]> fm) {2764byte[] a = fa.apply(SPECIES.length());2765byte[] r = fr.apply(SPECIES.length());2766boolean[] mask = fm.apply(SPECIES.length());2767VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);2768byte ra = 0;27692770for (int ic = 0; ic < INVOC_COUNT; ic++) {2771for (int i = 0; i < a.length; i += SPECIES.length()) {2772ByteVector av = ByteVector.fromArray(SPECIES, a, i);2773r[i] = av.reduceLanes(VectorOperators.OR, vmask);2774}2775}27762777for (int ic = 0; ic < INVOC_COUNT; ic++) {2778ra = 0;2779for (int i = 0; i < a.length; i += SPECIES.length()) {2780ByteVector av = ByteVector.fromArray(SPECIES, a, i);2781ra |= av.reduceLanes(VectorOperators.OR, vmask);2782}2783}27842785assertReductionArraysEqualsMasked(r, ra, a, mask,2786Byte256VectorTests::ORReduceMasked, Byte256VectorTests::ORReduceAllMasked);2787}278827892790static byte XORReduce(byte[] a, int idx) {2791byte res = 0;2792for (int i = idx; i < (idx + SPECIES.length()); i++) {2793res ^= a[i];2794}27952796return res;2797}27982799static byte XORReduceAll(byte[] a) {2800byte res = 0;2801for (int i = 0; i < a.length; i += SPECIES.length()) {2802res ^= XORReduce(a, i);2803}28042805return res;2806}280728082809@Test(dataProvider = "byteUnaryOpProvider")2810static void XORReduceByte256VectorTests(IntFunction<byte[]> fa) {2811byte[] a = fa.apply(SPECIES.length());2812byte[] r = fr.apply(SPECIES.length());2813byte ra = 0;28142815for (int ic = 0; ic < INVOC_COUNT; ic++) {2816for (int i = 0; i < a.length; i += SPECIES.length()) {2817ByteVector av = ByteVector.fromArray(SPECIES, a, i);2818r[i] = av.reduceLanes(VectorOperators.XOR);2819}2820}28212822for (int ic = 0; ic < INVOC_COUNT; ic++) {2823ra = 0;2824for (int i = 0; i < a.length; i += SPECIES.length()) {2825ByteVector av = ByteVector.fromArray(SPECIES, a, i);2826ra ^= av.reduceLanes(VectorOperators.XOR);2827}2828}28292830assertReductionArraysEquals(r, ra, a,2831Byte256VectorTests::XORReduce, Byte256VectorTests::XORReduceAll);2832}283328342835static byte XORReduceMasked(byte[] a, int idx, boolean[] mask) {2836byte res = 0;2837for (int i = idx; i < (idx + SPECIES.length()); i++) {2838if (mask[i % SPECIES.length()])2839res ^= a[i];2840}28412842return res;2843}28442845static byte XORReduceAllMasked(byte[] a, boolean[] mask) {2846byte res = 0;2847for (int i = 0; i < a.length; i += SPECIES.length()) {2848res ^= XORReduceMasked(a, i, mask);2849}28502851return res;2852}285328542855@Test(dataProvider = "byteUnaryOpMaskProvider")2856static void XORReduceByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<boolean[]> fm) {2857byte[] a = fa.apply(SPECIES.length());2858byte[] r = fr.apply(SPECIES.length());2859boolean[] mask = fm.apply(SPECIES.length());2860VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);2861byte ra = 0;28622863for (int ic = 0; ic < INVOC_COUNT; ic++) {2864for (int i = 0; i < a.length; i += SPECIES.length()) {2865ByteVector av = ByteVector.fromArray(SPECIES, a, i);2866r[i] = av.reduceLanes(VectorOperators.XOR, vmask);2867}2868}28692870for (int ic = 0; ic < INVOC_COUNT; ic++) {2871ra = 0;2872for (int i = 0; i < a.length; i += SPECIES.length()) {2873ByteVector av = ByteVector.fromArray(SPECIES, a, i);2874ra ^= av.reduceLanes(VectorOperators.XOR, vmask);2875}2876}28772878assertReductionArraysEqualsMasked(r, ra, a, mask,2879Byte256VectorTests::XORReduceMasked, Byte256VectorTests::XORReduceAllMasked);2880}28812882static byte ADDReduce(byte[] a, int idx) {2883byte res = 0;2884for (int i = idx; i < (idx + SPECIES.length()); i++) {2885res += a[i];2886}28872888return res;2889}28902891static byte ADDReduceAll(byte[] a) {2892byte res = 0;2893for (int i = 0; i < a.length; i += SPECIES.length()) {2894res += ADDReduce(a, i);2895}28962897return res;2898}2899@Test(dataProvider = "byteUnaryOpProvider")2900static void ADDReduceByte256VectorTests(IntFunction<byte[]> fa) {2901byte[] a = fa.apply(SPECIES.length());2902byte[] r = fr.apply(SPECIES.length());2903byte ra = 0;29042905for (int ic = 0; ic < INVOC_COUNT; ic++) {2906for (int i = 0; i < a.length; i += SPECIES.length()) {2907ByteVector av = ByteVector.fromArray(SPECIES, a, i);2908r[i] = av.reduceLanes(VectorOperators.ADD);2909}2910}29112912for (int ic = 0; ic < INVOC_COUNT; ic++) {2913ra = 0;2914for (int i = 0; i < a.length; i += SPECIES.length()) {2915ByteVector av = ByteVector.fromArray(SPECIES, a, i);2916ra += av.reduceLanes(VectorOperators.ADD);2917}2918}29192920assertReductionArraysEquals(r, ra, a,2921Byte256VectorTests::ADDReduce, Byte256VectorTests::ADDReduceAll);2922}2923static byte ADDReduceMasked(byte[] a, int idx, boolean[] mask) {2924byte res = 0;2925for (int i = idx; i < (idx + SPECIES.length()); i++) {2926if (mask[i % SPECIES.length()])2927res += a[i];2928}29292930return res;2931}29322933static byte ADDReduceAllMasked(byte[] a, boolean[] mask) {2934byte res = 0;2935for (int i = 0; i < a.length; i += SPECIES.length()) {2936res += ADDReduceMasked(a, i, mask);2937}29382939return res;2940}2941@Test(dataProvider = "byteUnaryOpMaskProvider")2942static void ADDReduceByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<boolean[]> fm) {2943byte[] a = fa.apply(SPECIES.length());2944byte[] r = fr.apply(SPECIES.length());2945boolean[] mask = fm.apply(SPECIES.length());2946VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);2947byte ra = 0;29482949for (int ic = 0; ic < INVOC_COUNT; ic++) {2950for (int i = 0; i < a.length; i += SPECIES.length()) {2951ByteVector av = ByteVector.fromArray(SPECIES, a, i);2952r[i] = av.reduceLanes(VectorOperators.ADD, vmask);2953}2954}29552956for (int ic = 0; ic < INVOC_COUNT; ic++) {2957ra = 0;2958for (int i = 0; i < a.length; i += SPECIES.length()) {2959ByteVector av = ByteVector.fromArray(SPECIES, a, i);2960ra += av.reduceLanes(VectorOperators.ADD, vmask);2961}2962}29632964assertReductionArraysEqualsMasked(r, ra, a, mask,2965Byte256VectorTests::ADDReduceMasked, Byte256VectorTests::ADDReduceAllMasked);2966}2967static byte MULReduce(byte[] a, int idx) {2968byte res = 1;2969for (int i = idx; i < (idx + SPECIES.length()); i++) {2970res *= a[i];2971}29722973return res;2974}29752976static byte MULReduceAll(byte[] a) {2977byte res = 1;2978for (int i = 0; i < a.length; i += SPECIES.length()) {2979res *= MULReduce(a, i);2980}29812982return res;2983}2984@Test(dataProvider = "byteUnaryOpProvider")2985static void MULReduceByte256VectorTests(IntFunction<byte[]> fa) {2986byte[] a = fa.apply(SPECIES.length());2987byte[] r = fr.apply(SPECIES.length());2988byte ra = 1;29892990for (int ic = 0; ic < INVOC_COUNT; ic++) {2991for (int i = 0; i < a.length; i += SPECIES.length()) {2992ByteVector av = ByteVector.fromArray(SPECIES, a, i);2993r[i] = av.reduceLanes(VectorOperators.MUL);2994}2995}29962997for (int ic = 0; ic < INVOC_COUNT; ic++) {2998ra = 1;2999for (int i = 0; i < a.length; i += SPECIES.length()) {3000ByteVector av = ByteVector.fromArray(SPECIES, a, i);3001ra *= av.reduceLanes(VectorOperators.MUL);3002}3003}30043005assertReductionArraysEquals(r, ra, a,3006Byte256VectorTests::MULReduce, Byte256VectorTests::MULReduceAll);3007}3008static byte MULReduceMasked(byte[] a, int idx, boolean[] mask) {3009byte res = 1;3010for (int i = idx; i < (idx + SPECIES.length()); i++) {3011if (mask[i % SPECIES.length()])3012res *= a[i];3013}30143015return res;3016}30173018static byte MULReduceAllMasked(byte[] a, boolean[] mask) {3019byte res = 1;3020for (int i = 0; i < a.length; i += SPECIES.length()) {3021res *= MULReduceMasked(a, i, mask);3022}30233024return res;3025}3026@Test(dataProvider = "byteUnaryOpMaskProvider")3027static void MULReduceByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<boolean[]> fm) {3028byte[] a = fa.apply(SPECIES.length());3029byte[] r = fr.apply(SPECIES.length());3030boolean[] mask = fm.apply(SPECIES.length());3031VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);3032byte ra = 1;30333034for (int ic = 0; ic < INVOC_COUNT; ic++) {3035for (int i = 0; i < a.length; i += SPECIES.length()) {3036ByteVector av = ByteVector.fromArray(SPECIES, a, i);3037r[i] = av.reduceLanes(VectorOperators.MUL, vmask);3038}3039}30403041for (int ic = 0; ic < INVOC_COUNT; ic++) {3042ra = 1;3043for (int i = 0; i < a.length; i += SPECIES.length()) {3044ByteVector av = ByteVector.fromArray(SPECIES, a, i);3045ra *= av.reduceLanes(VectorOperators.MUL, vmask);3046}3047}30483049assertReductionArraysEqualsMasked(r, ra, a, mask,3050Byte256VectorTests::MULReduceMasked, Byte256VectorTests::MULReduceAllMasked);3051}3052static byte MINReduce(byte[] a, int idx) {3053byte res = Byte.MAX_VALUE;3054for (int i = idx; i < (idx + SPECIES.length()); i++) {3055res = (byte)Math.min(res, a[i]);3056}30573058return res;3059}30603061static byte MINReduceAll(byte[] a) {3062byte res = Byte.MAX_VALUE;3063for (int i = 0; i < a.length; i++) {3064res = (byte)Math.min(res, a[i]);3065}30663067return res;3068}3069@Test(dataProvider = "byteUnaryOpProvider")3070static void MINReduceByte256VectorTests(IntFunction<byte[]> fa) {3071byte[] a = fa.apply(SPECIES.length());3072byte[] r = fr.apply(SPECIES.length());3073byte ra = Byte.MAX_VALUE;30743075for (int ic = 0; ic < INVOC_COUNT; ic++) {3076for (int i = 0; i < a.length; i += SPECIES.length()) {3077ByteVector av = ByteVector.fromArray(SPECIES, a, i);3078r[i] = av.reduceLanes(VectorOperators.MIN);3079}3080}30813082for (int ic = 0; ic < INVOC_COUNT; ic++) {3083ra = Byte.MAX_VALUE;3084for (int i = 0; i < a.length; i += SPECIES.length()) {3085ByteVector av = ByteVector.fromArray(SPECIES, a, i);3086ra = (byte)Math.min(ra, av.reduceLanes(VectorOperators.MIN));3087}3088}30893090assertReductionArraysEquals(r, ra, a,3091Byte256VectorTests::MINReduce, Byte256VectorTests::MINReduceAll);3092}3093static byte MINReduceMasked(byte[] a, int idx, boolean[] mask) {3094byte res = Byte.MAX_VALUE;3095for (int i = idx; i < (idx + SPECIES.length()); i++) {3096if(mask[i % SPECIES.length()])3097res = (byte)Math.min(res, a[i]);3098}30993100return res;3101}31023103static byte MINReduceAllMasked(byte[] a, boolean[] mask) {3104byte res = Byte.MAX_VALUE;3105for (int i = 0; i < a.length; i++) {3106if(mask[i % SPECIES.length()])3107res = (byte)Math.min(res, a[i]);3108}31093110return res;3111}3112@Test(dataProvider = "byteUnaryOpMaskProvider")3113static void MINReduceByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<boolean[]> fm) {3114byte[] a = fa.apply(SPECIES.length());3115byte[] r = fr.apply(SPECIES.length());3116boolean[] mask = fm.apply(SPECIES.length());3117VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);3118byte ra = Byte.MAX_VALUE;31193120for (int ic = 0; ic < INVOC_COUNT; ic++) {3121for (int i = 0; i < a.length; i += SPECIES.length()) {3122ByteVector av = ByteVector.fromArray(SPECIES, a, i);3123r[i] = av.reduceLanes(VectorOperators.MIN, vmask);3124}3125}31263127for (int ic = 0; ic < INVOC_COUNT; ic++) {3128ra = Byte.MAX_VALUE;3129for (int i = 0; i < a.length; i += SPECIES.length()) {3130ByteVector av = ByteVector.fromArray(SPECIES, a, i);3131ra = (byte)Math.min(ra, av.reduceLanes(VectorOperators.MIN, vmask));3132}3133}31343135assertReductionArraysEqualsMasked(r, ra, a, mask,3136Byte256VectorTests::MINReduceMasked, Byte256VectorTests::MINReduceAllMasked);3137}3138static byte MAXReduce(byte[] a, int idx) {3139byte res = Byte.MIN_VALUE;3140for (int i = idx; i < (idx + SPECIES.length()); i++) {3141res = (byte)Math.max(res, a[i]);3142}31433144return res;3145}31463147static byte MAXReduceAll(byte[] a) {3148byte res = Byte.MIN_VALUE;3149for (int i = 0; i < a.length; i++) {3150res = (byte)Math.max(res, a[i]);3151}31523153return res;3154}3155@Test(dataProvider = "byteUnaryOpProvider")3156static void MAXReduceByte256VectorTests(IntFunction<byte[]> fa) {3157byte[] a = fa.apply(SPECIES.length());3158byte[] r = fr.apply(SPECIES.length());3159byte ra = Byte.MIN_VALUE;31603161for (int ic = 0; ic < INVOC_COUNT; ic++) {3162for (int i = 0; i < a.length; i += SPECIES.length()) {3163ByteVector av = ByteVector.fromArray(SPECIES, a, i);3164r[i] = av.reduceLanes(VectorOperators.MAX);3165}3166}31673168for (int ic = 0; ic < INVOC_COUNT; ic++) {3169ra = Byte.MIN_VALUE;3170for (int i = 0; i < a.length; i += SPECIES.length()) {3171ByteVector av = ByteVector.fromArray(SPECIES, a, i);3172ra = (byte)Math.max(ra, av.reduceLanes(VectorOperators.MAX));3173}3174}31753176assertReductionArraysEquals(r, ra, a,3177Byte256VectorTests::MAXReduce, Byte256VectorTests::MAXReduceAll);3178}3179static byte MAXReduceMasked(byte[] a, int idx, boolean[] mask) {3180byte res = Byte.MIN_VALUE;3181for (int i = idx; i < (idx + SPECIES.length()); i++) {3182if(mask[i % SPECIES.length()])3183res = (byte)Math.max(res, a[i]);3184}31853186return res;3187}31883189static byte MAXReduceAllMasked(byte[] a, boolean[] mask) {3190byte res = Byte.MIN_VALUE;3191for (int i = 0; i < a.length; i++) {3192if(mask[i % SPECIES.length()])3193res = (byte)Math.max(res, a[i]);3194}31953196return res;3197}3198@Test(dataProvider = "byteUnaryOpMaskProvider")3199static void MAXReduceByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<boolean[]> fm) {3200byte[] a = fa.apply(SPECIES.length());3201byte[] r = fr.apply(SPECIES.length());3202boolean[] mask = fm.apply(SPECIES.length());3203VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);3204byte ra = Byte.MIN_VALUE;32053206for (int ic = 0; ic < INVOC_COUNT; ic++) {3207for (int i = 0; i < a.length; i += SPECIES.length()) {3208ByteVector av = ByteVector.fromArray(SPECIES, a, i);3209r[i] = av.reduceLanes(VectorOperators.MAX, vmask);3210}3211}32123213for (int ic = 0; ic < INVOC_COUNT; ic++) {3214ra = Byte.MIN_VALUE;3215for (int i = 0; i < a.length; i += SPECIES.length()) {3216ByteVector av = ByteVector.fromArray(SPECIES, a, i);3217ra = (byte)Math.max(ra, av.reduceLanes(VectorOperators.MAX, vmask));3218}3219}32203221assertReductionArraysEqualsMasked(r, ra, a, mask,3222Byte256VectorTests::MAXReduceMasked, Byte256VectorTests::MAXReduceAllMasked);3223}32243225static boolean anyTrue(boolean[] a, int idx) {3226boolean res = false;3227for (int i = idx; i < (idx + SPECIES.length()); i++) {3228res |= a[i];3229}32303231return res;3232}323332343235@Test(dataProvider = "boolUnaryOpProvider")3236static void anyTrueByte256VectorTests(IntFunction<boolean[]> fm) {3237boolean[] mask = fm.apply(SPECIES.length());3238boolean[] r = fmr.apply(SPECIES.length());32393240for (int ic = 0; ic < INVOC_COUNT; ic++) {3241for (int i = 0; i < mask.length; i += SPECIES.length()) {3242VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, i);3243r[i] = vmask.anyTrue();3244}3245}32463247assertReductionBoolArraysEquals(r, mask, Byte256VectorTests::anyTrue);3248}324932503251static boolean allTrue(boolean[] a, int idx) {3252boolean res = true;3253for (int i = idx; i < (idx + SPECIES.length()); i++) {3254res &= a[i];3255}32563257return res;3258}325932603261@Test(dataProvider = "boolUnaryOpProvider")3262static void allTrueByte256VectorTests(IntFunction<boolean[]> fm) {3263boolean[] mask = fm.apply(SPECIES.length());3264boolean[] r = fmr.apply(SPECIES.length());32653266for (int ic = 0; ic < INVOC_COUNT; ic++) {3267for (int i = 0; i < mask.length; i += SPECIES.length()) {3268VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, i);3269r[i] = vmask.allTrue();3270}3271}32723273assertReductionBoolArraysEquals(r, mask, Byte256VectorTests::allTrue);3274}327532763277@Test(dataProvider = "byteUnaryOpProvider")3278static void withByte256VectorTests(IntFunction<byte []> fa) {3279byte[] a = fa.apply(SPECIES.length());3280byte[] r = fr.apply(SPECIES.length());32813282for (int ic = 0; ic < INVOC_COUNT; ic++) {3283for (int i = 0; i < a.length; i += SPECIES.length()) {3284ByteVector av = ByteVector.fromArray(SPECIES, a, i);3285av.withLane(0, (byte)4).intoArray(r, i);3286}3287}32883289assertInsertArraysEquals(r, a, (byte)4, 0);3290}3291static boolean testIS_DEFAULT(byte a) {3292return bits(a)==0;3293}32943295@Test(dataProvider = "byteTestOpProvider")3296static void IS_DEFAULTByte256VectorTests(IntFunction<byte[]> fa) {3297byte[] a = fa.apply(SPECIES.length());32983299for (int ic = 0; ic < INVOC_COUNT; ic++) {3300for (int i = 0; i < a.length; i += SPECIES.length()) {3301ByteVector av = ByteVector.fromArray(SPECIES, a, i);3302VectorMask<Byte> mv = av.test(VectorOperators.IS_DEFAULT);33033304// Check results as part of computation.3305for (int j = 0; j < SPECIES.length(); j++) {3306Assert.assertEquals(mv.laneIsSet(j), testIS_DEFAULT(a[i + j]));3307}3308}3309}3310}33113312@Test(dataProvider = "byteTestOpMaskProvider")3313static void IS_DEFAULTMaskedByte256VectorTestsSmokeTest(IntFunction<byte[]> fa,3314IntFunction<boolean[]> fm) {3315byte[] a = fa.apply(SPECIES.length());3316boolean[] mask = fm.apply(SPECIES.length());3317VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);33183319for (int i = 0; i < a.length; i += SPECIES.length()) {3320ByteVector av = ByteVector.fromArray(SPECIES, a, i);3321VectorMask<Byte> mv = av.test(VectorOperators.IS_DEFAULT, vmask);33223323// Check results as part of computation.3324for (int j = 0; j < SPECIES.length(); j++) {3325Assert.assertEquals(mv.laneIsSet(j), vmask.laneIsSet(j) && testIS_DEFAULT(a[i + j]));3326}3327}3328}3329static boolean testIS_NEGATIVE(byte a) {3330return bits(a)<0;3331}33323333@Test(dataProvider = "byteTestOpProvider")3334static void IS_NEGATIVEByte256VectorTests(IntFunction<byte[]> fa) {3335byte[] a = fa.apply(SPECIES.length());33363337for (int ic = 0; ic < INVOC_COUNT; ic++) {3338for (int i = 0; i < a.length; i += SPECIES.length()) {3339ByteVector av = ByteVector.fromArray(SPECIES, a, i);3340VectorMask<Byte> mv = av.test(VectorOperators.IS_NEGATIVE);33413342// Check results as part of computation.3343for (int j = 0; j < SPECIES.length(); j++) {3344Assert.assertEquals(mv.laneIsSet(j), testIS_NEGATIVE(a[i + j]));3345}3346}3347}3348}33493350@Test(dataProvider = "byteTestOpMaskProvider")3351static void IS_NEGATIVEMaskedByte256VectorTestsSmokeTest(IntFunction<byte[]> fa,3352IntFunction<boolean[]> fm) {3353byte[] a = fa.apply(SPECIES.length());3354boolean[] mask = fm.apply(SPECIES.length());3355VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);33563357for (int i = 0; i < a.length; i += SPECIES.length()) {3358ByteVector av = ByteVector.fromArray(SPECIES, a, i);3359VectorMask<Byte> mv = av.test(VectorOperators.IS_NEGATIVE, vmask);33603361// Check results as part of computation.3362for (int j = 0; j < SPECIES.length(); j++) {3363Assert.assertEquals(mv.laneIsSet(j), vmask.laneIsSet(j) && testIS_NEGATIVE(a[i + j]));3364}3365}3366}33673368336933703371@Test(dataProvider = "byteCompareOpProvider")3372static void LTByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3373byte[] a = fa.apply(SPECIES.length());3374byte[] b = fb.apply(SPECIES.length());33753376for (int ic = 0; ic < INVOC_COUNT; ic++) {3377for (int i = 0; i < a.length; i += SPECIES.length()) {3378ByteVector av = ByteVector.fromArray(SPECIES, a, i);3379ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3380VectorMask<Byte> mv = av.compare(VectorOperators.LT, bv);33813382// Check results as part of computation.3383for (int j = 0; j < SPECIES.length(); j++) {3384Assert.assertEquals(mv.laneIsSet(j), lt(a[i + j], b[i + j]));3385}3386}3387}3388}338933903391@Test(dataProvider = "byteCompareOpProvider")3392static void ltByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3393byte[] a = fa.apply(SPECIES.length());3394byte[] b = fb.apply(SPECIES.length());33953396for (int ic = 0; ic < INVOC_COUNT; ic++) {3397for (int i = 0; i < a.length; i += SPECIES.length()) {3398ByteVector av = ByteVector.fromArray(SPECIES, a, i);3399ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3400VectorMask<Byte> mv = av.lt(bv);34013402// Check results as part of computation.3403for (int j = 0; j < SPECIES.length(); j++) {3404Assert.assertEquals(mv.laneIsSet(j), lt(a[i + j], b[i + j]));3405}3406}3407}3408}34093410@Test(dataProvider = "byteCompareOpMaskProvider")3411static void LTByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,3412IntFunction<boolean[]> fm) {3413byte[] a = fa.apply(SPECIES.length());3414byte[] b = fb.apply(SPECIES.length());3415boolean[] mask = fm.apply(SPECIES.length());34163417VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);34183419for (int ic = 0; ic < INVOC_COUNT; ic++) {3420for (int i = 0; i < a.length; i += SPECIES.length()) {3421ByteVector av = ByteVector.fromArray(SPECIES, a, i);3422ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3423VectorMask<Byte> mv = av.compare(VectorOperators.LT, bv, vmask);34243425// Check results as part of computation.3426for (int j = 0; j < SPECIES.length(); j++) {3427Assert.assertEquals(mv.laneIsSet(j), mask[j] && lt(a[i + j], b[i + j]));3428}3429}3430}3431}343234333434@Test(dataProvider = "byteCompareOpProvider")3435static void GTByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3436byte[] a = fa.apply(SPECIES.length());3437byte[] b = fb.apply(SPECIES.length());34383439for (int ic = 0; ic < INVOC_COUNT; ic++) {3440for (int i = 0; i < a.length; i += SPECIES.length()) {3441ByteVector av = ByteVector.fromArray(SPECIES, a, i);3442ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3443VectorMask<Byte> mv = av.compare(VectorOperators.GT, bv);34443445// Check results as part of computation.3446for (int j = 0; j < SPECIES.length(); j++) {3447Assert.assertEquals(mv.laneIsSet(j), gt(a[i + j], b[i + j]));3448}3449}3450}3451}34523453@Test(dataProvider = "byteCompareOpMaskProvider")3454static void GTByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,3455IntFunction<boolean[]> fm) {3456byte[] a = fa.apply(SPECIES.length());3457byte[] b = fb.apply(SPECIES.length());3458boolean[] mask = fm.apply(SPECIES.length());34593460VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);34613462for (int ic = 0; ic < INVOC_COUNT; ic++) {3463for (int i = 0; i < a.length; i += SPECIES.length()) {3464ByteVector av = ByteVector.fromArray(SPECIES, a, i);3465ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3466VectorMask<Byte> mv = av.compare(VectorOperators.GT, bv, vmask);34673468// Check results as part of computation.3469for (int j = 0; j < SPECIES.length(); j++) {3470Assert.assertEquals(mv.laneIsSet(j), mask[j] && gt(a[i + j], b[i + j]));3471}3472}3473}3474}347534763477@Test(dataProvider = "byteCompareOpProvider")3478static void EQByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3479byte[] a = fa.apply(SPECIES.length());3480byte[] b = fb.apply(SPECIES.length());34813482for (int ic = 0; ic < INVOC_COUNT; ic++) {3483for (int i = 0; i < a.length; i += SPECIES.length()) {3484ByteVector av = ByteVector.fromArray(SPECIES, a, i);3485ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3486VectorMask<Byte> mv = av.compare(VectorOperators.EQ, bv);34873488// Check results as part of computation.3489for (int j = 0; j < SPECIES.length(); j++) {3490Assert.assertEquals(mv.laneIsSet(j), eq(a[i + j], b[i + j]));3491}3492}3493}3494}349534963497@Test(dataProvider = "byteCompareOpProvider")3498static void eqByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3499byte[] a = fa.apply(SPECIES.length());3500byte[] b = fb.apply(SPECIES.length());35013502for (int ic = 0; ic < INVOC_COUNT; ic++) {3503for (int i = 0; i < a.length; i += SPECIES.length()) {3504ByteVector av = ByteVector.fromArray(SPECIES, a, i);3505ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3506VectorMask<Byte> mv = av.eq(bv);35073508// Check results as part of computation.3509for (int j = 0; j < SPECIES.length(); j++) {3510Assert.assertEquals(mv.laneIsSet(j), eq(a[i + j], b[i + j]));3511}3512}3513}3514}35153516@Test(dataProvider = "byteCompareOpMaskProvider")3517static void EQByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,3518IntFunction<boolean[]> fm) {3519byte[] a = fa.apply(SPECIES.length());3520byte[] b = fb.apply(SPECIES.length());3521boolean[] mask = fm.apply(SPECIES.length());35223523VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);35243525for (int ic = 0; ic < INVOC_COUNT; ic++) {3526for (int i = 0; i < a.length; i += SPECIES.length()) {3527ByteVector av = ByteVector.fromArray(SPECIES, a, i);3528ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3529VectorMask<Byte> mv = av.compare(VectorOperators.EQ, bv, vmask);35303531// Check results as part of computation.3532for (int j = 0; j < SPECIES.length(); j++) {3533Assert.assertEquals(mv.laneIsSet(j), mask[j] && eq(a[i + j], b[i + j]));3534}3535}3536}3537}353835393540@Test(dataProvider = "byteCompareOpProvider")3541static void NEByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3542byte[] a = fa.apply(SPECIES.length());3543byte[] b = fb.apply(SPECIES.length());35443545for (int ic = 0; ic < INVOC_COUNT; ic++) {3546for (int i = 0; i < a.length; i += SPECIES.length()) {3547ByteVector av = ByteVector.fromArray(SPECIES, a, i);3548ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3549VectorMask<Byte> mv = av.compare(VectorOperators.NE, bv);35503551// Check results as part of computation.3552for (int j = 0; j < SPECIES.length(); j++) {3553Assert.assertEquals(mv.laneIsSet(j), neq(a[i + j], b[i + j]));3554}3555}3556}3557}35583559@Test(dataProvider = "byteCompareOpMaskProvider")3560static void NEByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,3561IntFunction<boolean[]> fm) {3562byte[] a = fa.apply(SPECIES.length());3563byte[] b = fb.apply(SPECIES.length());3564boolean[] mask = fm.apply(SPECIES.length());35653566VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);35673568for (int ic = 0; ic < INVOC_COUNT; ic++) {3569for (int i = 0; i < a.length; i += SPECIES.length()) {3570ByteVector av = ByteVector.fromArray(SPECIES, a, i);3571ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3572VectorMask<Byte> mv = av.compare(VectorOperators.NE, bv, vmask);35733574// Check results as part of computation.3575for (int j = 0; j < SPECIES.length(); j++) {3576Assert.assertEquals(mv.laneIsSet(j), mask[j] && neq(a[i + j], b[i + j]));3577}3578}3579}3580}358135823583@Test(dataProvider = "byteCompareOpProvider")3584static void LEByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3585byte[] a = fa.apply(SPECIES.length());3586byte[] b = fb.apply(SPECIES.length());35873588for (int ic = 0; ic < INVOC_COUNT; ic++) {3589for (int i = 0; i < a.length; i += SPECIES.length()) {3590ByteVector av = ByteVector.fromArray(SPECIES, a, i);3591ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3592VectorMask<Byte> mv = av.compare(VectorOperators.LE, bv);35933594// Check results as part of computation.3595for (int j = 0; j < SPECIES.length(); j++) {3596Assert.assertEquals(mv.laneIsSet(j), le(a[i + j], b[i + j]));3597}3598}3599}3600}36013602@Test(dataProvider = "byteCompareOpMaskProvider")3603static void LEByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,3604IntFunction<boolean[]> fm) {3605byte[] a = fa.apply(SPECIES.length());3606byte[] b = fb.apply(SPECIES.length());3607boolean[] mask = fm.apply(SPECIES.length());36083609VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);36103611for (int ic = 0; ic < INVOC_COUNT; ic++) {3612for (int i = 0; i < a.length; i += SPECIES.length()) {3613ByteVector av = ByteVector.fromArray(SPECIES, a, i);3614ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3615VectorMask<Byte> mv = av.compare(VectorOperators.LE, bv, vmask);36163617// Check results as part of computation.3618for (int j = 0; j < SPECIES.length(); j++) {3619Assert.assertEquals(mv.laneIsSet(j), mask[j] && le(a[i + j], b[i + j]));3620}3621}3622}3623}362436253626@Test(dataProvider = "byteCompareOpProvider")3627static void GEByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3628byte[] a = fa.apply(SPECIES.length());3629byte[] b = fb.apply(SPECIES.length());36303631for (int ic = 0; ic < INVOC_COUNT; ic++) {3632for (int i = 0; i < a.length; i += SPECIES.length()) {3633ByteVector av = ByteVector.fromArray(SPECIES, a, i);3634ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3635VectorMask<Byte> mv = av.compare(VectorOperators.GE, bv);36363637// Check results as part of computation.3638for (int j = 0; j < SPECIES.length(); j++) {3639Assert.assertEquals(mv.laneIsSet(j), ge(a[i + j], b[i + j]));3640}3641}3642}3643}36443645@Test(dataProvider = "byteCompareOpMaskProvider")3646static void GEByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,3647IntFunction<boolean[]> fm) {3648byte[] a = fa.apply(SPECIES.length());3649byte[] b = fb.apply(SPECIES.length());3650boolean[] mask = fm.apply(SPECIES.length());36513652VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);36533654for (int ic = 0; ic < INVOC_COUNT; ic++) {3655for (int i = 0; i < a.length; i += SPECIES.length()) {3656ByteVector av = ByteVector.fromArray(SPECIES, a, i);3657ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3658VectorMask<Byte> mv = av.compare(VectorOperators.GE, bv, vmask);36593660// Check results as part of computation.3661for (int j = 0; j < SPECIES.length(); j++) {3662Assert.assertEquals(mv.laneIsSet(j), mask[j] && ge(a[i + j], b[i + j]));3663}3664}3665}3666}3667366836693670@Test(dataProvider = "byteCompareOpProvider")3671static void UNSIGNED_LTByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3672byte[] a = fa.apply(SPECIES.length());3673byte[] b = fb.apply(SPECIES.length());36743675for (int ic = 0; ic < INVOC_COUNT; ic++) {3676for (int i = 0; i < a.length; i += SPECIES.length()) {3677ByteVector av = ByteVector.fromArray(SPECIES, a, i);3678ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3679VectorMask<Byte> mv = av.compare(VectorOperators.UNSIGNED_LT, bv);36803681// Check results as part of computation.3682for (int j = 0; j < SPECIES.length(); j++) {3683Assert.assertEquals(mv.laneIsSet(j), ult(a[i + j], b[i + j]));3684}3685}3686}3687}3688368936903691@Test(dataProvider = "byteCompareOpMaskProvider")3692static void UNSIGNED_LTByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,3693IntFunction<boolean[]> fm) {3694byte[] a = fa.apply(SPECIES.length());3695byte[] b = fb.apply(SPECIES.length());3696boolean[] mask = fm.apply(SPECIES.length());36973698VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);36993700for (int ic = 0; ic < INVOC_COUNT; ic++) {3701for (int i = 0; i < a.length; i += SPECIES.length()) {3702ByteVector av = ByteVector.fromArray(SPECIES, a, i);3703ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3704VectorMask<Byte> mv = av.compare(VectorOperators.UNSIGNED_LT, bv, vmask);37053706// Check results as part of computation.3707for (int j = 0; j < SPECIES.length(); j++) {3708Assert.assertEquals(mv.laneIsSet(j), mask[j] && ult(a[i + j], b[i + j]));3709}3710}3711}3712}37133714371537163717@Test(dataProvider = "byteCompareOpProvider")3718static void UNSIGNED_GTByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3719byte[] a = fa.apply(SPECIES.length());3720byte[] b = fb.apply(SPECIES.length());37213722for (int ic = 0; ic < INVOC_COUNT; ic++) {3723for (int i = 0; i < a.length; i += SPECIES.length()) {3724ByteVector av = ByteVector.fromArray(SPECIES, a, i);3725ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3726VectorMask<Byte> mv = av.compare(VectorOperators.UNSIGNED_GT, bv);37273728// Check results as part of computation.3729for (int j = 0; j < SPECIES.length(); j++) {3730Assert.assertEquals(mv.laneIsSet(j), ugt(a[i + j], b[i + j]));3731}3732}3733}3734}3735373637373738@Test(dataProvider = "byteCompareOpMaskProvider")3739static void UNSIGNED_GTByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,3740IntFunction<boolean[]> fm) {3741byte[] a = fa.apply(SPECIES.length());3742byte[] b = fb.apply(SPECIES.length());3743boolean[] mask = fm.apply(SPECIES.length());37443745VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);37463747for (int ic = 0; ic < INVOC_COUNT; ic++) {3748for (int i = 0; i < a.length; i += SPECIES.length()) {3749ByteVector av = ByteVector.fromArray(SPECIES, a, i);3750ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3751VectorMask<Byte> mv = av.compare(VectorOperators.UNSIGNED_GT, bv, vmask);37523753// Check results as part of computation.3754for (int j = 0; j < SPECIES.length(); j++) {3755Assert.assertEquals(mv.laneIsSet(j), mask[j] && ugt(a[i + j], b[i + j]));3756}3757}3758}3759}37603761376237633764@Test(dataProvider = "byteCompareOpProvider")3765static void UNSIGNED_LEByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3766byte[] a = fa.apply(SPECIES.length());3767byte[] b = fb.apply(SPECIES.length());37683769for (int ic = 0; ic < INVOC_COUNT; ic++) {3770for (int i = 0; i < a.length; i += SPECIES.length()) {3771ByteVector av = ByteVector.fromArray(SPECIES, a, i);3772ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3773VectorMask<Byte> mv = av.compare(VectorOperators.UNSIGNED_LE, bv);37743775// Check results as part of computation.3776for (int j = 0; j < SPECIES.length(); j++) {3777Assert.assertEquals(mv.laneIsSet(j), ule(a[i + j], b[i + j]));3778}3779}3780}3781}3782378337843785@Test(dataProvider = "byteCompareOpMaskProvider")3786static void UNSIGNED_LEByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,3787IntFunction<boolean[]> fm) {3788byte[] a = fa.apply(SPECIES.length());3789byte[] b = fb.apply(SPECIES.length());3790boolean[] mask = fm.apply(SPECIES.length());37913792VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);37933794for (int ic = 0; ic < INVOC_COUNT; ic++) {3795for (int i = 0; i < a.length; i += SPECIES.length()) {3796ByteVector av = ByteVector.fromArray(SPECIES, a, i);3797ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3798VectorMask<Byte> mv = av.compare(VectorOperators.UNSIGNED_LE, bv, vmask);37993800// Check results as part of computation.3801for (int j = 0; j < SPECIES.length(); j++) {3802Assert.assertEquals(mv.laneIsSet(j), mask[j] && ule(a[i + j], b[i + j]));3803}3804}3805}3806}38073808380938103811@Test(dataProvider = "byteCompareOpProvider")3812static void UNSIGNED_GEByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3813byte[] a = fa.apply(SPECIES.length());3814byte[] b = fb.apply(SPECIES.length());38153816for (int ic = 0; ic < INVOC_COUNT; ic++) {3817for (int i = 0; i < a.length; i += SPECIES.length()) {3818ByteVector av = ByteVector.fromArray(SPECIES, a, i);3819ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3820VectorMask<Byte> mv = av.compare(VectorOperators.UNSIGNED_GE, bv);38213822// Check results as part of computation.3823for (int j = 0; j < SPECIES.length(); j++) {3824Assert.assertEquals(mv.laneIsSet(j), uge(a[i + j], b[i + j]));3825}3826}3827}3828}3829383038313832@Test(dataProvider = "byteCompareOpMaskProvider")3833static void UNSIGNED_GEByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,3834IntFunction<boolean[]> fm) {3835byte[] a = fa.apply(SPECIES.length());3836byte[] b = fb.apply(SPECIES.length());3837boolean[] mask = fm.apply(SPECIES.length());38383839VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);38403841for (int ic = 0; ic < INVOC_COUNT; ic++) {3842for (int i = 0; i < a.length; i += SPECIES.length()) {3843ByteVector av = ByteVector.fromArray(SPECIES, a, i);3844ByteVector bv = ByteVector.fromArray(SPECIES, b, i);3845VectorMask<Byte> mv = av.compare(VectorOperators.UNSIGNED_GE, bv, vmask);38463847// Check results as part of computation.3848for (int j = 0; j < SPECIES.length(); j++) {3849Assert.assertEquals(mv.laneIsSet(j), mask[j] && uge(a[i + j], b[i + j]));3850}3851}3852}3853}3854385538563857@Test(dataProvider = "byteCompareOpProvider")3858static void LTByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3859byte[] a = fa.apply(SPECIES.length());3860byte[] b = fb.apply(SPECIES.length());38613862for (int i = 0; i < a.length; i += SPECIES.length()) {3863ByteVector av = ByteVector.fromArray(SPECIES, a, i);3864VectorMask<Byte> mv = av.compare(VectorOperators.LT, b[i]);38653866// Check results as part of computation.3867for (int j = 0; j < SPECIES.length(); j++) {3868Assert.assertEquals(mv.laneIsSet(j), a[i + j] < b[i]);3869}3870}3871}387238733874@Test(dataProvider = "byteCompareOpMaskProvider")3875static void LTByte256VectorTestsBroadcastMaskedSmokeTest(IntFunction<byte[]> fa,3876IntFunction<byte[]> fb, IntFunction<boolean[]> fm) {3877byte[] a = fa.apply(SPECIES.length());3878byte[] b = fb.apply(SPECIES.length());3879boolean[] mask = fm.apply(SPECIES.length());38803881VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);38823883for (int i = 0; i < a.length; i += SPECIES.length()) {3884ByteVector av = ByteVector.fromArray(SPECIES, a, i);3885VectorMask<Byte> mv = av.compare(VectorOperators.LT, b[i], vmask);38863887// Check results as part of computation.3888for (int j = 0; j < SPECIES.length(); j++) {3889Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] < b[i]));3890}3891}3892}38933894@Test(dataProvider = "byteCompareOpProvider")3895static void LTByte256VectorTestsBroadcastLongSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3896byte[] a = fa.apply(SPECIES.length());3897byte[] b = fb.apply(SPECIES.length());38983899for (int i = 0; i < a.length; i += SPECIES.length()) {3900ByteVector av = ByteVector.fromArray(SPECIES, a, i);3901VectorMask<Byte> mv = av.compare(VectorOperators.LT, (long)b[i]);39023903// Check results as part of computation.3904for (int j = 0; j < SPECIES.length(); j++) {3905Assert.assertEquals(mv.laneIsSet(j), a[i + j] < (byte)((long)b[i]));3906}3907}3908}390939103911@Test(dataProvider = "byteCompareOpMaskProvider")3912static void LTByte256VectorTestsBroadcastLongMaskedSmokeTest(IntFunction<byte[]> fa,3913IntFunction<byte[]> fb, IntFunction<boolean[]> fm) {3914byte[] a = fa.apply(SPECIES.length());3915byte[] b = fb.apply(SPECIES.length());3916boolean[] mask = fm.apply(SPECIES.length());39173918VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);39193920for (int i = 0; i < a.length; i += SPECIES.length()) {3921ByteVector av = ByteVector.fromArray(SPECIES, a, i);3922VectorMask<Byte> mv = av.compare(VectorOperators.LT, (long)b[i], vmask);39233924// Check results as part of computation.3925for (int j = 0; j < SPECIES.length(); j++) {3926Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] < (byte)((long)b[i])));3927}3928}3929}39303931@Test(dataProvider = "byteCompareOpProvider")3932static void EQByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3933byte[] a = fa.apply(SPECIES.length());3934byte[] b = fb.apply(SPECIES.length());39353936for (int i = 0; i < a.length; i += SPECIES.length()) {3937ByteVector av = ByteVector.fromArray(SPECIES, a, i);3938VectorMask<Byte> mv = av.compare(VectorOperators.EQ, b[i]);39393940// Check results as part of computation.3941for (int j = 0; j < SPECIES.length(); j++) {3942Assert.assertEquals(mv.laneIsSet(j), a[i + j] == b[i]);3943}3944}3945}394639473948@Test(dataProvider = "byteCompareOpMaskProvider")3949static void EQByte256VectorTestsBroadcastMaskedSmokeTest(IntFunction<byte[]> fa,3950IntFunction<byte[]> fb, IntFunction<boolean[]> fm) {3951byte[] a = fa.apply(SPECIES.length());3952byte[] b = fb.apply(SPECIES.length());3953boolean[] mask = fm.apply(SPECIES.length());39543955VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);39563957for (int i = 0; i < a.length; i += SPECIES.length()) {3958ByteVector av = ByteVector.fromArray(SPECIES, a, i);3959VectorMask<Byte> mv = av.compare(VectorOperators.EQ, b[i], vmask);39603961// Check results as part of computation.3962for (int j = 0; j < SPECIES.length(); j++) {3963Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] == b[i]));3964}3965}3966}39673968@Test(dataProvider = "byteCompareOpProvider")3969static void EQByte256VectorTestsBroadcastLongSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {3970byte[] a = fa.apply(SPECIES.length());3971byte[] b = fb.apply(SPECIES.length());39723973for (int i = 0; i < a.length; i += SPECIES.length()) {3974ByteVector av = ByteVector.fromArray(SPECIES, a, i);3975VectorMask<Byte> mv = av.compare(VectorOperators.EQ, (long)b[i]);39763977// Check results as part of computation.3978for (int j = 0; j < SPECIES.length(); j++) {3979Assert.assertEquals(mv.laneIsSet(j), a[i + j] == (byte)((long)b[i]));3980}3981}3982}398339843985@Test(dataProvider = "byteCompareOpMaskProvider")3986static void EQByte256VectorTestsBroadcastLongMaskedSmokeTest(IntFunction<byte[]> fa,3987IntFunction<byte[]> fb, IntFunction<boolean[]> fm) {3988byte[] a = fa.apply(SPECIES.length());3989byte[] b = fb.apply(SPECIES.length());3990boolean[] mask = fm.apply(SPECIES.length());39913992VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);39933994for (int i = 0; i < a.length; i += SPECIES.length()) {3995ByteVector av = ByteVector.fromArray(SPECIES, a, i);3996VectorMask<Byte> mv = av.compare(VectorOperators.EQ, (long)b[i], vmask);39973998// Check results as part of computation.3999for (int j = 0; j < SPECIES.length(); j++) {4000Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] == (byte)((long)b[i])));4001}4002}4003}40044005static byte blend(byte a, byte b, boolean mask) {4006return mask ? b : a;4007}40084009@Test(dataProvider = "byteBinaryOpMaskProvider")4010static void blendByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb,4011IntFunction<boolean[]> fm) {4012byte[] a = fa.apply(SPECIES.length());4013byte[] b = fb.apply(SPECIES.length());4014byte[] r = fr.apply(SPECIES.length());4015boolean[] mask = fm.apply(SPECIES.length());4016VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);40174018for (int ic = 0; ic < INVOC_COUNT; ic++) {4019for (int i = 0; i < a.length; i += SPECIES.length()) {4020ByteVector av = ByteVector.fromArray(SPECIES, a, i);4021ByteVector bv = ByteVector.fromArray(SPECIES, b, i);4022av.blend(bv, vmask).intoArray(r, i);4023}4024}40254026assertArraysEquals(r, a, b, mask, Byte256VectorTests::blend);4027}40284029@Test(dataProvider = "byteUnaryOpShuffleProvider")4030static void RearrangeByte256VectorTests(IntFunction<byte[]> fa,4031BiFunction<Integer,Integer,int[]> fs) {4032byte[] a = fa.apply(SPECIES.length());4033int[] order = fs.apply(a.length, SPECIES.length());4034byte[] r = fr.apply(SPECIES.length());40354036for (int ic = 0; ic < INVOC_COUNT; ic++) {4037for (int i = 0; i < a.length; i += SPECIES.length()) {4038ByteVector av = ByteVector.fromArray(SPECIES, a, i);4039av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);4040}4041}40424043assertRearrangeArraysEquals(r, a, order, SPECIES.length());4044}40454046@Test(dataProvider = "byteUnaryOpShuffleMaskProvider")4047static void RearrangeByte256VectorTestsMaskedSmokeTest(IntFunction<byte[]> fa,4048BiFunction<Integer,Integer,int[]> fs,4049IntFunction<boolean[]> fm) {4050byte[] a = fa.apply(SPECIES.length());4051int[] order = fs.apply(a.length, SPECIES.length());4052byte[] r = fr.apply(SPECIES.length());4053boolean[] mask = fm.apply(SPECIES.length());4054VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);40554056for (int i = 0; i < a.length; i += SPECIES.length()) {4057ByteVector av = ByteVector.fromArray(SPECIES, a, i);4058av.rearrange(VectorShuffle.fromArray(SPECIES, order, i), vmask).intoArray(r, i);4059}40604061assertRearrangeArraysEquals(r, a, order, mask, SPECIES.length());4062}4063@Test(dataProvider = "byteUnaryOpProvider")4064static void getByte256VectorTests(IntFunction<byte[]> fa) {4065byte[] a = fa.apply(SPECIES.length());4066byte[] r = fr.apply(SPECIES.length());40674068for (int ic = 0; ic < INVOC_COUNT; ic++) {4069for (int i = 0; i < a.length; i += SPECIES.length()) {4070ByteVector av = ByteVector.fromArray(SPECIES, a, i);4071int num_lanes = SPECIES.length();4072// Manually unroll because full unroll happens after intrinsification.4073// Unroll is needed because get intrinsic requires for index to be a known constant.4074if (num_lanes == 1) {4075r[i]=av.lane(0);4076} else if (num_lanes == 2) {4077r[i]=av.lane(0);4078r[i+1]=av.lane(1);4079} else if (num_lanes == 4) {4080r[i]=av.lane(0);4081r[i+1]=av.lane(1);4082r[i+2]=av.lane(2);4083r[i+3]=av.lane(3);4084} else if (num_lanes == 8) {4085r[i]=av.lane(0);4086r[i+1]=av.lane(1);4087r[i+2]=av.lane(2);4088r[i+3]=av.lane(3);4089r[i+4]=av.lane(4);4090r[i+5]=av.lane(5);4091r[i+6]=av.lane(6);4092r[i+7]=av.lane(7);4093} else if (num_lanes == 16) {4094r[i]=av.lane(0);4095r[i+1]=av.lane(1);4096r[i+2]=av.lane(2);4097r[i+3]=av.lane(3);4098r[i+4]=av.lane(4);4099r[i+5]=av.lane(5);4100r[i+6]=av.lane(6);4101r[i+7]=av.lane(7);4102r[i+8]=av.lane(8);4103r[i+9]=av.lane(9);4104r[i+10]=av.lane(10);4105r[i+11]=av.lane(11);4106r[i+12]=av.lane(12);4107r[i+13]=av.lane(13);4108r[i+14]=av.lane(14);4109r[i+15]=av.lane(15);4110} else if (num_lanes == 32) {4111r[i]=av.lane(0);4112r[i+1]=av.lane(1);4113r[i+2]=av.lane(2);4114r[i+3]=av.lane(3);4115r[i+4]=av.lane(4);4116r[i+5]=av.lane(5);4117r[i+6]=av.lane(6);4118r[i+7]=av.lane(7);4119r[i+8]=av.lane(8);4120r[i+9]=av.lane(9);4121r[i+10]=av.lane(10);4122r[i+11]=av.lane(11);4123r[i+12]=av.lane(12);4124r[i+13]=av.lane(13);4125r[i+14]=av.lane(14);4126r[i+15]=av.lane(15);4127r[i+16]=av.lane(16);4128r[i+17]=av.lane(17);4129r[i+18]=av.lane(18);4130r[i+19]=av.lane(19);4131r[i+20]=av.lane(20);4132r[i+21]=av.lane(21);4133r[i+22]=av.lane(22);4134r[i+23]=av.lane(23);4135r[i+24]=av.lane(24);4136r[i+25]=av.lane(25);4137r[i+26]=av.lane(26);4138r[i+27]=av.lane(27);4139r[i+28]=av.lane(28);4140r[i+29]=av.lane(29);4141r[i+30]=av.lane(30);4142r[i+31]=av.lane(31);4143} else if (num_lanes == 64) {4144r[i]=av.lane(0);4145r[i+1]=av.lane(1);4146r[i+2]=av.lane(2);4147r[i+3]=av.lane(3);4148r[i+4]=av.lane(4);4149r[i+5]=av.lane(5);4150r[i+6]=av.lane(6);4151r[i+7]=av.lane(7);4152r[i+8]=av.lane(8);4153r[i+9]=av.lane(9);4154r[i+10]=av.lane(10);4155r[i+11]=av.lane(11);4156r[i+12]=av.lane(12);4157r[i+13]=av.lane(13);4158r[i+14]=av.lane(14);4159r[i+15]=av.lane(15);4160r[i+16]=av.lane(16);4161r[i+17]=av.lane(17);4162r[i+18]=av.lane(18);4163r[i+19]=av.lane(19);4164r[i+20]=av.lane(20);4165r[i+21]=av.lane(21);4166r[i+22]=av.lane(22);4167r[i+23]=av.lane(23);4168r[i+24]=av.lane(24);4169r[i+25]=av.lane(25);4170r[i+26]=av.lane(26);4171r[i+27]=av.lane(27);4172r[i+28]=av.lane(28);4173r[i+29]=av.lane(29);4174r[i+30]=av.lane(30);4175r[i+31]=av.lane(31);4176r[i+32]=av.lane(32);4177r[i+33]=av.lane(33);4178r[i+34]=av.lane(34);4179r[i+35]=av.lane(35);4180r[i+36]=av.lane(36);4181r[i+37]=av.lane(37);4182r[i+38]=av.lane(38);4183r[i+39]=av.lane(39);4184r[i+40]=av.lane(40);4185r[i+41]=av.lane(41);4186r[i+42]=av.lane(42);4187r[i+43]=av.lane(43);4188r[i+44]=av.lane(44);4189r[i+45]=av.lane(45);4190r[i+46]=av.lane(46);4191r[i+47]=av.lane(47);4192r[i+48]=av.lane(48);4193r[i+49]=av.lane(49);4194r[i+50]=av.lane(50);4195r[i+51]=av.lane(51);4196r[i+52]=av.lane(52);4197r[i+53]=av.lane(53);4198r[i+54]=av.lane(54);4199r[i+55]=av.lane(55);4200r[i+56]=av.lane(56);4201r[i+57]=av.lane(57);4202r[i+58]=av.lane(58);4203r[i+59]=av.lane(59);4204r[i+60]=av.lane(60);4205r[i+61]=av.lane(61);4206r[i+62]=av.lane(62);4207r[i+63]=av.lane(63);4208} else {4209for (int j = 0; j < SPECIES.length(); j++) {4210r[i+j]=av.lane(j);4211}4212}4213}4214}42154216assertArraysEquals(r, a, Byte256VectorTests::get);4217}42184219@Test(dataProvider = "byteUnaryOpProvider")4220static void BroadcastByte256VectorTests(IntFunction<byte[]> fa) {4221byte[] a = fa.apply(SPECIES.length());4222byte[] r = new byte[a.length];42234224for (int ic = 0; ic < INVOC_COUNT; ic++) {4225for (int i = 0; i < a.length; i += SPECIES.length()) {4226ByteVector.broadcast(SPECIES, a[i]).intoArray(r, i);4227}4228}42294230assertBroadcastArraysEquals(r, a);4231}423242334234423542364237@Test(dataProvider = "byteUnaryOpProvider")4238static void ZeroByte256VectorTests(IntFunction<byte[]> fa) {4239byte[] a = fa.apply(SPECIES.length());4240byte[] r = new byte[a.length];42414242for (int ic = 0; ic < INVOC_COUNT; ic++) {4243for (int i = 0; i < a.length; i += SPECIES.length()) {4244ByteVector.zero(SPECIES).intoArray(a, i);4245}4246}42474248Assert.assertEquals(a, r);4249}42504251425242534254static byte[] sliceUnary(byte[] a, int origin, int idx) {4255byte[] res = new byte[SPECIES.length()];4256for (int i = 0; i < SPECIES.length(); i++){4257if(i+origin < SPECIES.length())4258res[i] = a[idx+i+origin];4259else4260res[i] = (byte)0;4261}4262return res;4263}42644265@Test(dataProvider = "byteUnaryOpProvider")4266static void sliceUnaryByte256VectorTests(IntFunction<byte[]> fa) {4267byte[] a = fa.apply(SPECIES.length());4268byte[] r = new byte[a.length];4269int origin = (new java.util.Random()).nextInt(SPECIES.length());4270for (int ic = 0; ic < INVOC_COUNT; ic++) {4271for (int i = 0; i < a.length; i += SPECIES.length()) {4272ByteVector av = ByteVector.fromArray(SPECIES, a, i);4273av.slice(origin).intoArray(r, i);4274}4275}42764277assertArraysEquals(r, a, origin, Byte256VectorTests::sliceUnary);4278}4279static byte[] sliceBinary(byte[] a, byte[] b, int origin, int idx) {4280byte[] res = new byte[SPECIES.length()];4281for (int i = 0, j = 0; i < SPECIES.length(); i++){4282if(i+origin < SPECIES.length())4283res[i] = a[idx+i+origin];4284else {4285res[i] = b[idx+j];4286j++;4287}4288}4289return res;4290}42914292@Test(dataProvider = "byteBinaryOpProvider")4293static void sliceBinaryByte256VectorTestsBinary(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {4294byte[] a = fa.apply(SPECIES.length());4295byte[] b = fb.apply(SPECIES.length());4296byte[] r = new byte[a.length];4297int origin = (new java.util.Random()).nextInt(SPECIES.length());4298for (int ic = 0; ic < INVOC_COUNT; ic++) {4299for (int i = 0; i < a.length; i += SPECIES.length()) {4300ByteVector av = ByteVector.fromArray(SPECIES, a, i);4301ByteVector bv = ByteVector.fromArray(SPECIES, b, i);4302av.slice(origin, bv).intoArray(r, i);4303}4304}43054306assertArraysEquals(r, a, b, origin, Byte256VectorTests::sliceBinary);4307}4308static byte[] slice(byte[] a, byte[] b, int origin, boolean[] mask, int idx) {4309byte[] res = new byte[SPECIES.length()];4310for (int i = 0, j = 0; i < SPECIES.length(); i++){4311if(i+origin < SPECIES.length())4312res[i] = mask[i] ? a[idx+i+origin] : (byte)0;4313else {4314res[i] = mask[i] ? b[idx+j] : (byte)0;4315j++;4316}4317}4318return res;4319}43204321@Test(dataProvider = "byteBinaryOpMaskProvider")4322static void sliceByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,4323IntFunction<boolean[]> fm) {4324byte[] a = fa.apply(SPECIES.length());4325byte[] b = fb.apply(SPECIES.length());4326boolean[] mask = fm.apply(SPECIES.length());4327VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);43284329byte[] r = new byte[a.length];4330int origin = (new java.util.Random()).nextInt(SPECIES.length());4331for (int ic = 0; ic < INVOC_COUNT; ic++) {4332for (int i = 0; i < a.length; i += SPECIES.length()) {4333ByteVector av = ByteVector.fromArray(SPECIES, a, i);4334ByteVector bv = ByteVector.fromArray(SPECIES, b, i);4335av.slice(origin, bv, vmask).intoArray(r, i);4336}4337}43384339assertArraysEquals(r, a, b, origin, mask, Byte256VectorTests::slice);4340}4341static byte[] unsliceUnary(byte[] a, int origin, int idx) {4342byte[] res = new byte[SPECIES.length()];4343for (int i = 0, j = 0; i < SPECIES.length(); i++){4344if(i < origin)4345res[i] = (byte)0;4346else {4347res[i] = a[idx+j];4348j++;4349}4350}4351return res;4352}43534354@Test(dataProvider = "byteUnaryOpProvider")4355static void unsliceUnaryByte256VectorTests(IntFunction<byte[]> fa) {4356byte[] a = fa.apply(SPECIES.length());4357byte[] r = new byte[a.length];4358int origin = (new java.util.Random()).nextInt(SPECIES.length());4359for (int ic = 0; ic < INVOC_COUNT; ic++) {4360for (int i = 0; i < a.length; i += SPECIES.length()) {4361ByteVector av = ByteVector.fromArray(SPECIES, a, i);4362av.unslice(origin).intoArray(r, i);4363}4364}43654366assertArraysEquals(r, a, origin, Byte256VectorTests::unsliceUnary);4367}4368static byte[] unsliceBinary(byte[] a, byte[] b, int origin, int part, int idx) {4369byte[] res = new byte[SPECIES.length()];4370for (int i = 0, j = 0; i < SPECIES.length(); i++){4371if (part == 0) {4372if (i < origin)4373res[i] = b[idx+i];4374else {4375res[i] = a[idx+j];4376j++;4377}4378} else if (part == 1) {4379if (i < origin)4380res[i] = a[idx+SPECIES.length()-origin+i];4381else {4382res[i] = b[idx+origin+j];4383j++;4384}4385}4386}4387return res;4388}43894390@Test(dataProvider = "byteBinaryOpProvider")4391static void unsliceBinaryByte256VectorTestsBinary(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {4392byte[] a = fa.apply(SPECIES.length());4393byte[] b = fb.apply(SPECIES.length());4394byte[] r = new byte[a.length];4395int origin = (new java.util.Random()).nextInt(SPECIES.length());4396int part = (new java.util.Random()).nextInt(2);4397for (int ic = 0; ic < INVOC_COUNT; ic++) {4398for (int i = 0; i < a.length; i += SPECIES.length()) {4399ByteVector av = ByteVector.fromArray(SPECIES, a, i);4400ByteVector bv = ByteVector.fromArray(SPECIES, b, i);4401av.unslice(origin, bv, part).intoArray(r, i);4402}4403}44044405assertArraysEquals(r, a, b, origin, part, Byte256VectorTests::unsliceBinary);4406}4407static byte[] unslice(byte[] a, byte[] b, int origin, int part, boolean[] mask, int idx) {4408byte[] res = new byte[SPECIES.length()];4409for (int i = 0, j = 0; i < SPECIES.length(); i++){4410if(i+origin < SPECIES.length())4411res[i] = b[idx+i+origin];4412else {4413res[i] = b[idx+j];4414j++;4415}4416}4417for (int i = 0; i < SPECIES.length(); i++){4418res[i] = mask[i] ? a[idx+i] : res[i];4419}4420byte[] res1 = new byte[SPECIES.length()];4421if (part == 0) {4422for (int i = 0, j = 0; i < SPECIES.length(); i++){4423if (i < origin)4424res1[i] = b[idx+i];4425else {4426res1[i] = res[j];4427j++;4428}4429}4430} else if (part == 1) {4431for (int i = 0, j = 0; i < SPECIES.length(); i++){4432if (i < origin)4433res1[i] = res[SPECIES.length()-origin+i];4434else {4435res1[i] = b[idx+origin+j];4436j++;4437}4438}4439}4440return res1;4441}44424443@Test(dataProvider = "byteBinaryOpMaskProvider")4444static void unsliceByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,4445IntFunction<boolean[]> fm) {4446byte[] a = fa.apply(SPECIES.length());4447byte[] b = fb.apply(SPECIES.length());4448boolean[] mask = fm.apply(SPECIES.length());4449VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);4450byte[] r = new byte[a.length];4451int origin = (new java.util.Random()).nextInt(SPECIES.length());4452int part = (new java.util.Random()).nextInt(2);4453for (int ic = 0; ic < INVOC_COUNT; ic++) {4454for (int i = 0; i < a.length; i += SPECIES.length()) {4455ByteVector av = ByteVector.fromArray(SPECIES, a, i);4456ByteVector bv = ByteVector.fromArray(SPECIES, b, i);4457av.unslice(origin, bv, part, vmask).intoArray(r, i);4458}4459}44604461assertArraysEquals(r, a, b, origin, part, mask, Byte256VectorTests::unslice);4462}446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486static byte BITWISE_BLEND(byte a, byte b, byte c) {4487return (byte)((a&~(c))|(b&c));4488}4489static byte bitwiseBlend(byte a, byte b, byte c) {4490return (byte)((a&~(c))|(b&c));4491}449244934494@Test(dataProvider = "byteTernaryOpProvider")4495static void BITWISE_BLENDByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb, IntFunction<byte[]> fc) {4496byte[] a = fa.apply(SPECIES.length());4497byte[] b = fb.apply(SPECIES.length());4498byte[] c = fc.apply(SPECIES.length());4499byte[] r = fr.apply(SPECIES.length());45004501for (int ic = 0; ic < INVOC_COUNT; ic++) {4502for (int i = 0; i < a.length; i += SPECIES.length()) {4503ByteVector av = ByteVector.fromArray(SPECIES, a, i);4504ByteVector bv = ByteVector.fromArray(SPECIES, b, i);4505ByteVector cv = ByteVector.fromArray(SPECIES, c, i);4506av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv).intoArray(r, i);4507}4508}45094510assertArraysEquals(r, a, b, c, Byte256VectorTests::BITWISE_BLEND);4511}4512@Test(dataProvider = "byteTernaryOpProvider")4513static void bitwiseBlendByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb, IntFunction<byte[]> fc) {4514byte[] a = fa.apply(SPECIES.length());4515byte[] b = fb.apply(SPECIES.length());4516byte[] c = fc.apply(SPECIES.length());4517byte[] r = fr.apply(SPECIES.length());45184519for (int i = 0; i < a.length; i += SPECIES.length()) {4520ByteVector av = ByteVector.fromArray(SPECIES, a, i);4521ByteVector bv = ByteVector.fromArray(SPECIES, b, i);4522ByteVector cv = ByteVector.fromArray(SPECIES, c, i);4523av.bitwiseBlend(bv, cv).intoArray(r, i);4524}45254526assertArraysEquals(r, a, b, c, Byte256VectorTests::bitwiseBlend);4527}452845294530@Test(dataProvider = "byteTernaryOpMaskProvider")4531static void BITWISE_BLENDByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<byte[]> fb,4532IntFunction<byte[]> fc, IntFunction<boolean[]> fm) {4533byte[] a = fa.apply(SPECIES.length());4534byte[] b = fb.apply(SPECIES.length());4535byte[] c = fc.apply(SPECIES.length());4536byte[] r = fr.apply(SPECIES.length());4537boolean[] mask = fm.apply(SPECIES.length());4538VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);45394540for (int ic = 0; ic < INVOC_COUNT; ic++) {4541for (int i = 0; i < a.length; i += SPECIES.length()) {4542ByteVector av = ByteVector.fromArray(SPECIES, a, i);4543ByteVector bv = ByteVector.fromArray(SPECIES, b, i);4544ByteVector cv = ByteVector.fromArray(SPECIES, c, i);4545av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv, vmask).intoArray(r, i);4546}4547}45484549assertArraysEquals(r, a, b, c, mask, Byte256VectorTests::BITWISE_BLEND);4550}45514552455345544555@Test(dataProvider = "byteTernaryOpProvider")4556static void BITWISE_BLENDByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb, IntFunction<byte[]> fc) {4557byte[] a = fa.apply(SPECIES.length());4558byte[] b = fb.apply(SPECIES.length());4559byte[] c = fc.apply(SPECIES.length());4560byte[] r = fr.apply(SPECIES.length());45614562for (int i = 0; i < a.length; i += SPECIES.length()) {4563ByteVector av = ByteVector.fromArray(SPECIES, a, i);4564ByteVector bv = ByteVector.fromArray(SPECIES, b, i);4565av.lanewise(VectorOperators.BITWISE_BLEND, bv, c[i]).intoArray(r, i);4566}4567assertBroadcastArraysEquals(r, a, b, c, Byte256VectorTests::BITWISE_BLEND);4568}45694570@Test(dataProvider = "byteTernaryOpProvider")4571static void BITWISE_BLENDByte256VectorTestsAltBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb, IntFunction<byte[]> fc) {4572byte[] a = fa.apply(SPECIES.length());4573byte[] b = fb.apply(SPECIES.length());4574byte[] c = fc.apply(SPECIES.length());4575byte[] r = fr.apply(SPECIES.length());45764577for (int i = 0; i < a.length; i += SPECIES.length()) {4578ByteVector av = ByteVector.fromArray(SPECIES, a, i);4579ByteVector cv = ByteVector.fromArray(SPECIES, c, i);4580av.lanewise(VectorOperators.BITWISE_BLEND, b[i], cv).intoArray(r, i);4581}4582assertAltBroadcastArraysEquals(r, a, b, c, Byte256VectorTests::BITWISE_BLEND);4583}4584@Test(dataProvider = "byteTernaryOpProvider")4585static void bitwiseBlendByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb, IntFunction<byte[]> fc) {4586byte[] a = fa.apply(SPECIES.length());4587byte[] b = fb.apply(SPECIES.length());4588byte[] c = fc.apply(SPECIES.length());4589byte[] r = fr.apply(SPECIES.length());45904591for (int i = 0; i < a.length; i += SPECIES.length()) {4592ByteVector av = ByteVector.fromArray(SPECIES, a, i);4593ByteVector bv = ByteVector.fromArray(SPECIES, b, i);4594av.bitwiseBlend(bv, c[i]).intoArray(r, i);4595}4596assertBroadcastArraysEquals(r, a, b, c, Byte256VectorTests::bitwiseBlend);4597}45984599@Test(dataProvider = "byteTernaryOpProvider")4600static void bitwiseBlendByte256VectorTestsAltBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb, IntFunction<byte[]> fc) {4601byte[] a = fa.apply(SPECIES.length());4602byte[] b = fb.apply(SPECIES.length());4603byte[] c = fc.apply(SPECIES.length());4604byte[] r = fr.apply(SPECIES.length());46054606for (int i = 0; i < a.length; i += SPECIES.length()) {4607ByteVector av = ByteVector.fromArray(SPECIES, a, i);4608ByteVector cv = ByteVector.fromArray(SPECIES, c, i);4609av.bitwiseBlend(b[i], cv).intoArray(r, i);4610}4611assertAltBroadcastArraysEquals(r, a, b, c, Byte256VectorTests::bitwiseBlend);4612}461346144615@Test(dataProvider = "byteTernaryOpMaskProvider")4616static void BITWISE_BLENDByte256VectorTestsBroadcastMaskedSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb,4617IntFunction<byte[]> fc, IntFunction<boolean[]> fm) {4618byte[] a = fa.apply(SPECIES.length());4619byte[] b = fb.apply(SPECIES.length());4620byte[] c = fc.apply(SPECIES.length());4621byte[] r = fr.apply(SPECIES.length());4622boolean[] mask = fm.apply(SPECIES.length());4623VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);46244625for (int i = 0; i < a.length; i += SPECIES.length()) {4626ByteVector av = ByteVector.fromArray(SPECIES, a, i);4627ByteVector bv = ByteVector.fromArray(SPECIES, b, i);4628av.lanewise(VectorOperators.BITWISE_BLEND, bv, c[i], vmask).intoArray(r, i);4629}46304631assertBroadcastArraysEquals(r, a, b, c, mask, Byte256VectorTests::BITWISE_BLEND);4632}46334634@Test(dataProvider = "byteTernaryOpMaskProvider")4635static void BITWISE_BLENDByte256VectorTestsAltBroadcastMaskedSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb,4636IntFunction<byte[]> fc, IntFunction<boolean[]> fm) {4637byte[] a = fa.apply(SPECIES.length());4638byte[] b = fb.apply(SPECIES.length());4639byte[] c = fc.apply(SPECIES.length());4640byte[] r = fr.apply(SPECIES.length());4641boolean[] mask = fm.apply(SPECIES.length());4642VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);46434644for (int i = 0; i < a.length; i += SPECIES.length()) {4645ByteVector av = ByteVector.fromArray(SPECIES, a, i);4646ByteVector cv = ByteVector.fromArray(SPECIES, c, i);4647av.lanewise(VectorOperators.BITWISE_BLEND, b[i], cv, vmask).intoArray(r, i);4648}46494650assertAltBroadcastArraysEquals(r, a, b, c, mask, Byte256VectorTests::BITWISE_BLEND);4651}46524653465446554656@Test(dataProvider = "byteTernaryOpProvider")4657static void BITWISE_BLENDByte256VectorTestsDoubleBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb, IntFunction<byte[]> fc) {4658byte[] a = fa.apply(SPECIES.length());4659byte[] b = fb.apply(SPECIES.length());4660byte[] c = fc.apply(SPECIES.length());4661byte[] r = fr.apply(SPECIES.length());46624663for (int i = 0; i < a.length; i += SPECIES.length()) {4664ByteVector av = ByteVector.fromArray(SPECIES, a, i);4665av.lanewise(VectorOperators.BITWISE_BLEND, b[i], c[i]).intoArray(r, i);4666}46674668assertDoubleBroadcastArraysEquals(r, a, b, c, Byte256VectorTests::BITWISE_BLEND);4669}4670@Test(dataProvider = "byteTernaryOpProvider")4671static void bitwiseBlendByte256VectorTestsDoubleBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb, IntFunction<byte[]> fc) {4672byte[] a = fa.apply(SPECIES.length());4673byte[] b = fb.apply(SPECIES.length());4674byte[] c = fc.apply(SPECIES.length());4675byte[] r = fr.apply(SPECIES.length());46764677for (int i = 0; i < a.length; i += SPECIES.length()) {4678ByteVector av = ByteVector.fromArray(SPECIES, a, i);4679av.bitwiseBlend(b[i], c[i]).intoArray(r, i);4680}46814682assertDoubleBroadcastArraysEquals(r, a, b, c, Byte256VectorTests::bitwiseBlend);4683}468446854686@Test(dataProvider = "byteTernaryOpMaskProvider")4687static void BITWISE_BLENDByte256VectorTestsDoubleBroadcastMaskedSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb,4688IntFunction<byte[]> fc, IntFunction<boolean[]> fm) {4689byte[] a = fa.apply(SPECIES.length());4690byte[] b = fb.apply(SPECIES.length());4691byte[] c = fc.apply(SPECIES.length());4692byte[] r = fr.apply(SPECIES.length());4693boolean[] mask = fm.apply(SPECIES.length());4694VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);46954696for (int i = 0; i < a.length; i += SPECIES.length()) {4697ByteVector av = ByteVector.fromArray(SPECIES, a, i);4698av.lanewise(VectorOperators.BITWISE_BLEND, b[i], c[i], vmask).intoArray(r, i);4699}47004701assertDoubleBroadcastArraysEquals(r, a, b, c, mask, Byte256VectorTests::BITWISE_BLEND);4702}470347044705static byte NEG(byte a) {4706return (byte)(-((byte)a));4707}47084709static byte neg(byte a) {4710return (byte)(-((byte)a));4711}47124713@Test(dataProvider = "byteUnaryOpProvider")4714static void NEGByte256VectorTests(IntFunction<byte[]> fa) {4715byte[] a = fa.apply(SPECIES.length());4716byte[] r = fr.apply(SPECIES.length());47174718for (int ic = 0; ic < INVOC_COUNT; ic++) {4719for (int i = 0; i < a.length; i += SPECIES.length()) {4720ByteVector av = ByteVector.fromArray(SPECIES, a, i);4721av.lanewise(VectorOperators.NEG).intoArray(r, i);4722}4723}47244725assertArraysEquals(r, a, Byte256VectorTests::NEG);4726}47274728@Test(dataProvider = "byteUnaryOpProvider")4729static void negByte256VectorTests(IntFunction<byte[]> fa) {4730byte[] a = fa.apply(SPECIES.length());4731byte[] r = fr.apply(SPECIES.length());47324733for (int ic = 0; ic < INVOC_COUNT; ic++) {4734for (int i = 0; i < a.length; i += SPECIES.length()) {4735ByteVector av = ByteVector.fromArray(SPECIES, a, i);4736av.neg().intoArray(r, i);4737}4738}47394740assertArraysEquals(r, a, Byte256VectorTests::neg);4741}47424743@Test(dataProvider = "byteUnaryOpMaskProvider")4744static void NEGMaskedByte256VectorTests(IntFunction<byte[]> fa,4745IntFunction<boolean[]> fm) {4746byte[] a = fa.apply(SPECIES.length());4747byte[] r = fr.apply(SPECIES.length());4748boolean[] mask = fm.apply(SPECIES.length());4749VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);47504751for (int ic = 0; ic < INVOC_COUNT; ic++) {4752for (int i = 0; i < a.length; i += SPECIES.length()) {4753ByteVector av = ByteVector.fromArray(SPECIES, a, i);4754av.lanewise(VectorOperators.NEG, vmask).intoArray(r, i);4755}4756}47574758assertArraysEquals(r, a, mask, Byte256VectorTests::NEG);4759}47604761static byte ABS(byte a) {4762return (byte)(Math.abs((byte)a));4763}47644765static byte abs(byte a) {4766return (byte)(Math.abs((byte)a));4767}47684769@Test(dataProvider = "byteUnaryOpProvider")4770static void ABSByte256VectorTests(IntFunction<byte[]> fa) {4771byte[] a = fa.apply(SPECIES.length());4772byte[] r = fr.apply(SPECIES.length());47734774for (int ic = 0; ic < INVOC_COUNT; ic++) {4775for (int i = 0; i < a.length; i += SPECIES.length()) {4776ByteVector av = ByteVector.fromArray(SPECIES, a, i);4777av.lanewise(VectorOperators.ABS).intoArray(r, i);4778}4779}47804781assertArraysEquals(r, a, Byte256VectorTests::ABS);4782}47834784@Test(dataProvider = "byteUnaryOpProvider")4785static void absByte256VectorTests(IntFunction<byte[]> fa) {4786byte[] a = fa.apply(SPECIES.length());4787byte[] r = fr.apply(SPECIES.length());47884789for (int ic = 0; ic < INVOC_COUNT; ic++) {4790for (int i = 0; i < a.length; i += SPECIES.length()) {4791ByteVector av = ByteVector.fromArray(SPECIES, a, i);4792av.abs().intoArray(r, i);4793}4794}47954796assertArraysEquals(r, a, Byte256VectorTests::abs);4797}47984799@Test(dataProvider = "byteUnaryOpMaskProvider")4800static void ABSMaskedByte256VectorTests(IntFunction<byte[]> fa,4801IntFunction<boolean[]> fm) {4802byte[] a = fa.apply(SPECIES.length());4803byte[] r = fr.apply(SPECIES.length());4804boolean[] mask = fm.apply(SPECIES.length());4805VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);48064807for (int ic = 0; ic < INVOC_COUNT; ic++) {4808for (int i = 0; i < a.length; i += SPECIES.length()) {4809ByteVector av = ByteVector.fromArray(SPECIES, a, i);4810av.lanewise(VectorOperators.ABS, vmask).intoArray(r, i);4811}4812}48134814assertArraysEquals(r, a, mask, Byte256VectorTests::ABS);4815}481648174818static byte NOT(byte a) {4819return (byte)(~((byte)a));4820}48214822static byte not(byte a) {4823return (byte)(~((byte)a));4824}4825482648274828@Test(dataProvider = "byteUnaryOpProvider")4829static void NOTByte256VectorTests(IntFunction<byte[]> fa) {4830byte[] a = fa.apply(SPECIES.length());4831byte[] r = fr.apply(SPECIES.length());48324833for (int ic = 0; ic < INVOC_COUNT; ic++) {4834for (int i = 0; i < a.length; i += SPECIES.length()) {4835ByteVector av = ByteVector.fromArray(SPECIES, a, i);4836av.lanewise(VectorOperators.NOT).intoArray(r, i);4837}4838}48394840assertArraysEquals(r, a, Byte256VectorTests::NOT);4841}48424843@Test(dataProvider = "byteUnaryOpProvider")4844static void notByte256VectorTests(IntFunction<byte[]> fa) {4845byte[] a = fa.apply(SPECIES.length());4846byte[] r = fr.apply(SPECIES.length());48474848for (int ic = 0; ic < INVOC_COUNT; ic++) {4849for (int i = 0; i < a.length; i += SPECIES.length()) {4850ByteVector av = ByteVector.fromArray(SPECIES, a, i);4851av.not().intoArray(r, i);4852}4853}48544855assertArraysEquals(r, a, Byte256VectorTests::not);4856}4857485848594860@Test(dataProvider = "byteUnaryOpMaskProvider")4861static void NOTMaskedByte256VectorTests(IntFunction<byte[]> fa,4862IntFunction<boolean[]> fm) {4863byte[] a = fa.apply(SPECIES.length());4864byte[] r = fr.apply(SPECIES.length());4865boolean[] mask = fm.apply(SPECIES.length());4866VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);48674868for (int ic = 0; ic < INVOC_COUNT; ic++) {4869for (int i = 0; i < a.length; i += SPECIES.length()) {4870ByteVector av = ByteVector.fromArray(SPECIES, a, i);4871av.lanewise(VectorOperators.NOT, vmask).intoArray(r, i);4872}4873}48744875assertArraysEquals(r, a, mask, Byte256VectorTests::NOT);4876}4877487848794880static byte ZOMO(byte a) {4881return (byte)((a==0?0:-1));4882}4883488448854886@Test(dataProvider = "byteUnaryOpProvider")4887static void ZOMOByte256VectorTests(IntFunction<byte[]> fa) {4888byte[] a = fa.apply(SPECIES.length());4889byte[] r = fr.apply(SPECIES.length());48904891for (int ic = 0; ic < INVOC_COUNT; ic++) {4892for (int i = 0; i < a.length; i += SPECIES.length()) {4893ByteVector av = ByteVector.fromArray(SPECIES, a, i);4894av.lanewise(VectorOperators.ZOMO).intoArray(r, i);4895}4896}48974898assertArraysEquals(r, a, Byte256VectorTests::ZOMO);4899}4900490149024903@Test(dataProvider = "byteUnaryOpMaskProvider")4904static void ZOMOMaskedByte256VectorTests(IntFunction<byte[]> fa,4905IntFunction<boolean[]> fm) {4906byte[] a = fa.apply(SPECIES.length());4907byte[] r = fr.apply(SPECIES.length());4908boolean[] mask = fm.apply(SPECIES.length());4909VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);49104911for (int ic = 0; ic < INVOC_COUNT; ic++) {4912for (int i = 0; i < a.length; i += SPECIES.length()) {4913ByteVector av = ByteVector.fromArray(SPECIES, a, i);4914av.lanewise(VectorOperators.ZOMO, vmask).intoArray(r, i);4915}4916}49174918assertArraysEquals(r, a, mask, Byte256VectorTests::ZOMO);4919}49204921492249234924static byte[] gather(byte a[], int ix, int[] b, int iy) {4925byte[] res = new byte[SPECIES.length()];4926for (int i = 0; i < SPECIES.length(); i++) {4927int bi = iy + i;4928res[i] = a[b[bi] + ix];4929}4930return res;4931}49324933@Test(dataProvider = "byteUnaryOpIndexProvider")4934static void gatherByte256VectorTests(IntFunction<byte[]> fa, BiFunction<Integer,Integer,int[]> fs) {4935byte[] a = fa.apply(SPECIES.length());4936int[] b = fs.apply(a.length, SPECIES.length());4937byte[] r = new byte[a.length];49384939for (int ic = 0; ic < INVOC_COUNT; ic++) {4940for (int i = 0; i < a.length; i += SPECIES.length()) {4941ByteVector av = ByteVector.fromArray(SPECIES, a, i, b, i);4942av.intoArray(r, i);4943}4944}49454946assertArraysEquals(r, a, b, Byte256VectorTests::gather);4947}4948static byte[] gatherMasked(byte a[], int ix, boolean[] mask, int[] b, int iy) {4949byte[] res = new byte[SPECIES.length()];4950for (int i = 0; i < SPECIES.length(); i++) {4951int bi = iy + i;4952if (mask[i]) {4953res[i] = a[b[bi] + ix];4954}4955}4956return res;4957}49584959@Test(dataProvider = "byteUnaryMaskedOpIndexProvider")4960static void gatherMaskedByte256VectorTests(IntFunction<byte[]> fa, BiFunction<Integer,Integer,int[]> fs, IntFunction<boolean[]> fm) {4961byte[] a = fa.apply(SPECIES.length());4962int[] b = fs.apply(a.length, SPECIES.length());4963byte[] r = new byte[a.length];4964boolean[] mask = fm.apply(SPECIES.length());4965VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);49664967for (int ic = 0; ic < INVOC_COUNT; ic++) {4968for (int i = 0; i < a.length; i += SPECIES.length()) {4969ByteVector av = ByteVector.fromArray(SPECIES, a, i, b, i, vmask);4970av.intoArray(r, i);4971}4972}49734974assertArraysEquals(r, a, b, mask, Byte256VectorTests::gatherMasked);4975}49764977static byte[] scatter(byte a[], int ix, int[] b, int iy) {4978byte[] res = new byte[SPECIES.length()];4979for (int i = 0; i < SPECIES.length(); i++) {4980int bi = iy + i;4981res[b[bi]] = a[i + ix];4982}4983return res;4984}49854986@Test(dataProvider = "byteUnaryOpIndexProvider")4987static void scatterByte256VectorTests(IntFunction<byte[]> fa, BiFunction<Integer,Integer,int[]> fs) {4988byte[] a = fa.apply(SPECIES.length());4989int[] b = fs.apply(a.length, SPECIES.length());4990byte[] r = new byte[a.length];49914992for (int ic = 0; ic < INVOC_COUNT; ic++) {4993for (int i = 0; i < a.length; i += SPECIES.length()) {4994ByteVector av = ByteVector.fromArray(SPECIES, a, i);4995av.intoArray(r, i, b, i);4996}4997}49984999assertArraysEquals(r, a, b, Byte256VectorTests::scatter);5000}50015002static byte[] scatterMasked(byte r[], byte a[], int ix, boolean[] mask, int[] b, int iy) {5003// First, gather r.5004byte[] oldVal = gather(r, ix, b, iy);5005byte[] newVal = new byte[SPECIES.length()];50065007// Second, blending it with a.5008for (int i = 0; i < SPECIES.length(); i++) {5009newVal[i] = blend(oldVal[i], a[i+ix], mask[i]);5010}50115012// Third, scatter: copy old value of r, and scatter it manually.5013byte[] res = Arrays.copyOfRange(r, ix, ix+SPECIES.length());5014for (int i = 0; i < SPECIES.length(); i++) {5015int bi = iy + i;5016res[b[bi]] = newVal[i];5017}50185019return res;5020}50215022@Test(dataProvider = "scatterMaskedOpIndexProvider")5023static void scatterMaskedByte256VectorTests(IntFunction<byte[]> fa, IntFunction<byte[]> fb, BiFunction<Integer,Integer,int[]> fs, IntFunction<boolean[]> fm) {5024byte[] a = fa.apply(SPECIES.length());5025int[] b = fs.apply(a.length, SPECIES.length());5026byte[] r = fb.apply(SPECIES.length());5027boolean[] mask = fm.apply(SPECIES.length());5028VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);50295030for (int ic = 0; ic < INVOC_COUNT; ic++) {5031for (int i = 0; i < a.length; i += SPECIES.length()) {5032ByteVector av = ByteVector.fromArray(SPECIES, a, i);5033av.intoArray(r, i, b, i, vmask);5034}5035}50365037assertArraysEquals(r, a, b, mask, Byte256VectorTests::scatterMasked);5038}503950405041@Test(dataProvider = "byteCompareOpProvider")5042static void ltByte256VectorTestsBroadcastSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {5043byte[] a = fa.apply(SPECIES.length());5044byte[] b = fb.apply(SPECIES.length());50455046for (int i = 0; i < a.length; i += SPECIES.length()) {5047ByteVector av = ByteVector.fromArray(SPECIES, a, i);5048VectorMask<Byte> mv = av.lt(b[i]);50495050// Check results as part of computation.5051for (int j = 0; j < SPECIES.length(); j++) {5052Assert.assertEquals(mv.laneIsSet(j), a[i + j] < b[i]);5053}5054}5055}50565057@Test(dataProvider = "byteCompareOpProvider")5058static void eqByte256VectorTestsBroadcastMaskedSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb) {5059byte[] a = fa.apply(SPECIES.length());5060byte[] b = fb.apply(SPECIES.length());50615062for (int i = 0; i < a.length; i += SPECIES.length()) {5063ByteVector av = ByteVector.fromArray(SPECIES, a, i);5064VectorMask<Byte> mv = av.eq(b[i]);50655066// Check results as part of computation.5067for (int j = 0; j < SPECIES.length(); j++) {5068Assert.assertEquals(mv.laneIsSet(j), a[i + j] == b[i]);5069}5070}5071}50725073@Test(dataProvider = "byteUnaryOpProvider")5074static void toIntArrayByte256VectorTestsSmokeTest(IntFunction<byte[]> fa) {5075byte[] a = fa.apply(SPECIES.length());50765077for (int i = 0; i < a.length; i += SPECIES.length()) {5078ByteVector av = ByteVector.fromArray(SPECIES, a, i);5079int[] r = av.toIntArray();5080assertArraysEquals(r, a, i);5081}5082}50835084@Test(dataProvider = "byteUnaryOpProvider")5085static void toLongArrayByte256VectorTestsSmokeTest(IntFunction<byte[]> fa) {5086byte[] a = fa.apply(SPECIES.length());50875088for (int i = 0; i < a.length; i += SPECIES.length()) {5089ByteVector av = ByteVector.fromArray(SPECIES, a, i);5090long[] r = av.toLongArray();5091assertArraysEquals(r, a, i);5092}5093}50945095@Test(dataProvider = "byteUnaryOpProvider")5096static void toDoubleArrayByte256VectorTestsSmokeTest(IntFunction<byte[]> fa) {5097byte[] a = fa.apply(SPECIES.length());50985099for (int i = 0; i < a.length; i += SPECIES.length()) {5100ByteVector av = ByteVector.fromArray(SPECIES, a, i);5101double[] r = av.toDoubleArray();5102assertArraysEquals(r, a, i);5103}5104}51055106@Test(dataProvider = "byteUnaryOpProvider")5107static void toStringByte256VectorTestsSmokeTest(IntFunction<byte[]> fa) {5108byte[] a = fa.apply(SPECIES.length());51095110for (int i = 0; i < a.length; i += SPECIES.length()) {5111ByteVector av = ByteVector.fromArray(SPECIES, a, i);5112String str = av.toString();51135114byte subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());5115Assert.assertTrue(str.equals(Arrays.toString(subarr)), "at index " + i + ", string should be = " + Arrays.toString(subarr) + ", but is = " + str);5116}5117}51185119@Test(dataProvider = "byteUnaryOpProvider")5120static void hashCodeByte256VectorTestsSmokeTest(IntFunction<byte[]> fa) {5121byte[] a = fa.apply(SPECIES.length());51225123for (int i = 0; i < a.length; i += SPECIES.length()) {5124ByteVector av = ByteVector.fromArray(SPECIES, a, i);5125int hash = av.hashCode();51265127byte subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());5128int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr));5129Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash);5130}5131}51325133@Test(dataProvider = "byteUnaryOpProvider")5134static void reinterpretAsBytesByte256VectorTestsSmokeTest(IntFunction<byte[]> fa) {5135byte[] a = fa.apply(SPECIES.length());5136byte[] r = new byte[a.length];51375138for (int i = 0; i < a.length; i += SPECIES.length()) {5139ByteVector av = ByteVector.fromArray(SPECIES, a, i);5140av.reinterpretAsBytes().intoArray(r, i);5141}5142assertArraysEquals(r, a, 0);5143}51445145static long ADDReduceLong(byte[] a, int idx) {5146byte res = 0;5147for (int i = idx; i < (idx + SPECIES.length()); i++) {5148res += a[i];5149}51505151return (long)res;5152}51535154static long ADDReduceAllLong(byte[] a) {5155long res = 0;5156for (int i = 0; i < a.length; i += SPECIES.length()) {5157res += ADDReduceLong(a, i);5158}51595160return res;5161}51625163@Test(dataProvider = "byteUnaryOpProvider")5164static void ADDReduceLongByte256VectorTests(IntFunction<byte[]> fa) {5165byte[] a = fa.apply(SPECIES.length());5166long[] r = lfr.apply(SPECIES.length());5167long ra = 0;51685169for (int i = 0; i < a.length; i += SPECIES.length()) {5170ByteVector av = ByteVector.fromArray(SPECIES, a, i);5171r[i] = av.reduceLanesToLong(VectorOperators.ADD);5172}51735174ra = 0;5175for (int i = 0; i < a.length; i ++) {5176ra += r[i];5177}51785179assertReductionLongArraysEquals(r, ra, a,5180Byte256VectorTests::ADDReduceLong, Byte256VectorTests::ADDReduceAllLong);5181}51825183static long ADDReduceLongMasked(byte[] a, int idx, boolean[] mask) {5184byte res = 0;5185for (int i = idx; i < (idx + SPECIES.length()); i++) {5186if(mask[i % SPECIES.length()])5187res += a[i];5188}51895190return (long)res;5191}51925193static long ADDReduceAllLongMasked(byte[] a, boolean[] mask) {5194long res = 0;5195for (int i = 0; i < a.length; i += SPECIES.length()) {5196res += ADDReduceLongMasked(a, i, mask);5197}51985199return res;5200}52015202@Test(dataProvider = "byteUnaryOpMaskProvider")5203static void ADDReduceLongByte256VectorTestsMasked(IntFunction<byte[]> fa, IntFunction<boolean[]> fm) {5204byte[] a = fa.apply(SPECIES.length());5205long[] r = lfr.apply(SPECIES.length());5206boolean[] mask = fm.apply(SPECIES.length());5207VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);5208long ra = 0;52095210for (int i = 0; i < a.length; i += SPECIES.length()) {5211ByteVector av = ByteVector.fromArray(SPECIES, a, i);5212r[i] = av.reduceLanesToLong(VectorOperators.ADD, vmask);5213}52145215ra = 0;5216for (int i = 0; i < a.length; i ++) {5217ra += r[i];5218}52195220assertReductionLongArraysEqualsMasked(r, ra, a, mask,5221Byte256VectorTests::ADDReduceLongMasked, Byte256VectorTests::ADDReduceAllLongMasked);5222}52235224@Test(dataProvider = "byteUnaryOpProvider")5225static void BroadcastLongByte256VectorTestsSmokeTest(IntFunction<byte[]> fa) {5226byte[] a = fa.apply(SPECIES.length());5227byte[] r = new byte[a.length];52285229for (int i = 0; i < a.length; i += SPECIES.length()) {5230ByteVector.broadcast(SPECIES, (long)a[i]).intoArray(r, i);5231}5232assertBroadcastArraysEquals(r, a);5233}52345235@Test(dataProvider = "byteBinaryOpMaskProvider")5236static void blendByte256VectorTestsBroadcastLongSmokeTest(IntFunction<byte[]> fa, IntFunction<byte[]> fb,5237IntFunction<boolean[]> fm) {5238byte[] a = fa.apply(SPECIES.length());5239byte[] b = fb.apply(SPECIES.length());5240byte[] r = fr.apply(SPECIES.length());5241boolean[] mask = fm.apply(SPECIES.length());5242VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);52435244for (int ic = 0; ic < INVOC_COUNT; ic++) {5245for (int i = 0; i < a.length; i += SPECIES.length()) {5246ByteVector av = ByteVector.fromArray(SPECIES, a, i);5247av.blend((long)b[i], vmask).intoArray(r, i);5248}5249}5250assertBroadcastLongArraysEquals(r, a, b, mask, Byte256VectorTests::blend);5251}525252535254@Test(dataProvider = "byteUnaryOpSelectFromProvider")5255static void SelectFromByte256VectorTests(IntFunction<byte[]> fa,5256BiFunction<Integer,Integer,byte[]> fs) {5257byte[] a = fa.apply(SPECIES.length());5258byte[] order = fs.apply(a.length, SPECIES.length());5259byte[] r = fr.apply(SPECIES.length());52605261for (int i = 0; i < a.length; i += SPECIES.length()) {5262ByteVector av = ByteVector.fromArray(SPECIES, a, i);5263ByteVector bv = ByteVector.fromArray(SPECIES, order, i);5264bv.selectFrom(av).intoArray(r, i);5265}52665267assertSelectFromArraysEquals(r, a, order, SPECIES.length());5268}52695270@Test(dataProvider = "byteUnaryOpSelectFromMaskProvider")5271static void SelectFromByte256VectorTestsMaskedSmokeTest(IntFunction<byte[]> fa,5272BiFunction<Integer,Integer,byte[]> fs,5273IntFunction<boolean[]> fm) {5274byte[] a = fa.apply(SPECIES.length());5275byte[] order = fs.apply(a.length, SPECIES.length());5276byte[] r = fr.apply(SPECIES.length());5277boolean[] mask = fm.apply(SPECIES.length());5278VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, 0);52795280for (int i = 0; i < a.length; i += SPECIES.length()) {5281ByteVector av = ByteVector.fromArray(SPECIES, a, i);5282ByteVector bv = ByteVector.fromArray(SPECIES, order, i);5283bv.selectFrom(av, vmask).intoArray(r, i);5284}52855286assertSelectFromArraysEquals(r, a, order, mask, SPECIES.length());5287}52885289@Test(dataProvider = "shuffleProvider")5290static void shuffleMiscellaneousByte256VectorTestsSmokeTest(BiFunction<Integer,Integer,int[]> fs) {5291int[] a = fs.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length());52925293for (int i = 0; i < a.length; i += SPECIES.length()) {5294var shuffle = VectorShuffle.fromArray(SPECIES, a, i);5295int hash = shuffle.hashCode();5296int length = shuffle.length();52975298int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());5299int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr));5300Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash);5301Assert.assertEquals(length, SPECIES.length());5302}5303}53045305@Test(dataProvider = "shuffleProvider")5306static void shuffleToStringByte256VectorTestsSmokeTest(BiFunction<Integer,Integer,int[]> fs) {5307int[] a = fs.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length());53085309for (int i = 0; i < a.length; i += SPECIES.length()) {5310var shuffle = VectorShuffle.fromArray(SPECIES, a, i);5311String str = shuffle.toString();53125313int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());5314Assert.assertTrue(str.equals("Shuffle" + Arrays.toString(subarr)), "at index " +5315i + ", string should be = " + Arrays.toString(subarr) + ", but is = " + str);5316}5317}53185319@Test(dataProvider = "shuffleCompareOpProvider")5320static void shuffleEqualsByte256VectorTestsSmokeTest(BiFunction<Integer,Integer,int[]> fa, BiFunction<Integer,Integer,int[]> fb) {5321int[] a = fa.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length());5322int[] b = fb.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length());53235324for (int i = 0; i < a.length; i += SPECIES.length()) {5325var av = VectorShuffle.fromArray(SPECIES, a, i);5326var bv = VectorShuffle.fromArray(SPECIES, b, i);5327boolean eq = av.equals(bv);5328int to = i + SPECIES.length();5329Assert.assertEquals(eq, Arrays.equals(a, i, to, b, i, to));5330}5331}53325333@Test(dataProvider = "maskCompareOpProvider")5334static void maskEqualsByte256VectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) {5335boolean[] a = fa.apply(SPECIES.length());5336boolean[] b = fb.apply(SPECIES.length());53375338for (int i = 0; i < a.length; i += SPECIES.length()) {5339var av = SPECIES.loadMask(a, i);5340var bv = SPECIES.loadMask(b, i);5341boolean equals = av.equals(bv);5342int to = i + SPECIES.length();5343Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to));5344}5345}53465347static boolean beq(boolean a, boolean b) {5348return (a == b);5349}53505351@Test(dataProvider = "maskCompareOpProvider")5352static void maskEqByte256VectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) {5353boolean[] a = fa.apply(SPECIES.length());5354boolean[] b = fb.apply(SPECIES.length());5355boolean[] r = new boolean[a.length];53565357for (int i = 0; i < a.length; i += SPECIES.length()) {5358var av = SPECIES.loadMask(a, i);5359var bv = SPECIES.loadMask(b, i);5360var cv = av.eq(bv);5361cv.intoArray(r, i);5362}5363assertArraysEquals(r, a, b, Byte256VectorTests::beq);5364}53655366@Test(dataProvider = "maskProvider")5367static void maskHashCodeByte256VectorTestsSmokeTest(IntFunction<boolean[]> fa) {5368boolean[] a = fa.apply(SPECIES.length());53695370for (int i = 0; i < a.length; i += SPECIES.length()) {5371var vmask = SPECIES.loadMask(a, i);5372int hash = vmask.hashCode();53735374boolean subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());5375int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr));5376Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash);5377}5378}53795380@Test(dataProvider = "maskProvider")5381static void maskTrueCountByte256VectorTestsSmokeTest(IntFunction<boolean[]> fa) {5382boolean[] a = fa.apply(SPECIES.length());53835384for (int i = 0; i < a.length; i += SPECIES.length()) {5385var vmask = SPECIES.loadMask(a, i);5386int tcount = vmask.trueCount();5387int expectedTcount = 0;5388for (int j = i; j < i + SPECIES.length(); j++) {5389expectedTcount += a[j] ? 1 : 0;5390}5391Assert.assertTrue(tcount == expectedTcount, "at index " + i + ", trueCount should be = " + expectedTcount + ", but is = " + tcount);5392}5393}53945395@Test(dataProvider = "maskProvider")5396static void maskLastTrueByte256VectorTestsSmokeTest(IntFunction<boolean[]> fa) {5397boolean[] a = fa.apply(SPECIES.length());53985399for (int i = 0; i < a.length; i += SPECIES.length()) {5400var vmask = SPECIES.loadMask(a, i);5401int ltrue = vmask.lastTrue();5402int j = i + SPECIES.length() - 1;5403for (; j >= i; j--) {5404if (a[j]) break;5405}5406int expectedLtrue = j - i;54075408Assert.assertTrue(ltrue == expectedLtrue, "at index " + i +5409", lastTrue should be = " + expectedLtrue + ", but is = " + ltrue);5410}5411}54125413@Test(dataProvider = "maskProvider")5414static void maskFirstTrueByte256VectorTestsSmokeTest(IntFunction<boolean[]> fa) {5415boolean[] a = fa.apply(SPECIES.length());54165417for (int i = 0; i < a.length; i += SPECIES.length()) {5418var vmask = SPECIES.loadMask(a, i);5419int ftrue = vmask.firstTrue();5420int j = i;5421for (; j < i + SPECIES.length() ; j++) {5422if (a[j]) break;5423}5424int expectedFtrue = j - i;54255426Assert.assertTrue(ftrue == expectedFtrue, "at index " + i +5427", firstTrue should be = " + expectedFtrue + ", but is = " + ftrue);5428}5429}54305431@DataProvider5432public static Object[][] longMaskProvider() {5433return new Object[][]{5434{0xFFFFFFFFFFFFFFFFL},5435{0x0000000000000000L},5436{0x5555555555555555L},5437{0x0123456789abcdefL},5438};5439}54405441@Test(dataProvider = "longMaskProvider")5442static void maskFromToLongByte256VectorTestsSmokeTest(long inputLong) {5443var vmask = VectorMask.fromLong(SPECIES, inputLong);5444long outputLong = vmask.toLong();5445Assert.assertEquals(outputLong, inputLong & (((1L << (SPECIES.length() - 1)) << 1) - 1));5446}54475448@DataProvider5449public static Object[][] offsetProvider() {5450return new Object[][]{5451{0},5452{-1},5453{+1},5454{+2},5455{-2},5456};5457}54585459@Test(dataProvider = "offsetProvider")5460static void indexInRangeByte256VectorTestsSmokeTest(int offset) {5461int limit = SPECIES.length() * BUFFER_REPS;5462for (int i = 0; i < limit; i += SPECIES.length()) {5463var actualMask = SPECIES.indexInRange(i + offset, limit);5464var expectedMask = SPECIES.maskAll(true).indexInRange(i + offset, limit);5465assert(actualMask.equals(expectedMask));5466for (int j = 0; j < SPECIES.length(); j++) {5467int index = i + j + offset;5468Assert.assertEquals(actualMask.laneIsSet(j), index >= 0 && index < limit);5469}5470}5471}54725473@DataProvider5474public static Object[][] lengthProvider() {5475return new Object[][]{5476{0},5477{1},5478{32},5479{37},5480{1024},5481{1024+1},5482{1024+5},5483};5484}54855486@Test(dataProvider = "lengthProvider")5487static void loopBoundByte256VectorTestsSmokeTest(int length) {5488int actualLoopBound = SPECIES.loopBound(length);5489int expectedLoopBound = length - Math.floorMod(length, SPECIES.length());5490Assert.assertEquals(actualLoopBound, expectedLoopBound);5491}54925493@Test5494static void ElementSizeByte256VectorTestsSmokeTest() {5495ByteVector av = ByteVector.zero(SPECIES);5496int elsize = av.elementSize();5497Assert.assertEquals(elsize, Byte.SIZE);5498}54995500@Test5501static void VectorShapeByte256VectorTestsSmokeTest() {5502ByteVector av = ByteVector.zero(SPECIES);5503VectorShape vsh = av.shape();5504assert(vsh.equals(VectorShape.S_256_BIT));5505}55065507@Test5508static void ShapeWithLanesByte256VectorTestsSmokeTest() {5509ByteVector av = ByteVector.zero(SPECIES);5510VectorShape vsh = av.shape();5511VectorSpecies species = vsh.withLanes(byte.class);5512assert(species.equals(SPECIES));5513}55145515@Test5516static void ElementTypeByte256VectorTestsSmokeTest() {5517ByteVector av = ByteVector.zero(SPECIES);5518assert(av.species().elementType() == byte.class);5519}55205521@Test5522static void SpeciesElementSizeByte256VectorTestsSmokeTest() {5523ByteVector av = ByteVector.zero(SPECIES);5524assert(av.species().elementSize() == Byte.SIZE);5525}55265527@Test5528static void VectorTypeByte256VectorTestsSmokeTest() {5529ByteVector av = ByteVector.zero(SPECIES);5530assert(av.species().vectorType() == av.getClass());5531}55325533@Test5534static void WithLanesByte256VectorTestsSmokeTest() {5535ByteVector av = ByteVector.zero(SPECIES);5536VectorSpecies species = av.species().withLanes(byte.class);5537assert(species.equals(SPECIES));5538}55395540@Test5541static void WithShapeByte256VectorTestsSmokeTest() {5542ByteVector av = ByteVector.zero(SPECIES);5543VectorShape vsh = av.shape();5544VectorSpecies species = av.species().withShape(vsh);5545assert(species.equals(SPECIES));5546}5547}5548554955505551