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.ShortVector;
  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 ShortMaxVector extends AbstractVectorBenchmark {
  50     static final VectorSpecies<Short> SPECIES = ShortVector.SPECIES_MAX;
  51 
  52     static final int INVOC_COUNT = 1; // get rid of outer loop
  53 
  54     static void replaceZero(short[] a, short 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(short[] a, boolean[] mask, short 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 short firstNonZero(short a, short b) {
  71         return Short.compare(a, (short) 0) != 0 ? a : b;
  72     }
  73 
  74     private static final short CONST_SHIFT = Short.SIZE / 2;
  75 
  76     @Param("1024")
  77     int size;
  78 
  79     short[] fill(IntFunction<Short> f) {
  80         short[] array = new short[size];
  81         for (int i = 0; i < array.length; i++) {
  82             array[i] = f.apply(i);
  83         }
  84         return array;
  85     }
  86 
  87     short[] 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 -> (short)(2*i));
  96         b = fill(i -> (short)(i+1));
  97         c = fill(i -> (short)(i+5));
  98         r = fill(i -> (short)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<short[]> fa = vl -> a;
 108     final IntFunction<short[]> fb = vl -> b;
 109     final IntFunction<short[]> fc = vl -> c;
 110     final IntFunction<short[]> 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         short[] a = fa.apply(SPECIES.length());
 120         short[] b = fb.apply(SPECIES.length());
 121         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 126                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 137         short[] b = fb.apply(SPECIES.length());
 138         short[] r = fr.apply(SPECIES.length());
 139         boolean[] mask = fm.apply(SPECIES.length());
 140         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 145                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 156         short[] b = fb.apply(SPECIES.length());
 157         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 162                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 173         short[] b = fb.apply(SPECIES.length());
 174         short[] r = fr.apply(SPECIES.length());
 175         boolean[] mask = fm.apply(SPECIES.length());
 176         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 181                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 192         short[] b = fb.apply(SPECIES.length());
 193         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 198                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 209         short[] b = fb.apply(SPECIES.length());
 210         short[] r = fr.apply(SPECIES.length());
 211         boolean[] mask = fm.apply(SPECIES.length());
 212         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 217                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 228         short[] b = fb.apply(SPECIES.length());
 229         short[] r = fr.apply(SPECIES.length());
 230 
 231         replaceZero(b, (short) 1);
 232 
 233         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 234             for (int i = 0; i < a.length; i += SPECIES.length()) {
 235                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 236                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 247         short[] b = fb.apply(SPECIES.length());
 248         short[] r = fr.apply(SPECIES.length());
 249         boolean[] mask = fm.apply(SPECIES.length());
 250         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 251 
 252         replaceZero(b, mask, (short) 1);
 253 
 254         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 255             for (int i = 0; i < a.length; i += SPECIES.length()) {
 256                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 257                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 268         short[] b = fb.apply(SPECIES.length());
 269         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 274                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 285         short[] b = fb.apply(SPECIES.length());
 286         short[] r = fr.apply(SPECIES.length());
 287         boolean[] mask = fm.apply(SPECIES.length());
 288         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 293                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 304         short[] b = fb.apply(SPECIES.length());
 305         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 310                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 321         short[] b = fb.apply(SPECIES.length());
 322         short[] r = fr.apply(SPECIES.length());
 323         boolean[] mask = fm.apply(SPECIES.length());
 324         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 329                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 340         short[] b = fb.apply(SPECIES.length());
 341         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 346                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 357         short[] b = fb.apply(SPECIES.length());
 358         short[] r = fr.apply(SPECIES.length());
 359         boolean[] mask = fm.apply(SPECIES.length());
 360         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 365                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 376         short[] b = fb.apply(SPECIES.length());
 377         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 382                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 393         short[] b = fb.apply(SPECIES.length());
 394         short[] r = fr.apply(SPECIES.length());
 395         boolean[] mask = fm.apply(SPECIES.length());
 396         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 401                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 412         short[] b = fb.apply(SPECIES.length());
 413         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 418                 ShortVector bv = ShortVector.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         short[] a = fa.apply(SPECIES.length());
 429         short[] b = fb.apply(SPECIES.length());
 430         short[] r = fr.apply(SPECIES.length());
 431         boolean[] mask = fm.apply(SPECIES.length());
 432         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 437                 ShortVector bv = ShortVector.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 LSHL(Blackhole bh) {
 447         short[] a = fa.apply(SPECIES.length());
 448         short[] b = fb.apply(SPECIES.length());
 449         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 454                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 455                 av.lanewise(VectorOperators.LSHL, bv).intoArray(r, i);
 456             }
 457         }
 458 
 459         bh.consume(r);
 460     }
 461 
 462     @Benchmark
 463     public void LSHLMasked(Blackhole bh) {
 464         short[] a = fa.apply(SPECIES.length());
 465         short[] b = fb.apply(SPECIES.length());
 466         short[] r = fr.apply(SPECIES.length());
 467         boolean[] mask = fm.apply(SPECIES.length());
 468         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 473                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 474                 av.lanewise(VectorOperators.LSHL, bv, vmask).intoArray(r, i);
 475             }
 476         }
 477 
 478         bh.consume(r);
 479     }
 480 
 481     @Benchmark
 482     public void ASHR(Blackhole bh) {
 483         short[] a = fa.apply(SPECIES.length());
 484         short[] b = fb.apply(SPECIES.length());
 485         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 490                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 491                 av.lanewise(VectorOperators.ASHR, bv).intoArray(r, i);
 492             }
 493         }
 494 
 495         bh.consume(r);
 496     }
 497 
 498     @Benchmark
 499     public void ASHRMasked(Blackhole bh) {
 500         short[] a = fa.apply(SPECIES.length());
 501         short[] b = fb.apply(SPECIES.length());
 502         short[] r = fr.apply(SPECIES.length());
 503         boolean[] mask = fm.apply(SPECIES.length());
 504         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 509                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 510                 av.lanewise(VectorOperators.ASHR, bv, vmask).intoArray(r, i);
 511             }
 512         }
 513 
 514         bh.consume(r);
 515     }
 516 
 517     @Benchmark
 518     public void LSHR(Blackhole bh) {
 519         short[] a = fa.apply(SPECIES.length());
 520         short[] b = fb.apply(SPECIES.length());
 521         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 526                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 527                 av.lanewise(VectorOperators.LSHR, bv).intoArray(r, i);
 528             }
 529         }
 530 
 531         bh.consume(r);
 532     }
 533 
 534     @Benchmark
 535     public void LSHRMasked(Blackhole bh) {
 536         short[] a = fa.apply(SPECIES.length());
 537         short[] b = fb.apply(SPECIES.length());
 538         short[] r = fr.apply(SPECIES.length());
 539         boolean[] mask = fm.apply(SPECIES.length());
 540         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 545                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 546                 av.lanewise(VectorOperators.LSHR, bv, vmask).intoArray(r, i);
 547             }
 548         }
 549 
 550         bh.consume(r);
 551     }
 552 
 553     @Benchmark
 554     public void LSHLShift(Blackhole bh) {
 555         short[] a = fa.apply(SPECIES.length());
 556         short[] b = fb.apply(SPECIES.length());
 557         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 562                 av.lanewise(VectorOperators.LSHL, (int)b[i]).intoArray(r, i);
 563             }
 564         }
 565 
 566         bh.consume(r);
 567     }
 568 
 569     @Benchmark
 570     public void LSHLMaskedShift(Blackhole bh) {
 571         short[] a = fa.apply(SPECIES.length());
 572         short[] b = fb.apply(SPECIES.length());
 573         short[] r = fr.apply(SPECIES.length());
 574         boolean[] mask = fm.apply(SPECIES.length());
 575         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 576 
 577         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 578             for (int i = 0; i < a.length; i += SPECIES.length()) {
 579                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 580                 av.lanewise(VectorOperators.LSHL, (int)b[i], vmask).intoArray(r, i);
 581             }
 582         }
 583 
 584         bh.consume(r);
 585     }
 586 
 587     @Benchmark
 588     public void LSHRShift(Blackhole bh) {
 589         short[] a = fa.apply(SPECIES.length());
 590         short[] b = fb.apply(SPECIES.length());
 591         short[] r = fr.apply(SPECIES.length());
 592 
 593         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 594             for (int i = 0; i < a.length; i += SPECIES.length()) {
 595                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 596                 av.lanewise(VectorOperators.LSHR, (int)b[i]).intoArray(r, i);
 597             }
 598         }
 599 
 600         bh.consume(r);
 601     }
 602 
 603     @Benchmark
 604     public void LSHRMaskedShift(Blackhole bh) {
 605         short[] a = fa.apply(SPECIES.length());
 606         short[] b = fb.apply(SPECIES.length());
 607         short[] r = fr.apply(SPECIES.length());
 608         boolean[] mask = fm.apply(SPECIES.length());
 609         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 610 
 611         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 612             for (int i = 0; i < a.length; i += SPECIES.length()) {
 613                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 614                 av.lanewise(VectorOperators.LSHR, (int)b[i], vmask).intoArray(r, i);
 615             }
 616         }
 617 
 618         bh.consume(r);
 619     }
 620 
 621     @Benchmark
 622     public void ASHRShift(Blackhole bh) {
 623         short[] a = fa.apply(SPECIES.length());
 624         short[] b = fb.apply(SPECIES.length());
 625         short[] r = fr.apply(SPECIES.length());
 626 
 627         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 628             for (int i = 0; i < a.length; i += SPECIES.length()) {
 629                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 630                 av.lanewise(VectorOperators.ASHR, (int)b[i]).intoArray(r, i);
 631             }
 632         }
 633 
 634         bh.consume(r);
 635     }
 636 
 637     @Benchmark
 638     public void ASHRMaskedShift(Blackhole bh) {
 639         short[] a = fa.apply(SPECIES.length());
 640         short[] b = fb.apply(SPECIES.length());
 641         short[] r = fr.apply(SPECIES.length());
 642         boolean[] mask = fm.apply(SPECIES.length());
 643         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 644 
 645         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 646             for (int i = 0; i < a.length; i += SPECIES.length()) {
 647                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 648                 av.lanewise(VectorOperators.ASHR, (int)b[i], vmask).intoArray(r, i);
 649             }
 650         }
 651 
 652         bh.consume(r);
 653     }
 654 
 655     @Benchmark
 656     public void ROR(Blackhole bh) {
 657         short[] a = fa.apply(SPECIES.length());
 658         short[] b = fb.apply(SPECIES.length());
 659         short[] r = fr.apply(SPECIES.length());
 660 
 661         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 662             for (int i = 0; i < a.length; i += SPECIES.length()) {
 663                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 664                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 665                 av.lanewise(VectorOperators.ROR, bv).intoArray(r, i);
 666             }
 667         }
 668 
 669         bh.consume(r);
 670     }
 671 
 672     @Benchmark
 673     public void RORMasked(Blackhole bh) {
 674         short[] a = fa.apply(SPECIES.length());
 675         short[] b = fb.apply(SPECIES.length());
 676         short[] r = fr.apply(SPECIES.length());
 677         boolean[] mask = fm.apply(SPECIES.length());
 678         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 679 
 680         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 681             for (int i = 0; i < a.length; i += SPECIES.length()) {
 682                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 683                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 684                 av.lanewise(VectorOperators.ROR, bv, vmask).intoArray(r, i);
 685             }
 686         }
 687 
 688         bh.consume(r);
 689     }
 690 
 691     @Benchmark
 692     public void ROL(Blackhole bh) {
 693         short[] a = fa.apply(SPECIES.length());
 694         short[] b = fb.apply(SPECIES.length());
 695         short[] r = fr.apply(SPECIES.length());
 696 
 697         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 698             for (int i = 0; i < a.length; i += SPECIES.length()) {
 699                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 700                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 701                 av.lanewise(VectorOperators.ROL, bv).intoArray(r, i);
 702             }
 703         }
 704 
 705         bh.consume(r);
 706     }
 707 
 708     @Benchmark
 709     public void ROLMasked(Blackhole bh) {
 710         short[] a = fa.apply(SPECIES.length());
 711         short[] b = fb.apply(SPECIES.length());
 712         short[] r = fr.apply(SPECIES.length());
 713         boolean[] mask = fm.apply(SPECIES.length());
 714         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 715 
 716         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 717             for (int i = 0; i < a.length; i += SPECIES.length()) {
 718                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 719                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 720                 av.lanewise(VectorOperators.ROL, bv, vmask).intoArray(r, i);
 721             }
 722         }
 723 
 724         bh.consume(r);
 725     }
 726 
 727     @Benchmark
 728     public void RORShift(Blackhole bh) {
 729         short[] a = fa.apply(SPECIES.length());
 730         short[] b = fb.apply(SPECIES.length());
 731         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 736                 av.lanewise(VectorOperators.ROR, (int)b[i]).intoArray(r, i);
 737             }
 738         }
 739 
 740         bh.consume(r);
 741     }
 742 
 743     @Benchmark
 744     public void RORMaskedShift(Blackhole bh) {
 745         short[] a = fa.apply(SPECIES.length());
 746         short[] b = fb.apply(SPECIES.length());
 747         short[] r = fr.apply(SPECIES.length());
 748         boolean[] mask = fm.apply(SPECIES.length());
 749         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 750 
 751         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 752             for (int i = 0; i < a.length; i += SPECIES.length()) {
 753                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 754                 av.lanewise(VectorOperators.ROR, (int)b[i], vmask).intoArray(r, i);
 755             }
 756         }
 757 
 758         bh.consume(r);
 759     }
 760 
 761     @Benchmark
 762     public void ROLShift(Blackhole bh) {
 763         short[] a = fa.apply(SPECIES.length());
 764         short[] b = fb.apply(SPECIES.length());
 765         short[] r = fr.apply(SPECIES.length());
 766 
 767         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 768             for (int i = 0; i < a.length; i += SPECIES.length()) {
 769                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 770                 av.lanewise(VectorOperators.ROL, (int)b[i]).intoArray(r, i);
 771             }
 772         }
 773 
 774         bh.consume(r);
 775     }
 776 
 777     @Benchmark
 778     public void ROLMaskedShift(Blackhole bh) {
 779         short[] a = fa.apply(SPECIES.length());
 780         short[] b = fb.apply(SPECIES.length());
 781         short[] r = fr.apply(SPECIES.length());
 782         boolean[] mask = fm.apply(SPECIES.length());
 783         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 784 
 785         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 786             for (int i = 0; i < a.length; i += SPECIES.length()) {
 787                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 788                 av.lanewise(VectorOperators.ROL, (int)b[i], vmask).intoArray(r, i);
 789             }
 790         }
 791 
 792         bh.consume(r);
 793     }
 794 
 795     @Benchmark
 796     public void LSHRShiftConst(Blackhole bh) {
 797         short[] a = fa.apply(SPECIES.length());
 798         short[] r = fr.apply(SPECIES.length());
 799 
 800         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 801             for (int i = 0; i < a.length; i += SPECIES.length()) {
 802                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 803                 av.lanewise(VectorOperators.LSHR, CONST_SHIFT).intoArray(r, i);
 804             }
 805         }
 806 
 807         bh.consume(r);
 808     }
 809 
 810     @Benchmark
 811     public void LSHRMaskedShiftConst(Blackhole bh) {
 812         short[] a = fa.apply(SPECIES.length());
 813         short[] r = fr.apply(SPECIES.length());
 814         boolean[] mask = fm.apply(SPECIES.length());
 815         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 816 
 817         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 818             for (int i = 0; i < a.length; i += SPECIES.length()) {
 819                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 820                 av.lanewise(VectorOperators.LSHR, CONST_SHIFT, vmask).intoArray(r, i);
 821             }
 822         }
 823 
 824         bh.consume(r);
 825     }
 826 
 827     @Benchmark
 828     public void LSHLShiftConst(Blackhole bh) {
 829         short[] a = fa.apply(SPECIES.length());
 830         short[] r = fr.apply(SPECIES.length());
 831 
 832         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 833             for (int i = 0; i < a.length; i += SPECIES.length()) {
 834                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 835                 av.lanewise(VectorOperators.LSHL, CONST_SHIFT).intoArray(r, i);
 836             }
 837         }
 838 
 839         bh.consume(r);
 840     }
 841 
 842     @Benchmark
 843     public void LSHLMaskedShiftConst(Blackhole bh) {
 844         short[] a = fa.apply(SPECIES.length());
 845         short[] r = fr.apply(SPECIES.length());
 846         boolean[] mask = fm.apply(SPECIES.length());
 847         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 848 
 849         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 850             for (int i = 0; i < a.length; i += SPECIES.length()) {
 851                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 852                 av.lanewise(VectorOperators.LSHL, CONST_SHIFT, vmask).intoArray(r, i);
 853             }
 854         }
 855 
 856         bh.consume(r);
 857     }
 858 
 859     @Benchmark
 860     public void ASHRShiftConst(Blackhole bh) {
 861         short[] a = fa.apply(SPECIES.length());
 862         short[] r = fr.apply(SPECIES.length());
 863 
 864         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 865             for (int i = 0; i < a.length; i += SPECIES.length()) {
 866                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 867                 av.lanewise(VectorOperators.ASHR, CONST_SHIFT).intoArray(r, i);
 868             }
 869         }
 870 
 871         bh.consume(r);
 872     }
 873 
 874     @Benchmark
 875     public void ASHRMaskedShiftConst(Blackhole bh) {
 876         short[] a = fa.apply(SPECIES.length());
 877         short[] r = fr.apply(SPECIES.length());
 878         boolean[] mask = fm.apply(SPECIES.length());
 879         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 880 
 881         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 882             for (int i = 0; i < a.length; i += SPECIES.length()) {
 883                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 884                 av.lanewise(VectorOperators.ASHR, CONST_SHIFT, vmask).intoArray(r, i);
 885             }
 886         }
 887 
 888         bh.consume(r);
 889     }
 890 
 891     @Benchmark
 892     public void RORShiftConst(Blackhole bh) {
 893         short[] a = fa.apply(SPECIES.length());
 894         short[] r = fr.apply(SPECIES.length());
 895 
 896         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 897             for (int i = 0; i < a.length; i += SPECIES.length()) {
 898                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 899                 av.lanewise(VectorOperators.ROR, CONST_SHIFT).intoArray(r, i);
 900             }
 901         }
 902 
 903         bh.consume(r);
 904     }
 905 
 906     @Benchmark
 907     public void RORMaskedShiftConst(Blackhole bh) {
 908         short[] a = fa.apply(SPECIES.length());
 909         short[] r = fr.apply(SPECIES.length());
 910         boolean[] mask = fm.apply(SPECIES.length());
 911         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 912 
 913         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 914             for (int i = 0; i < a.length; i += SPECIES.length()) {
 915                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 916                 av.lanewise(VectorOperators.ROR, CONST_SHIFT, vmask).intoArray(r, i);
 917             }
 918         }
 919 
 920         bh.consume(r);
 921     }
 922 
 923     @Benchmark
 924     public void ROLShiftConst(Blackhole bh) {
 925         short[] a = fa.apply(SPECIES.length());
 926         short[] r = fr.apply(SPECIES.length());
 927 
 928         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 929             for (int i = 0; i < a.length; i += SPECIES.length()) {
 930                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 931                 av.lanewise(VectorOperators.ROL, CONST_SHIFT).intoArray(r, i);
 932             }
 933         }
 934 
 935         bh.consume(r);
 936     }
 937 
 938     @Benchmark
 939     public void ROLMaskedShiftConst(Blackhole bh) {
 940         short[] a = fa.apply(SPECIES.length());
 941         short[] r = fr.apply(SPECIES.length());
 942         boolean[] mask = fm.apply(SPECIES.length());
 943         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
 944 
 945         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 946             for (int i = 0; i < a.length; i += SPECIES.length()) {
 947                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 948                 av.lanewise(VectorOperators.ROL, CONST_SHIFT, vmask).intoArray(r, i);
 949             }
 950         }
 951 
 952         bh.consume(r);
 953     }
 954 
 955     @Benchmark
 956     public void MIN(Blackhole bh) {
 957         short[] a = fa.apply(SPECIES.length());
 958         short[] b = fb.apply(SPECIES.length());
 959         short[] r = fr.apply(SPECIES.length());
 960 
 961         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 962             for (int i = 0; i < a.length; i += SPECIES.length()) {
 963                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 964                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 965                 av.lanewise(VectorOperators.MIN, bv).intoArray(r, i);
 966             }
 967         }
 968 
 969         bh.consume(r);
 970     }
 971 
 972     @Benchmark
 973     public void MAX(Blackhole bh) {
 974         short[] a = fa.apply(SPECIES.length());
 975         short[] b = fb.apply(SPECIES.length());
 976         short[] r = fr.apply(SPECIES.length());
 977 
 978         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 979             for (int i = 0; i < a.length; i += SPECIES.length()) {
 980                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 981                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 982                 av.lanewise(VectorOperators.MAX, bv).intoArray(r, i);
 983             }
 984         }
 985 
 986         bh.consume(r);
 987     }
 988 
 989     @Benchmark
 990     public void UMIN(Blackhole bh) {
 991         short[] a = fa.apply(SPECIES.length());
 992         short[] b = fb.apply(SPECIES.length());
 993         short[] r = fr.apply(SPECIES.length());
 994 
 995         for (int ic = 0; ic < INVOC_COUNT; ic++) {
 996             for (int i = 0; i < a.length; i += SPECIES.length()) {
 997                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
 998                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
 999                 av.lanewise(VectorOperators.UMIN, bv).intoArray(r, i);
1000             }
1001         }
1002 
1003         bh.consume(r);
1004     }
1005 
1006     @Benchmark
1007     public void UMINMasked(Blackhole bh) {
1008         short[] a = fa.apply(SPECIES.length());
1009         short[] b = fb.apply(SPECIES.length());
1010         short[] r = fr.apply(SPECIES.length());
1011         boolean[] mask = fm.apply(SPECIES.length());
1012         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1013 
1014         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1015             for (int i = 0; i < a.length; i += SPECIES.length()) {
1016                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1017                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1018                 av.lanewise(VectorOperators.UMIN, bv, vmask).intoArray(r, i);
1019             }
1020         }
1021 
1022         bh.consume(r);
1023     }
1024 
1025     @Benchmark
1026     public void UMAX(Blackhole bh) {
1027         short[] a = fa.apply(SPECIES.length());
1028         short[] b = fb.apply(SPECIES.length());
1029         short[] r = fr.apply(SPECIES.length());
1030 
1031         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1032             for (int i = 0; i < a.length; i += SPECIES.length()) {
1033                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1034                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1035                 av.lanewise(VectorOperators.UMAX, bv).intoArray(r, i);
1036             }
1037         }
1038 
1039         bh.consume(r);
1040     }
1041 
1042     @Benchmark
1043     public void UMAXMasked(Blackhole bh) {
1044         short[] a = fa.apply(SPECIES.length());
1045         short[] b = fb.apply(SPECIES.length());
1046         short[] r = fr.apply(SPECIES.length());
1047         boolean[] mask = fm.apply(SPECIES.length());
1048         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1049 
1050         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1051             for (int i = 0; i < a.length; i += SPECIES.length()) {
1052                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1053                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1054                 av.lanewise(VectorOperators.UMAX, bv, vmask).intoArray(r, i);
1055             }
1056         }
1057 
1058         bh.consume(r);
1059     }
1060 
1061     @Benchmark
1062     public void SADD(Blackhole bh) {
1063         short[] a = fa.apply(SPECIES.length());
1064         short[] b = fb.apply(SPECIES.length());
1065         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1070                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1071                 av.lanewise(VectorOperators.SADD, bv).intoArray(r, i);
1072             }
1073         }
1074 
1075         bh.consume(r);
1076     }
1077 
1078     @Benchmark
1079     public void SADDMasked(Blackhole bh) {
1080         short[] a = fa.apply(SPECIES.length());
1081         short[] b = fb.apply(SPECIES.length());
1082         short[] r = fr.apply(SPECIES.length());
1083         boolean[] mask = fm.apply(SPECIES.length());
1084         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1089                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1090                 av.lanewise(VectorOperators.SADD, bv, vmask).intoArray(r, i);
1091             }
1092         }
1093 
1094         bh.consume(r);
1095     }
1096 
1097     @Benchmark
1098     public void SSUB(Blackhole bh) {
1099         short[] a = fa.apply(SPECIES.length());
1100         short[] b = fb.apply(SPECIES.length());
1101         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1106                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1107                 av.lanewise(VectorOperators.SSUB, bv).intoArray(r, i);
1108             }
1109         }
1110 
1111         bh.consume(r);
1112     }
1113 
1114     @Benchmark
1115     public void SSUBMasked(Blackhole bh) {
1116         short[] a = fa.apply(SPECIES.length());
1117         short[] b = fb.apply(SPECIES.length());
1118         short[] r = fr.apply(SPECIES.length());
1119         boolean[] mask = fm.apply(SPECIES.length());
1120         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1125                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1126                 av.lanewise(VectorOperators.SSUB, bv, vmask).intoArray(r, i);
1127             }
1128         }
1129 
1130         bh.consume(r);
1131     }
1132 
1133     @Benchmark
1134     public void SUADD(Blackhole bh) {
1135         short[] a = fa.apply(SPECIES.length());
1136         short[] b = fb.apply(SPECIES.length());
1137         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1142                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1143                 av.lanewise(VectorOperators.SUADD, bv).intoArray(r, i);
1144             }
1145         }
1146 
1147         bh.consume(r);
1148     }
1149 
1150     @Benchmark
1151     public void SUADDMasked(Blackhole bh) {
1152         short[] a = fa.apply(SPECIES.length());
1153         short[] b = fb.apply(SPECIES.length());
1154         short[] r = fr.apply(SPECIES.length());
1155         boolean[] mask = fm.apply(SPECIES.length());
1156         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1161                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1162                 av.lanewise(VectorOperators.SUADD, bv, vmask).intoArray(r, i);
1163             }
1164         }
1165 
1166         bh.consume(r);
1167     }
1168 
1169     @Benchmark
1170     public void SUSUB(Blackhole bh) {
1171         short[] a = fa.apply(SPECIES.length());
1172         short[] b = fb.apply(SPECIES.length());
1173         short[] 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1178                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1179                 av.lanewise(VectorOperators.SUSUB, bv).intoArray(r, i);
1180             }
1181         }
1182 
1183         bh.consume(r);
1184     }
1185 
1186     @Benchmark
1187     public void SUSUBMasked(Blackhole bh) {
1188         short[] a = fa.apply(SPECIES.length());
1189         short[] b = fb.apply(SPECIES.length());
1190         short[] r = fr.apply(SPECIES.length());
1191         boolean[] mask = fm.apply(SPECIES.length());
1192         VectorMask<Short> 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                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1197                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1198                 av.lanewise(VectorOperators.SUSUB, bv, vmask).intoArray(r, i);
1199             }
1200         }
1201 
1202         bh.consume(r);
1203     }
1204 
1205     @Benchmark
1206     public void ANDLanes(Blackhole bh) {
1207         short[] a = fa.apply(SPECIES.length());
1208         short ra = -1;
1209 
1210         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1211             ra = -1;
1212             for (int i = 0; i < a.length; i += SPECIES.length()) {
1213                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1214                 ra &= av.reduceLanes(VectorOperators.AND);
1215             }
1216         }
1217         bh.consume(ra);
1218     }
1219 
1220     @Benchmark
1221     public void ANDMaskedLanes(Blackhole bh) {
1222         short[] a = fa.apply(SPECIES.length());
1223         boolean[] mask = fm.apply(SPECIES.length());
1224         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1225         short ra = -1;
1226 
1227         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1228             ra = -1;
1229             for (int i = 0; i < a.length; i += SPECIES.length()) {
1230                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1231                 ra &= av.reduceLanes(VectorOperators.AND, vmask);
1232             }
1233         }
1234         bh.consume(ra);
1235     }
1236 
1237     @Benchmark
1238     public void ORLanes(Blackhole bh) {
1239         short[] a = fa.apply(SPECIES.length());
1240         short ra = 0;
1241 
1242         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1243             ra = 0;
1244             for (int i = 0; i < a.length; i += SPECIES.length()) {
1245                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1246                 ra |= av.reduceLanes(VectorOperators.OR);
1247             }
1248         }
1249         bh.consume(ra);
1250     }
1251 
1252     @Benchmark
1253     public void ORMaskedLanes(Blackhole bh) {
1254         short[] a = fa.apply(SPECIES.length());
1255         boolean[] mask = fm.apply(SPECIES.length());
1256         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1257         short ra = 0;
1258 
1259         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1260             ra = 0;
1261             for (int i = 0; i < a.length; i += SPECIES.length()) {
1262                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1263                 ra |= av.reduceLanes(VectorOperators.OR, vmask);
1264             }
1265         }
1266         bh.consume(ra);
1267     }
1268 
1269     @Benchmark
1270     public void XORLanes(Blackhole bh) {
1271         short[] a = fa.apply(SPECIES.length());
1272         short ra = 0;
1273 
1274         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1275             ra = 0;
1276             for (int i = 0; i < a.length; i += SPECIES.length()) {
1277                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1278                 ra ^= av.reduceLanes(VectorOperators.XOR);
1279             }
1280         }
1281         bh.consume(ra);
1282     }
1283 
1284     @Benchmark
1285     public void XORMaskedLanes(Blackhole bh) {
1286         short[] a = fa.apply(SPECIES.length());
1287         boolean[] mask = fm.apply(SPECIES.length());
1288         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1289         short ra = 0;
1290 
1291         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1292             ra = 0;
1293             for (int i = 0; i < a.length; i += SPECIES.length()) {
1294                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1295                 ra ^= av.reduceLanes(VectorOperators.XOR, vmask);
1296             }
1297         }
1298         bh.consume(ra);
1299     }
1300 
1301     @Benchmark
1302     public void ADDLanes(Blackhole bh) {
1303         short[] a = fa.apply(SPECIES.length());
1304         short ra = 0;
1305 
1306         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1307             ra = 0;
1308             for (int i = 0; i < a.length; i += SPECIES.length()) {
1309                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1310                 ra += av.reduceLanes(VectorOperators.ADD);
1311             }
1312         }
1313         bh.consume(ra);
1314     }
1315 
1316     @Benchmark
1317     public void ADDMaskedLanes(Blackhole bh) {
1318         short[] a = fa.apply(SPECIES.length());
1319         boolean[] mask = fm.apply(SPECIES.length());
1320         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1321         short ra = 0;
1322 
1323         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1324             ra = 0;
1325             for (int i = 0; i < a.length; i += SPECIES.length()) {
1326                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1327                 ra += av.reduceLanes(VectorOperators.ADD, vmask);
1328             }
1329         }
1330         bh.consume(ra);
1331     }
1332 
1333     @Benchmark
1334     public void MULLanes(Blackhole bh) {
1335         short[] a = fa.apply(SPECIES.length());
1336         short ra = 1;
1337 
1338         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1339             ra = 1;
1340             for (int i = 0; i < a.length; i += SPECIES.length()) {
1341                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1342                 ra *= av.reduceLanes(VectorOperators.MUL);
1343             }
1344         }
1345         bh.consume(ra);
1346     }
1347 
1348     @Benchmark
1349     public void MULMaskedLanes(Blackhole bh) {
1350         short[] a = fa.apply(SPECIES.length());
1351         boolean[] mask = fm.apply(SPECIES.length());
1352         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1353         short ra = 1;
1354 
1355         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1356             ra = 1;
1357             for (int i = 0; i < a.length; i += SPECIES.length()) {
1358                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1359                 ra *= av.reduceLanes(VectorOperators.MUL, vmask);
1360             }
1361         }
1362         bh.consume(ra);
1363     }
1364 
1365     @Benchmark
1366     public void MINLanes(Blackhole bh) {
1367         short[] a = fa.apply(SPECIES.length());
1368         short ra = Short.MAX_VALUE;
1369 
1370         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1371             ra = Short.MAX_VALUE;
1372             for (int i = 0; i < a.length; i += SPECIES.length()) {
1373                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1374                 ra = (short) Math.min(ra, av.reduceLanes(VectorOperators.MIN));
1375             }
1376         }
1377         bh.consume(ra);
1378     }
1379 
1380     @Benchmark
1381     public void MINMaskedLanes(Blackhole bh) {
1382         short[] a = fa.apply(SPECIES.length());
1383         boolean[] mask = fm.apply(SPECIES.length());
1384         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1385         short ra = Short.MAX_VALUE;
1386 
1387         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1388             ra = Short.MAX_VALUE;
1389             for (int i = 0; i < a.length; i += SPECIES.length()) {
1390                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1391                 ra = (short) Math.min(ra, av.reduceLanes(VectorOperators.MIN, vmask));
1392             }
1393         }
1394         bh.consume(ra);
1395     }
1396 
1397     @Benchmark
1398     public void MAXLanes(Blackhole bh) {
1399         short[] a = fa.apply(SPECIES.length());
1400         short ra = Short.MIN_VALUE;
1401 
1402         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1403             ra = Short.MIN_VALUE;
1404             for (int i = 0; i < a.length; i += SPECIES.length()) {
1405                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1406                 ra = (short) Math.max(ra, av.reduceLanes(VectorOperators.MAX));
1407             }
1408         }
1409         bh.consume(ra);
1410     }
1411 
1412     @Benchmark
1413     public void MAXMaskedLanes(Blackhole bh) {
1414         short[] a = fa.apply(SPECIES.length());
1415         boolean[] mask = fm.apply(SPECIES.length());
1416         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1417         short ra = Short.MIN_VALUE;
1418 
1419         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1420             ra = Short.MIN_VALUE;
1421             for (int i = 0; i < a.length; i += SPECIES.length()) {
1422                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1423                 ra = (short) Math.max(ra, av.reduceLanes(VectorOperators.MAX, vmask));
1424             }
1425         }
1426         bh.consume(ra);
1427     }
1428 
1429     @Benchmark
1430     public void FIRST_NONZEROLanes(Blackhole bh) {
1431         short[] a = fa.apply(SPECIES.length());
1432         short ra = (short) 0;
1433 
1434         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1435             ra = (short) 0;
1436             for (int i = 0; i < a.length; i += SPECIES.length()) {
1437                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1438                 ra = firstNonZero(ra, av.reduceLanes(VectorOperators.FIRST_NONZERO));
1439             }
1440         }
1441         bh.consume(ra);
1442     }
1443 
1444     @Benchmark
1445     public void FIRST_NONZEROMaskedLanes(Blackhole bh) {
1446         short[] a = fa.apply(SPECIES.length());
1447         boolean[] mask = fm.apply(SPECIES.length());
1448         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1449         short ra = (short) 0;
1450 
1451         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1452             ra = (short) 0;
1453             for (int i = 0; i < a.length; i += SPECIES.length()) {
1454                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1455                 ra = firstNonZero(ra, av.reduceLanes(VectorOperators.FIRST_NONZERO, vmask));
1456             }
1457         }
1458         bh.consume(ra);
1459     }
1460 
1461     @Benchmark
1462     public void anyTrue(Blackhole bh) {
1463         boolean[] mask = fm.apply(SPECIES.length());
1464         boolean[] r = fmr.apply(SPECIES.length());
1465 
1466         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1467             for (int i = 0; i < mask.length; i += SPECIES.length()) {
1468                 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, i);
1469                 r[i] = vmask.anyTrue();
1470             }
1471         }
1472 
1473         bh.consume(r);
1474     }
1475 
1476     @Benchmark
1477     public void allTrue(Blackhole bh) {
1478         boolean[] mask = fm.apply(SPECIES.length());
1479         boolean[] r = fmr.apply(SPECIES.length());
1480 
1481         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1482             for (int i = 0; i < mask.length; i += SPECIES.length()) {
1483                 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, i);
1484                 r[i] = vmask.allTrue();
1485             }
1486         }
1487 
1488         bh.consume(r);
1489     }
1490 
1491     @Benchmark
1492     public void withLane(Blackhole bh) {
1493         short[] a = fa.apply(SPECIES.length());
1494         short[] b = fb.apply(SPECIES.length());
1495         short[] r = fr.apply(SPECIES.length());
1496 
1497         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1498             for (int i = 0, j = 0; i < a.length; i += SPECIES.length()) {
1499                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1500                 av.withLane(j, b[i + j]).intoArray(r, i);
1501                 a[i + j] = b[i + j];
1502                 j = (j + 1) & (SPECIES.length() - 1);
1503             }
1504         }
1505 
1506         bh.consume(r);
1507     }
1508 
1509     @Benchmark
1510     public Object IS_DEFAULT() {
1511         short[] a = fa.apply(size);
1512         boolean[] ms = fmt.apply(size);
1513         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1514 
1515         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1516             for (int i = 0; i < a.length; i += SPECIES.length()) {
1517                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1518 
1519                 // accumulate results, so JIT can't eliminate relevant computations
1520                 m = m.and(av.test(VectorOperators.IS_DEFAULT));
1521             }
1522         }
1523 
1524         return m;
1525     }
1526 
1527     @Benchmark
1528     public Object IS_NEGATIVE() {
1529         short[] a = fa.apply(size);
1530         boolean[] ms = fmt.apply(size);
1531         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1532 
1533         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1534             for (int i = 0; i < a.length; i += SPECIES.length()) {
1535                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1536 
1537                 // accumulate results, so JIT can't eliminate relevant computations
1538                 m = m.and(av.test(VectorOperators.IS_NEGATIVE));
1539             }
1540         }
1541 
1542         return m;
1543     }
1544     @Benchmark
1545     public Object LT() {
1546         short[] a = fa.apply(size);
1547         short[] b = fb.apply(size);
1548         boolean[] ms = fmt.apply(size);
1549         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1550 
1551         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1552             for (int i = 0; i < a.length; i += SPECIES.length()) {
1553                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1554                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1555 
1556                 // accumulate results, so JIT can't eliminate relevant computations
1557                 m = m.and(av.compare(VectorOperators.LT, bv));
1558             }
1559         }
1560 
1561         return m;
1562     }
1563     @Benchmark
1564     public Object GT() {
1565         short[] a = fa.apply(size);
1566         short[] b = fb.apply(size);
1567         boolean[] ms = fmt.apply(size);
1568         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1569 
1570         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1571             for (int i = 0; i < a.length; i += SPECIES.length()) {
1572                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1573                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1574 
1575                 // accumulate results, so JIT can't eliminate relevant computations
1576                 m = m.and(av.compare(VectorOperators.GT, bv));
1577             }
1578         }
1579 
1580         return m;
1581     }
1582     @Benchmark
1583     public Object EQ() {
1584         short[] a = fa.apply(size);
1585         short[] b = fb.apply(size);
1586         boolean[] ms = fmt.apply(size);
1587         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1588 
1589         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1590             for (int i = 0; i < a.length; i += SPECIES.length()) {
1591                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1592                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1593 
1594                 // accumulate results, so JIT can't eliminate relevant computations
1595                 m = m.and(av.compare(VectorOperators.EQ, bv));
1596             }
1597         }
1598 
1599         return m;
1600     }
1601     @Benchmark
1602     public Object NE() {
1603         short[] a = fa.apply(size);
1604         short[] b = fb.apply(size);
1605         boolean[] ms = fmt.apply(size);
1606         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1607 
1608         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1609             for (int i = 0; i < a.length; i += SPECIES.length()) {
1610                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1611                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1612 
1613                 // accumulate results, so JIT can't eliminate relevant computations
1614                 m = m.and(av.compare(VectorOperators.NE, bv));
1615             }
1616         }
1617 
1618         return m;
1619     }
1620     @Benchmark
1621     public Object LE() {
1622         short[] a = fa.apply(size);
1623         short[] b = fb.apply(size);
1624         boolean[] ms = fmt.apply(size);
1625         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1626 
1627         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1628             for (int i = 0; i < a.length; i += SPECIES.length()) {
1629                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1630                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1631 
1632                 // accumulate results, so JIT can't eliminate relevant computations
1633                 m = m.and(av.compare(VectorOperators.LE, bv));
1634             }
1635         }
1636 
1637         return m;
1638     }
1639     @Benchmark
1640     public Object GE() {
1641         short[] a = fa.apply(size);
1642         short[] b = fb.apply(size);
1643         boolean[] ms = fmt.apply(size);
1644         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1645 
1646         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1647             for (int i = 0; i < a.length; i += SPECIES.length()) {
1648                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1649                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1650 
1651                 // accumulate results, so JIT can't eliminate relevant computations
1652                 m = m.and(av.compare(VectorOperators.GE, bv));
1653             }
1654         }
1655 
1656         return m;
1657     }
1658     @Benchmark
1659     public Object ULT() {
1660         short[] a = fa.apply(size);
1661         short[] b = fb.apply(size);
1662         boolean[] ms = fmt.apply(size);
1663         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1664 
1665         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1666             for (int i = 0; i < a.length; i += SPECIES.length()) {
1667                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1668                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1669 
1670                 // accumulate results, so JIT can't eliminate relevant computations
1671                 m = m.and(av.compare(VectorOperators.ULT, bv));
1672             }
1673         }
1674 
1675         return m;
1676     }
1677     @Benchmark
1678     public Object UGT() {
1679         short[] a = fa.apply(size);
1680         short[] b = fb.apply(size);
1681         boolean[] ms = fmt.apply(size);
1682         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1683 
1684         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1685             for (int i = 0; i < a.length; i += SPECIES.length()) {
1686                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1687                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1688 
1689                 // accumulate results, so JIT can't eliminate relevant computations
1690                 m = m.and(av.compare(VectorOperators.UGT, bv));
1691             }
1692         }
1693 
1694         return m;
1695     }
1696     @Benchmark
1697     public Object ULE() {
1698         short[] a = fa.apply(size);
1699         short[] b = fb.apply(size);
1700         boolean[] ms = fmt.apply(size);
1701         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1702 
1703         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1704             for (int i = 0; i < a.length; i += SPECIES.length()) {
1705                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1706                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1707 
1708                 // accumulate results, so JIT can't eliminate relevant computations
1709                 m = m.and(av.compare(VectorOperators.ULE, bv));
1710             }
1711         }
1712 
1713         return m;
1714     }
1715     @Benchmark
1716     public Object UGE() {
1717         short[] a = fa.apply(size);
1718         short[] b = fb.apply(size);
1719         boolean[] ms = fmt.apply(size);
1720         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1721 
1722         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1723             for (int i = 0; i < a.length; i += SPECIES.length()) {
1724                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1725                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1726 
1727                 // accumulate results, so JIT can't eliminate relevant computations
1728                 m = m.and(av.compare(VectorOperators.UGE, bv));
1729             }
1730         }
1731 
1732         return m;
1733     }
1734 
1735     @Benchmark
1736     public void blend(Blackhole bh) {
1737         short[] a = fa.apply(SPECIES.length());
1738         short[] b = fb.apply(SPECIES.length());
1739         short[] r = fr.apply(SPECIES.length());
1740         boolean[] mask = fm.apply(SPECIES.length());
1741         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1742 
1743         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1744             for (int i = 0; i < a.length; i += SPECIES.length()) {
1745                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1746                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
1747                 av.blend(bv, vmask).intoArray(r, i);
1748             }
1749         }
1750 
1751         bh.consume(r);
1752     }
1753 
1754     @Benchmark
1755     public void rearrange(Blackhole bh) {
1756         short[] a = fa.apply(SPECIES.length());
1757         int[] order = fs.apply(a.length, SPECIES.length());
1758         short[] r = fr.apply(SPECIES.length());
1759 
1760         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1761             for (int i = 0; i < a.length; i += SPECIES.length()) {
1762                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1763                 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);
1764             }
1765         }
1766 
1767         bh.consume(r);
1768     }
1769     @Benchmark
1770     public Object compress() {
1771         short[] a = fa.apply(size);
1772         short[] r = fb.apply(size);
1773         boolean[] ms = fmt.apply(size);
1774         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1775 
1776         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1777             for (int i = 0; i < a.length; i += SPECIES.length()) {
1778                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1779                 av.compress(m).intoArray(r, i);
1780             }
1781         }
1782 
1783         return r;
1784     }
1785 
1786     @Benchmark
1787     public Object expand() {
1788         short[] a = fa.apply(size);
1789         short[] r = fb.apply(size);
1790         boolean[] ms = fmt.apply(size);
1791         VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, 0);
1792 
1793         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1794             for (int i = 0; i < a.length; i += SPECIES.length()) {
1795                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1796                 av.expand(m).intoArray(r, i);
1797             }
1798         }
1799 
1800         return r;
1801     }
1802 
1803     @Benchmark
1804     public Object maskCompress() {
1805         boolean[] ms = fmt.apply(size);
1806         boolean[] rs = fmt.apply(size);
1807 
1808         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1809             for (int i = 0, j = 0; i < ms.length; i += SPECIES.length()) {
1810                 VectorMask<Short> m = VectorMask.fromArray(SPECIES, ms, i);
1811                 m.compress().intoArray(rs, j);
1812                 j += m.trueCount();
1813             }
1814         }
1815 
1816         return rs;
1817     }
1818 
1819     @Benchmark
1820     public void laneextract(Blackhole bh) {
1821         short[] a = fa.apply(SPECIES.length());
1822         short[] r = fr.apply(SPECIES.length());
1823 
1824         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1825             for (int i = 0; i < a.length; i += SPECIES.length()) {
1826                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
1827                 int num_lanes = SPECIES.length();
1828                 // Manually unroll because full unroll happens after intrinsification.
1829                 // Unroll is needed because get intrinsic requires for index to be a known constant.
1830                 if (num_lanes == 1) {
1831                     r[i]=av.lane(0);
1832                 } else if (num_lanes == 2) {
1833                     r[i]=av.lane(0);
1834                     r[i+1]=av.lane(1);
1835                 } else if (num_lanes == 4) {
1836                     r[i]=av.lane(0);
1837                     r[i+1]=av.lane(1);
1838                     r[i+2]=av.lane(2);
1839                     r[i+3]=av.lane(3);
1840                 } else if (num_lanes == 8) {
1841                     r[i]=av.lane(0);
1842                     r[i+1]=av.lane(1);
1843                     r[i+2]=av.lane(2);
1844                     r[i+3]=av.lane(3);
1845                     r[i+4]=av.lane(4);
1846                     r[i+5]=av.lane(5);
1847                     r[i+6]=av.lane(6);
1848                     r[i+7]=av.lane(7);
1849                 } else if (num_lanes == 16) {
1850                     r[i]=av.lane(0);
1851                     r[i+1]=av.lane(1);
1852                     r[i+2]=av.lane(2);
1853                     r[i+3]=av.lane(3);
1854                     r[i+4]=av.lane(4);
1855                     r[i+5]=av.lane(5);
1856                     r[i+6]=av.lane(6);
1857                     r[i+7]=av.lane(7);
1858                     r[i+8]=av.lane(8);
1859                     r[i+9]=av.lane(9);
1860                     r[i+10]=av.lane(10);
1861                     r[i+11]=av.lane(11);
1862                     r[i+12]=av.lane(12);
1863                     r[i+13]=av.lane(13);
1864                     r[i+14]=av.lane(14);
1865                     r[i+15]=av.lane(15);
1866                 } else if (num_lanes == 32) {
1867                     r[i]=av.lane(0);
1868                     r[i+1]=av.lane(1);
1869                     r[i+2]=av.lane(2);
1870                     r[i+3]=av.lane(3);
1871                     r[i+4]=av.lane(4);
1872                     r[i+5]=av.lane(5);
1873                     r[i+6]=av.lane(6);
1874                     r[i+7]=av.lane(7);
1875                     r[i+8]=av.lane(8);
1876                     r[i+9]=av.lane(9);
1877                     r[i+10]=av.lane(10);
1878                     r[i+11]=av.lane(11);
1879                     r[i+12]=av.lane(12);
1880                     r[i+13]=av.lane(13);
1881                     r[i+14]=av.lane(14);
1882                     r[i+15]=av.lane(15);
1883                     r[i+16]=av.lane(16);
1884                     r[i+17]=av.lane(17);
1885                     r[i+18]=av.lane(18);
1886                     r[i+19]=av.lane(19);
1887                     r[i+20]=av.lane(20);
1888                     r[i+21]=av.lane(21);
1889                     r[i+22]=av.lane(22);
1890                     r[i+23]=av.lane(23);
1891                     r[i+24]=av.lane(24);
1892                     r[i+25]=av.lane(25);
1893                     r[i+26]=av.lane(26);
1894                     r[i+27]=av.lane(27);
1895                     r[i+28]=av.lane(28);
1896                     r[i+29]=av.lane(29);
1897                     r[i+30]=av.lane(30);
1898                     r[i+31]=av.lane(31);
1899                 } else if (num_lanes == 64) {
1900                     r[i]=av.lane(0);
1901                     r[i+1]=av.lane(1);
1902                     r[i+2]=av.lane(2);
1903                     r[i+3]=av.lane(3);
1904                     r[i+4]=av.lane(4);
1905                     r[i+5]=av.lane(5);
1906                     r[i+6]=av.lane(6);
1907                     r[i+7]=av.lane(7);
1908                     r[i+8]=av.lane(8);
1909                     r[i+9]=av.lane(9);
1910                     r[i+10]=av.lane(10);
1911                     r[i+11]=av.lane(11);
1912                     r[i+12]=av.lane(12);
1913                     r[i+13]=av.lane(13);
1914                     r[i+14]=av.lane(14);
1915                     r[i+15]=av.lane(15);
1916                     r[i+16]=av.lane(16);
1917                     r[i+17]=av.lane(17);
1918                     r[i+18]=av.lane(18);
1919                     r[i+19]=av.lane(19);
1920                     r[i+20]=av.lane(20);
1921                     r[i+21]=av.lane(21);
1922                     r[i+22]=av.lane(22);
1923                     r[i+23]=av.lane(23);
1924                     r[i+24]=av.lane(24);
1925                     r[i+25]=av.lane(25);
1926                     r[i+26]=av.lane(26);
1927                     r[i+27]=av.lane(27);
1928                     r[i+28]=av.lane(28);
1929                     r[i+29]=av.lane(29);
1930                     r[i+30]=av.lane(30);
1931                     r[i+31]=av.lane(31);
1932                     r[i+32]=av.lane(32);
1933                     r[i+33]=av.lane(33);
1934                     r[i+34]=av.lane(34);
1935                     r[i+35]=av.lane(35);
1936                     r[i+36]=av.lane(36);
1937                     r[i+37]=av.lane(37);
1938                     r[i+38]=av.lane(38);
1939                     r[i+39]=av.lane(39);
1940                     r[i+40]=av.lane(40);
1941                     r[i+41]=av.lane(41);
1942                     r[i+42]=av.lane(42);
1943                     r[i+43]=av.lane(43);
1944                     r[i+44]=av.lane(44);
1945                     r[i+45]=av.lane(45);
1946                     r[i+46]=av.lane(46);
1947                     r[i+47]=av.lane(47);
1948                     r[i+48]=av.lane(48);
1949                     r[i+49]=av.lane(49);
1950                     r[i+50]=av.lane(50);
1951                     r[i+51]=av.lane(51);
1952                     r[i+52]=av.lane(52);
1953                     r[i+53]=av.lane(53);
1954                     r[i+54]=av.lane(54);
1955                     r[i+55]=av.lane(55);
1956                     r[i+56]=av.lane(56);
1957                     r[i+57]=av.lane(57);
1958                     r[i+58]=av.lane(58);
1959                     r[i+59]=av.lane(59);
1960                     r[i+60]=av.lane(60);
1961                     r[i+61]=av.lane(61);
1962                     r[i+62]=av.lane(62);
1963                     r[i+63]=av.lane(63);
1964                 } else {
1965                     for (int j = 0; j < SPECIES.length(); j++) {
1966                         r[i+j]=av.lane(j);
1967                     }
1968                 }
1969             }
1970         }
1971 
1972         bh.consume(r);
1973     }
1974 
1975     @Benchmark
1976     public void broadcast(Blackhole bh) {
1977         short[] a = fa.apply(SPECIES.length());
1978         short[] r = new short[a.length];
1979 
1980         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1981             for (int i = 0; i < a.length; i += SPECIES.length()) {
1982                 ShortVector.broadcast(SPECIES, a[i]).intoArray(r, i);
1983             }
1984         }
1985 
1986         bh.consume(r);
1987     }
1988 
1989     @Benchmark
1990     public void zero(Blackhole bh) {
1991         short[] a = fa.apply(SPECIES.length());
1992         short[] r = new short[a.length];
1993 
1994         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1995             for (int i = 0; i < a.length; i += SPECIES.length()) {
1996                 ShortVector.zero(SPECIES).intoArray(a, i);
1997             }
1998         }
1999 
2000         bh.consume(r);
2001     }
2002 
2003     @Benchmark
2004     public void sliceUnary(Blackhole bh) {
2005         short[] a = fa.apply(SPECIES.length());
2006         short[] r = new short[a.length];
2007         int origin = RAND.nextInt(SPECIES.length());
2008         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2009             for (int i = 0; i < a.length; i += SPECIES.length()) {
2010                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2011                 av.slice(origin).intoArray(r, i);
2012             }
2013         }
2014 
2015         bh.consume(r);
2016     }
2017 
2018     @Benchmark
2019     public void sliceBinary(Blackhole bh) {
2020         short[] a = fa.apply(SPECIES.length());
2021         short[] b = fb.apply(SPECIES.length());
2022         short[] r = new short[a.length];
2023         int origin = RAND.nextInt(SPECIES.length());
2024         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2025             for (int i = 0; i < a.length; i += SPECIES.length()) {
2026                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2027                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
2028                 av.slice(origin, bv).intoArray(r, i);
2029             }
2030         }
2031 
2032         bh.consume(r);
2033     }
2034 
2035     @Benchmark
2036     public void sliceMasked(Blackhole bh) {
2037         short[] a = fa.apply(SPECIES.length());
2038         short[] b = fb.apply(SPECIES.length());
2039         boolean[] mask = fm.apply(SPECIES.length());
2040         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2041 
2042         short[] r = new short[a.length];
2043         int origin = RAND.nextInt(SPECIES.length());
2044         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2045             for (int i = 0; i < a.length; i += SPECIES.length()) {
2046                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2047                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
2048                 av.slice(origin, bv, vmask).intoArray(r, i);
2049             }
2050         }
2051 
2052         bh.consume(r);
2053     }
2054 
2055     @Benchmark
2056     public void unsliceUnary(Blackhole bh) {
2057         short[] a = fa.apply(SPECIES.length());
2058         short[] r = new short[a.length];
2059         int origin = RAND.nextInt(SPECIES.length());
2060         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2061             for (int i = 0; i < a.length; i += SPECIES.length()) {
2062                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2063                 av.unslice(origin).intoArray(r, i);
2064             }
2065         }
2066 
2067         bh.consume(r);
2068     }
2069 
2070     @Benchmark
2071     public void unsliceBinary(Blackhole bh) {
2072         short[] a = fa.apply(SPECIES.length());
2073         short[] b = fb.apply(SPECIES.length());
2074         short[] r = new short[a.length];
2075         int origin = RAND.nextInt(SPECIES.length());
2076         int part = RAND.nextInt(2);
2077         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2078             for (int i = 0; i < a.length; i += SPECIES.length()) {
2079                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2080                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
2081                 av.unslice(origin, bv, part).intoArray(r, i);
2082             }
2083         }
2084 
2085         bh.consume(r);
2086     }
2087 
2088     @Benchmark
2089     public void unsliceMasked(Blackhole bh) {
2090         short[] a = fa.apply(SPECIES.length());
2091         short[] b = fb.apply(SPECIES.length());
2092         boolean[] mask = fm.apply(SPECIES.length());
2093         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2094         short[] r = new short[a.length];
2095         int origin = RAND.nextInt(SPECIES.length());
2096         int part = RAND.nextInt(2);
2097         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2098             for (int i = 0; i < a.length; i += SPECIES.length()) {
2099                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2100                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
2101                 av.unslice(origin, bv, part, vmask).intoArray(r, i);
2102             }
2103         }
2104 
2105         bh.consume(r);
2106     }
2107 
2108     @Benchmark
2109     public void BITWISE_BLEND(Blackhole bh) {
2110         short[] a = fa.apply(SPECIES.length());
2111         short[] b = fb.apply(SPECIES.length());
2112         short[] c = fc.apply(SPECIES.length());
2113         short[] r = fr.apply(SPECIES.length());
2114 
2115         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2116             for (int i = 0; i < a.length; i += SPECIES.length()) {
2117                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2118                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
2119                 ShortVector cv = ShortVector.fromArray(SPECIES, c, i);
2120                 av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv).intoArray(r, i);
2121             }
2122         }
2123 
2124         bh.consume(r);
2125     }
2126 
2127     @Benchmark
2128     public void BITWISE_BLENDMasked(Blackhole bh) {
2129         short[] a = fa.apply(SPECIES.length());
2130         short[] b = fb.apply(SPECIES.length());
2131         short[] c = fc.apply(SPECIES.length());
2132         short[] r = fr.apply(SPECIES.length());
2133         boolean[] mask = fm.apply(SPECIES.length());
2134         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2135 
2136         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2137             for (int i = 0; i < a.length; i += SPECIES.length()) {
2138                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2139                 ShortVector bv = ShortVector.fromArray(SPECIES, b, i);
2140                 ShortVector cv = ShortVector.fromArray(SPECIES, c, i);
2141                 av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv, vmask).intoArray(r, i);
2142             }
2143         }
2144 
2145         bh.consume(r);
2146     }
2147 
2148     @Benchmark
2149     public void NEG(Blackhole bh) {
2150         short[] a = fa.apply(SPECIES.length());
2151         short[] r = fr.apply(SPECIES.length());
2152 
2153         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2154             for (int i = 0; i < a.length; i += SPECIES.length()) {
2155                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2156                 av.lanewise(VectorOperators.NEG).intoArray(r, i);
2157             }
2158         }
2159 
2160         bh.consume(r);
2161     }
2162 
2163     @Benchmark
2164     public void NEGMasked(Blackhole bh) {
2165         short[] a = fa.apply(SPECIES.length());
2166         short[] r = fr.apply(SPECIES.length());
2167         boolean[] mask = fm.apply(SPECIES.length());
2168         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2169 
2170         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2171             for (int i = 0; i < a.length; i += SPECIES.length()) {
2172                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2173                 av.lanewise(VectorOperators.NEG, vmask).intoArray(r, i);
2174             }
2175         }
2176 
2177         bh.consume(r);
2178     }
2179 
2180     @Benchmark
2181     public void ABS(Blackhole bh) {
2182         short[] a = fa.apply(SPECIES.length());
2183         short[] r = fr.apply(SPECIES.length());
2184 
2185         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2186             for (int i = 0; i < a.length; i += SPECIES.length()) {
2187                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2188                 av.lanewise(VectorOperators.ABS).intoArray(r, i);
2189             }
2190         }
2191 
2192         bh.consume(r);
2193     }
2194 
2195     @Benchmark
2196     public void ABSMasked(Blackhole bh) {
2197         short[] a = fa.apply(SPECIES.length());
2198         short[] r = fr.apply(SPECIES.length());
2199         boolean[] mask = fm.apply(SPECIES.length());
2200         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2201 
2202         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2203             for (int i = 0; i < a.length; i += SPECIES.length()) {
2204                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2205                 av.lanewise(VectorOperators.ABS, vmask).intoArray(r, i);
2206             }
2207         }
2208 
2209         bh.consume(r);
2210     }
2211 
2212     @Benchmark
2213     public void NOT(Blackhole bh) {
2214         short[] a = fa.apply(SPECIES.length());
2215         short[] r = fr.apply(SPECIES.length());
2216 
2217         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2218             for (int i = 0; i < a.length; i += SPECIES.length()) {
2219                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2220                 av.lanewise(VectorOperators.NOT).intoArray(r, i);
2221             }
2222         }
2223 
2224         bh.consume(r);
2225     }
2226 
2227     @Benchmark
2228     public void NOTMasked(Blackhole bh) {
2229         short[] a = fa.apply(SPECIES.length());
2230         short[] r = fr.apply(SPECIES.length());
2231         boolean[] mask = fm.apply(SPECIES.length());
2232         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2233 
2234         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2235             for (int i = 0; i < a.length; i += SPECIES.length()) {
2236                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2237                 av.lanewise(VectorOperators.NOT, vmask).intoArray(r, i);
2238             }
2239         }
2240 
2241         bh.consume(r);
2242     }
2243 
2244     @Benchmark
2245     public void ZOMO(Blackhole bh) {
2246         short[] a = fa.apply(SPECIES.length());
2247         short[] r = fr.apply(SPECIES.length());
2248 
2249         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2250             for (int i = 0; i < a.length; i += SPECIES.length()) {
2251                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2252                 av.lanewise(VectorOperators.ZOMO).intoArray(r, i);
2253             }
2254         }
2255 
2256         bh.consume(r);
2257     }
2258 
2259     @Benchmark
2260     public void ZOMOMasked(Blackhole bh) {
2261         short[] a = fa.apply(SPECIES.length());
2262         short[] r = fr.apply(SPECIES.length());
2263         boolean[] mask = fm.apply(SPECIES.length());
2264         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2265 
2266         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2267             for (int i = 0; i < a.length; i += SPECIES.length()) {
2268                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2269                 av.lanewise(VectorOperators.ZOMO, vmask).intoArray(r, i);
2270             }
2271         }
2272 
2273         bh.consume(r);
2274     }
2275 
2276     @Benchmark
2277     public void BIT_COUNT(Blackhole bh) {
2278         short[] a = fa.apply(SPECIES.length());
2279         short[] r = fr.apply(SPECIES.length());
2280 
2281         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2282             for (int i = 0; i < a.length; i += SPECIES.length()) {
2283                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2284                 av.lanewise(VectorOperators.BIT_COUNT).intoArray(r, i);
2285             }
2286         }
2287 
2288         bh.consume(r);
2289     }
2290 
2291     @Benchmark
2292     public void BIT_COUNTMasked(Blackhole bh) {
2293         short[] a = fa.apply(SPECIES.length());
2294         short[] r = fr.apply(SPECIES.length());
2295         boolean[] mask = fm.apply(SPECIES.length());
2296         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2297 
2298         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2299             for (int i = 0; i < a.length; i += SPECIES.length()) {
2300                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2301                 av.lanewise(VectorOperators.BIT_COUNT, vmask).intoArray(r, i);
2302             }
2303         }
2304 
2305         bh.consume(r);
2306     }
2307 
2308     @Benchmark
2309     public void TRAILING_ZEROS_COUNT(Blackhole bh) {
2310         short[] a = fa.apply(SPECIES.length());
2311         short[] r = fr.apply(SPECIES.length());
2312 
2313         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2314             for (int i = 0; i < a.length; i += SPECIES.length()) {
2315                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2316                 av.lanewise(VectorOperators.TRAILING_ZEROS_COUNT).intoArray(r, i);
2317             }
2318         }
2319 
2320         bh.consume(r);
2321     }
2322 
2323     @Benchmark
2324     public void TRAILING_ZEROS_COUNTMasked(Blackhole bh) {
2325         short[] a = fa.apply(SPECIES.length());
2326         short[] r = fr.apply(SPECIES.length());
2327         boolean[] mask = fm.apply(SPECIES.length());
2328         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2329 
2330         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2331             for (int i = 0; i < a.length; i += SPECIES.length()) {
2332                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2333                 av.lanewise(VectorOperators.TRAILING_ZEROS_COUNT, vmask).intoArray(r, i);
2334             }
2335         }
2336 
2337         bh.consume(r);
2338     }
2339 
2340     @Benchmark
2341     public void LEADING_ZEROS_COUNT(Blackhole bh) {
2342         short[] a = fa.apply(SPECIES.length());
2343         short[] r = fr.apply(SPECIES.length());
2344 
2345         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2346             for (int i = 0; i < a.length; i += SPECIES.length()) {
2347                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2348                 av.lanewise(VectorOperators.LEADING_ZEROS_COUNT).intoArray(r, i);
2349             }
2350         }
2351 
2352         bh.consume(r);
2353     }
2354 
2355     @Benchmark
2356     public void LEADING_ZEROS_COUNTMasked(Blackhole bh) {
2357         short[] a = fa.apply(SPECIES.length());
2358         short[] r = fr.apply(SPECIES.length());
2359         boolean[] mask = fm.apply(SPECIES.length());
2360         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2361 
2362         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2363             for (int i = 0; i < a.length; i += SPECIES.length()) {
2364                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2365                 av.lanewise(VectorOperators.LEADING_ZEROS_COUNT, vmask).intoArray(r, i);
2366             }
2367         }
2368 
2369         bh.consume(r);
2370     }
2371 
2372     @Benchmark
2373     public void REVERSE(Blackhole bh) {
2374         short[] a = fa.apply(SPECIES.length());
2375         short[] r = fr.apply(SPECIES.length());
2376 
2377         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2378             for (int i = 0; i < a.length; i += SPECIES.length()) {
2379                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2380                 av.lanewise(VectorOperators.REVERSE).intoArray(r, i);
2381             }
2382         }
2383 
2384         bh.consume(r);
2385     }
2386 
2387     @Benchmark
2388     public void REVERSEMasked(Blackhole bh) {
2389         short[] a = fa.apply(SPECIES.length());
2390         short[] r = fr.apply(SPECIES.length());
2391         boolean[] mask = fm.apply(SPECIES.length());
2392         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2393 
2394         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2395             for (int i = 0; i < a.length; i += SPECIES.length()) {
2396                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2397                 av.lanewise(VectorOperators.REVERSE, vmask).intoArray(r, i);
2398             }
2399         }
2400 
2401         bh.consume(r);
2402     }
2403 
2404     @Benchmark
2405     public void REVERSE_BYTES(Blackhole bh) {
2406         short[] a = fa.apply(SPECIES.length());
2407         short[] r = fr.apply(SPECIES.length());
2408 
2409         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2410             for (int i = 0; i < a.length; i += SPECIES.length()) {
2411                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2412                 av.lanewise(VectorOperators.REVERSE_BYTES).intoArray(r, i);
2413             }
2414         }
2415 
2416         bh.consume(r);
2417     }
2418 
2419     @Benchmark
2420     public void REVERSE_BYTESMasked(Blackhole bh) {
2421         short[] a = fa.apply(SPECIES.length());
2422         short[] r = fr.apply(SPECIES.length());
2423         boolean[] mask = fm.apply(SPECIES.length());
2424         VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2425 
2426         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2427             for (int i = 0; i < a.length; i += SPECIES.length()) {
2428                 ShortVector av = ShortVector.fromArray(SPECIES, a, i);
2429                 av.lanewise(VectorOperators.REVERSE_BYTES, vmask).intoArray(r, i);
2430             }
2431         }
2432 
2433         bh.consume(r);
2434     }
2435 }