1 /*
   2  * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 package org.openjdk.bench.jdk.incubator.vector.operation;
  25 
  26 // -- This file was mechanically generated: Do not edit! -- //
  27 
  28 import jdk.incubator.vector.Vector;
  29 import jdk.incubator.vector.VectorMask;
  30 import jdk.incubator.vector.VectorOperators;
  31 import jdk.incubator.vector.VectorShape;
  32 import jdk.incubator.vector.VectorSpecies;
  33 import jdk.incubator.vector.VectorShuffle;
  34 import jdk.incubator.vector.IntVector;
  35 
  36 import java.util.concurrent.TimeUnit;
  37 import java.util.function.BiFunction;
  38 import java.util.function.IntFunction;
  39 
  40 import org.openjdk.jmh.annotations.*;
  41 import org.openjdk.jmh.infra.Blackhole;
  42 
  43 @BenchmarkMode(Mode.Throughput)
  44 @OutputTimeUnit(TimeUnit.MILLISECONDS)
  45 @State(Scope.Benchmark)
  46 @Warmup(iterations = 3, time = 1)
  47 @Measurement(iterations = 5, time = 1)
  48 @Fork(value = 1, jvmArgsPrepend = {"--add-modules=jdk.incubator.vector"})
  49 public class Int256Vector extends AbstractVectorBenchmark {
  50     static final VectorSpecies<Integer> SPECIES = IntVector.SPECIES_256;
  51 
  52     static final int INVOC_COUNT = 1; // get rid of outer loop
  53 
  54     static void replaceZero(int[] a, int v) {
  55         for (int i = 0; i < a.length; i++) {
  56             if (a[i] == 0) {
  57                 a[i] = v;
  58             }
  59         }
  60     }
  61 
  62     static void replaceZero(int[] a, boolean[] mask, int v) {
  63         for (int i = 0; i < a.length; i++) {
  64             if (mask[i % mask.length] && a[i] == 0) {
  65                 a[i] = v;
  66             }
  67         }
  68     }
  69 
  70     static int firstNonZero(int a, int b) {
  71         return Integer.compare(a, (int) 0) != 0 ? a : b;
  72     }
  73 
  74     private static final int CONST_SHIFT = Integer.SIZE / 2;
  75 
  76     @Param("1024")
  77     int size;
  78 
  79     int[] fill(IntFunction<Integer> f) {
  80         int[] array = new int[size];
  81         for (int i = 0; i < array.length; i++) {
  82             array[i] = f.apply(i);
  83         }
  84         return array;
  85     }
  86 
  87     int[] a, b, c, r;
  88     boolean[] m, mt, rm;
  89     int[] s;
  90 
  91     @Setup
  92     public void init() {
  93         size += size % SPECIES.length(); // FIXME: add post-loops
  94 
  95         a = fill(i -> (int)(2*i));
  96         b = fill(i -> (int)(i+1));
  97         c = fill(i -> (int)(i+5));
  98         r = fill(i -> (int)0);
  99 
 100         m = fillMask(size, i -> (i % 2) == 0);
 101         mt = fillMask(size, i -> true);
 102         rm = fillMask(size, i -> false);
 103 
 104         s = fillInt(size, i -> RAND.nextInt(SPECIES.length()));
 105     }
 106 
 107     final IntFunction<int[]> fa = vl -> a;
 108     final IntFunction<int[]> fb = vl -> b;
 109     final IntFunction<int[]> fc = vl -> c;
 110     final IntFunction<int[]> fr = vl -> r;
 111     final IntFunction<boolean[]> fm = vl -> m;
 112     final IntFunction<boolean[]> fmt = vl -> mt;
 113     final IntFunction<boolean[]> fmr = vl -> rm;
 114     final BiFunction<Integer,Integer,int[]> fs = (i,j) -> s;
 115 
 116 
 117     @Benchmark
 118     public void ADD(Blackhole bh) {
 119         int[] a = fa.apply(SPECIES.length());
 120         int[] b = fb.apply(SPECIES.length());
 121         int[] r = fr.apply(SPECIES.length());
 122 
 123         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 124             for (int i = 0; i < a.length; i += SPECIES.length()) {
 125                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 126                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 127                 av.lanewise(VectorOperators.ADD, bv).intoArray(r, i);
 128             }
 129         }
 130 
 131         bh.consume(r);
 132     }
 133 
 134     @Benchmark
 135     public void ADDMasked(Blackhole bh) {
 136         int[] a = fa.apply(SPECIES.length());
 137         int[] b = fb.apply(SPECIES.length());
 138         int[] r = fr.apply(SPECIES.length());
 139         boolean[] mask = fm.apply(SPECIES.length());
 140         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 141 
 142         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 143             for (int i = 0; i < a.length; i += SPECIES.length()) {
 144                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 145                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 146                 av.lanewise(VectorOperators.ADD, bv, vmask).intoArray(r, i);
 147             }
 148         }
 149 
 150         bh.consume(r);
 151     }
 152 
 153     @Benchmark
 154     public void SUB(Blackhole bh) {
 155         int[] a = fa.apply(SPECIES.length());
 156         int[] b = fb.apply(SPECIES.length());
 157         int[] r = fr.apply(SPECIES.length());
 158 
 159         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 160             for (int i = 0; i < a.length; i += SPECIES.length()) {
 161                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 162                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 163                 av.lanewise(VectorOperators.SUB, bv).intoArray(r, i);
 164             }
 165         }
 166 
 167         bh.consume(r);
 168     }
 169 
 170     @Benchmark
 171     public void SUBMasked(Blackhole bh) {
 172         int[] a = fa.apply(SPECIES.length());
 173         int[] b = fb.apply(SPECIES.length());
 174         int[] r = fr.apply(SPECIES.length());
 175         boolean[] mask = fm.apply(SPECIES.length());
 176         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 177 
 178         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 179             for (int i = 0; i < a.length; i += SPECIES.length()) {
 180                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 181                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 182                 av.lanewise(VectorOperators.SUB, bv, vmask).intoArray(r, i);
 183             }
 184         }
 185 
 186         bh.consume(r);
 187     }
 188 
 189     @Benchmark
 190     public void MUL(Blackhole bh) {
 191         int[] a = fa.apply(SPECIES.length());
 192         int[] b = fb.apply(SPECIES.length());
 193         int[] r = fr.apply(SPECIES.length());
 194 
 195         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 196             for (int i = 0; i < a.length; i += SPECIES.length()) {
 197                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 198                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 199                 av.lanewise(VectorOperators.MUL, bv).intoArray(r, i);
 200             }
 201         }
 202 
 203         bh.consume(r);
 204     }
 205 
 206     @Benchmark
 207     public void MULMasked(Blackhole bh) {
 208         int[] a = fa.apply(SPECIES.length());
 209         int[] b = fb.apply(SPECIES.length());
 210         int[] r = fr.apply(SPECIES.length());
 211         boolean[] mask = fm.apply(SPECIES.length());
 212         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 213 
 214         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 215             for (int i = 0; i < a.length; i += SPECIES.length()) {
 216                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 217                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 218                 av.lanewise(VectorOperators.MUL, bv, vmask).intoArray(r, i);
 219             }
 220         }
 221 
 222         bh.consume(r);
 223     }
 224 
 225     @Benchmark
 226     public void DIV(Blackhole bh) {
 227         int[] a = fa.apply(SPECIES.length());
 228         int[] b = fb.apply(SPECIES.length());
 229         int[] r = fr.apply(SPECIES.length());
 230 
 231         replaceZero(b, (int) 1);
 232 
 233         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 234             for (int i = 0; i < a.length; i += SPECIES.length()) {
 235                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 236                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 237                 av.lanewise(VectorOperators.DIV, bv).intoArray(r, i);
 238             }
 239         }
 240 
 241         bh.consume(r);
 242     }
 243 
 244     @Benchmark
 245     public void DIVMasked(Blackhole bh) {
 246         int[] a = fa.apply(SPECIES.length());
 247         int[] b = fb.apply(SPECIES.length());
 248         int[] r = fr.apply(SPECIES.length());
 249         boolean[] mask = fm.apply(SPECIES.length());
 250         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 251 
 252         replaceZero(b, mask, (int) 1);
 253 
 254         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 255             for (int i = 0; i < a.length; i += SPECIES.length()) {
 256                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 257                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 258                 av.lanewise(VectorOperators.DIV, bv, vmask).intoArray(r, i);
 259             }
 260         }
 261 
 262         bh.consume(r);
 263     }
 264 
 265     @Benchmark
 266     public void FIRST_NONZERO(Blackhole bh) {
 267         int[] a = fa.apply(SPECIES.length());
 268         int[] b = fb.apply(SPECIES.length());
 269         int[] r = fr.apply(SPECIES.length());
 270 
 271         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 272             for (int i = 0; i < a.length; i += SPECIES.length()) {
 273                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 274                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 275                 av.lanewise(VectorOperators.FIRST_NONZERO, bv).intoArray(r, i);
 276             }
 277         }
 278 
 279         bh.consume(r);
 280     }
 281 
 282     @Benchmark
 283     public void FIRST_NONZEROMasked(Blackhole bh) {
 284         int[] a = fa.apply(SPECIES.length());
 285         int[] b = fb.apply(SPECIES.length());
 286         int[] r = fr.apply(SPECIES.length());
 287         boolean[] mask = fm.apply(SPECIES.length());
 288         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 289 
 290         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 291             for (int i = 0; i < a.length; i += SPECIES.length()) {
 292                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 293                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 294                 av.lanewise(VectorOperators.FIRST_NONZERO, bv, vmask).intoArray(r, i);
 295             }
 296         }
 297 
 298         bh.consume(r);
 299     }
 300 
 301     @Benchmark
 302     public void AND(Blackhole bh) {
 303         int[] a = fa.apply(SPECIES.length());
 304         int[] b = fb.apply(SPECIES.length());
 305         int[] r = fr.apply(SPECIES.length());
 306 
 307         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 308             for (int i = 0; i < a.length; i += SPECIES.length()) {
 309                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 310                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 311                 av.lanewise(VectorOperators.AND, bv).intoArray(r, i);
 312             }
 313         }
 314 
 315         bh.consume(r);
 316     }
 317 
 318     @Benchmark
 319     public void ANDMasked(Blackhole bh) {
 320         int[] a = fa.apply(SPECIES.length());
 321         int[] b = fb.apply(SPECIES.length());
 322         int[] r = fr.apply(SPECIES.length());
 323         boolean[] mask = fm.apply(SPECIES.length());
 324         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 325 
 326         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 327             for (int i = 0; i < a.length; i += SPECIES.length()) {
 328                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 329                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 330                 av.lanewise(VectorOperators.AND, bv, vmask).intoArray(r, i);
 331             }
 332         }
 333 
 334         bh.consume(r);
 335     }
 336 
 337     @Benchmark
 338     public void AND_NOT(Blackhole bh) {
 339         int[] a = fa.apply(SPECIES.length());
 340         int[] b = fb.apply(SPECIES.length());
 341         int[] r = fr.apply(SPECIES.length());
 342 
 343         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 344             for (int i = 0; i < a.length; i += SPECIES.length()) {
 345                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 346                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 347                 av.lanewise(VectorOperators.AND_NOT, bv).intoArray(r, i);
 348             }
 349         }
 350 
 351         bh.consume(r);
 352     }
 353 
 354     @Benchmark
 355     public void AND_NOTMasked(Blackhole bh) {
 356         int[] a = fa.apply(SPECIES.length());
 357         int[] b = fb.apply(SPECIES.length());
 358         int[] r = fr.apply(SPECIES.length());
 359         boolean[] mask = fm.apply(SPECIES.length());
 360         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 361 
 362         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 363             for (int i = 0; i < a.length; i += SPECIES.length()) {
 364                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 365                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 366                 av.lanewise(VectorOperators.AND_NOT, bv, vmask).intoArray(r, i);
 367             }
 368         }
 369 
 370         bh.consume(r);
 371     }
 372 
 373     @Benchmark
 374     public void OR(Blackhole bh) {
 375         int[] a = fa.apply(SPECIES.length());
 376         int[] b = fb.apply(SPECIES.length());
 377         int[] r = fr.apply(SPECIES.length());
 378 
 379         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 380             for (int i = 0; i < a.length; i += SPECIES.length()) {
 381                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 382                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 383                 av.lanewise(VectorOperators.OR, bv).intoArray(r, i);
 384             }
 385         }
 386 
 387         bh.consume(r);
 388     }
 389 
 390     @Benchmark
 391     public void ORMasked(Blackhole bh) {
 392         int[] a = fa.apply(SPECIES.length());
 393         int[] b = fb.apply(SPECIES.length());
 394         int[] r = fr.apply(SPECIES.length());
 395         boolean[] mask = fm.apply(SPECIES.length());
 396         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 397 
 398         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 399             for (int i = 0; i < a.length; i += SPECIES.length()) {
 400                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 401                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 402                 av.lanewise(VectorOperators.OR, bv, vmask).intoArray(r, i);
 403             }
 404         }
 405 
 406         bh.consume(r);
 407     }
 408 
 409     @Benchmark
 410     public void XOR(Blackhole bh) {
 411         int[] a = fa.apply(SPECIES.length());
 412         int[] b = fb.apply(SPECIES.length());
 413         int[] r = fr.apply(SPECIES.length());
 414 
 415         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 416             for (int i = 0; i < a.length; i += SPECIES.length()) {
 417                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 418                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 419                 av.lanewise(VectorOperators.XOR, bv).intoArray(r, i);
 420             }
 421         }
 422 
 423         bh.consume(r);
 424     }
 425 
 426     @Benchmark
 427     public void XORMasked(Blackhole bh) {
 428         int[] a = fa.apply(SPECIES.length());
 429         int[] b = fb.apply(SPECIES.length());
 430         int[] r = fr.apply(SPECIES.length());
 431         boolean[] mask = fm.apply(SPECIES.length());
 432         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 433 
 434         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 435             for (int i = 0; i < a.length; i += SPECIES.length()) {
 436                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 437                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 438                 av.lanewise(VectorOperators.XOR, bv, vmask).intoArray(r, i);
 439             }
 440         }
 441 
 442         bh.consume(r);
 443     }
 444 
 445     @Benchmark
 446     public void COMPRESS_BITS(Blackhole bh) {
 447         int[] a = fa.apply(SPECIES.length());
 448         int[] b = fb.apply(SPECIES.length());
 449         int[] r = fr.apply(SPECIES.length());
 450 
 451         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 452             for (int i = 0; i < a.length; i += SPECIES.length()) {
 453                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 454                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 455                 av.lanewise(VectorOperators.COMPRESS_BITS, bv).intoArray(r, i);
 456             }
 457         }
 458 
 459         bh.consume(r);
 460     }
 461 
 462     @Benchmark
 463     public void COMPRESS_BITSMasked(Blackhole bh) {
 464         int[] a = fa.apply(SPECIES.length());
 465         int[] b = fb.apply(SPECIES.length());
 466         int[] r = fr.apply(SPECIES.length());
 467         boolean[] mask = fm.apply(SPECIES.length());
 468         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 469 
 470         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 471             for (int i = 0; i < a.length; i += SPECIES.length()) {
 472                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 473                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 474                 av.lanewise(VectorOperators.COMPRESS_BITS, bv, vmask).intoArray(r, i);
 475             }
 476         }
 477 
 478         bh.consume(r);
 479     }
 480 
 481     @Benchmark
 482     public void EXPAND_BITS(Blackhole bh) {
 483         int[] a = fa.apply(SPECIES.length());
 484         int[] b = fb.apply(SPECIES.length());
 485         int[] r = fr.apply(SPECIES.length());
 486 
 487         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 488             for (int i = 0; i < a.length; i += SPECIES.length()) {
 489                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 490                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 491                 av.lanewise(VectorOperators.EXPAND_BITS, bv).intoArray(r, i);
 492             }
 493         }
 494 
 495         bh.consume(r);
 496     }
 497 
 498     @Benchmark
 499     public void EXPAND_BITSMasked(Blackhole bh) {
 500         int[] a = fa.apply(SPECIES.length());
 501         int[] b = fb.apply(SPECIES.length());
 502         int[] r = fr.apply(SPECIES.length());
 503         boolean[] mask = fm.apply(SPECIES.length());
 504         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 505 
 506         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 507             for (int i = 0; i < a.length; i += SPECIES.length()) {
 508                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 509                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 510                 av.lanewise(VectorOperators.EXPAND_BITS, bv, vmask).intoArray(r, i);
 511             }
 512         }
 513 
 514         bh.consume(r);
 515     }
 516 
 517     @Benchmark
 518     public void LSHL(Blackhole bh) {
 519         int[] a = fa.apply(SPECIES.length());
 520         int[] b = fb.apply(SPECIES.length());
 521         int[] r = fr.apply(SPECIES.length());
 522 
 523         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 524             for (int i = 0; i < a.length; i += SPECIES.length()) {
 525                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 526                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 527                 av.lanewise(VectorOperators.LSHL, bv).intoArray(r, i);
 528             }
 529         }
 530 
 531         bh.consume(r);
 532     }
 533 
 534     @Benchmark
 535     public void LSHLMasked(Blackhole bh) {
 536         int[] a = fa.apply(SPECIES.length());
 537         int[] b = fb.apply(SPECIES.length());
 538         int[] r = fr.apply(SPECIES.length());
 539         boolean[] mask = fm.apply(SPECIES.length());
 540         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 541 
 542         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 543             for (int i = 0; i < a.length; i += SPECIES.length()) {
 544                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 545                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 546                 av.lanewise(VectorOperators.LSHL, bv, vmask).intoArray(r, i);
 547             }
 548         }
 549 
 550         bh.consume(r);
 551     }
 552 
 553     @Benchmark
 554     public void ASHR(Blackhole bh) {
 555         int[] a = fa.apply(SPECIES.length());
 556         int[] b = fb.apply(SPECIES.length());
 557         int[] r = fr.apply(SPECIES.length());
 558 
 559         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 560             for (int i = 0; i < a.length; i += SPECIES.length()) {
 561                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 562                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 563                 av.lanewise(VectorOperators.ASHR, bv).intoArray(r, i);
 564             }
 565         }
 566 
 567         bh.consume(r);
 568     }
 569 
 570     @Benchmark
 571     public void ASHRMasked(Blackhole bh) {
 572         int[] a = fa.apply(SPECIES.length());
 573         int[] b = fb.apply(SPECIES.length());
 574         int[] r = fr.apply(SPECIES.length());
 575         boolean[] mask = fm.apply(SPECIES.length());
 576         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 577 
 578         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 579             for (int i = 0; i < a.length; i += SPECIES.length()) {
 580                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 581                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 582                 av.lanewise(VectorOperators.ASHR, bv, vmask).intoArray(r, i);
 583             }
 584         }
 585 
 586         bh.consume(r);
 587     }
 588 
 589     @Benchmark
 590     public void LSHR(Blackhole bh) {
 591         int[] a = fa.apply(SPECIES.length());
 592         int[] b = fb.apply(SPECIES.length());
 593         int[] r = fr.apply(SPECIES.length());
 594 
 595         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 596             for (int i = 0; i < a.length; i += SPECIES.length()) {
 597                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 598                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 599                 av.lanewise(VectorOperators.LSHR, bv).intoArray(r, i);
 600             }
 601         }
 602 
 603         bh.consume(r);
 604     }
 605 
 606     @Benchmark
 607     public void LSHRMasked(Blackhole bh) {
 608         int[] a = fa.apply(SPECIES.length());
 609         int[] b = fb.apply(SPECIES.length());
 610         int[] r = fr.apply(SPECIES.length());
 611         boolean[] mask = fm.apply(SPECIES.length());
 612         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 613 
 614         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 615             for (int i = 0; i < a.length; i += SPECIES.length()) {
 616                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 617                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 618                 av.lanewise(VectorOperators.LSHR, bv, vmask).intoArray(r, i);
 619             }
 620         }
 621 
 622         bh.consume(r);
 623     }
 624 
 625     @Benchmark
 626     public void LSHLShift(Blackhole bh) {
 627         int[] a = fa.apply(SPECIES.length());
 628         int[] b = fb.apply(SPECIES.length());
 629         int[] r = fr.apply(SPECIES.length());
 630 
 631         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 632             for (int i = 0; i < a.length; i += SPECIES.length()) {
 633                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 634                 av.lanewise(VectorOperators.LSHL, (int)b[i]).intoArray(r, i);
 635             }
 636         }
 637 
 638         bh.consume(r);
 639     }
 640 
 641     @Benchmark
 642     public void LSHLMaskedShift(Blackhole bh) {
 643         int[] a = fa.apply(SPECIES.length());
 644         int[] b = fb.apply(SPECIES.length());
 645         int[] r = fr.apply(SPECIES.length());
 646         boolean[] mask = fm.apply(SPECIES.length());
 647         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 648 
 649         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 650             for (int i = 0; i < a.length; i += SPECIES.length()) {
 651                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 652                 av.lanewise(VectorOperators.LSHL, (int)b[i], vmask).intoArray(r, i);
 653             }
 654         }
 655 
 656         bh.consume(r);
 657     }
 658 
 659     @Benchmark
 660     public void LSHRShift(Blackhole bh) {
 661         int[] a = fa.apply(SPECIES.length());
 662         int[] b = fb.apply(SPECIES.length());
 663         int[] r = fr.apply(SPECIES.length());
 664 
 665         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 666             for (int i = 0; i < a.length; i += SPECIES.length()) {
 667                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 668                 av.lanewise(VectorOperators.LSHR, (int)b[i]).intoArray(r, i);
 669             }
 670         }
 671 
 672         bh.consume(r);
 673     }
 674 
 675     @Benchmark
 676     public void LSHRMaskedShift(Blackhole bh) {
 677         int[] a = fa.apply(SPECIES.length());
 678         int[] b = fb.apply(SPECIES.length());
 679         int[] r = fr.apply(SPECIES.length());
 680         boolean[] mask = fm.apply(SPECIES.length());
 681         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 682 
 683         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 684             for (int i = 0; i < a.length; i += SPECIES.length()) {
 685                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 686                 av.lanewise(VectorOperators.LSHR, (int)b[i], vmask).intoArray(r, i);
 687             }
 688         }
 689 
 690         bh.consume(r);
 691     }
 692 
 693     @Benchmark
 694     public void ASHRShift(Blackhole bh) {
 695         int[] a = fa.apply(SPECIES.length());
 696         int[] b = fb.apply(SPECIES.length());
 697         int[] r = fr.apply(SPECIES.length());
 698 
 699         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 700             for (int i = 0; i < a.length; i += SPECIES.length()) {
 701                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 702                 av.lanewise(VectorOperators.ASHR, (int)b[i]).intoArray(r, i);
 703             }
 704         }
 705 
 706         bh.consume(r);
 707     }
 708 
 709     @Benchmark
 710     public void ASHRMaskedShift(Blackhole bh) {
 711         int[] a = fa.apply(SPECIES.length());
 712         int[] b = fb.apply(SPECIES.length());
 713         int[] r = fr.apply(SPECIES.length());
 714         boolean[] mask = fm.apply(SPECIES.length());
 715         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 716 
 717         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 718             for (int i = 0; i < a.length; i += SPECIES.length()) {
 719                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 720                 av.lanewise(VectorOperators.ASHR, (int)b[i], vmask).intoArray(r, i);
 721             }
 722         }
 723 
 724         bh.consume(r);
 725     }
 726 
 727     @Benchmark
 728     public void ROR(Blackhole bh) {
 729         int[] a = fa.apply(SPECIES.length());
 730         int[] b = fb.apply(SPECIES.length());
 731         int[] r = fr.apply(SPECIES.length());
 732 
 733         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 734             for (int i = 0; i < a.length; i += SPECIES.length()) {
 735                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 736                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 737                 av.lanewise(VectorOperators.ROR, bv).intoArray(r, i);
 738             }
 739         }
 740 
 741         bh.consume(r);
 742     }
 743 
 744     @Benchmark
 745     public void RORMasked(Blackhole bh) {
 746         int[] a = fa.apply(SPECIES.length());
 747         int[] b = fb.apply(SPECIES.length());
 748         int[] r = fr.apply(SPECIES.length());
 749         boolean[] mask = fm.apply(SPECIES.length());
 750         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 751 
 752         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 753             for (int i = 0; i < a.length; i += SPECIES.length()) {
 754                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 755                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 756                 av.lanewise(VectorOperators.ROR, bv, vmask).intoArray(r, i);
 757             }
 758         }
 759 
 760         bh.consume(r);
 761     }
 762 
 763     @Benchmark
 764     public void ROL(Blackhole bh) {
 765         int[] a = fa.apply(SPECIES.length());
 766         int[] b = fb.apply(SPECIES.length());
 767         int[] r = fr.apply(SPECIES.length());
 768 
 769         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 770             for (int i = 0; i < a.length; i += SPECIES.length()) {
 771                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 772                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 773                 av.lanewise(VectorOperators.ROL, bv).intoArray(r, i);
 774             }
 775         }
 776 
 777         bh.consume(r);
 778     }
 779 
 780     @Benchmark
 781     public void ROLMasked(Blackhole bh) {
 782         int[] a = fa.apply(SPECIES.length());
 783         int[] b = fb.apply(SPECIES.length());
 784         int[] r = fr.apply(SPECIES.length());
 785         boolean[] mask = fm.apply(SPECIES.length());
 786         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 787 
 788         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 789             for (int i = 0; i < a.length; i += SPECIES.length()) {
 790                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 791                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
 792                 av.lanewise(VectorOperators.ROL, bv, vmask).intoArray(r, i);
 793             }
 794         }
 795 
 796         bh.consume(r);
 797     }
 798 
 799     @Benchmark
 800     public void RORShift(Blackhole bh) {
 801         int[] a = fa.apply(SPECIES.length());
 802         int[] b = fb.apply(SPECIES.length());
 803         int[] r = fr.apply(SPECIES.length());
 804 
 805         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 806             for (int i = 0; i < a.length; i += SPECIES.length()) {
 807                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 808                 av.lanewise(VectorOperators.ROR, (int)b[i]).intoArray(r, i);
 809             }
 810         }
 811 
 812         bh.consume(r);
 813     }
 814 
 815     @Benchmark
 816     public void RORMaskedShift(Blackhole bh) {
 817         int[] a = fa.apply(SPECIES.length());
 818         int[] b = fb.apply(SPECIES.length());
 819         int[] r = fr.apply(SPECIES.length());
 820         boolean[] mask = fm.apply(SPECIES.length());
 821         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 822 
 823         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 824             for (int i = 0; i < a.length; i += SPECIES.length()) {
 825                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 826                 av.lanewise(VectorOperators.ROR, (int)b[i], vmask).intoArray(r, i);
 827             }
 828         }
 829 
 830         bh.consume(r);
 831     }
 832 
 833     @Benchmark
 834     public void ROLShift(Blackhole bh) {
 835         int[] a = fa.apply(SPECIES.length());
 836         int[] b = fb.apply(SPECIES.length());
 837         int[] r = fr.apply(SPECIES.length());
 838 
 839         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 840             for (int i = 0; i < a.length; i += SPECIES.length()) {
 841                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 842                 av.lanewise(VectorOperators.ROL, (int)b[i]).intoArray(r, i);
 843             }
 844         }
 845 
 846         bh.consume(r);
 847     }
 848 
 849     @Benchmark
 850     public void ROLMaskedShift(Blackhole bh) {
 851         int[] a = fa.apply(SPECIES.length());
 852         int[] b = fb.apply(SPECIES.length());
 853         int[] r = fr.apply(SPECIES.length());
 854         boolean[] mask = fm.apply(SPECIES.length());
 855         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 856 
 857         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 858             for (int i = 0; i < a.length; i += SPECIES.length()) {
 859                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 860                 av.lanewise(VectorOperators.ROL, (int)b[i], vmask).intoArray(r, i);
 861             }
 862         }
 863 
 864         bh.consume(r);
 865     }
 866 
 867     @Benchmark
 868     public void LSHRShiftConst(Blackhole bh) {
 869         int[] a = fa.apply(SPECIES.length());
 870         int[] r = fr.apply(SPECIES.length());
 871 
 872         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 873             for (int i = 0; i < a.length; i += SPECIES.length()) {
 874                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 875                 av.lanewise(VectorOperators.LSHR, CONST_SHIFT).intoArray(r, i);
 876             }
 877         }
 878 
 879         bh.consume(r);
 880     }
 881 
 882     @Benchmark
 883     public void LSHRMaskedShiftConst(Blackhole bh) {
 884         int[] a = fa.apply(SPECIES.length());
 885         int[] r = fr.apply(SPECIES.length());
 886         boolean[] mask = fm.apply(SPECIES.length());
 887         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 888 
 889         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 890             for (int i = 0; i < a.length; i += SPECIES.length()) {
 891                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 892                 av.lanewise(VectorOperators.LSHR, CONST_SHIFT, vmask).intoArray(r, i);
 893             }
 894         }
 895 
 896         bh.consume(r);
 897     }
 898 
 899     @Benchmark
 900     public void LSHLShiftConst(Blackhole bh) {
 901         int[] a = fa.apply(SPECIES.length());
 902         int[] r = fr.apply(SPECIES.length());
 903 
 904         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 905             for (int i = 0; i < a.length; i += SPECIES.length()) {
 906                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 907                 av.lanewise(VectorOperators.LSHL, CONST_SHIFT).intoArray(r, i);
 908             }
 909         }
 910 
 911         bh.consume(r);
 912     }
 913 
 914     @Benchmark
 915     public void LSHLMaskedShiftConst(Blackhole bh) {
 916         int[] a = fa.apply(SPECIES.length());
 917         int[] r = fr.apply(SPECIES.length());
 918         boolean[] mask = fm.apply(SPECIES.length());
 919         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 920 
 921         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 922             for (int i = 0; i < a.length; i += SPECIES.length()) {
 923                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 924                 av.lanewise(VectorOperators.LSHL, CONST_SHIFT, vmask).intoArray(r, i);
 925             }
 926         }
 927 
 928         bh.consume(r);
 929     }
 930 
 931     @Benchmark
 932     public void ASHRShiftConst(Blackhole bh) {
 933         int[] a = fa.apply(SPECIES.length());
 934         int[] r = fr.apply(SPECIES.length());
 935 
 936         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 937             for (int i = 0; i < a.length; i += SPECIES.length()) {
 938                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 939                 av.lanewise(VectorOperators.ASHR, CONST_SHIFT).intoArray(r, i);
 940             }
 941         }
 942 
 943         bh.consume(r);
 944     }
 945 
 946     @Benchmark
 947     public void ASHRMaskedShiftConst(Blackhole bh) {
 948         int[] a = fa.apply(SPECIES.length());
 949         int[] r = fr.apply(SPECIES.length());
 950         boolean[] mask = fm.apply(SPECIES.length());
 951         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 952 
 953         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 954             for (int i = 0; i < a.length; i += SPECIES.length()) {
 955                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 956                 av.lanewise(VectorOperators.ASHR, CONST_SHIFT, vmask).intoArray(r, i);
 957             }
 958         }
 959 
 960         bh.consume(r);
 961     }
 962 
 963     @Benchmark
 964     public void RORShiftConst(Blackhole bh) {
 965         int[] a = fa.apply(SPECIES.length());
 966         int[] r = fr.apply(SPECIES.length());
 967 
 968         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 969             for (int i = 0; i < a.length; i += SPECIES.length()) {
 970                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 971                 av.lanewise(VectorOperators.ROR, CONST_SHIFT).intoArray(r, i);
 972             }
 973         }
 974 
 975         bh.consume(r);
 976     }
 977 
 978     @Benchmark
 979     public void RORMaskedShiftConst(Blackhole bh) {
 980         int[] a = fa.apply(SPECIES.length());
 981         int[] r = fr.apply(SPECIES.length());
 982         boolean[] mask = fm.apply(SPECIES.length());
 983         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 984 
 985         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 986             for (int i = 0; i < a.length; i += SPECIES.length()) {
 987                 IntVector av = IntVector.fromArray(SPECIES, a, i);
 988                 av.lanewise(VectorOperators.ROR, CONST_SHIFT, vmask).intoArray(r, i);
 989             }
 990         }
 991 
 992         bh.consume(r);
 993     }
 994 
 995     @Benchmark
 996     public void ROLShiftConst(Blackhole bh) {
 997         int[] a = fa.apply(SPECIES.length());
 998         int[] r = fr.apply(SPECIES.length());
 999 
1000         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1001             for (int i = 0; i < a.length; i += SPECIES.length()) {
1002                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1003                 av.lanewise(VectorOperators.ROL, CONST_SHIFT).intoArray(r, i);
1004             }
1005         }
1006 
1007         bh.consume(r);
1008     }
1009 
1010     @Benchmark
1011     public void ROLMaskedShiftConst(Blackhole bh) {
1012         int[] a = fa.apply(SPECIES.length());
1013         int[] r = fr.apply(SPECIES.length());
1014         boolean[] mask = fm.apply(SPECIES.length());
1015         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1016 
1017         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1018             for (int i = 0; i < a.length; i += SPECIES.length()) {
1019                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1020                 av.lanewise(VectorOperators.ROL, CONST_SHIFT, vmask).intoArray(r, i);
1021             }
1022         }
1023 
1024         bh.consume(r);
1025     }
1026 
1027     @Benchmark
1028     public void MIN(Blackhole bh) {
1029         int[] a = fa.apply(SPECIES.length());
1030         int[] b = fb.apply(SPECIES.length());
1031         int[] r = fr.apply(SPECIES.length());
1032 
1033         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1034             for (int i = 0; i < a.length; i += SPECIES.length()) {
1035                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1036                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1037                 av.lanewise(VectorOperators.MIN, bv).intoArray(r, i);
1038             }
1039         }
1040 
1041         bh.consume(r);
1042     }
1043 
1044     @Benchmark
1045     public void MAX(Blackhole bh) {
1046         int[] a = fa.apply(SPECIES.length());
1047         int[] b = fb.apply(SPECIES.length());
1048         int[] r = fr.apply(SPECIES.length());
1049 
1050         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1051             for (int i = 0; i < a.length; i += SPECIES.length()) {
1052                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1053                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1054                 av.lanewise(VectorOperators.MAX, bv).intoArray(r, i);
1055             }
1056         }
1057 
1058         bh.consume(r);
1059     }
1060 
1061     @Benchmark
1062     public void UMIN(Blackhole bh) {
1063         int[] a = fa.apply(SPECIES.length());
1064         int[] b = fb.apply(SPECIES.length());
1065         int[] r = fr.apply(SPECIES.length());
1066 
1067         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1068             for (int i = 0; i < a.length; i += SPECIES.length()) {
1069                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1070                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1071                 av.lanewise(VectorOperators.UMIN, bv).intoArray(r, i);
1072             }
1073         }
1074 
1075         bh.consume(r);
1076     }
1077 
1078     @Benchmark
1079     public void UMINMasked(Blackhole bh) {
1080         int[] a = fa.apply(SPECIES.length());
1081         int[] b = fb.apply(SPECIES.length());
1082         int[] r = fr.apply(SPECIES.length());
1083         boolean[] mask = fm.apply(SPECIES.length());
1084         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1085 
1086         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1087             for (int i = 0; i < a.length; i += SPECIES.length()) {
1088                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1089                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1090                 av.lanewise(VectorOperators.UMIN, bv, vmask).intoArray(r, i);
1091             }
1092         }
1093 
1094         bh.consume(r);
1095     }
1096 
1097     @Benchmark
1098     public void UMAX(Blackhole bh) {
1099         int[] a = fa.apply(SPECIES.length());
1100         int[] b = fb.apply(SPECIES.length());
1101         int[] r = fr.apply(SPECIES.length());
1102 
1103         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1104             for (int i = 0; i < a.length; i += SPECIES.length()) {
1105                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1106                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1107                 av.lanewise(VectorOperators.UMAX, bv).intoArray(r, i);
1108             }
1109         }
1110 
1111         bh.consume(r);
1112     }
1113 
1114     @Benchmark
1115     public void UMAXMasked(Blackhole bh) {
1116         int[] a = fa.apply(SPECIES.length());
1117         int[] b = fb.apply(SPECIES.length());
1118         int[] r = fr.apply(SPECIES.length());
1119         boolean[] mask = fm.apply(SPECIES.length());
1120         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1121 
1122         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1123             for (int i = 0; i < a.length; i += SPECIES.length()) {
1124                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1125                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1126                 av.lanewise(VectorOperators.UMAX, bv, vmask).intoArray(r, i);
1127             }
1128         }
1129 
1130         bh.consume(r);
1131     }
1132 
1133     @Benchmark
1134     public void SADD(Blackhole bh) {
1135         int[] a = fa.apply(SPECIES.length());
1136         int[] b = fb.apply(SPECIES.length());
1137         int[] r = fr.apply(SPECIES.length());
1138 
1139         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1140             for (int i = 0; i < a.length; i += SPECIES.length()) {
1141                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1142                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1143                 av.lanewise(VectorOperators.SADD, bv).intoArray(r, i);
1144             }
1145         }
1146 
1147         bh.consume(r);
1148     }
1149 
1150     @Benchmark
1151     public void SADDMasked(Blackhole bh) {
1152         int[] a = fa.apply(SPECIES.length());
1153         int[] b = fb.apply(SPECIES.length());
1154         int[] r = fr.apply(SPECIES.length());
1155         boolean[] mask = fm.apply(SPECIES.length());
1156         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1157 
1158         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1159             for (int i = 0; i < a.length; i += SPECIES.length()) {
1160                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1161                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1162                 av.lanewise(VectorOperators.SADD, bv, vmask).intoArray(r, i);
1163             }
1164         }
1165 
1166         bh.consume(r);
1167     }
1168 
1169     @Benchmark
1170     public void SSUB(Blackhole bh) {
1171         int[] a = fa.apply(SPECIES.length());
1172         int[] b = fb.apply(SPECIES.length());
1173         int[] r = fr.apply(SPECIES.length());
1174 
1175         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1176             for (int i = 0; i < a.length; i += SPECIES.length()) {
1177                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1178                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1179                 av.lanewise(VectorOperators.SSUB, bv).intoArray(r, i);
1180             }
1181         }
1182 
1183         bh.consume(r);
1184     }
1185 
1186     @Benchmark
1187     public void SSUBMasked(Blackhole bh) {
1188         int[] a = fa.apply(SPECIES.length());
1189         int[] b = fb.apply(SPECIES.length());
1190         int[] r = fr.apply(SPECIES.length());
1191         boolean[] mask = fm.apply(SPECIES.length());
1192         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1193 
1194         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1195             for (int i = 0; i < a.length; i += SPECIES.length()) {
1196                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1197                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1198                 av.lanewise(VectorOperators.SSUB, bv, vmask).intoArray(r, i);
1199             }
1200         }
1201 
1202         bh.consume(r);
1203     }
1204 
1205     @Benchmark
1206     public void SUADD(Blackhole bh) {
1207         int[] a = fa.apply(SPECIES.length());
1208         int[] b = fb.apply(SPECIES.length());
1209         int[] r = fr.apply(SPECIES.length());
1210 
1211         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1212             for (int i = 0; i < a.length; i += SPECIES.length()) {
1213                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1214                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1215                 av.lanewise(VectorOperators.SUADD, bv).intoArray(r, i);
1216             }
1217         }
1218 
1219         bh.consume(r);
1220     }
1221 
1222     @Benchmark
1223     public void SUADDMasked(Blackhole bh) {
1224         int[] a = fa.apply(SPECIES.length());
1225         int[] b = fb.apply(SPECIES.length());
1226         int[] r = fr.apply(SPECIES.length());
1227         boolean[] mask = fm.apply(SPECIES.length());
1228         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1229 
1230         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1231             for (int i = 0; i < a.length; i += SPECIES.length()) {
1232                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1233                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1234                 av.lanewise(VectorOperators.SUADD, bv, vmask).intoArray(r, i);
1235             }
1236         }
1237 
1238         bh.consume(r);
1239     }
1240 
1241     @Benchmark
1242     public void SUSUB(Blackhole bh) {
1243         int[] a = fa.apply(SPECIES.length());
1244         int[] b = fb.apply(SPECIES.length());
1245         int[] r = fr.apply(SPECIES.length());
1246 
1247         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1248             for (int i = 0; i < a.length; i += SPECIES.length()) {
1249                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1250                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1251                 av.lanewise(VectorOperators.SUSUB, bv).intoArray(r, i);
1252             }
1253         }
1254 
1255         bh.consume(r);
1256     }
1257 
1258     @Benchmark
1259     public void SUSUBMasked(Blackhole bh) {
1260         int[] a = fa.apply(SPECIES.length());
1261         int[] b = fb.apply(SPECIES.length());
1262         int[] r = fr.apply(SPECIES.length());
1263         boolean[] mask = fm.apply(SPECIES.length());
1264         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1265 
1266         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1267             for (int i = 0; i < a.length; i += SPECIES.length()) {
1268                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1269                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1270                 av.lanewise(VectorOperators.SUSUB, bv, vmask).intoArray(r, i);
1271             }
1272         }
1273 
1274         bh.consume(r);
1275     }
1276 
1277     @Benchmark
1278     public void ANDLanes(Blackhole bh) {
1279         int[] a = fa.apply(SPECIES.length());
1280         int ra = -1;
1281 
1282         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1283             ra = -1;
1284             for (int i = 0; i < a.length; i += SPECIES.length()) {
1285                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1286                 ra &= av.reduceLanes(VectorOperators.AND);
1287             }
1288         }
1289         bh.consume(ra);
1290     }
1291 
1292     @Benchmark
1293     public void ANDMaskedLanes(Blackhole bh) {
1294         int[] a = fa.apply(SPECIES.length());
1295         boolean[] mask = fm.apply(SPECIES.length());
1296         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1297         int ra = -1;
1298 
1299         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1300             ra = -1;
1301             for (int i = 0; i < a.length; i += SPECIES.length()) {
1302                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1303                 ra &= av.reduceLanes(VectorOperators.AND, vmask);
1304             }
1305         }
1306         bh.consume(ra);
1307     }
1308 
1309     @Benchmark
1310     public void ORLanes(Blackhole bh) {
1311         int[] a = fa.apply(SPECIES.length());
1312         int ra = 0;
1313 
1314         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1315             ra = 0;
1316             for (int i = 0; i < a.length; i += SPECIES.length()) {
1317                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1318                 ra |= av.reduceLanes(VectorOperators.OR);
1319             }
1320         }
1321         bh.consume(ra);
1322     }
1323 
1324     @Benchmark
1325     public void ORMaskedLanes(Blackhole bh) {
1326         int[] a = fa.apply(SPECIES.length());
1327         boolean[] mask = fm.apply(SPECIES.length());
1328         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1329         int ra = 0;
1330 
1331         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1332             ra = 0;
1333             for (int i = 0; i < a.length; i += SPECIES.length()) {
1334                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1335                 ra |= av.reduceLanes(VectorOperators.OR, vmask);
1336             }
1337         }
1338         bh.consume(ra);
1339     }
1340 
1341     @Benchmark
1342     public void XORLanes(Blackhole bh) {
1343         int[] a = fa.apply(SPECIES.length());
1344         int ra = 0;
1345 
1346         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1347             ra = 0;
1348             for (int i = 0; i < a.length; i += SPECIES.length()) {
1349                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1350                 ra ^= av.reduceLanes(VectorOperators.XOR);
1351             }
1352         }
1353         bh.consume(ra);
1354     }
1355 
1356     @Benchmark
1357     public void XORMaskedLanes(Blackhole bh) {
1358         int[] a = fa.apply(SPECIES.length());
1359         boolean[] mask = fm.apply(SPECIES.length());
1360         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1361         int ra = 0;
1362 
1363         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1364             ra = 0;
1365             for (int i = 0; i < a.length; i += SPECIES.length()) {
1366                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1367                 ra ^= av.reduceLanes(VectorOperators.XOR, vmask);
1368             }
1369         }
1370         bh.consume(ra);
1371     }
1372 
1373     @Benchmark
1374     public void ADDLanes(Blackhole bh) {
1375         int[] a = fa.apply(SPECIES.length());
1376         int ra = 0;
1377 
1378         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1379             ra = 0;
1380             for (int i = 0; i < a.length; i += SPECIES.length()) {
1381                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1382                 ra += av.reduceLanes(VectorOperators.ADD);
1383             }
1384         }
1385         bh.consume(ra);
1386     }
1387 
1388     @Benchmark
1389     public void ADDMaskedLanes(Blackhole bh) {
1390         int[] a = fa.apply(SPECIES.length());
1391         boolean[] mask = fm.apply(SPECIES.length());
1392         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1393         int ra = 0;
1394 
1395         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1396             ra = 0;
1397             for (int i = 0; i < a.length; i += SPECIES.length()) {
1398                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1399                 ra += av.reduceLanes(VectorOperators.ADD, vmask);
1400             }
1401         }
1402         bh.consume(ra);
1403     }
1404 
1405     @Benchmark
1406     public void MULLanes(Blackhole bh) {
1407         int[] a = fa.apply(SPECIES.length());
1408         int ra = 1;
1409 
1410         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1411             ra = 1;
1412             for (int i = 0; i < a.length; i += SPECIES.length()) {
1413                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1414                 ra *= av.reduceLanes(VectorOperators.MUL);
1415             }
1416         }
1417         bh.consume(ra);
1418     }
1419 
1420     @Benchmark
1421     public void MULMaskedLanes(Blackhole bh) {
1422         int[] a = fa.apply(SPECIES.length());
1423         boolean[] mask = fm.apply(SPECIES.length());
1424         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1425         int ra = 1;
1426 
1427         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1428             ra = 1;
1429             for (int i = 0; i < a.length; i += SPECIES.length()) {
1430                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1431                 ra *= av.reduceLanes(VectorOperators.MUL, vmask);
1432             }
1433         }
1434         bh.consume(ra);
1435     }
1436 
1437     @Benchmark
1438     public void MINLanes(Blackhole bh) {
1439         int[] a = fa.apply(SPECIES.length());
1440         int ra = Integer.MAX_VALUE;
1441 
1442         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1443             ra = Integer.MAX_VALUE;
1444             for (int i = 0; i < a.length; i += SPECIES.length()) {
1445                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1446                 ra = (int) Math.min(ra, av.reduceLanes(VectorOperators.MIN));
1447             }
1448         }
1449         bh.consume(ra);
1450     }
1451 
1452     @Benchmark
1453     public void MINMaskedLanes(Blackhole bh) {
1454         int[] a = fa.apply(SPECIES.length());
1455         boolean[] mask = fm.apply(SPECIES.length());
1456         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1457         int ra = Integer.MAX_VALUE;
1458 
1459         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1460             ra = Integer.MAX_VALUE;
1461             for (int i = 0; i < a.length; i += SPECIES.length()) {
1462                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1463                 ra = (int) Math.min(ra, av.reduceLanes(VectorOperators.MIN, vmask));
1464             }
1465         }
1466         bh.consume(ra);
1467     }
1468 
1469     @Benchmark
1470     public void MAXLanes(Blackhole bh) {
1471         int[] a = fa.apply(SPECIES.length());
1472         int ra = Integer.MIN_VALUE;
1473 
1474         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1475             ra = Integer.MIN_VALUE;
1476             for (int i = 0; i < a.length; i += SPECIES.length()) {
1477                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1478                 ra = (int) Math.max(ra, av.reduceLanes(VectorOperators.MAX));
1479             }
1480         }
1481         bh.consume(ra);
1482     }
1483 
1484     @Benchmark
1485     public void MAXMaskedLanes(Blackhole bh) {
1486         int[] a = fa.apply(SPECIES.length());
1487         boolean[] mask = fm.apply(SPECIES.length());
1488         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1489         int ra = Integer.MIN_VALUE;
1490 
1491         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1492             ra = Integer.MIN_VALUE;
1493             for (int i = 0; i < a.length; i += SPECIES.length()) {
1494                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1495                 ra = (int) Math.max(ra, av.reduceLanes(VectorOperators.MAX, vmask));
1496             }
1497         }
1498         bh.consume(ra);
1499     }
1500 
1501     @Benchmark
1502     public void FIRST_NONZEROLanes(Blackhole bh) {
1503         int[] a = fa.apply(SPECIES.length());
1504         int ra = (int) 0;
1505 
1506         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1507             ra = (int) 0;
1508             for (int i = 0; i < a.length; i += SPECIES.length()) {
1509                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1510                 ra = firstNonZero(ra, av.reduceLanes(VectorOperators.FIRST_NONZERO));
1511             }
1512         }
1513         bh.consume(ra);
1514     }
1515 
1516     @Benchmark
1517     public void FIRST_NONZEROMaskedLanes(Blackhole bh) {
1518         int[] a = fa.apply(SPECIES.length());
1519         boolean[] mask = fm.apply(SPECIES.length());
1520         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1521         int ra = (int) 0;
1522 
1523         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1524             ra = (int) 0;
1525             for (int i = 0; i < a.length; i += SPECIES.length()) {
1526                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1527                 ra = firstNonZero(ra, av.reduceLanes(VectorOperators.FIRST_NONZERO, vmask));
1528             }
1529         }
1530         bh.consume(ra);
1531     }
1532 
1533     @Benchmark
1534     public void anyTrue(Blackhole bh) {
1535         boolean[] mask = fm.apply(SPECIES.length());
1536         boolean[] r = fmr.apply(SPECIES.length());
1537 
1538         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1539             for (int i = 0; i < mask.length; i += SPECIES.length()) {
1540                 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, i);
1541                 r[i] = vmask.anyTrue();
1542             }
1543         }
1544 
1545         bh.consume(r);
1546     }
1547 
1548     @Benchmark
1549     public void allTrue(Blackhole bh) {
1550         boolean[] mask = fm.apply(SPECIES.length());
1551         boolean[] r = fmr.apply(SPECIES.length());
1552 
1553         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1554             for (int i = 0; i < mask.length; i += SPECIES.length()) {
1555                 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, i);
1556                 r[i] = vmask.allTrue();
1557             }
1558         }
1559 
1560         bh.consume(r);
1561     }
1562 
1563     @Benchmark
1564     public void withLane(Blackhole bh) {
1565         int[] a = fa.apply(SPECIES.length());
1566         int[] b = fb.apply(SPECIES.length());
1567         int[] r = fr.apply(SPECIES.length());
1568 
1569         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1570             for (int i = 0, j = 0; i < a.length; i += SPECIES.length()) {
1571                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1572                 av.withLane(j, b[i + j]).intoArray(r, i);
1573                 a[i + j] = b[i + j];
1574                 j = (j + 1) & (SPECIES.length() - 1);
1575             }
1576         }
1577 
1578         bh.consume(r);
1579     }
1580 
1581     @Benchmark
1582     public Object IS_DEFAULT() {
1583         int[] a = fa.apply(size);
1584         boolean[] ms = fmt.apply(size);
1585         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1586 
1587         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1588             for (int i = 0; i < a.length; i += SPECIES.length()) {
1589                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1590 
1591                 // accumulate results, so JIT can't eliminate relevant computations
1592                 m = m.and(av.test(VectorOperators.IS_DEFAULT));
1593             }
1594         }
1595 
1596         return m;
1597     }
1598 
1599     @Benchmark
1600     public Object IS_NEGATIVE() {
1601         int[] a = fa.apply(size);
1602         boolean[] ms = fmt.apply(size);
1603         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1604 
1605         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1606             for (int i = 0; i < a.length; i += SPECIES.length()) {
1607                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1608 
1609                 // accumulate results, so JIT can't eliminate relevant computations
1610                 m = m.and(av.test(VectorOperators.IS_NEGATIVE));
1611             }
1612         }
1613 
1614         return m;
1615     }
1616     @Benchmark
1617     public Object LT() {
1618         int[] a = fa.apply(size);
1619         int[] b = fb.apply(size);
1620         boolean[] ms = fmt.apply(size);
1621         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1622 
1623         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1624             for (int i = 0; i < a.length; i += SPECIES.length()) {
1625                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1626                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1627 
1628                 // accumulate results, so JIT can't eliminate relevant computations
1629                 m = m.and(av.compare(VectorOperators.LT, bv));
1630             }
1631         }
1632 
1633         return m;
1634     }
1635     @Benchmark
1636     public Object GT() {
1637         int[] a = fa.apply(size);
1638         int[] b = fb.apply(size);
1639         boolean[] ms = fmt.apply(size);
1640         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1641 
1642         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1643             for (int i = 0; i < a.length; i += SPECIES.length()) {
1644                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1645                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1646 
1647                 // accumulate results, so JIT can't eliminate relevant computations
1648                 m = m.and(av.compare(VectorOperators.GT, bv));
1649             }
1650         }
1651 
1652         return m;
1653     }
1654     @Benchmark
1655     public Object EQ() {
1656         int[] a = fa.apply(size);
1657         int[] b = fb.apply(size);
1658         boolean[] ms = fmt.apply(size);
1659         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1660 
1661         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1662             for (int i = 0; i < a.length; i += SPECIES.length()) {
1663                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1664                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1665 
1666                 // accumulate results, so JIT can't eliminate relevant computations
1667                 m = m.and(av.compare(VectorOperators.EQ, bv));
1668             }
1669         }
1670 
1671         return m;
1672     }
1673     @Benchmark
1674     public Object NE() {
1675         int[] a = fa.apply(size);
1676         int[] b = fb.apply(size);
1677         boolean[] ms = fmt.apply(size);
1678         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1679 
1680         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1681             for (int i = 0; i < a.length; i += SPECIES.length()) {
1682                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1683                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1684 
1685                 // accumulate results, so JIT can't eliminate relevant computations
1686                 m = m.and(av.compare(VectorOperators.NE, bv));
1687             }
1688         }
1689 
1690         return m;
1691     }
1692     @Benchmark
1693     public Object LE() {
1694         int[] a = fa.apply(size);
1695         int[] b = fb.apply(size);
1696         boolean[] ms = fmt.apply(size);
1697         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1698 
1699         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1700             for (int i = 0; i < a.length; i += SPECIES.length()) {
1701                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1702                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1703 
1704                 // accumulate results, so JIT can't eliminate relevant computations
1705                 m = m.and(av.compare(VectorOperators.LE, bv));
1706             }
1707         }
1708 
1709         return m;
1710     }
1711     @Benchmark
1712     public Object GE() {
1713         int[] a = fa.apply(size);
1714         int[] b = fb.apply(size);
1715         boolean[] ms = fmt.apply(size);
1716         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1717 
1718         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1719             for (int i = 0; i < a.length; i += SPECIES.length()) {
1720                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1721                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1722 
1723                 // accumulate results, so JIT can't eliminate relevant computations
1724                 m = m.and(av.compare(VectorOperators.GE, bv));
1725             }
1726         }
1727 
1728         return m;
1729     }
1730     @Benchmark
1731     public Object ULT() {
1732         int[] a = fa.apply(size);
1733         int[] b = fb.apply(size);
1734         boolean[] ms = fmt.apply(size);
1735         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1736 
1737         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1738             for (int i = 0; i < a.length; i += SPECIES.length()) {
1739                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1740                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1741 
1742                 // accumulate results, so JIT can't eliminate relevant computations
1743                 m = m.and(av.compare(VectorOperators.ULT, bv));
1744             }
1745         }
1746 
1747         return m;
1748     }
1749     @Benchmark
1750     public Object UGT() {
1751         int[] a = fa.apply(size);
1752         int[] b = fb.apply(size);
1753         boolean[] ms = fmt.apply(size);
1754         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1755 
1756         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1757             for (int i = 0; i < a.length; i += SPECIES.length()) {
1758                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1759                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1760 
1761                 // accumulate results, so JIT can't eliminate relevant computations
1762                 m = m.and(av.compare(VectorOperators.UGT, bv));
1763             }
1764         }
1765 
1766         return m;
1767     }
1768     @Benchmark
1769     public Object ULE() {
1770         int[] a = fa.apply(size);
1771         int[] b = fb.apply(size);
1772         boolean[] ms = fmt.apply(size);
1773         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1774 
1775         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1776             for (int i = 0; i < a.length; i += SPECIES.length()) {
1777                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1778                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1779 
1780                 // accumulate results, so JIT can't eliminate relevant computations
1781                 m = m.and(av.compare(VectorOperators.ULE, bv));
1782             }
1783         }
1784 
1785         return m;
1786     }
1787     @Benchmark
1788     public Object UGE() {
1789         int[] a = fa.apply(size);
1790         int[] b = fb.apply(size);
1791         boolean[] ms = fmt.apply(size);
1792         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1793 
1794         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1795             for (int i = 0; i < a.length; i += SPECIES.length()) {
1796                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1797                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1798 
1799                 // accumulate results, so JIT can't eliminate relevant computations
1800                 m = m.and(av.compare(VectorOperators.UGE, bv));
1801             }
1802         }
1803 
1804         return m;
1805     }
1806 
1807     @Benchmark
1808     public void blend(Blackhole bh) {
1809         int[] a = fa.apply(SPECIES.length());
1810         int[] b = fb.apply(SPECIES.length());
1811         int[] r = fr.apply(SPECIES.length());
1812         boolean[] mask = fm.apply(SPECIES.length());
1813         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1814 
1815         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1816             for (int i = 0; i < a.length; i += SPECIES.length()) {
1817                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1818                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1819                 av.blend(bv, vmask).intoArray(r, i);
1820             }
1821         }
1822 
1823         bh.consume(r);
1824     }
1825 
1826     @Benchmark
1827     public void rearrange(Blackhole bh) {
1828         int[] a = fa.apply(SPECIES.length());
1829         int[] order = fs.apply(a.length, SPECIES.length());
1830         int[] r = fr.apply(SPECIES.length());
1831 
1832         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1833             for (int i = 0; i < a.length; i += SPECIES.length()) {
1834                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1835                 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);
1836             }
1837         }
1838 
1839         bh.consume(r);
1840     }
1841     @Benchmark
1842     public Object compress() {
1843         int[] a = fa.apply(size);
1844         int[] r = fb.apply(size);
1845         boolean[] ms = fmt.apply(size);
1846         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1847 
1848         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1849             for (int i = 0; i < a.length; i += SPECIES.length()) {
1850                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1851                 av.compress(m).intoArray(r, i);
1852             }
1853         }
1854 
1855         return r;
1856     }
1857 
1858     @Benchmark
1859     public Object expand() {
1860         int[] a = fa.apply(size);
1861         int[] r = fb.apply(size);
1862         boolean[] ms = fmt.apply(size);
1863         VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, 0);
1864 
1865         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1866             for (int i = 0; i < a.length; i += SPECIES.length()) {
1867                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1868                 av.expand(m).intoArray(r, i);
1869             }
1870         }
1871 
1872         return r;
1873     }
1874 
1875     @Benchmark
1876     public Object maskCompress() {
1877         boolean[] ms = fmt.apply(size);
1878         boolean[] rs = fmt.apply(size);
1879 
1880         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1881             for (int i = 0, j = 0; i < ms.length; i += SPECIES.length()) {
1882                 VectorMask<Integer> m = VectorMask.fromArray(SPECIES, ms, i);
1883                 m.compress().intoArray(rs, j);
1884                 j += m.trueCount();
1885             }
1886         }
1887 
1888         return rs;
1889     }
1890 
1891     @Benchmark
1892     public void laneextract(Blackhole bh) {
1893         int[] a = fa.apply(SPECIES.length());
1894         int[] r = fr.apply(SPECIES.length());
1895 
1896         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1897             for (int i = 0; i < a.length; i += SPECIES.length()) {
1898                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1899                 int num_lanes = SPECIES.length();
1900                 // Manually unroll because full unroll happens after intrinsification.
1901                 // Unroll is needed because get intrinsic requires for index to be a known constant.
1902                 if (num_lanes == 1) {
1903                     r[i]=av.lane(0);
1904                 } else if (num_lanes == 2) {
1905                     r[i]=av.lane(0);
1906                     r[i+1]=av.lane(1);
1907                 } else if (num_lanes == 4) {
1908                     r[i]=av.lane(0);
1909                     r[i+1]=av.lane(1);
1910                     r[i+2]=av.lane(2);
1911                     r[i+3]=av.lane(3);
1912                 } else if (num_lanes == 8) {
1913                     r[i]=av.lane(0);
1914                     r[i+1]=av.lane(1);
1915                     r[i+2]=av.lane(2);
1916                     r[i+3]=av.lane(3);
1917                     r[i+4]=av.lane(4);
1918                     r[i+5]=av.lane(5);
1919                     r[i+6]=av.lane(6);
1920                     r[i+7]=av.lane(7);
1921                 } else if (num_lanes == 16) {
1922                     r[i]=av.lane(0);
1923                     r[i+1]=av.lane(1);
1924                     r[i+2]=av.lane(2);
1925                     r[i+3]=av.lane(3);
1926                     r[i+4]=av.lane(4);
1927                     r[i+5]=av.lane(5);
1928                     r[i+6]=av.lane(6);
1929                     r[i+7]=av.lane(7);
1930                     r[i+8]=av.lane(8);
1931                     r[i+9]=av.lane(9);
1932                     r[i+10]=av.lane(10);
1933                     r[i+11]=av.lane(11);
1934                     r[i+12]=av.lane(12);
1935                     r[i+13]=av.lane(13);
1936                     r[i+14]=av.lane(14);
1937                     r[i+15]=av.lane(15);
1938                 } else if (num_lanes == 32) {
1939                     r[i]=av.lane(0);
1940                     r[i+1]=av.lane(1);
1941                     r[i+2]=av.lane(2);
1942                     r[i+3]=av.lane(3);
1943                     r[i+4]=av.lane(4);
1944                     r[i+5]=av.lane(5);
1945                     r[i+6]=av.lane(6);
1946                     r[i+7]=av.lane(7);
1947                     r[i+8]=av.lane(8);
1948                     r[i+9]=av.lane(9);
1949                     r[i+10]=av.lane(10);
1950                     r[i+11]=av.lane(11);
1951                     r[i+12]=av.lane(12);
1952                     r[i+13]=av.lane(13);
1953                     r[i+14]=av.lane(14);
1954                     r[i+15]=av.lane(15);
1955                     r[i+16]=av.lane(16);
1956                     r[i+17]=av.lane(17);
1957                     r[i+18]=av.lane(18);
1958                     r[i+19]=av.lane(19);
1959                     r[i+20]=av.lane(20);
1960                     r[i+21]=av.lane(21);
1961                     r[i+22]=av.lane(22);
1962                     r[i+23]=av.lane(23);
1963                     r[i+24]=av.lane(24);
1964                     r[i+25]=av.lane(25);
1965                     r[i+26]=av.lane(26);
1966                     r[i+27]=av.lane(27);
1967                     r[i+28]=av.lane(28);
1968                     r[i+29]=av.lane(29);
1969                     r[i+30]=av.lane(30);
1970                     r[i+31]=av.lane(31);
1971                 } else if (num_lanes == 64) {
1972                     r[i]=av.lane(0);
1973                     r[i+1]=av.lane(1);
1974                     r[i+2]=av.lane(2);
1975                     r[i+3]=av.lane(3);
1976                     r[i+4]=av.lane(4);
1977                     r[i+5]=av.lane(5);
1978                     r[i+6]=av.lane(6);
1979                     r[i+7]=av.lane(7);
1980                     r[i+8]=av.lane(8);
1981                     r[i+9]=av.lane(9);
1982                     r[i+10]=av.lane(10);
1983                     r[i+11]=av.lane(11);
1984                     r[i+12]=av.lane(12);
1985                     r[i+13]=av.lane(13);
1986                     r[i+14]=av.lane(14);
1987                     r[i+15]=av.lane(15);
1988                     r[i+16]=av.lane(16);
1989                     r[i+17]=av.lane(17);
1990                     r[i+18]=av.lane(18);
1991                     r[i+19]=av.lane(19);
1992                     r[i+20]=av.lane(20);
1993                     r[i+21]=av.lane(21);
1994                     r[i+22]=av.lane(22);
1995                     r[i+23]=av.lane(23);
1996                     r[i+24]=av.lane(24);
1997                     r[i+25]=av.lane(25);
1998                     r[i+26]=av.lane(26);
1999                     r[i+27]=av.lane(27);
2000                     r[i+28]=av.lane(28);
2001                     r[i+29]=av.lane(29);
2002                     r[i+30]=av.lane(30);
2003                     r[i+31]=av.lane(31);
2004                     r[i+32]=av.lane(32);
2005                     r[i+33]=av.lane(33);
2006                     r[i+34]=av.lane(34);
2007                     r[i+35]=av.lane(35);
2008                     r[i+36]=av.lane(36);
2009                     r[i+37]=av.lane(37);
2010                     r[i+38]=av.lane(38);
2011                     r[i+39]=av.lane(39);
2012                     r[i+40]=av.lane(40);
2013                     r[i+41]=av.lane(41);
2014                     r[i+42]=av.lane(42);
2015                     r[i+43]=av.lane(43);
2016                     r[i+44]=av.lane(44);
2017                     r[i+45]=av.lane(45);
2018                     r[i+46]=av.lane(46);
2019                     r[i+47]=av.lane(47);
2020                     r[i+48]=av.lane(48);
2021                     r[i+49]=av.lane(49);
2022                     r[i+50]=av.lane(50);
2023                     r[i+51]=av.lane(51);
2024                     r[i+52]=av.lane(52);
2025                     r[i+53]=av.lane(53);
2026                     r[i+54]=av.lane(54);
2027                     r[i+55]=av.lane(55);
2028                     r[i+56]=av.lane(56);
2029                     r[i+57]=av.lane(57);
2030                     r[i+58]=av.lane(58);
2031                     r[i+59]=av.lane(59);
2032                     r[i+60]=av.lane(60);
2033                     r[i+61]=av.lane(61);
2034                     r[i+62]=av.lane(62);
2035                     r[i+63]=av.lane(63);
2036                 } else {
2037                     for (int j = 0; j < SPECIES.length(); j++) {
2038                         r[i+j]=av.lane(j);
2039                     }
2040                 }
2041             }
2042         }
2043 
2044         bh.consume(r);
2045     }
2046 
2047     @Benchmark
2048     public void broadcast(Blackhole bh) {
2049         int[] a = fa.apply(SPECIES.length());
2050         int[] r = new int[a.length];
2051 
2052         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2053             for (int i = 0; i < a.length; i += SPECIES.length()) {
2054                 IntVector.broadcast(SPECIES, a[i]).intoArray(r, i);
2055             }
2056         }
2057 
2058         bh.consume(r);
2059     }
2060 
2061     @Benchmark
2062     public void zero(Blackhole bh) {
2063         int[] a = fa.apply(SPECIES.length());
2064         int[] r = new int[a.length];
2065 
2066         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2067             for (int i = 0; i < a.length; i += SPECIES.length()) {
2068                 IntVector.zero(SPECIES).intoArray(a, i);
2069             }
2070         }
2071 
2072         bh.consume(r);
2073     }
2074 
2075     @Benchmark
2076     public void sliceUnary(Blackhole bh) {
2077         int[] a = fa.apply(SPECIES.length());
2078         int[] r = new int[a.length];
2079         int origin = RAND.nextInt(SPECIES.length());
2080         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2081             for (int i = 0; i < a.length; i += SPECIES.length()) {
2082                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2083                 av.slice(origin).intoArray(r, i);
2084             }
2085         }
2086 
2087         bh.consume(r);
2088     }
2089 
2090     @Benchmark
2091     public void sliceBinary(Blackhole bh) {
2092         int[] a = fa.apply(SPECIES.length());
2093         int[] b = fb.apply(SPECIES.length());
2094         int[] r = new int[a.length];
2095         int origin = RAND.nextInt(SPECIES.length());
2096         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2097             for (int i = 0; i < a.length; i += SPECIES.length()) {
2098                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2099                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
2100                 av.slice(origin, bv).intoArray(r, i);
2101             }
2102         }
2103 
2104         bh.consume(r);
2105     }
2106 
2107     @Benchmark
2108     public void sliceMasked(Blackhole bh) {
2109         int[] a = fa.apply(SPECIES.length());
2110         int[] b = fb.apply(SPECIES.length());
2111         boolean[] mask = fm.apply(SPECIES.length());
2112         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2113 
2114         int[] r = new int[a.length];
2115         int origin = RAND.nextInt(SPECIES.length());
2116         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2117             for (int i = 0; i < a.length; i += SPECIES.length()) {
2118                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2119                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
2120                 av.slice(origin, bv, vmask).intoArray(r, i);
2121             }
2122         }
2123 
2124         bh.consume(r);
2125     }
2126 
2127     @Benchmark
2128     public void unsliceUnary(Blackhole bh) {
2129         int[] a = fa.apply(SPECIES.length());
2130         int[] r = new int[a.length];
2131         int origin = RAND.nextInt(SPECIES.length());
2132         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2133             for (int i = 0; i < a.length; i += SPECIES.length()) {
2134                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2135                 av.unslice(origin).intoArray(r, i);
2136             }
2137         }
2138 
2139         bh.consume(r);
2140     }
2141 
2142     @Benchmark
2143     public void unsliceBinary(Blackhole bh) {
2144         int[] a = fa.apply(SPECIES.length());
2145         int[] b = fb.apply(SPECIES.length());
2146         int[] r = new int[a.length];
2147         int origin = RAND.nextInt(SPECIES.length());
2148         int part = RAND.nextInt(2);
2149         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2150             for (int i = 0; i < a.length; i += SPECIES.length()) {
2151                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2152                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
2153                 av.unslice(origin, bv, part).intoArray(r, i);
2154             }
2155         }
2156 
2157         bh.consume(r);
2158     }
2159 
2160     @Benchmark
2161     public void unsliceMasked(Blackhole bh) {
2162         int[] a = fa.apply(SPECIES.length());
2163         int[] b = fb.apply(SPECIES.length());
2164         boolean[] mask = fm.apply(SPECIES.length());
2165         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2166         int[] r = new int[a.length];
2167         int origin = RAND.nextInt(SPECIES.length());
2168         int part = RAND.nextInt(2);
2169         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2170             for (int i = 0; i < a.length; i += SPECIES.length()) {
2171                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2172                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
2173                 av.unslice(origin, bv, part, vmask).intoArray(r, i);
2174             }
2175         }
2176 
2177         bh.consume(r);
2178     }
2179 
2180     @Benchmark
2181     public void BITWISE_BLEND(Blackhole bh) {
2182         int[] a = fa.apply(SPECIES.length());
2183         int[] b = fb.apply(SPECIES.length());
2184         int[] c = fc.apply(SPECIES.length());
2185         int[] r = fr.apply(SPECIES.length());
2186 
2187         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2188             for (int i = 0; i < a.length; i += SPECIES.length()) {
2189                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2190                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
2191                 IntVector cv = IntVector.fromArray(SPECIES, c, i);
2192                 av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv).intoArray(r, i);
2193             }
2194         }
2195 
2196         bh.consume(r);
2197     }
2198 
2199     @Benchmark
2200     public void BITWISE_BLENDMasked(Blackhole bh) {
2201         int[] a = fa.apply(SPECIES.length());
2202         int[] b = fb.apply(SPECIES.length());
2203         int[] c = fc.apply(SPECIES.length());
2204         int[] r = fr.apply(SPECIES.length());
2205         boolean[] mask = fm.apply(SPECIES.length());
2206         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2207 
2208         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2209             for (int i = 0; i < a.length; i += SPECIES.length()) {
2210                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2211                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
2212                 IntVector cv = IntVector.fromArray(SPECIES, c, i);
2213                 av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv, vmask).intoArray(r, i);
2214             }
2215         }
2216 
2217         bh.consume(r);
2218     }
2219 
2220     @Benchmark
2221     public void NEG(Blackhole bh) {
2222         int[] a = fa.apply(SPECIES.length());
2223         int[] r = fr.apply(SPECIES.length());
2224 
2225         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2226             for (int i = 0; i < a.length; i += SPECIES.length()) {
2227                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2228                 av.lanewise(VectorOperators.NEG).intoArray(r, i);
2229             }
2230         }
2231 
2232         bh.consume(r);
2233     }
2234 
2235     @Benchmark
2236     public void NEGMasked(Blackhole bh) {
2237         int[] a = fa.apply(SPECIES.length());
2238         int[] r = fr.apply(SPECIES.length());
2239         boolean[] mask = fm.apply(SPECIES.length());
2240         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2241 
2242         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2243             for (int i = 0; i < a.length; i += SPECIES.length()) {
2244                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2245                 av.lanewise(VectorOperators.NEG, vmask).intoArray(r, i);
2246             }
2247         }
2248 
2249         bh.consume(r);
2250     }
2251 
2252     @Benchmark
2253     public void ABS(Blackhole bh) {
2254         int[] a = fa.apply(SPECIES.length());
2255         int[] r = fr.apply(SPECIES.length());
2256 
2257         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2258             for (int i = 0; i < a.length; i += SPECIES.length()) {
2259                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2260                 av.lanewise(VectorOperators.ABS).intoArray(r, i);
2261             }
2262         }
2263 
2264         bh.consume(r);
2265     }
2266 
2267     @Benchmark
2268     public void ABSMasked(Blackhole bh) {
2269         int[] a = fa.apply(SPECIES.length());
2270         int[] r = fr.apply(SPECIES.length());
2271         boolean[] mask = fm.apply(SPECIES.length());
2272         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2273 
2274         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2275             for (int i = 0; i < a.length; i += SPECIES.length()) {
2276                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2277                 av.lanewise(VectorOperators.ABS, vmask).intoArray(r, i);
2278             }
2279         }
2280 
2281         bh.consume(r);
2282     }
2283 
2284     @Benchmark
2285     public void NOT(Blackhole bh) {
2286         int[] a = fa.apply(SPECIES.length());
2287         int[] r = fr.apply(SPECIES.length());
2288 
2289         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2290             for (int i = 0; i < a.length; i += SPECIES.length()) {
2291                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2292                 av.lanewise(VectorOperators.NOT).intoArray(r, i);
2293             }
2294         }
2295 
2296         bh.consume(r);
2297     }
2298 
2299     @Benchmark
2300     public void NOTMasked(Blackhole bh) {
2301         int[] a = fa.apply(SPECIES.length());
2302         int[] r = fr.apply(SPECIES.length());
2303         boolean[] mask = fm.apply(SPECIES.length());
2304         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2305 
2306         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2307             for (int i = 0; i < a.length; i += SPECIES.length()) {
2308                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2309                 av.lanewise(VectorOperators.NOT, vmask).intoArray(r, i);
2310             }
2311         }
2312 
2313         bh.consume(r);
2314     }
2315 
2316     @Benchmark
2317     public void ZOMO(Blackhole bh) {
2318         int[] a = fa.apply(SPECIES.length());
2319         int[] r = fr.apply(SPECIES.length());
2320 
2321         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2322             for (int i = 0; i < a.length; i += SPECIES.length()) {
2323                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2324                 av.lanewise(VectorOperators.ZOMO).intoArray(r, i);
2325             }
2326         }
2327 
2328         bh.consume(r);
2329     }
2330 
2331     @Benchmark
2332     public void ZOMOMasked(Blackhole bh) {
2333         int[] a = fa.apply(SPECIES.length());
2334         int[] r = fr.apply(SPECIES.length());
2335         boolean[] mask = fm.apply(SPECIES.length());
2336         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2337 
2338         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2339             for (int i = 0; i < a.length; i += SPECIES.length()) {
2340                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2341                 av.lanewise(VectorOperators.ZOMO, vmask).intoArray(r, i);
2342             }
2343         }
2344 
2345         bh.consume(r);
2346     }
2347 
2348     @Benchmark
2349     public void BIT_COUNT(Blackhole bh) {
2350         int[] a = fa.apply(SPECIES.length());
2351         int[] r = fr.apply(SPECIES.length());
2352 
2353         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2354             for (int i = 0; i < a.length; i += SPECIES.length()) {
2355                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2356                 av.lanewise(VectorOperators.BIT_COUNT).intoArray(r, i);
2357             }
2358         }
2359 
2360         bh.consume(r);
2361     }
2362 
2363     @Benchmark
2364     public void BIT_COUNTMasked(Blackhole bh) {
2365         int[] a = fa.apply(SPECIES.length());
2366         int[] r = fr.apply(SPECIES.length());
2367         boolean[] mask = fm.apply(SPECIES.length());
2368         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2369 
2370         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2371             for (int i = 0; i < a.length; i += SPECIES.length()) {
2372                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2373                 av.lanewise(VectorOperators.BIT_COUNT, vmask).intoArray(r, i);
2374             }
2375         }
2376 
2377         bh.consume(r);
2378     }
2379 
2380     @Benchmark
2381     public void TRAILING_ZEROS_COUNT(Blackhole bh) {
2382         int[] a = fa.apply(SPECIES.length());
2383         int[] r = fr.apply(SPECIES.length());
2384 
2385         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2386             for (int i = 0; i < a.length; i += SPECIES.length()) {
2387                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2388                 av.lanewise(VectorOperators.TRAILING_ZEROS_COUNT).intoArray(r, i);
2389             }
2390         }
2391 
2392         bh.consume(r);
2393     }
2394 
2395     @Benchmark
2396     public void TRAILING_ZEROS_COUNTMasked(Blackhole bh) {
2397         int[] a = fa.apply(SPECIES.length());
2398         int[] r = fr.apply(SPECIES.length());
2399         boolean[] mask = fm.apply(SPECIES.length());
2400         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2401 
2402         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2403             for (int i = 0; i < a.length; i += SPECIES.length()) {
2404                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2405                 av.lanewise(VectorOperators.TRAILING_ZEROS_COUNT, vmask).intoArray(r, i);
2406             }
2407         }
2408 
2409         bh.consume(r);
2410     }
2411 
2412     @Benchmark
2413     public void LEADING_ZEROS_COUNT(Blackhole bh) {
2414         int[] a = fa.apply(SPECIES.length());
2415         int[] r = fr.apply(SPECIES.length());
2416 
2417         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2418             for (int i = 0; i < a.length; i += SPECIES.length()) {
2419                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2420                 av.lanewise(VectorOperators.LEADING_ZEROS_COUNT).intoArray(r, i);
2421             }
2422         }
2423 
2424         bh.consume(r);
2425     }
2426 
2427     @Benchmark
2428     public void LEADING_ZEROS_COUNTMasked(Blackhole bh) {
2429         int[] a = fa.apply(SPECIES.length());
2430         int[] r = fr.apply(SPECIES.length());
2431         boolean[] mask = fm.apply(SPECIES.length());
2432         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2433 
2434         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2435             for (int i = 0; i < a.length; i += SPECIES.length()) {
2436                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2437                 av.lanewise(VectorOperators.LEADING_ZEROS_COUNT, vmask).intoArray(r, i);
2438             }
2439         }
2440 
2441         bh.consume(r);
2442     }
2443 
2444     @Benchmark
2445     public void REVERSE(Blackhole bh) {
2446         int[] a = fa.apply(SPECIES.length());
2447         int[] r = fr.apply(SPECIES.length());
2448 
2449         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2450             for (int i = 0; i < a.length; i += SPECIES.length()) {
2451                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2452                 av.lanewise(VectorOperators.REVERSE).intoArray(r, i);
2453             }
2454         }
2455 
2456         bh.consume(r);
2457     }
2458 
2459     @Benchmark
2460     public void REVERSEMasked(Blackhole bh) {
2461         int[] a = fa.apply(SPECIES.length());
2462         int[] r = fr.apply(SPECIES.length());
2463         boolean[] mask = fm.apply(SPECIES.length());
2464         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2465 
2466         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2467             for (int i = 0; i < a.length; i += SPECIES.length()) {
2468                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2469                 av.lanewise(VectorOperators.REVERSE, vmask).intoArray(r, i);
2470             }
2471         }
2472 
2473         bh.consume(r);
2474     }
2475 
2476     @Benchmark
2477     public void REVERSE_BYTES(Blackhole bh) {
2478         int[] a = fa.apply(SPECIES.length());
2479         int[] r = fr.apply(SPECIES.length());
2480 
2481         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2482             for (int i = 0; i < a.length; i += SPECIES.length()) {
2483                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2484                 av.lanewise(VectorOperators.REVERSE_BYTES).intoArray(r, i);
2485             }
2486         }
2487 
2488         bh.consume(r);
2489     }
2490 
2491     @Benchmark
2492     public void REVERSE_BYTESMasked(Blackhole bh) {
2493         int[] a = fa.apply(SPECIES.length());
2494         int[] r = fr.apply(SPECIES.length());
2495         boolean[] mask = fm.apply(SPECIES.length());
2496         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2497 
2498         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2499             for (int i = 0; i < a.length; i += SPECIES.length()) {
2500                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2501                 av.lanewise(VectorOperators.REVERSE_BYTES, vmask).intoArray(r, i);
2502             }
2503         }
2504 
2505         bh.consume(r);
2506     }
2507 }