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 /* 25 * @test 26 * @key randomness 27 * 28 * @library /test/lib 29 * @modules jdk.incubator.vector 30 * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Short64VectorTests 31 */ 32 33 // -- This file was mechanically generated: Do not edit! -- // 34 35 import jdk.incubator.vector.VectorShape; 36 import jdk.incubator.vector.VectorSpecies; 37 import jdk.incubator.vector.VectorShuffle; 38 import jdk.incubator.vector.VectorMask; 39 import jdk.incubator.vector.VectorOperators; 40 import jdk.incubator.vector.Vector; 41 import jdk.incubator.vector.VectorMath; 42 43 import jdk.incubator.vector.ShortVector; 44 45 import org.testng.Assert; 46 import org.testng.annotations.DataProvider; 47 import org.testng.annotations.Test; 48 49 import java.lang.Integer; 50 import java.util.List; 51 import java.util.Arrays; 52 import java.util.function.BiFunction; 53 import java.util.function.IntFunction; 54 import java.util.Objects; 55 import java.util.stream.Collectors; 56 import java.util.stream.Stream; 57 58 @Test 59 public class Short64VectorTests extends AbstractVectorTest { 60 61 static final VectorSpecies<Short> SPECIES = 62 ShortVector.SPECIES_64; 63 64 static final int INVOC_COUNT = Integer.getInteger("jdk.incubator.vector.test.loop-iterations", 100); 65 66 67 private static final short CONST_SHIFT = Short.SIZE / 2; 68 69 static final int BUFFER_REPS = Integer.getInteger("jdk.incubator.vector.test.buffer-vectors", 25000 / 64); 70 71 static void assertArraysStrictlyEquals(short[] r, short[] a) { 72 for (int i = 0; i < a.length; i++) { 73 if (r[i] != a[i]) { 74 Assert.fail("at index #" + i + ", expected = " + a[i] + ", actual = " + r[i]); 75 } 76 } 77 } 78 79 interface FUnOp { 80 short apply(short a); 81 } 82 83 static void assertArraysEquals(short[] r, short[] a, FUnOp f) { 84 int i = 0; 85 try { 86 for (; i < a.length; i++) { 87 Assert.assertEquals(r[i], f.apply(a[i])); 88 } 89 } catch (AssertionError e) { 90 Assert.assertEquals(r[i], f.apply(a[i]), "at index #" + i + ", input = " + a[i]); 91 } 92 } 93 94 interface FUnArrayOp { 95 short[] apply(short a); 96 } 97 98 static void assertArraysEquals(short[] r, short[] a, FUnArrayOp f) { 99 int i = 0; 100 try { 101 for (; i < a.length; i += SPECIES.length()) { 102 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()), 103 f.apply(a[i])); 104 } 105 } catch (AssertionError e) { 106 short[] ref = f.apply(a[i]); 107 short[] res = Arrays.copyOfRange(r, i, i+SPECIES.length()); 108 Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref) 109 + ", res: " + Arrays.toString(res) 110 + "), at index #" + i); 111 } 112 } 113 114 static void assertArraysEquals(short[] r, short[] a, boolean[] mask, FUnOp f) { 115 int i = 0; 116 try { 117 for (; i < a.length; i++) { 118 Assert.assertEquals(r[i], mask[i % SPECIES.length()] ? f.apply(a[i]) : a[i]); 119 } 120 } catch (AssertionError e) { 121 Assert.assertEquals(r[i], mask[i % SPECIES.length()] ? f.apply(a[i]) : a[i], "at index #" + i + ", input = " + a[i] + ", mask = " + mask[i % SPECIES.length()]); 122 } 123 } 124 125 interface FReductionOp { 126 short apply(short[] a, int idx); 127 } 128 129 interface FReductionAllOp { 130 short apply(short[] a); 131 } 132 133 static void assertReductionArraysEquals(short[] r, short rc, short[] a, 134 FReductionOp f, FReductionAllOp fa) { 135 int i = 0; 136 try { 137 Assert.assertEquals(rc, fa.apply(a)); 138 for (; i < a.length; i += SPECIES.length()) { 139 Assert.assertEquals(r[i], f.apply(a, i)); 140 } 141 } catch (AssertionError e) { 142 Assert.assertEquals(rc, fa.apply(a), "Final result is incorrect!"); 143 Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i); 144 } 145 } 146 147 interface FReductionMaskedOp { 148 short apply(short[] a, int idx, boolean[] mask); 149 } 150 151 interface FReductionAllMaskedOp { 152 short apply(short[] a, boolean[] mask); 153 } 154 155 static void assertReductionArraysEqualsMasked(short[] r, short rc, short[] a, boolean[] mask, 156 FReductionMaskedOp f, FReductionAllMaskedOp fa) { 157 int i = 0; 158 try { 159 Assert.assertEquals(rc, fa.apply(a, mask)); 160 for (; i < a.length; i += SPECIES.length()) { 161 Assert.assertEquals(r[i], f.apply(a, i, mask)); 162 } 163 } catch (AssertionError e) { 164 Assert.assertEquals(rc, fa.apply(a, mask), "Final result is incorrect!"); 165 Assert.assertEquals(r[i], f.apply(a, i, mask), "at index #" + i); 166 } 167 } 168 169 interface FReductionOpLong { 170 long apply(short[] a, int idx); 171 } 172 173 interface FReductionAllOpLong { 174 long apply(short[] a); 175 } 176 177 static void assertReductionLongArraysEquals(long[] r, long rc, short[] a, 178 FReductionOpLong f, FReductionAllOpLong fa) { 179 int i = 0; 180 try { 181 Assert.assertEquals(rc, fa.apply(a)); 182 for (; i < a.length; i += SPECIES.length()) { 183 Assert.assertEquals(r[i], f.apply(a, i)); 184 } 185 } catch (AssertionError e) { 186 Assert.assertEquals(rc, fa.apply(a), "Final result is incorrect!"); 187 Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i); 188 } 189 } 190 191 interface FReductionMaskedOpLong { 192 long apply(short[] a, int idx, boolean[] mask); 193 } 194 195 interface FReductionAllMaskedOpLong { 196 long apply(short[] a, boolean[] mask); 197 } 198 199 static void assertReductionLongArraysEqualsMasked(long[] r, long rc, short[] a, boolean[] mask, 200 FReductionMaskedOpLong f, FReductionAllMaskedOpLong fa) { 201 int i = 0; 202 try { 203 Assert.assertEquals(rc, fa.apply(a, mask)); 204 for (; i < a.length; i += SPECIES.length()) { 205 Assert.assertEquals(r[i], f.apply(a, i, mask)); 206 } 207 } catch (AssertionError e) { 208 Assert.assertEquals(rc, fa.apply(a, mask), "Final result is incorrect!"); 209 Assert.assertEquals(r[i], f.apply(a, i, mask), "at index #" + i); 210 } 211 } 212 213 interface FBoolReductionOp { 214 boolean apply(boolean[] a, int idx); 215 } 216 217 static void assertReductionBoolArraysEquals(boolean[] r, boolean[] a, FBoolReductionOp f) { 218 int i = 0; 219 try { 220 for (; i < a.length; i += SPECIES.length()) { 221 Assert.assertEquals(r[i], f.apply(a, i)); 222 } 223 } catch (AssertionError e) { 224 Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i); 225 } 226 } 227 228 interface FMaskReductionOp { 229 int apply(boolean[] a, int idx); 230 } 231 232 static void assertMaskReductionArraysEquals(int[] r, boolean[] a, FMaskReductionOp f) { 233 int i = 0; 234 try { 235 for (; i < a.length; i += SPECIES.length()) { 236 Assert.assertEquals(r[i], f.apply(a, i)); 237 } 238 } catch (AssertionError e) { 239 Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i); 240 } 241 } 242 243 static void assertRearrangeArraysEquals(short[] r, short[] a, int[] order, int vector_len) { 244 int i = 0, j = 0; 245 try { 246 for (; i < a.length; i += vector_len) { 247 for (j = 0; j < vector_len; j++) { 248 Assert.assertEquals(r[i+j], a[i+order[i+j]]); 249 } 250 } 251 } catch (AssertionError e) { 252 int idx = i + j; 253 Assert.assertEquals(r[i+j], a[i+order[i+j]], "at index #" + idx + ", input = " + a[i+order[i+j]]); 254 } 255 } 256 257 static void assertcompressArraysEquals(short[] r, short[] a, boolean[] m, int vector_len) { 258 int i = 0, j = 0, k = 0; 259 try { 260 for (; i < a.length; i += vector_len) { 261 k = 0; 262 for (j = 0; j < vector_len; j++) { 263 if (m[(i + j) % SPECIES.length()]) { 264 Assert.assertEquals(r[i + k], a[i + j]); 265 k++; 266 } 267 } 268 for (; k < vector_len; k++) { 269 Assert.assertEquals(r[i + k], (short)0); 270 } 271 } 272 } catch (AssertionError e) { 273 int idx = i + k; 274 if (m[(i + j) % SPECIES.length()]) { 275 Assert.assertEquals(r[idx], a[i + j], "at index #" + idx); 276 } else { 277 Assert.assertEquals(r[idx], (short)0, "at index #" + idx); 278 } 279 } 280 } 281 282 static void assertexpandArraysEquals(short[] r, short[] a, boolean[] m, int vector_len) { 283 int i = 0, j = 0, k = 0; 284 try { 285 for (; i < a.length; i += vector_len) { 286 k = 0; 287 for (j = 0; j < vector_len; j++) { 288 if (m[(i + j) % SPECIES.length()]) { 289 Assert.assertEquals(r[i + j], a[i + k]); 290 k++; 291 } else { 292 Assert.assertEquals(r[i + j], (short)0); 293 } 294 } 295 } 296 } catch (AssertionError e) { 297 int idx = i + j; 298 if (m[idx % SPECIES.length()]) { 299 Assert.assertEquals(r[idx], a[i + k], "at index #" + idx); 300 } else { 301 Assert.assertEquals(r[idx], (short)0, "at index #" + idx); 302 } 303 } 304 } 305 306 static void assertSelectFromTwoVectorEquals(short[] r, short[] order, short[] a, short[] b, int vector_len) { 307 int i = 0, j = 0; 308 boolean is_exceptional_idx = false; 309 int idx = 0, wrapped_index = 0, oidx = 0; 310 try { 311 for (; i < a.length; i += vector_len) { 312 for (j = 0; j < vector_len; j++) { 313 idx = i + j; 314 wrapped_index = Math.floorMod((int)order[idx], 2 * vector_len); 315 is_exceptional_idx = wrapped_index >= vector_len; 316 oidx = is_exceptional_idx ? (wrapped_index - vector_len) : wrapped_index; 317 Assert.assertEquals(r[idx], (is_exceptional_idx ? b[i + oidx] : a[i + oidx])); 318 } 319 } 320 } catch (AssertionError e) { 321 Assert.assertEquals(r[idx], (is_exceptional_idx ? b[i + oidx] : a[i + oidx]), "at index #" + idx + ", order = " + order[idx] + ", a = " + a[i + oidx] + ", b = " + b[i + oidx]); 322 } 323 } 324 325 static void assertSelectFromArraysEquals(short[] r, short[] a, short[] order, int vector_len) { 326 int i = 0, j = 0; 327 try { 328 for (; i < a.length; i += vector_len) { 329 for (j = 0; j < vector_len; j++) { 330 Assert.assertEquals(r[i+j], a[i+(int)order[i+j]]); 331 } 332 } 333 } catch (AssertionError e) { 334 int idx = i + j; 335 Assert.assertEquals(r[i+j], a[i+(int)order[i+j]], "at index #" + idx + ", input = " + a[i+(int)order[i+j]]); 336 } 337 } 338 339 static void assertRearrangeArraysEquals(short[] r, short[] a, int[] order, boolean[] mask, int vector_len) { 340 int i = 0, j = 0; 341 try { 342 for (; i < a.length; i += vector_len) { 343 for (j = 0; j < vector_len; j++) { 344 if (mask[j % SPECIES.length()]) 345 Assert.assertEquals(r[i+j], a[i+order[i+j]]); 346 else 347 Assert.assertEquals(r[i+j], (short)0); 348 } 349 } 350 } catch (AssertionError e) { 351 int idx = i + j; 352 if (mask[j % SPECIES.length()]) 353 Assert.assertEquals(r[i+j], a[i+order[i+j]], "at index #" + idx + ", input = " + a[i+order[i+j]] + ", mask = " + mask[j % SPECIES.length()]); 354 else 355 Assert.assertEquals(r[i+j], (short)0, "at index #" + idx + ", input = " + a[i+order[i+j]] + ", mask = " + mask[j % SPECIES.length()]); 356 } 357 } 358 359 static void assertSelectFromArraysEquals(short[] r, short[] a, short[] order, boolean[] mask, int vector_len) { 360 int i = 0, j = 0; 361 try { 362 for (; i < a.length; i += vector_len) { 363 for (j = 0; j < vector_len; j++) { 364 if (mask[j % SPECIES.length()]) 365 Assert.assertEquals(r[i+j], a[i+(int)order[i+j]]); 366 else 367 Assert.assertEquals(r[i+j], (short)0); 368 } 369 } 370 } catch (AssertionError e) { 371 int idx = i + j; 372 if (mask[j % SPECIES.length()]) 373 Assert.assertEquals(r[i+j], a[i+(int)order[i+j]], "at index #" + idx + ", input = " + a[i+(int)order[i+j]] + ", mask = " + mask[j % SPECIES.length()]); 374 else 375 Assert.assertEquals(r[i+j], (short)0, "at index #" + idx + ", input = " + a[i+(int)order[i+j]] + ", mask = " + mask[j % SPECIES.length()]); 376 } 377 } 378 379 static void assertBroadcastArraysEquals(short[] r, short[] a) { 380 int i = 0; 381 for (; i < a.length; i += SPECIES.length()) { 382 int idx = i; 383 for (int j = idx; j < (idx + SPECIES.length()); j++) 384 a[j]=a[idx]; 385 } 386 387 try { 388 for (i = 0; i < a.length; i++) { 389 Assert.assertEquals(r[i], a[i]); 390 } 391 } catch (AssertionError e) { 392 Assert.assertEquals(r[i], a[i], "at index #" + i + ", input = " + a[i]); 393 } 394 } 395 396 interface FBinOp { 397 short apply(short a, short b); 398 } 399 400 interface FBinMaskOp { 401 short apply(short a, short b, boolean m); 402 403 static FBinMaskOp lift(FBinOp f) { 404 return (a, b, m) -> m ? f.apply(a, b) : a; 405 } 406 } 407 408 static void assertArraysEqualsAssociative(short[] rl, short[] rr, short[] a, short[] b, short[] c, FBinOp f) { 409 int i = 0; 410 try { 411 for (; i < a.length; i++) { 412 //Left associative 413 Assert.assertEquals(rl[i], f.apply(f.apply(a[i], b[i]), c[i])); 414 415 //Right associative 416 Assert.assertEquals(rr[i], f.apply(a[i], f.apply(b[i], c[i]))); 417 418 //Results equal sanity check 419 Assert.assertEquals(rl[i], rr[i]); 420 } 421 } catch (AssertionError e) { 422 Assert.assertEquals(rl[i], f.apply(f.apply(a[i], b[i]), c[i]), "left associative test at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " + c[i]); 423 Assert.assertEquals(rr[i], f.apply(a[i], f.apply(b[i], c[i])), "right associative test at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " + c[i]); 424 Assert.assertEquals(rl[i], rr[i], "Result checks not equal at index #" + i + "leftRes = " + rl[i] + ", rightRes = " + rr[i]); 425 } 426 } 427 428 static void assertArraysEqualsAssociative(short[] rl, short[] rr, short[] a, short[] b, short[] c, boolean[] mask, FBinOp f) { 429 assertArraysEqualsAssociative(rl, rr, a, b, c, mask, FBinMaskOp.lift(f)); 430 } 431 432 static void assertArraysEqualsAssociative(short[] rl, short[] rr, short[] a, short[] b, short[] c, boolean[] mask, FBinMaskOp f) { 433 int i = 0; 434 boolean mask_bit = false; 435 try { 436 for (; i < a.length; i++) { 437 mask_bit = mask[i % SPECIES.length()]; 438 //Left associative 439 Assert.assertEquals(rl[i], f.apply(f.apply(a[i], b[i], mask_bit), c[i], mask_bit)); 440 441 //Right associative 442 Assert.assertEquals(rr[i], f.apply(a[i], f.apply(b[i], c[i], mask_bit), mask_bit)); 443 444 //Results equal sanity check 445 Assert.assertEquals(rl[i], rr[i]); 446 } 447 } catch (AssertionError e) { 448 Assert.assertEquals(rl[i], f.apply(f.apply(a[i], b[i], mask_bit), c[i], mask_bit), "left associative masked test at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " + c[i] + ", mask = " + mask_bit); 449 Assert.assertEquals(rr[i], f.apply(a[i], f.apply(b[i], c[i], mask_bit), mask_bit), "right associative masked test at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " + c[i] + ", mask = " + mask_bit); 450 Assert.assertEquals(rl[i], rr[i], "Result checks not equal at index #" + i + "leftRes = " + rl[i] + ", rightRes = " + rr[i]); 451 } 452 } 453 454 static void assertArraysEquals(short[] r, short[] a, short[] b, FBinOp f) { 455 int i = 0; 456 try { 457 for (; i < a.length; i++) { 458 Assert.assertEquals(r[i], f.apply(a[i], b[i])); 459 } 460 } catch (AssertionError e) { 461 Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); 462 } 463 } 464 465 static void assertArraysEquals(short[] r, short[] a, short b, FBinOp f) { 466 int i = 0; 467 try { 468 for (; i < a.length; i++) { 469 Assert.assertEquals(r[i], f.apply(a[i], b)); 470 } 471 } catch (AssertionError e) { 472 Assert.assertEquals(r[i], f.apply(a[i], b), "(" + a[i] + ", " + b + ") at index #" + i); 473 } 474 } 475 476 static void assertBroadcastArraysEquals(short[] r, short[] a, short[] b, FBinOp f) { 477 int i = 0; 478 try { 479 for (; i < a.length; i++) { 480 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()])); 481 } 482 } catch (AssertionError e) { 483 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()]), 484 "(" + a[i] + ", " + b[(i / SPECIES.length()) * SPECIES.length()] + ") at index #" + i); 485 } 486 } 487 488 static void assertBroadcastLongArraysEquals(short[] r, short[] a, short[] b, FBinOp f) { 489 int i = 0; 490 try { 491 for (; i < a.length; i++) { 492 Assert.assertEquals(r[i], f.apply(a[i], (short)((long)b[(i / SPECIES.length()) * SPECIES.length()]))); 493 } 494 } catch (AssertionError e) { 495 Assert.assertEquals(r[i], f.apply(a[i], (short)((long)b[(i / SPECIES.length()) * SPECIES.length()])), 496 "(" + a[i] + ", " + b[(i / SPECIES.length()) * SPECIES.length()] + ") at index #" + i); 497 } 498 } 499 500 static void assertArraysEquals(short[] r, short[] a, short[] b, boolean[] mask, FBinOp f) { 501 assertArraysEquals(r, a, b, mask, FBinMaskOp.lift(f)); 502 } 503 504 static void assertArraysEquals(short[] r, short[] a, short[] b, boolean[] mask, FBinMaskOp f) { 505 int i = 0; 506 try { 507 for (; i < a.length; i++) { 508 Assert.assertEquals(r[i], f.apply(a[i], b[i], mask[i % SPECIES.length()])); 509 } 510 } catch (AssertionError err) { 511 Assert.assertEquals(r[i], f.apply(a[i], b[i], mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", mask = " + mask[i % SPECIES.length()]); 512 } 513 } 514 515 static void assertArraysEquals(short[] r, short[] a, short b, boolean[] mask, FBinOp f) { 516 assertArraysEquals(r, a, b, mask, FBinMaskOp.lift(f)); 517 } 518 519 static void assertArraysEquals(short[] r, short[] a, short b, boolean[] mask, FBinMaskOp f) { 520 int i = 0; 521 try { 522 for (; i < a.length; i++) { 523 Assert.assertEquals(r[i], f.apply(a[i], b, mask[i % SPECIES.length()])); 524 } 525 } catch (AssertionError err) { 526 Assert.assertEquals(r[i], f.apply(a[i], b, mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " + b + ", mask = " + mask[i % SPECIES.length()]); 527 } 528 } 529 530 static void assertBroadcastArraysEquals(short[] r, short[] a, short[] b, boolean[] mask, FBinOp f) { 531 assertBroadcastArraysEquals(r, a, b, mask, FBinMaskOp.lift(f)); 532 } 533 534 static void assertBroadcastArraysEquals(short[] r, short[] a, short[] b, boolean[] mask, FBinMaskOp f) { 535 int i = 0; 536 try { 537 for (; i < a.length; i++) { 538 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], mask[i % SPECIES.length()])); 539 } 540 } catch (AssertionError err) { 541 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], 542 mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + 543 ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " + 544 mask[i % SPECIES.length()]); 545 } 546 } 547 548 static void assertBroadcastLongArraysEquals(short[] r, short[] a, short[] b, boolean[] mask, FBinOp f) { 549 assertBroadcastLongArraysEquals(r, a, b, mask, FBinMaskOp.lift(f)); 550 } 551 552 static void assertBroadcastLongArraysEquals(short[] r, short[] a, short[] b, boolean[] mask, FBinMaskOp f) { 553 int i = 0; 554 try { 555 for (; i < a.length; i++) { 556 Assert.assertEquals(r[i], f.apply(a[i], (short)((long)b[(i / SPECIES.length()) * SPECIES.length()]), mask[i % SPECIES.length()])); 557 } 558 } catch (AssertionError err) { 559 Assert.assertEquals(r[i], f.apply(a[i], (short)((long)b[(i / SPECIES.length()) * SPECIES.length()]), 560 mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + 561 ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " + 562 mask[i % SPECIES.length()]); 563 } 564 } 565 566 static void assertShiftArraysEquals(short[] r, short[] a, short[] b, FBinOp f) { 567 int i = 0; 568 int j = 0; 569 try { 570 for (; j < a.length; j += SPECIES.length()) { 571 for (i = 0; i < SPECIES.length(); i++) { 572 Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j])); 573 } 574 } 575 } catch (AssertionError e) { 576 Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j]), "at index #" + i + ", " + j); 577 } 578 } 579 580 static void assertShiftArraysEquals(short[] r, short[] a, short[] b, boolean[] mask, FBinOp f) { 581 assertShiftArraysEquals(r, a, b, mask, FBinMaskOp.lift(f)); 582 } 583 584 static void assertShiftArraysEquals(short[] r, short[] a, short[] b, boolean[] mask, FBinMaskOp f) { 585 int i = 0; 586 int j = 0; 587 try { 588 for (; j < a.length; j += SPECIES.length()) { 589 for (i = 0; i < SPECIES.length(); i++) { 590 Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j], mask[i])); 591 } 592 } 593 } catch (AssertionError err) { 594 Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j], mask[i]), "at index #" + i + ", input1 = " + a[i+j] + ", input2 = " + b[j] + ", mask = " + mask[i]); 595 } 596 } 597 598 interface FBinConstOp { 599 short apply(short a); 600 } 601 602 interface FBinConstMaskOp { 603 short apply(short a, boolean m); 604 605 static FBinConstMaskOp lift(FBinConstOp f) { 606 return (a, m) -> m ? f.apply(a) : a; 607 } 608 } 609 610 static void assertShiftConstEquals(short[] r, short[] a, FBinConstOp f) { 611 int i = 0; 612 int j = 0; 613 try { 614 for (; j < a.length; j += SPECIES.length()) { 615 for (i = 0; i < SPECIES.length(); i++) { 616 Assert.assertEquals(r[i+j], f.apply(a[i+j])); 617 } 618 } 619 } catch (AssertionError e) { 620 Assert.assertEquals(r[i+j], f.apply(a[i+j]), "at index #" + i + ", " + j); 621 } 622 } 623 624 static void assertShiftConstEquals(short[] r, short[] a, boolean[] mask, FBinConstOp f) { 625 assertShiftConstEquals(r, a, mask, FBinConstMaskOp.lift(f)); 626 } 627 628 static void assertShiftConstEquals(short[] r, short[] a, boolean[] mask, FBinConstMaskOp f) { 629 int i = 0; 630 int j = 0; 631 try { 632 for (; j < a.length; j += SPECIES.length()) { 633 for (i = 0; i < SPECIES.length(); i++) { 634 Assert.assertEquals(r[i+j], f.apply(a[i+j], mask[i])); 635 } 636 } 637 } catch (AssertionError err) { 638 Assert.assertEquals(r[i+j], f.apply(a[i+j], mask[i]), "at index #" + i + ", input1 = " + a[i+j] + ", mask = " + mask[i]); 639 } 640 } 641 642 interface FTernOp { 643 short apply(short a, short b, short c); 644 } 645 646 interface FTernMaskOp { 647 short apply(short a, short b, short c, boolean m); 648 649 static FTernMaskOp lift(FTernOp f) { 650 return (a, b, c, m) -> m ? f.apply(a, b, c) : a; 651 } 652 } 653 654 static void assertArraysEquals(short[] r, short[] a, short[] b, short[] c, FTernOp f) { 655 int i = 0; 656 try { 657 for (; i < a.length; i++) { 658 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[i])); 659 } 660 } catch (AssertionError e) { 661 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[i]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " + c[i]); 662 } 663 } 664 665 static void assertArraysEquals(short[] r, short[] a, short[] b, short[] c, boolean[] mask, FTernOp f) { 666 assertArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f)); 667 } 668 669 static void assertArraysEquals(short[] r, short[] a, short[] b, short[] c, boolean[] mask, FTernMaskOp f) { 670 int i = 0; 671 try { 672 for (; i < a.length; i++) { 673 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[i], mask[i % SPECIES.length()])); 674 } 675 } catch (AssertionError err) { 676 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[i], mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " 677 + b[i] + ", input3 = " + c[i] + ", mask = " + mask[i % SPECIES.length()]); 678 } 679 } 680 681 static void assertBroadcastArraysEquals(short[] r, short[] a, short[] b, short[] c, FTernOp f) { 682 int i = 0; 683 try { 684 for (; i < a.length; i++) { 685 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[(i / SPECIES.length()) * SPECIES.length()])); 686 } 687 } catch (AssertionError e) { 688 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[(i / SPECIES.length()) * SPECIES.length()]), "at index #" + 689 i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " + 690 c[(i / SPECIES.length()) * SPECIES.length()]); 691 } 692 } 693 694 static void assertAltBroadcastArraysEquals(short[] r, short[] a, short[] b, short[] c, FTernOp f) { 695 int i = 0; 696 try { 697 for (; i < a.length; i++) { 698 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], c[i])); 699 } 700 } catch (AssertionError e) { 701 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], c[i]), "at index #" + 702 i + ", input1 = " + a[i] + ", input2 = " + 703 b[(i / SPECIES.length()) * SPECIES.length()] + ", input3 = " + c[i]); 704 } 705 } 706 707 static void assertBroadcastArraysEquals(short[] r, short[] a, short[] b, short[] c, boolean[] mask, 708 FTernOp f) { 709 assertBroadcastArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f)); 710 } 711 712 static void assertBroadcastArraysEquals(short[] r, short[] a, short[] b, short[] c, boolean[] mask, 713 FTernMaskOp f) { 714 int i = 0; 715 try { 716 for (; i < a.length; i++) { 717 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[(i / SPECIES.length()) * SPECIES.length()], 718 mask[i % SPECIES.length()])); 719 } 720 } catch (AssertionError err) { 721 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[(i / SPECIES.length()) * SPECIES.length()], 722 mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " + 723 b[i] + ", input3 = " + c[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " + 724 mask[i % SPECIES.length()]); 725 } 726 } 727 728 static void assertAltBroadcastArraysEquals(short[] r, short[] a, short[] b, short[] c, boolean[] mask, 729 FTernOp f) { 730 assertAltBroadcastArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f)); 731 } 732 733 static void assertAltBroadcastArraysEquals(short[] r, short[] a, short[] b, short[] c, boolean[] mask, 734 FTernMaskOp f) { 735 int i = 0; 736 try { 737 for (; i < a.length; i++) { 738 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], c[i], 739 mask[i % SPECIES.length()])); 740 } 741 } catch (AssertionError err) { 742 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], c[i], 743 mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + 744 ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + 745 ", input3 = " + c[i] + ", mask = " + mask[i % SPECIES.length()]); 746 } 747 } 748 749 static void assertDoubleBroadcastArraysEquals(short[] r, short[] a, short[] b, short[] c, FTernOp f) { 750 int i = 0; 751 try { 752 for (; i < a.length; i++) { 753 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], 754 c[(i / SPECIES.length()) * SPECIES.length()])); 755 } 756 } catch (AssertionError e) { 757 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], 758 c[(i / SPECIES.length()) * SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] 759 + ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + ", input3 = " + 760 c[(i / SPECIES.length()) * SPECIES.length()]); 761 } 762 } 763 764 static void assertDoubleBroadcastArraysEquals(short[] r, short[] a, short[] b, short[] c, boolean[] mask, 765 FTernOp f) { 766 assertDoubleBroadcastArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f)); 767 } 768 769 static void assertDoubleBroadcastArraysEquals(short[] r, short[] a, short[] b, short[] c, boolean[] mask, 770 FTernMaskOp f) { 771 int i = 0; 772 try { 773 for (; i < a.length; i++) { 774 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], 775 c[(i / SPECIES.length()) * SPECIES.length()], mask[i % SPECIES.length()])); 776 } 777 } catch (AssertionError err) { 778 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], 779 c[(i / SPECIES.length()) * SPECIES.length()], mask[i % SPECIES.length()]), "at index #" 780 + i + ", input1 = " + a[i] + ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + 781 ", input3 = " + c[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " + 782 mask[i % SPECIES.length()]); 783 } 784 } 785 786 787 788 interface FGatherScatterOp { 789 short[] apply(short[] a, int ix, int[] b, int iy); 790 } 791 792 static void assertArraysEquals(short[] r, short[] a, int[] b, FGatherScatterOp f) { 793 int i = 0; 794 try { 795 for (; i < a.length; i += SPECIES.length()) { 796 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()), 797 f.apply(a, i, b, i)); 798 } 799 } catch (AssertionError e) { 800 short[] ref = f.apply(a, i, b, i); 801 short[] res = Arrays.copyOfRange(r, i, i+SPECIES.length()); 802 Assert.assertEquals(res, ref, 803 "(ref: " + Arrays.toString(ref) + ", res: " + Arrays.toString(res) + ", a: " 804 + Arrays.toString(Arrays.copyOfRange(a, i, i+SPECIES.length())) 805 + ", b: " 806 + Arrays.toString(Arrays.copyOfRange(b, i, i+SPECIES.length())) 807 + " at index #" + i); 808 } 809 } 810 811 interface FGatherMaskedOp { 812 short[] apply(short[] a, int ix, boolean[] mask, int[] b, int iy); 813 } 814 815 interface FScatterMaskedOp { 816 short[] apply(short[] r, short[] a, int ix, boolean[] mask, int[] b, int iy); 817 } 818 819 static void assertArraysEquals(short[] r, short[] a, int[] b, boolean[] mask, FGatherMaskedOp f) { 820 int i = 0; 821 try { 822 for (; i < a.length; i += SPECIES.length()) { 823 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()), 824 f.apply(a, i, mask, b, i)); 825 } 826 } catch (AssertionError e) { 827 short[] ref = f.apply(a, i, mask, b, i); 828 short[] res = Arrays.copyOfRange(r, i, i+SPECIES.length()); 829 Assert.assertEquals(res, ref, 830 "(ref: " + Arrays.toString(ref) + ", res: " + Arrays.toString(res) + ", a: " 831 + Arrays.toString(Arrays.copyOfRange(a, i, i+SPECIES.length())) 832 + ", b: " 833 + Arrays.toString(Arrays.copyOfRange(b, i, i+SPECIES.length())) 834 + ", mask: " 835 + Arrays.toString(mask) 836 + " at index #" + i); 837 } 838 } 839 840 static void assertArraysEquals(short[] r, short[] a, int[] b, boolean[] mask, FScatterMaskedOp f) { 841 int i = 0; 842 try { 843 for (; i < a.length; i += SPECIES.length()) { 844 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()), 845 f.apply(r, a, i, mask, b, i)); 846 } 847 } catch (AssertionError e) { 848 short[] ref = f.apply(r, a, i, mask, b, i); 849 short[] res = Arrays.copyOfRange(r, i, i+SPECIES.length()); 850 Assert.assertEquals(res, ref, 851 "(ref: " + Arrays.toString(ref) + ", res: " + Arrays.toString(res) + ", a: " 852 + Arrays.toString(Arrays.copyOfRange(a, i, i+SPECIES.length())) 853 + ", b: " 854 + Arrays.toString(Arrays.copyOfRange(b, i, i+SPECIES.length())) 855 + ", r: " 856 + Arrays.toString(Arrays.copyOfRange(r, i, i+SPECIES.length())) 857 + ", mask: " 858 + Arrays.toString(mask) 859 + " at index #" + i); 860 } 861 } 862 863 interface FLaneOp { 864 short[] apply(short[] a, int origin, int idx); 865 } 866 867 static void assertArraysEquals(short[] r, short[] a, int origin, FLaneOp f) { 868 int i = 0; 869 try { 870 for (; i < a.length; i += SPECIES.length()) { 871 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()), 872 f.apply(a, origin, i)); 873 } 874 } catch (AssertionError e) { 875 short[] ref = f.apply(a, origin, i); 876 short[] res = Arrays.copyOfRange(r, i, i+SPECIES.length()); 877 Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref) 878 + ", res: " + Arrays.toString(res) 879 + "), at index #" + i); 880 } 881 } 882 883 interface FLaneBop { 884 short[] apply(short[] a, short[] b, int origin, int idx); 885 } 886 887 static void assertArraysEquals(short[] r, short[] a, short[] b, int origin, FLaneBop f) { 888 int i = 0; 889 try { 890 for (; i < a.length; i += SPECIES.length()) { 891 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()), 892 f.apply(a, b, origin, i)); 893 } 894 } catch (AssertionError e) { 895 short[] ref = f.apply(a, b, origin, i); 896 short[] res = Arrays.copyOfRange(r, i, i+SPECIES.length()); 897 Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref) 898 + ", res: " + Arrays.toString(res) 899 + "), at index #" + i 900 + ", at origin #" + origin); 901 } 902 } 903 904 interface FLaneMaskedBop { 905 short[] apply(short[] a, short[] b, int origin, boolean[] mask, int idx); 906 } 907 908 static void assertArraysEquals(short[] r, short[] a, short[] b, int origin, boolean[] mask, FLaneMaskedBop f) { 909 int i = 0; 910 try { 911 for (; i < a.length; i += SPECIES.length()) { 912 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()), 913 f.apply(a, b, origin, mask, i)); 914 } 915 } catch (AssertionError e) { 916 short[] ref = f.apply(a, b, origin, mask, i); 917 short[] res = Arrays.copyOfRange(r, i, i+SPECIES.length()); 918 Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref) 919 + ", res: " + Arrays.toString(res) 920 + "), at index #" + i 921 + ", at origin #" + origin); 922 } 923 } 924 925 interface FLanePartBop { 926 short[] apply(short[] a, short[] b, int origin, int part, int idx); 927 } 928 929 static void assertArraysEquals(short[] r, short[] a, short[] b, int origin, int part, FLanePartBop f) { 930 int i = 0; 931 try { 932 for (; i < a.length; i += SPECIES.length()) { 933 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()), 934 f.apply(a, b, origin, part, i)); 935 } 936 } catch (AssertionError e) { 937 short[] ref = f.apply(a, b, origin, part, i); 938 short[] res = Arrays.copyOfRange(r, i, i+SPECIES.length()); 939 Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref) 940 + ", res: " + Arrays.toString(res) 941 + "), at index #" + i 942 + ", at origin #" + origin 943 + ", with part #" + part); 944 } 945 } 946 947 interface FLanePartMaskedBop { 948 short[] apply(short[] a, short[] b, int origin, int part, boolean[] mask, int idx); 949 } 950 951 static void assertArraysEquals(short[] r, short[] a, short[] b, int origin, int part, boolean[] mask, FLanePartMaskedBop f) { 952 int i = 0; 953 try { 954 for (; i < a.length; i += SPECIES.length()) { 955 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()), 956 f.apply(a, b, origin, part, mask, i)); 957 } 958 } catch (AssertionError e) { 959 short[] ref = f.apply(a, b, origin, part, mask, i); 960 short[] res = Arrays.copyOfRange(r, i, i+SPECIES.length()); 961 Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref) 962 + ", res: " + Arrays.toString(res) 963 + "), at index #" + i 964 + ", at origin #" + origin 965 + ", with part #" + part); 966 } 967 } 968 969 970 static void assertArraysEquals(int[] r, short[] a, int offs) { 971 int i = 0; 972 try { 973 for (; i < r.length; i++) { 974 Assert.assertEquals(r[i], (int)(a[i+offs])); 975 } 976 } catch (AssertionError e) { 977 Assert.assertEquals(r[i], (int)(a[i+offs]), "at index #" + i + ", input = " + a[i+offs]); 978 } 979 } 980 981 982 983 static void assertArraysEquals(long[] r, short[] a, int offs) { 984 int i = 0; 985 try { 986 for (; i < r.length; i++) { 987 Assert.assertEquals(r[i], (long)(a[i+offs])); 988 } 989 } catch (AssertionError e) { 990 Assert.assertEquals(r[i], (long)(a[i+offs]), "at index #" + i + ", input = " + a[i+offs]); 991 } 992 } 993 994 static void assertArraysEquals(double[] r, short[] a, int offs) { 995 int i = 0; 996 try { 997 for (; i < r.length; i++) { 998 Assert.assertEquals(r[i], (double)(a[i+offs])); 999 } 1000 } catch (AssertionError e) { 1001 Assert.assertEquals(r[i], (double)(a[i+offs]), "at index #" + i + ", input = " + a[i+offs]); 1002 } 1003 } 1004 1005 static short bits(short e) { 1006 return e; 1007 } 1008 1009 static final List<IntFunction<short[]>> SHORT_GENERATORS = List.of( 1010 withToString("short[-i * 5]", (int s) -> { 1011 return fill(s * BUFFER_REPS, 1012 i -> (short)(-i * 5)); 1013 }), 1014 withToString("short[i * 5]", (int s) -> { 1015 return fill(s * BUFFER_REPS, 1016 i -> (short)(i * 5)); 1017 }), 1018 withToString("short[i + 1]", (int s) -> { 1019 return fill(s * BUFFER_REPS, 1020 i -> (((short)(i + 1) == 0) ? 1 : (short)(i + 1))); 1021 }), 1022 withToString("short[cornerCaseValue(i)]", (int s) -> { 1023 return fill(s * BUFFER_REPS, 1024 i -> cornerCaseValue(i)); 1025 }) 1026 ); 1027 1028 static final List<IntFunction<short[]>> SHORT_SATURATING_GENERATORS = List.of( 1029 withToString("short[Short.MIN_VALUE]", (int s) -> { 1030 return fill(s * BUFFER_REPS, 1031 i -> (short)(Short.MIN_VALUE)); 1032 }), 1033 withToString("short[Short.MAX_VALUE]", (int s) -> { 1034 return fill(s * BUFFER_REPS, 1035 i -> (short)(Short.MAX_VALUE)); 1036 }), 1037 withToString("short[Short.MAX_VALUE - 100]", (int s) -> { 1038 return fill(s * BUFFER_REPS, 1039 i -> (short)(Short.MAX_VALUE - 100)); 1040 }), 1041 withToString("short[Short.MIN_VALUE + 100]", (int s) -> { 1042 return fill(s * BUFFER_REPS, 1043 i -> (short)(Short.MIN_VALUE + 100)); 1044 }), 1045 withToString("short[-i * 5]", (int s) -> { 1046 return fill(s * BUFFER_REPS, 1047 i -> (short)(-i * 5)); 1048 }), 1049 withToString("short[i * 5]", (int s) -> { 1050 return fill(s * BUFFER_REPS, 1051 i -> (short)(i * 5)); 1052 }) 1053 ); 1054 1055 static final List<IntFunction<short[]>> SHORT_SATURATING_GENERATORS_ASSOC = List.of( 1056 withToString("short[Short.MAX_VALUE]", (int s) -> { 1057 return fill(s * BUFFER_REPS, 1058 i -> (short)(Short.MAX_VALUE)); 1059 }), 1060 withToString("short[Short.MAX_VALUE - 100]", (int s) -> { 1061 return fill(s * BUFFER_REPS, 1062 i -> (short)(Short.MAX_VALUE - 100)); 1063 }), 1064 withToString("short[-1]", (int s) -> { 1065 return fill(s * BUFFER_REPS, 1066 i -> (short)(-1)); 1067 }) 1068 ); 1069 1070 // Create combinations of pairs 1071 // @@@ Might be sensitive to order e.g. div by 0 1072 static final List<List<IntFunction<short[]>>> SHORT_GENERATOR_PAIRS = 1073 Stream.of(SHORT_GENERATORS.get(0)). 1074 flatMap(fa -> SHORT_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))). 1075 collect(Collectors.toList()); 1076 1077 static final List<List<IntFunction<short[]>>> SHORT_SATURATING_GENERATOR_PAIRS = 1078 Stream.of(SHORT_GENERATORS.get(0)). 1079 flatMap(fa -> SHORT_SATURATING_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))). 1080 collect(Collectors.toList()); 1081 1082 static final List<List<IntFunction<short[]>>> SHORT_SATURATING_GENERATOR_TRIPLETS = 1083 Stream.of(SHORT_GENERATORS.get(1)) 1084 .flatMap(fa -> SHORT_SATURATING_GENERATORS_ASSOC.stream().map(fb -> List.of(fa, fb))) 1085 .flatMap(pair -> SHORT_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) 1086 .collect(Collectors.toList()); 1087 1088 @DataProvider 1089 public Object[][] boolUnaryOpProvider() { 1090 return BOOL_ARRAY_GENERATORS.stream(). 1091 map(f -> new Object[]{f}). 1092 toArray(Object[][]::new); 1093 } 1094 1095 static final List<List<IntFunction<short[]>>> SHORT_GENERATOR_TRIPLES = 1096 SHORT_GENERATOR_PAIRS.stream(). 1097 flatMap(pair -> SHORT_GENERATORS.stream().map(f -> List.of(pair.get(0), pair.get(1), f))). 1098 collect(Collectors.toList()); 1099 1100 static final List<IntFunction<short[]>> SELECT_FROM_INDEX_GENERATORS = List.of( 1101 withToString("short[0..VECLEN*2)", (int s) -> { 1102 return fill(s * BUFFER_REPS, 1103 i -> (short)(RAND.nextInt())); 1104 }) 1105 ); 1106 1107 static final List<List<IntFunction<short[]>>> SHORT_GENERATOR_SELECT_FROM_TRIPLES = 1108 SHORT_GENERATOR_PAIRS.stream(). 1109 flatMap(pair -> SELECT_FROM_INDEX_GENERATORS.stream().map(f -> List.of(pair.get(0), pair.get(1), f))). 1110 collect(Collectors.toList()); 1111 1112 @DataProvider 1113 public Object[][] shortBinaryOpProvider() { 1114 return SHORT_GENERATOR_PAIRS.stream().map(List::toArray). 1115 toArray(Object[][]::new); 1116 } 1117 1118 @DataProvider 1119 public Object[][] shortSaturatingBinaryOpProvider() { 1120 return SHORT_SATURATING_GENERATOR_PAIRS.stream().map(List::toArray). 1121 toArray(Object[][]::new); 1122 } 1123 1124 @DataProvider 1125 public Object[][] shortSaturatingBinaryOpAssocProvider() { 1126 return SHORT_SATURATING_GENERATOR_TRIPLETS.stream().map(List::toArray). 1127 toArray(Object[][]::new); 1128 } 1129 1130 @DataProvider 1131 public Object[][] shortSaturatingBinaryOpAssocMaskProvider() { 1132 return BOOLEAN_MASK_GENERATORS.stream(). 1133 flatMap(fm -> SHORT_SATURATING_GENERATOR_TRIPLETS.stream().map(lfa -> { 1134 return Stream.concat(lfa.stream(), Stream.of(fm)).toArray(); 1135 })). 1136 toArray(Object[][]::new); 1137 } 1138 1139 1140 @DataProvider 1141 public Object[][] shortIndexedOpProvider() { 1142 return SHORT_GENERATOR_PAIRS.stream().map(List::toArray). 1143 toArray(Object[][]::new); 1144 } 1145 1146 @DataProvider 1147 public Object[][] shortSaturatingBinaryOpMaskProvider() { 1148 return BOOLEAN_MASK_GENERATORS.stream(). 1149 flatMap(fm -> SHORT_SATURATING_GENERATOR_PAIRS.stream().map(lfa -> { 1150 return Stream.concat(lfa.stream(), Stream.of(fm)).toArray(); 1151 })). 1152 toArray(Object[][]::new); 1153 } 1154 1155 @DataProvider 1156 public Object[][] shortSaturatingUnaryOpProvider() { 1157 return SHORT_SATURATING_GENERATORS.stream(). 1158 map(f -> new Object[]{f}). 1159 toArray(Object[][]::new); 1160 } 1161 1162 @DataProvider 1163 public Object[][] shortSaturatingUnaryOpMaskProvider() { 1164 return BOOLEAN_MASK_GENERATORS.stream(). 1165 flatMap(fm -> SHORT_SATURATING_GENERATORS.stream().map(fa -> { 1166 return new Object[] {fa, fm}; 1167 })). 1168 toArray(Object[][]::new); 1169 } 1170 1171 @DataProvider 1172 public Object[][] shortBinaryOpMaskProvider() { 1173 return BOOLEAN_MASK_GENERATORS.stream(). 1174 flatMap(fm -> SHORT_GENERATOR_PAIRS.stream().map(lfa -> { 1175 return Stream.concat(lfa.stream(), Stream.of(fm)).toArray(); 1176 })). 1177 toArray(Object[][]::new); 1178 } 1179 1180 @DataProvider 1181 public Object[][] shortTernaryOpProvider() { 1182 return SHORT_GENERATOR_TRIPLES.stream().map(List::toArray). 1183 toArray(Object[][]::new); 1184 } 1185 1186 @DataProvider 1187 public Object[][] shortSelectFromTwoVectorOpProvider() { 1188 return SHORT_GENERATOR_SELECT_FROM_TRIPLES.stream().map(List::toArray). 1189 toArray(Object[][]::new); 1190 } 1191 1192 @DataProvider 1193 public Object[][] shortTernaryOpMaskProvider() { 1194 return BOOLEAN_MASK_GENERATORS.stream(). 1195 flatMap(fm -> SHORT_GENERATOR_TRIPLES.stream().map(lfa -> { 1196 return Stream.concat(lfa.stream(), Stream.of(fm)).toArray(); 1197 })). 1198 toArray(Object[][]::new); 1199 } 1200 1201 @DataProvider 1202 public Object[][] shortUnaryOpProvider() { 1203 return SHORT_GENERATORS.stream(). 1204 map(f -> new Object[]{f}). 1205 toArray(Object[][]::new); 1206 } 1207 1208 @DataProvider 1209 public Object[][] shortUnaryOpMaskProvider() { 1210 return BOOLEAN_MASK_GENERATORS.stream(). 1211 flatMap(fm -> SHORT_GENERATORS.stream().map(fa -> { 1212 return new Object[] {fa, fm}; 1213 })). 1214 toArray(Object[][]::new); 1215 } 1216 1217 @DataProvider 1218 public Object[][] maskProvider() { 1219 return BOOLEAN_MASK_GENERATORS.stream(). 1220 map(f -> new Object[]{f}). 1221 toArray(Object[][]::new); 1222 } 1223 1224 @DataProvider 1225 public Object[][] maskCompareOpProvider() { 1226 return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). 1227 toArray(Object[][]::new); 1228 } 1229 1230 @DataProvider 1231 public Object[][] shuffleProvider() { 1232 return INT_SHUFFLE_GENERATORS.stream(). 1233 map(f -> new Object[]{f}). 1234 toArray(Object[][]::new); 1235 } 1236 1237 @DataProvider 1238 public Object[][] shuffleCompareOpProvider() { 1239 return INT_SHUFFLE_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). 1240 toArray(Object[][]::new); 1241 } 1242 1243 @DataProvider 1244 public Object[][] shortUnaryOpShuffleProvider() { 1245 return INT_SHUFFLE_GENERATORS.stream(). 1246 flatMap(fs -> SHORT_GENERATORS.stream().map(fa -> { 1247 return new Object[] {fa, fs}; 1248 })). 1249 toArray(Object[][]::new); 1250 } 1251 1252 @DataProvider 1253 public Object[][] shortUnaryOpShuffleMaskProvider() { 1254 return BOOLEAN_MASK_GENERATORS.stream(). 1255 flatMap(fm -> INT_SHUFFLE_GENERATORS.stream(). 1256 flatMap(fs -> SHORT_GENERATORS.stream().map(fa -> { 1257 return new Object[] {fa, fs, fm}; 1258 }))). 1259 toArray(Object[][]::new); 1260 } 1261 1262 static final List<BiFunction<Integer,Integer,short[]>> SHORT_SHUFFLE_GENERATORS = List.of( 1263 withToStringBi("shuffle[random]", (Integer l, Integer m) -> { 1264 short[] a = new short[l]; 1265 int upper = m; 1266 for (int i = 0; i < 1; i++) { 1267 a[i] = (short)RAND.nextInt(upper); 1268 } 1269 return a; 1270 }) 1271 ); 1272 1273 @DataProvider 1274 public Object[][] shortUnaryOpSelectFromProvider() { 1275 return SHORT_SHUFFLE_GENERATORS.stream(). 1276 flatMap(fs -> SHORT_GENERATORS.stream().map(fa -> { 1277 return new Object[] {fa, fs}; 1278 })). 1279 toArray(Object[][]::new); 1280 } 1281 1282 @DataProvider 1283 public Object[][] shortUnaryOpSelectFromMaskProvider() { 1284 return BOOLEAN_MASK_GENERATORS.stream(). 1285 flatMap(fm -> SHORT_SHUFFLE_GENERATORS.stream(). 1286 flatMap(fs -> SHORT_GENERATORS.stream().map(fa -> { 1287 return new Object[] {fa, fs, fm}; 1288 }))). 1289 toArray(Object[][]::new); 1290 } 1291 1292 static final List<IntFunction<short[]>> SHORT_COMPARE_GENERATORS = List.of( 1293 withToString("short[i]", (int s) -> { 1294 return fill(s * BUFFER_REPS, 1295 i -> (short)i); 1296 }), 1297 withToString("short[i - length / 2]", (int s) -> { 1298 return fill(s * BUFFER_REPS, 1299 i -> (short)(i - (s * BUFFER_REPS / 2))); 1300 }), 1301 withToString("short[i + 1]", (int s) -> { 1302 return fill(s * BUFFER_REPS, 1303 i -> (short)(i + 1)); 1304 }), 1305 withToString("short[i - 2]", (int s) -> { 1306 return fill(s * BUFFER_REPS, 1307 i -> (short)(i - 2)); 1308 }), 1309 withToString("short[zigZag(i)]", (int s) -> { 1310 return fill(s * BUFFER_REPS, 1311 i -> i%3 == 0 ? (short)i : (i%3 == 1 ? (short)(i + 1) : (short)(i - 2))); 1312 }), 1313 withToString("short[cornerCaseValue(i)]", (int s) -> { 1314 return fill(s * BUFFER_REPS, 1315 i -> cornerCaseValue(i)); 1316 }) 1317 ); 1318 1319 static final List<List<IntFunction<short[]>>> SHORT_TEST_GENERATOR_ARGS = 1320 SHORT_COMPARE_GENERATORS.stream(). 1321 map(fa -> List.of(fa)). 1322 collect(Collectors.toList()); 1323 1324 @DataProvider 1325 public Object[][] shortTestOpProvider() { 1326 return SHORT_TEST_GENERATOR_ARGS.stream().map(List::toArray). 1327 toArray(Object[][]::new); 1328 } 1329 1330 @DataProvider 1331 public Object[][] shortTestOpMaskProvider() { 1332 return BOOLEAN_MASK_GENERATORS.stream(). 1333 flatMap(fm -> SHORT_TEST_GENERATOR_ARGS.stream().map(lfa -> { 1334 return Stream.concat(lfa.stream(), Stream.of(fm)).toArray(); 1335 })). 1336 toArray(Object[][]::new); 1337 } 1338 1339 static final List<List<IntFunction<short[]>>> SHORT_COMPARE_GENERATOR_PAIRS = 1340 SHORT_COMPARE_GENERATORS.stream(). 1341 flatMap(fa -> SHORT_COMPARE_GENERATORS.stream().map(fb -> List.of(fa, fb))). 1342 collect(Collectors.toList()); 1343 1344 @DataProvider 1345 public Object[][] shortCompareOpProvider() { 1346 return SHORT_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). 1347 toArray(Object[][]::new); 1348 } 1349 1350 @DataProvider 1351 public Object[][] shortCompareOpMaskProvider() { 1352 return BOOLEAN_MASK_GENERATORS.stream(). 1353 flatMap(fm -> SHORT_COMPARE_GENERATOR_PAIRS.stream().map(lfa -> { 1354 return Stream.concat(lfa.stream(), Stream.of(fm)).toArray(); 1355 })). 1356 toArray(Object[][]::new); 1357 } 1358 1359 interface ToShortF { 1360 short apply(int i); 1361 } 1362 1363 static short[] fill(int s , ToShortF f) { 1364 return fill(new short[s], f); 1365 } 1366 1367 static short[] fill(short[] a, ToShortF f) { 1368 for (int i = 0; i < a.length; i++) { 1369 a[i] = f.apply(i); 1370 } 1371 return a; 1372 } 1373 1374 static short cornerCaseValue(int i) { 1375 switch(i % 5) { 1376 case 0: 1377 return Short.MAX_VALUE; 1378 case 1: 1379 return Short.MIN_VALUE; 1380 case 2: 1381 return Short.MIN_VALUE; 1382 case 3: 1383 return Short.MAX_VALUE; 1384 default: 1385 return (short)0; 1386 } 1387 } 1388 1389 static final IntFunction<short[]> fr = (vl) -> { 1390 int length = BUFFER_REPS * vl; 1391 return new short[length]; 1392 }; 1393 1394 static final IntFunction<boolean[]> fmr = (vl) -> { 1395 int length = BUFFER_REPS * vl; 1396 return new boolean[length]; 1397 }; 1398 1399 static final IntFunction<long[]> lfr = (vl) -> { 1400 int length = BUFFER_REPS * vl; 1401 return new long[length]; 1402 }; 1403 1404 static void replaceZero(short[] a, short v) { 1405 for (int i = 0; i < a.length; i++) { 1406 if (a[i] == 0) { 1407 a[i] = v; 1408 } 1409 } 1410 } 1411 1412 static void replaceZero(short[] a, boolean[] mask, short v) { 1413 for (int i = 0; i < a.length; i++) { 1414 if (mask[i % mask.length] && a[i] == 0) { 1415 a[i] = v; 1416 } 1417 } 1418 } 1419 1420 static short ROL_scalar(short a, short b) { 1421 return (short)(((((short)a) & 0xFFFF) << (b & 15)) | ((((short)a) & 0xFFFF) >>> (16 - (b & 15)))); 1422 } 1423 1424 static short ROR_scalar(short a, short b) { 1425 return (short)(((((short)a) & 0xFFFF) >>> (b & 15)) | ((((short)a) & 0xFFFF) << (16 - (b & 15)))); 1426 } 1427 1428 static short TRAILING_ZEROS_COUNT_scalar(short a) { 1429 return (short) (a != 0 ? Integer.numberOfTrailingZeros(a) : 16); 1430 } 1431 1432 static short LEADING_ZEROS_COUNT_scalar(short a) { 1433 return (short) (a >= 0 ? Integer.numberOfLeadingZeros(a) - 16 : 0); 1434 } 1435 1436 static short REVERSE_scalar(short a) { 1437 short b = ROL_scalar(a, (short) 8); 1438 b = (short) (((b & 0x5555) << 1) | ((b & 0xAAAA) >>> 1)); 1439 b = (short) (((b & 0x3333) << 2) | ((b & 0xCCCC) >>> 2)); 1440 b = (short) (((b & 0x0F0F) << 4) | ((b & 0xF0F0) >>> 4)); 1441 return b; 1442 } 1443 1444 static boolean eq(short a, short b) { 1445 return a == b; 1446 } 1447 1448 static boolean neq(short a, short b) { 1449 return a != b; 1450 } 1451 1452 static boolean lt(short a, short b) { 1453 return a < b; 1454 } 1455 1456 static boolean le(short a, short b) { 1457 return a <= b; 1458 } 1459 1460 static boolean gt(short a, short b) { 1461 return a > b; 1462 } 1463 1464 static boolean ge(short a, short b) { 1465 return a >= b; 1466 } 1467 1468 static boolean ult(short a, short b) { 1469 return Short.compareUnsigned(a, b) < 0; 1470 } 1471 1472 static boolean ule(short a, short b) { 1473 return Short.compareUnsigned(a, b) <= 0; 1474 } 1475 1476 static boolean ugt(short a, short b) { 1477 return Short.compareUnsigned(a, b) > 0; 1478 } 1479 1480 static boolean uge(short a, short b) { 1481 return Short.compareUnsigned(a, b) >= 0; 1482 } 1483 1484 static short firstNonZero(short a, short b) { 1485 return Short.compare(a, (short) 0) != 0 ? a : b; 1486 } 1487 1488 @Test 1489 static void smokeTest1() { 1490 ShortVector three = ShortVector.broadcast(SPECIES, (byte)-3); 1491 ShortVector three2 = (ShortVector) SPECIES.broadcast(-3); 1492 assert(three.eq(three2).allTrue()); 1493 ShortVector three3 = three2.broadcast(1).broadcast(-3); 1494 assert(three.eq(three3).allTrue()); 1495 int scale = 2; 1496 Class<?> ETYPE = short.class; 1497 if (ETYPE == double.class || ETYPE == long.class) 1498 scale = 1000000; 1499 else if (ETYPE == byte.class && SPECIES.length() >= 64) 1500 scale = 1; 1501 ShortVector higher = three.addIndex(scale); 1502 VectorMask<Short> m = three.compare(VectorOperators.LE, higher); 1503 assert(m.allTrue()); 1504 m = higher.min((short)-1).test(VectorOperators.IS_NEGATIVE); 1505 assert(m.allTrue()); 1506 short max = higher.reduceLanes(VectorOperators.MAX); 1507 assert(max == -3 + scale * (SPECIES.length()-1)); 1508 } 1509 1510 private static short[] 1511 bothToArray(ShortVector a, ShortVector b) { 1512 short[] r = new short[a.length() + b.length()]; 1513 a.intoArray(r, 0); 1514 b.intoArray(r, a.length()); 1515 return r; 1516 } 1517 1518 @Test 1519 static void smokeTest2() { 1520 // Do some zipping and shuffling. 1521 ShortVector io = (ShortVector) SPECIES.broadcast(0).addIndex(1); 1522 ShortVector io2 = (ShortVector) VectorShuffle.iota(SPECIES,0,1,false).toVector(); 1523 Assert.assertEquals(io, io2); 1524 ShortVector a = io.add((short)1); //[1,2] 1525 ShortVector b = a.neg(); //[-1,-2] 1526 short[] abValues = bothToArray(a,b); //[1,2,-1,-2] 1527 VectorShuffle<Short> zip0 = VectorShuffle.makeZip(SPECIES, 0); 1528 VectorShuffle<Short> zip1 = VectorShuffle.makeZip(SPECIES, 1); 1529 ShortVector zab0 = a.rearrange(zip0,b); //[1,-1] 1530 ShortVector zab1 = a.rearrange(zip1,b); //[2,-2] 1531 short[] zabValues = bothToArray(zab0, zab1); //[1,-1,2,-2] 1532 // manually zip 1533 short[] manual = new short[zabValues.length]; 1534 for (int i = 0; i < manual.length; i += 2) { 1535 manual[i+0] = abValues[i/2]; 1536 manual[i+1] = abValues[a.length() + i/2]; 1537 } 1538 Assert.assertEquals(Arrays.toString(zabValues), Arrays.toString(manual)); 1539 VectorShuffle<Short> unz0 = VectorShuffle.makeUnzip(SPECIES, 0); 1540 VectorShuffle<Short> unz1 = VectorShuffle.makeUnzip(SPECIES, 1); 1541 ShortVector uab0 = zab0.rearrange(unz0,zab1); 1542 ShortVector uab1 = zab0.rearrange(unz1,zab1); 1543 short[] abValues1 = bothToArray(uab0, uab1); 1544 Assert.assertEquals(Arrays.toString(abValues), Arrays.toString(abValues1)); 1545 } 1546 1547 static void iotaShuffle() { 1548 ShortVector io = (ShortVector) SPECIES.broadcast(0).addIndex(1); 1549 ShortVector io2 = (ShortVector) VectorShuffle.iota(SPECIES, 0 , 1, false).toVector(); 1550 Assert.assertEquals(io, io2); 1551 } 1552 1553 @Test 1554 // Test all shuffle related operations. 1555 static void shuffleTest() { 1556 // To test backend instructions, make sure that C2 is used. 1557 for (int loop = 0; loop < INVOC_COUNT * INVOC_COUNT; loop++) { 1558 iotaShuffle(); 1559 } 1560 } 1561 1562 @Test 1563 void viewAsIntegeralLanesTest() { 1564 Vector<?> asIntegral = SPECIES.zero().viewAsIntegralLanes(); 1565 Assert.assertEquals(asIntegral.species(), SPECIES); 1566 } 1567 1568 @Test(expectedExceptions = UnsupportedOperationException.class) 1569 void viewAsFloatingLanesTest() { 1570 SPECIES.zero().viewAsFloatingLanes(); 1571 } 1572 1573 @Test 1574 // Test div by 0. 1575 static void bitwiseDivByZeroSmokeTest() { 1576 try { 1577 ShortVector a = (ShortVector) SPECIES.broadcast(0).addIndex(1); 1578 ShortVector b = (ShortVector) SPECIES.broadcast(0); 1579 a.div(b); 1580 Assert.fail(); 1581 } catch (ArithmeticException e) { 1582 } 1583 1584 try { 1585 ShortVector a = (ShortVector) SPECIES.broadcast(0).addIndex(1); 1586 ShortVector b = (ShortVector) SPECIES.broadcast(0); 1587 VectorMask<Short> m = a.lt((short) 1); 1588 a.div(b, m); 1589 Assert.fail(); 1590 } catch (ArithmeticException e) { 1591 } 1592 } 1593 1594 static short ADD(short a, short b) { 1595 return (short)(a + b); 1596 } 1597 1598 @Test(dataProvider = "shortBinaryOpProvider") 1599 static void ADDShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 1600 short[] a = fa.apply(SPECIES.length()); 1601 short[] b = fb.apply(SPECIES.length()); 1602 short[] r = fr.apply(SPECIES.length()); 1603 1604 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1605 for (int i = 0; i < a.length; i += SPECIES.length()) { 1606 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1607 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1608 av.lanewise(VectorOperators.ADD, bv).intoArray(r, i); 1609 } 1610 } 1611 1612 assertArraysEquals(r, a, b, Short64VectorTests::ADD); 1613 } 1614 1615 static short add(short a, short b) { 1616 return (short)(a + b); 1617 } 1618 1619 @Test(dataProvider = "shortBinaryOpProvider") 1620 static void addShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 1621 short[] a = fa.apply(SPECIES.length()); 1622 short[] b = fb.apply(SPECIES.length()); 1623 short[] r = fr.apply(SPECIES.length()); 1624 1625 for (int i = 0; i < a.length; i += SPECIES.length()) { 1626 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1627 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1628 av.add(bv).intoArray(r, i); 1629 } 1630 1631 assertArraysEquals(r, a, b, Short64VectorTests::add); 1632 } 1633 1634 @Test(dataProvider = "shortBinaryOpMaskProvider") 1635 static void ADDShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 1636 IntFunction<boolean[]> fm) { 1637 short[] a = fa.apply(SPECIES.length()); 1638 short[] b = fb.apply(SPECIES.length()); 1639 short[] r = fr.apply(SPECIES.length()); 1640 boolean[] mask = fm.apply(SPECIES.length()); 1641 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1642 1643 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1644 for (int i = 0; i < a.length; i += SPECIES.length()) { 1645 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1646 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1647 av.lanewise(VectorOperators.ADD, bv, vmask).intoArray(r, i); 1648 } 1649 } 1650 1651 assertArraysEquals(r, a, b, mask, Short64VectorTests::ADD); 1652 } 1653 1654 @Test(dataProvider = "shortBinaryOpMaskProvider") 1655 static void addShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 1656 IntFunction<boolean[]> fm) { 1657 short[] a = fa.apply(SPECIES.length()); 1658 short[] b = fb.apply(SPECIES.length()); 1659 short[] r = fr.apply(SPECIES.length()); 1660 boolean[] mask = fm.apply(SPECIES.length()); 1661 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1662 1663 for (int i = 0; i < a.length; i += SPECIES.length()) { 1664 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1665 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1666 av.add(bv, vmask).intoArray(r, i); 1667 } 1668 1669 assertArraysEquals(r, a, b, mask, Short64VectorTests::add); 1670 } 1671 1672 static short SUB(short a, short b) { 1673 return (short)(a - b); 1674 } 1675 1676 @Test(dataProvider = "shortBinaryOpProvider") 1677 static void SUBShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 1678 short[] a = fa.apply(SPECIES.length()); 1679 short[] b = fb.apply(SPECIES.length()); 1680 short[] r = fr.apply(SPECIES.length()); 1681 1682 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1683 for (int i = 0; i < a.length; i += SPECIES.length()) { 1684 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1685 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1686 av.lanewise(VectorOperators.SUB, bv).intoArray(r, i); 1687 } 1688 } 1689 1690 assertArraysEquals(r, a, b, Short64VectorTests::SUB); 1691 } 1692 1693 static short sub(short a, short b) { 1694 return (short)(a - b); 1695 } 1696 1697 @Test(dataProvider = "shortBinaryOpProvider") 1698 static void subShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 1699 short[] a = fa.apply(SPECIES.length()); 1700 short[] b = fb.apply(SPECIES.length()); 1701 short[] r = fr.apply(SPECIES.length()); 1702 1703 for (int i = 0; i < a.length; i += SPECIES.length()) { 1704 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1705 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1706 av.sub(bv).intoArray(r, i); 1707 } 1708 1709 assertArraysEquals(r, a, b, Short64VectorTests::sub); 1710 } 1711 1712 @Test(dataProvider = "shortBinaryOpMaskProvider") 1713 static void SUBShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 1714 IntFunction<boolean[]> fm) { 1715 short[] a = fa.apply(SPECIES.length()); 1716 short[] b = fb.apply(SPECIES.length()); 1717 short[] r = fr.apply(SPECIES.length()); 1718 boolean[] mask = fm.apply(SPECIES.length()); 1719 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1720 1721 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1722 for (int i = 0; i < a.length; i += SPECIES.length()) { 1723 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1724 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1725 av.lanewise(VectorOperators.SUB, bv, vmask).intoArray(r, i); 1726 } 1727 } 1728 1729 assertArraysEquals(r, a, b, mask, Short64VectorTests::SUB); 1730 } 1731 1732 @Test(dataProvider = "shortBinaryOpMaskProvider") 1733 static void subShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 1734 IntFunction<boolean[]> fm) { 1735 short[] a = fa.apply(SPECIES.length()); 1736 short[] b = fb.apply(SPECIES.length()); 1737 short[] r = fr.apply(SPECIES.length()); 1738 boolean[] mask = fm.apply(SPECIES.length()); 1739 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1740 1741 for (int i = 0; i < a.length; i += SPECIES.length()) { 1742 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1743 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1744 av.sub(bv, vmask).intoArray(r, i); 1745 } 1746 1747 assertArraysEquals(r, a, b, mask, Short64VectorTests::sub); 1748 } 1749 1750 static short MUL(short a, short b) { 1751 return (short)(a * b); 1752 } 1753 1754 @Test(dataProvider = "shortBinaryOpProvider") 1755 static void MULShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 1756 short[] a = fa.apply(SPECIES.length()); 1757 short[] b = fb.apply(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 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1764 av.lanewise(VectorOperators.MUL, bv).intoArray(r, i); 1765 } 1766 } 1767 1768 assertArraysEquals(r, a, b, Short64VectorTests::MUL); 1769 } 1770 1771 static short mul(short a, short b) { 1772 return (short)(a * b); 1773 } 1774 1775 @Test(dataProvider = "shortBinaryOpProvider") 1776 static void mulShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 1777 short[] a = fa.apply(SPECIES.length()); 1778 short[] b = fb.apply(SPECIES.length()); 1779 short[] r = fr.apply(SPECIES.length()); 1780 1781 for (int i = 0; i < a.length; i += SPECIES.length()) { 1782 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1783 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1784 av.mul(bv).intoArray(r, i); 1785 } 1786 1787 assertArraysEquals(r, a, b, Short64VectorTests::mul); 1788 } 1789 1790 @Test(dataProvider = "shortBinaryOpMaskProvider") 1791 static void MULShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 1792 IntFunction<boolean[]> fm) { 1793 short[] a = fa.apply(SPECIES.length()); 1794 short[] b = fb.apply(SPECIES.length()); 1795 short[] r = fr.apply(SPECIES.length()); 1796 boolean[] mask = fm.apply(SPECIES.length()); 1797 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1798 1799 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1800 for (int i = 0; i < a.length; i += SPECIES.length()) { 1801 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1802 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1803 av.lanewise(VectorOperators.MUL, bv, vmask).intoArray(r, i); 1804 } 1805 } 1806 1807 assertArraysEquals(r, a, b, mask, Short64VectorTests::MUL); 1808 } 1809 1810 @Test(dataProvider = "shortBinaryOpMaskProvider") 1811 static void mulShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 1812 IntFunction<boolean[]> fm) { 1813 short[] a = fa.apply(SPECIES.length()); 1814 short[] b = fb.apply(SPECIES.length()); 1815 short[] r = fr.apply(SPECIES.length()); 1816 boolean[] mask = fm.apply(SPECIES.length()); 1817 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1818 1819 for (int i = 0; i < a.length; i += SPECIES.length()) { 1820 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1821 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1822 av.mul(bv, vmask).intoArray(r, i); 1823 } 1824 1825 assertArraysEquals(r, a, b, mask, Short64VectorTests::mul); 1826 } 1827 1828 static short DIV(short a, short b) { 1829 return (short)(a / b); 1830 } 1831 1832 @Test(dataProvider = "shortBinaryOpProvider") 1833 static void DIVShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 1834 short[] a = fa.apply(SPECIES.length()); 1835 short[] b = fb.apply(SPECIES.length()); 1836 short[] r = fr.apply(SPECIES.length()); 1837 1838 replaceZero(b, (short) 1); 1839 1840 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1841 for (int i = 0; i < a.length; i += SPECIES.length()) { 1842 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1843 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1844 av.lanewise(VectorOperators.DIV, bv).intoArray(r, i); 1845 } 1846 } 1847 1848 assertArraysEquals(r, a, b, Short64VectorTests::DIV); 1849 } 1850 1851 static short div(short a, short b) { 1852 return (short)(a / b); 1853 } 1854 1855 @Test(dataProvider = "shortBinaryOpProvider") 1856 static void divShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 1857 short[] a = fa.apply(SPECIES.length()); 1858 short[] b = fb.apply(SPECIES.length()); 1859 short[] r = fr.apply(SPECIES.length()); 1860 1861 replaceZero(b, (short) 1); 1862 1863 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1864 for (int i = 0; i < a.length; i += SPECIES.length()) { 1865 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1866 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1867 av.div(bv).intoArray(r, i); 1868 } 1869 } 1870 1871 assertArraysEquals(r, a, b, Short64VectorTests::div); 1872 } 1873 1874 @Test(dataProvider = "shortBinaryOpMaskProvider") 1875 static void DIVShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 1876 IntFunction<boolean[]> fm) { 1877 short[] a = fa.apply(SPECIES.length()); 1878 short[] b = fb.apply(SPECIES.length()); 1879 short[] r = fr.apply(SPECIES.length()); 1880 boolean[] mask = fm.apply(SPECIES.length()); 1881 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1882 1883 replaceZero(b, mask, (short) 1); 1884 1885 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1886 for (int i = 0; i < a.length; i += SPECIES.length()) { 1887 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1888 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1889 av.lanewise(VectorOperators.DIV, bv, vmask).intoArray(r, i); 1890 } 1891 } 1892 1893 assertArraysEquals(r, a, b, mask, Short64VectorTests::DIV); 1894 } 1895 1896 @Test(dataProvider = "shortBinaryOpMaskProvider") 1897 static void divShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 1898 IntFunction<boolean[]> fm) { 1899 short[] a = fa.apply(SPECIES.length()); 1900 short[] b = fb.apply(SPECIES.length()); 1901 short[] r = fr.apply(SPECIES.length()); 1902 boolean[] mask = fm.apply(SPECIES.length()); 1903 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1904 1905 replaceZero(b, mask, (short) 1); 1906 1907 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1908 for (int i = 0; i < a.length; i += SPECIES.length()) { 1909 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1910 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1911 av.div(bv, vmask).intoArray(r, i); 1912 } 1913 } 1914 1915 assertArraysEquals(r, a, b, mask, Short64VectorTests::div); 1916 } 1917 1918 static short FIRST_NONZERO(short a, short b) { 1919 return (short)((a)!=0?a:b); 1920 } 1921 1922 @Test(dataProvider = "shortBinaryOpProvider") 1923 static void FIRST_NONZEROShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 1924 short[] a = fa.apply(SPECIES.length()); 1925 short[] b = fb.apply(SPECIES.length()); 1926 short[] r = fr.apply(SPECIES.length()); 1927 1928 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1929 for (int i = 0; i < a.length; i += SPECIES.length()) { 1930 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1931 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1932 av.lanewise(VectorOperators.FIRST_NONZERO, bv).intoArray(r, i); 1933 } 1934 } 1935 1936 assertArraysEquals(r, a, b, Short64VectorTests::FIRST_NONZERO); 1937 } 1938 1939 @Test(dataProvider = "shortBinaryOpMaskProvider") 1940 static void FIRST_NONZEROShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 1941 IntFunction<boolean[]> fm) { 1942 short[] a = fa.apply(SPECIES.length()); 1943 short[] b = fb.apply(SPECIES.length()); 1944 short[] r = fr.apply(SPECIES.length()); 1945 boolean[] mask = fm.apply(SPECIES.length()); 1946 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1947 1948 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1949 for (int i = 0; i < a.length; i += SPECIES.length()) { 1950 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1951 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1952 av.lanewise(VectorOperators.FIRST_NONZERO, bv, vmask).intoArray(r, i); 1953 } 1954 } 1955 1956 assertArraysEquals(r, a, b, mask, Short64VectorTests::FIRST_NONZERO); 1957 } 1958 1959 static short AND(short a, short b) { 1960 return (short)(a & b); 1961 } 1962 1963 @Test(dataProvider = "shortBinaryOpProvider") 1964 static void ANDShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 1965 short[] a = fa.apply(SPECIES.length()); 1966 short[] b = fb.apply(SPECIES.length()); 1967 short[] r = fr.apply(SPECIES.length()); 1968 1969 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1970 for (int i = 0; i < a.length; i += SPECIES.length()) { 1971 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1972 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1973 av.lanewise(VectorOperators.AND, bv).intoArray(r, i); 1974 } 1975 } 1976 1977 assertArraysEquals(r, a, b, Short64VectorTests::AND); 1978 } 1979 1980 static short and(short a, short b) { 1981 return (short)(a & b); 1982 } 1983 1984 @Test(dataProvider = "shortBinaryOpProvider") 1985 static void andShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 1986 short[] a = fa.apply(SPECIES.length()); 1987 short[] b = fb.apply(SPECIES.length()); 1988 short[] r = fr.apply(SPECIES.length()); 1989 1990 for (int i = 0; i < a.length; i += SPECIES.length()) { 1991 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 1992 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 1993 av.and(bv).intoArray(r, i); 1994 } 1995 1996 assertArraysEquals(r, a, b, Short64VectorTests::and); 1997 } 1998 1999 @Test(dataProvider = "shortBinaryOpMaskProvider") 2000 static void ANDShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2001 IntFunction<boolean[]> fm) { 2002 short[] a = fa.apply(SPECIES.length()); 2003 short[] b = fb.apply(SPECIES.length()); 2004 short[] r = fr.apply(SPECIES.length()); 2005 boolean[] mask = fm.apply(SPECIES.length()); 2006 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2007 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 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2012 av.lanewise(VectorOperators.AND, bv, vmask).intoArray(r, i); 2013 } 2014 } 2015 2016 assertArraysEquals(r, a, b, mask, Short64VectorTests::AND); 2017 } 2018 2019 static short AND_NOT(short a, short b) { 2020 return (short)(a & ~b); 2021 } 2022 2023 @Test(dataProvider = "shortBinaryOpProvider") 2024 static void AND_NOTShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2025 short[] a = fa.apply(SPECIES.length()); 2026 short[] b = fb.apply(SPECIES.length()); 2027 short[] r = fr.apply(SPECIES.length()); 2028 2029 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2030 for (int i = 0; i < a.length; i += SPECIES.length()) { 2031 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2032 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2033 av.lanewise(VectorOperators.AND_NOT, bv).intoArray(r, i); 2034 } 2035 } 2036 2037 assertArraysEquals(r, a, b, Short64VectorTests::AND_NOT); 2038 } 2039 2040 @Test(dataProvider = "shortBinaryOpMaskProvider") 2041 static void AND_NOTShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2042 IntFunction<boolean[]> fm) { 2043 short[] a = fa.apply(SPECIES.length()); 2044 short[] b = fb.apply(SPECIES.length()); 2045 short[] r = fr.apply(SPECIES.length()); 2046 boolean[] mask = fm.apply(SPECIES.length()); 2047 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2048 2049 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2050 for (int i = 0; i < a.length; i += SPECIES.length()) { 2051 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2052 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2053 av.lanewise(VectorOperators.AND_NOT, bv, vmask).intoArray(r, i); 2054 } 2055 } 2056 2057 assertArraysEquals(r, a, b, mask, Short64VectorTests::AND_NOT); 2058 } 2059 2060 static short OR(short a, short b) { 2061 return (short)(a | b); 2062 } 2063 2064 @Test(dataProvider = "shortBinaryOpProvider") 2065 static void ORShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2066 short[] a = fa.apply(SPECIES.length()); 2067 short[] b = fb.apply(SPECIES.length()); 2068 short[] r = fr.apply(SPECIES.length()); 2069 2070 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2071 for (int i = 0; i < a.length; i += SPECIES.length()) { 2072 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2073 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2074 av.lanewise(VectorOperators.OR, bv).intoArray(r, i); 2075 } 2076 } 2077 2078 assertArraysEquals(r, a, b, Short64VectorTests::OR); 2079 } 2080 2081 static short or(short a, short b) { 2082 return (short)(a | b); 2083 } 2084 2085 @Test(dataProvider = "shortBinaryOpProvider") 2086 static void orShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2087 short[] a = fa.apply(SPECIES.length()); 2088 short[] b = fb.apply(SPECIES.length()); 2089 short[] r = fr.apply(SPECIES.length()); 2090 2091 for (int i = 0; i < a.length; i += SPECIES.length()) { 2092 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2093 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2094 av.or(bv).intoArray(r, i); 2095 } 2096 2097 assertArraysEquals(r, a, b, Short64VectorTests::or); 2098 } 2099 2100 @Test(dataProvider = "shortBinaryOpMaskProvider") 2101 static void ORShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2102 IntFunction<boolean[]> fm) { 2103 short[] a = fa.apply(SPECIES.length()); 2104 short[] b = fb.apply(SPECIES.length()); 2105 short[] r = fr.apply(SPECIES.length()); 2106 boolean[] mask = fm.apply(SPECIES.length()); 2107 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2108 2109 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2110 for (int i = 0; i < a.length; i += SPECIES.length()) { 2111 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2112 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2113 av.lanewise(VectorOperators.OR, bv, vmask).intoArray(r, i); 2114 } 2115 } 2116 2117 assertArraysEquals(r, a, b, mask, Short64VectorTests::OR); 2118 } 2119 2120 static short XOR(short a, short b) { 2121 return (short)(a ^ b); 2122 } 2123 2124 @Test(dataProvider = "shortBinaryOpProvider") 2125 static void XORShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2126 short[] a = fa.apply(SPECIES.length()); 2127 short[] b = fb.apply(SPECIES.length()); 2128 short[] r = fr.apply(SPECIES.length()); 2129 2130 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2131 for (int i = 0; i < a.length; i += SPECIES.length()) { 2132 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2133 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2134 av.lanewise(VectorOperators.XOR, bv).intoArray(r, i); 2135 } 2136 } 2137 2138 assertArraysEquals(r, a, b, Short64VectorTests::XOR); 2139 } 2140 2141 @Test(dataProvider = "shortBinaryOpMaskProvider") 2142 static void XORShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2143 IntFunction<boolean[]> fm) { 2144 short[] a = fa.apply(SPECIES.length()); 2145 short[] b = fb.apply(SPECIES.length()); 2146 short[] r = fr.apply(SPECIES.length()); 2147 boolean[] mask = fm.apply(SPECIES.length()); 2148 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2149 2150 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2151 for (int i = 0; i < a.length; i += SPECIES.length()) { 2152 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2153 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2154 av.lanewise(VectorOperators.XOR, bv, vmask).intoArray(r, i); 2155 } 2156 } 2157 2158 assertArraysEquals(r, a, b, mask, Short64VectorTests::XOR); 2159 } 2160 2161 @Test(dataProvider = "shortBinaryOpProvider") 2162 static void addShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2163 short[] a = fa.apply(SPECIES.length()); 2164 short[] b = fb.apply(SPECIES.length()); 2165 short[] r = fr.apply(SPECIES.length()); 2166 2167 for (int i = 0; i < a.length; i += SPECIES.length()) { 2168 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2169 av.add(b[i]).intoArray(r, i); 2170 } 2171 2172 assertBroadcastArraysEquals(r, a, b, Short64VectorTests::add); 2173 } 2174 2175 @Test(dataProvider = "shortBinaryOpMaskProvider") 2176 static void addShort64VectorTestsBroadcastMaskedSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, 2177 IntFunction<boolean[]> fm) { 2178 short[] a = fa.apply(SPECIES.length()); 2179 short[] b = fb.apply(SPECIES.length()); 2180 short[] r = fr.apply(SPECIES.length()); 2181 boolean[] mask = fm.apply(SPECIES.length()); 2182 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2183 2184 for (int i = 0; i < a.length; i += SPECIES.length()) { 2185 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2186 av.add(b[i], vmask).intoArray(r, i); 2187 } 2188 2189 assertBroadcastArraysEquals(r, a, b, mask, Short64VectorTests::add); 2190 } 2191 2192 @Test(dataProvider = "shortBinaryOpProvider") 2193 static void subShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2194 short[] a = fa.apply(SPECIES.length()); 2195 short[] b = fb.apply(SPECIES.length()); 2196 short[] r = fr.apply(SPECIES.length()); 2197 2198 for (int i = 0; i < a.length; i += SPECIES.length()) { 2199 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2200 av.sub(b[i]).intoArray(r, i); 2201 } 2202 2203 assertBroadcastArraysEquals(r, a, b, Short64VectorTests::sub); 2204 } 2205 2206 @Test(dataProvider = "shortBinaryOpMaskProvider") 2207 static void subShort64VectorTestsBroadcastMaskedSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, 2208 IntFunction<boolean[]> fm) { 2209 short[] a = fa.apply(SPECIES.length()); 2210 short[] b = fb.apply(SPECIES.length()); 2211 short[] r = fr.apply(SPECIES.length()); 2212 boolean[] mask = fm.apply(SPECIES.length()); 2213 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2214 2215 for (int i = 0; i < a.length; i += SPECIES.length()) { 2216 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2217 av.sub(b[i], vmask).intoArray(r, i); 2218 } 2219 2220 assertBroadcastArraysEquals(r, a, b, mask, Short64VectorTests::sub); 2221 } 2222 2223 @Test(dataProvider = "shortBinaryOpProvider") 2224 static void mulShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2225 short[] a = fa.apply(SPECIES.length()); 2226 short[] b = fb.apply(SPECIES.length()); 2227 short[] r = fr.apply(SPECIES.length()); 2228 2229 for (int i = 0; i < a.length; i += SPECIES.length()) { 2230 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2231 av.mul(b[i]).intoArray(r, i); 2232 } 2233 2234 assertBroadcastArraysEquals(r, a, b, Short64VectorTests::mul); 2235 } 2236 2237 @Test(dataProvider = "shortBinaryOpMaskProvider") 2238 static void mulShort64VectorTestsBroadcastMaskedSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, 2239 IntFunction<boolean[]> fm) { 2240 short[] a = fa.apply(SPECIES.length()); 2241 short[] b = fb.apply(SPECIES.length()); 2242 short[] r = fr.apply(SPECIES.length()); 2243 boolean[] mask = fm.apply(SPECIES.length()); 2244 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2245 2246 for (int i = 0; i < a.length; i += SPECIES.length()) { 2247 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2248 av.mul(b[i], vmask).intoArray(r, i); 2249 } 2250 2251 assertBroadcastArraysEquals(r, a, b, mask, Short64VectorTests::mul); 2252 } 2253 2254 @Test(dataProvider = "shortBinaryOpProvider") 2255 static void divShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2256 short[] a = fa.apply(SPECIES.length()); 2257 short[] b = fb.apply(SPECIES.length()); 2258 short[] r = fr.apply(SPECIES.length()); 2259 2260 replaceZero(b, (short) 1); 2261 2262 for (int i = 0; i < a.length; i += SPECIES.length()) { 2263 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2264 av.div(b[i]).intoArray(r, i); 2265 } 2266 2267 assertBroadcastArraysEquals(r, a, b, Short64VectorTests::div); 2268 } 2269 2270 @Test(dataProvider = "shortBinaryOpMaskProvider") 2271 static void divShort64VectorTestsBroadcastMaskedSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, 2272 IntFunction<boolean[]> fm) { 2273 short[] a = fa.apply(SPECIES.length()); 2274 short[] b = fb.apply(SPECIES.length()); 2275 short[] r = fr.apply(SPECIES.length()); 2276 boolean[] mask = fm.apply(SPECIES.length()); 2277 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2278 2279 replaceZero(b, (short) 1); 2280 2281 for (int i = 0; i < a.length; i += SPECIES.length()) { 2282 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2283 av.div(b[i], vmask).intoArray(r, i); 2284 } 2285 2286 assertBroadcastArraysEquals(r, a, b, mask, Short64VectorTests::div); 2287 } 2288 2289 @Test(dataProvider = "shortBinaryOpProvider") 2290 static void ORShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2291 short[] a = fa.apply(SPECIES.length()); 2292 short[] b = fb.apply(SPECIES.length()); 2293 short[] r = fr.apply(SPECIES.length()); 2294 2295 for (int i = 0; i < a.length; i += SPECIES.length()) { 2296 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2297 av.lanewise(VectorOperators.OR, b[i]).intoArray(r, i); 2298 } 2299 2300 assertBroadcastArraysEquals(r, a, b, Short64VectorTests::OR); 2301 } 2302 2303 @Test(dataProvider = "shortBinaryOpProvider") 2304 static void orShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2305 short[] a = fa.apply(SPECIES.length()); 2306 short[] b = fb.apply(SPECIES.length()); 2307 short[] r = fr.apply(SPECIES.length()); 2308 2309 for (int i = 0; i < a.length; i += SPECIES.length()) { 2310 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2311 av.or(b[i]).intoArray(r, i); 2312 } 2313 2314 assertBroadcastArraysEquals(r, a, b, Short64VectorTests::or); 2315 } 2316 2317 @Test(dataProvider = "shortBinaryOpMaskProvider") 2318 static void ORShort64VectorTestsBroadcastMaskedSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, 2319 IntFunction<boolean[]> fm) { 2320 short[] a = fa.apply(SPECIES.length()); 2321 short[] b = fb.apply(SPECIES.length()); 2322 short[] r = fr.apply(SPECIES.length()); 2323 boolean[] mask = fm.apply(SPECIES.length()); 2324 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2325 2326 for (int i = 0; i < a.length; i += SPECIES.length()) { 2327 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2328 av.lanewise(VectorOperators.OR, b[i], vmask).intoArray(r, i); 2329 } 2330 2331 assertBroadcastArraysEquals(r, a, b, mask, Short64VectorTests::OR); 2332 } 2333 2334 @Test(dataProvider = "shortBinaryOpProvider") 2335 static void ANDShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2336 short[] a = fa.apply(SPECIES.length()); 2337 short[] b = fb.apply(SPECIES.length()); 2338 short[] r = fr.apply(SPECIES.length()); 2339 2340 for (int i = 0; i < a.length; i += SPECIES.length()) { 2341 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2342 av.lanewise(VectorOperators.AND, b[i]).intoArray(r, i); 2343 } 2344 2345 assertBroadcastArraysEquals(r, a, b, Short64VectorTests::AND); 2346 } 2347 2348 @Test(dataProvider = "shortBinaryOpProvider") 2349 static void andShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2350 short[] a = fa.apply(SPECIES.length()); 2351 short[] b = fb.apply(SPECIES.length()); 2352 short[] r = fr.apply(SPECIES.length()); 2353 2354 for (int i = 0; i < a.length; i += SPECIES.length()) { 2355 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2356 av.and(b[i]).intoArray(r, i); 2357 } 2358 2359 assertBroadcastArraysEquals(r, a, b, Short64VectorTests::and); 2360 } 2361 2362 @Test(dataProvider = "shortBinaryOpMaskProvider") 2363 static void ANDShort64VectorTestsBroadcastMaskedSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, 2364 IntFunction<boolean[]> fm) { 2365 short[] a = fa.apply(SPECIES.length()); 2366 short[] b = fb.apply(SPECIES.length()); 2367 short[] r = fr.apply(SPECIES.length()); 2368 boolean[] mask = fm.apply(SPECIES.length()); 2369 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2370 2371 for (int i = 0; i < a.length; i += SPECIES.length()) { 2372 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2373 av.lanewise(VectorOperators.AND, b[i], vmask).intoArray(r, i); 2374 } 2375 2376 assertBroadcastArraysEquals(r, a, b, mask, Short64VectorTests::AND); 2377 } 2378 2379 @Test(dataProvider = "shortBinaryOpProvider") 2380 static void ORShort64VectorTestsBroadcastLongSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2381 short[] a = fa.apply(SPECIES.length()); 2382 short[] b = fb.apply(SPECIES.length()); 2383 short[] r = fr.apply(SPECIES.length()); 2384 2385 for (int i = 0; i < a.length; i += SPECIES.length()) { 2386 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2387 av.lanewise(VectorOperators.OR, (long)b[i]).intoArray(r, i); 2388 } 2389 2390 assertBroadcastLongArraysEquals(r, a, b, Short64VectorTests::OR); 2391 } 2392 2393 @Test(dataProvider = "shortBinaryOpMaskProvider") 2394 static void ORShort64VectorTestsBroadcastMaskedLongSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, 2395 IntFunction<boolean[]> fm) { 2396 short[] a = fa.apply(SPECIES.length()); 2397 short[] b = fb.apply(SPECIES.length()); 2398 short[] r = fr.apply(SPECIES.length()); 2399 boolean[] mask = fm.apply(SPECIES.length()); 2400 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2401 2402 for (int i = 0; i < a.length; i += SPECIES.length()) { 2403 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2404 av.lanewise(VectorOperators.OR, (long)b[i], vmask).intoArray(r, i); 2405 } 2406 2407 assertBroadcastLongArraysEquals(r, a, b, mask, Short64VectorTests::OR); 2408 } 2409 2410 @Test(dataProvider = "shortBinaryOpProvider") 2411 static void ADDShort64VectorTestsBroadcastLongSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2412 short[] a = fa.apply(SPECIES.length()); 2413 short[] b = fb.apply(SPECIES.length()); 2414 short[] r = fr.apply(SPECIES.length()); 2415 2416 for (int i = 0; i < a.length; i += SPECIES.length()) { 2417 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2418 av.lanewise(VectorOperators.ADD, (long)b[i]).intoArray(r, i); 2419 } 2420 2421 assertBroadcastLongArraysEquals(r, a, b, Short64VectorTests::ADD); 2422 } 2423 2424 @Test(dataProvider = "shortBinaryOpMaskProvider") 2425 static void ADDShort64VectorTestsBroadcastMaskedLongSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, 2426 IntFunction<boolean[]> fm) { 2427 short[] a = fa.apply(SPECIES.length()); 2428 short[] b = fb.apply(SPECIES.length()); 2429 short[] r = fr.apply(SPECIES.length()); 2430 boolean[] mask = fm.apply(SPECIES.length()); 2431 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2432 2433 for (int i = 0; i < a.length; i += SPECIES.length()) { 2434 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2435 av.lanewise(VectorOperators.ADD, (long)b[i], vmask).intoArray(r, i); 2436 } 2437 2438 assertBroadcastLongArraysEquals(r, a, b, mask, Short64VectorTests::ADD); 2439 } 2440 2441 static short LSHL(short a, short b) { 2442 return (short)((a << (b & 0xF))); 2443 } 2444 2445 @Test(dataProvider = "shortBinaryOpProvider") 2446 static void LSHLShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2447 short[] a = fa.apply(SPECIES.length()); 2448 short[] b = fb.apply(SPECIES.length()); 2449 short[] r = fr.apply(SPECIES.length()); 2450 2451 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2452 for (int i = 0; i < a.length; i += SPECIES.length()) { 2453 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2454 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2455 av.lanewise(VectorOperators.LSHL, bv).intoArray(r, i); 2456 } 2457 } 2458 2459 assertArraysEquals(r, a, b, Short64VectorTests::LSHL); 2460 } 2461 2462 @Test(dataProvider = "shortBinaryOpMaskProvider") 2463 static void LSHLShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2464 IntFunction<boolean[]> fm) { 2465 short[] a = fa.apply(SPECIES.length()); 2466 short[] b = fb.apply(SPECIES.length()); 2467 short[] r = fr.apply(SPECIES.length()); 2468 boolean[] mask = fm.apply(SPECIES.length()); 2469 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2470 2471 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2472 for (int i = 0; i < a.length; i += SPECIES.length()) { 2473 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2474 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2475 av.lanewise(VectorOperators.LSHL, bv, vmask).intoArray(r, i); 2476 } 2477 } 2478 2479 assertArraysEquals(r, a, b, mask, Short64VectorTests::LSHL); 2480 } 2481 2482 static short ASHR(short a, short b) { 2483 return (short)((a >> (b & 0xF))); 2484 } 2485 2486 @Test(dataProvider = "shortBinaryOpProvider") 2487 static void ASHRShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2488 short[] a = fa.apply(SPECIES.length()); 2489 short[] b = fb.apply(SPECIES.length()); 2490 short[] r = fr.apply(SPECIES.length()); 2491 2492 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2493 for (int i = 0; i < a.length; i += SPECIES.length()) { 2494 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2495 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2496 av.lanewise(VectorOperators.ASHR, bv).intoArray(r, i); 2497 } 2498 } 2499 2500 assertArraysEquals(r, a, b, Short64VectorTests::ASHR); 2501 } 2502 2503 @Test(dataProvider = "shortBinaryOpMaskProvider") 2504 static void ASHRShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2505 IntFunction<boolean[]> fm) { 2506 short[] a = fa.apply(SPECIES.length()); 2507 short[] b = fb.apply(SPECIES.length()); 2508 short[] r = fr.apply(SPECIES.length()); 2509 boolean[] mask = fm.apply(SPECIES.length()); 2510 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2511 2512 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2513 for (int i = 0; i < a.length; i += SPECIES.length()) { 2514 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2515 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2516 av.lanewise(VectorOperators.ASHR, bv, vmask).intoArray(r, i); 2517 } 2518 } 2519 2520 assertArraysEquals(r, a, b, mask, Short64VectorTests::ASHR); 2521 } 2522 2523 static short LSHR(short a, short b) { 2524 return (short)(((a & 0xFFFF) >>> (b & 0xF))); 2525 } 2526 2527 @Test(dataProvider = "shortBinaryOpProvider") 2528 static void LSHRShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2529 short[] a = fa.apply(SPECIES.length()); 2530 short[] b = fb.apply(SPECIES.length()); 2531 short[] r = fr.apply(SPECIES.length()); 2532 2533 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2534 for (int i = 0; i < a.length; i += SPECIES.length()) { 2535 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2536 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2537 av.lanewise(VectorOperators.LSHR, bv).intoArray(r, i); 2538 } 2539 } 2540 2541 assertArraysEquals(r, a, b, Short64VectorTests::LSHR); 2542 } 2543 2544 @Test(dataProvider = "shortBinaryOpMaskProvider") 2545 static void LSHRShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2546 IntFunction<boolean[]> fm) { 2547 short[] a = fa.apply(SPECIES.length()); 2548 short[] b = fb.apply(SPECIES.length()); 2549 short[] r = fr.apply(SPECIES.length()); 2550 boolean[] mask = fm.apply(SPECIES.length()); 2551 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2552 2553 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2554 for (int i = 0; i < a.length; i += SPECIES.length()) { 2555 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2556 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2557 av.lanewise(VectorOperators.LSHR, bv, vmask).intoArray(r, i); 2558 } 2559 } 2560 2561 assertArraysEquals(r, a, b, mask, Short64VectorTests::LSHR); 2562 } 2563 2564 static short LSHL_unary(short a, short b) { 2565 return (short)((a << (b & 15))); 2566 } 2567 2568 @Test(dataProvider = "shortBinaryOpProvider") 2569 static void LSHLShort64VectorTestsScalarShift(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2570 short[] a = fa.apply(SPECIES.length()); 2571 short[] b = fb.apply(SPECIES.length()); 2572 short[] r = fr.apply(SPECIES.length()); 2573 2574 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2575 for (int i = 0; i < a.length; i += SPECIES.length()) { 2576 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2577 av.lanewise(VectorOperators.LSHL, (int)b[i]).intoArray(r, i); 2578 } 2579 } 2580 2581 assertShiftArraysEquals(r, a, b, Short64VectorTests::LSHL_unary); 2582 } 2583 2584 @Test(dataProvider = "shortBinaryOpMaskProvider") 2585 static void LSHLShort64VectorTestsScalarShiftMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2586 IntFunction<boolean[]> fm) { 2587 short[] a = fa.apply(SPECIES.length()); 2588 short[] b = fb.apply(SPECIES.length()); 2589 short[] r = fr.apply(SPECIES.length()); 2590 boolean[] mask = fm.apply(SPECIES.length()); 2591 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2592 2593 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2594 for (int i = 0; i < a.length; i += SPECIES.length()) { 2595 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2596 av.lanewise(VectorOperators.LSHL, (int)b[i], vmask).intoArray(r, i); 2597 } 2598 } 2599 2600 assertShiftArraysEquals(r, a, b, mask, Short64VectorTests::LSHL_unary); 2601 } 2602 2603 static short LSHR_unary(short a, short b) { 2604 return (short)(((a & 0xFFFF) >>> (b & 15))); 2605 } 2606 2607 @Test(dataProvider = "shortBinaryOpProvider") 2608 static void LSHRShort64VectorTestsScalarShift(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2609 short[] a = fa.apply(SPECIES.length()); 2610 short[] b = fb.apply(SPECIES.length()); 2611 short[] r = fr.apply(SPECIES.length()); 2612 2613 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2614 for (int i = 0; i < a.length; i += SPECIES.length()) { 2615 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2616 av.lanewise(VectorOperators.LSHR, (int)b[i]).intoArray(r, i); 2617 } 2618 } 2619 2620 assertShiftArraysEquals(r, a, b, Short64VectorTests::LSHR_unary); 2621 } 2622 2623 @Test(dataProvider = "shortBinaryOpMaskProvider") 2624 static void LSHRShort64VectorTestsScalarShiftMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2625 IntFunction<boolean[]> fm) { 2626 short[] a = fa.apply(SPECIES.length()); 2627 short[] b = fb.apply(SPECIES.length()); 2628 short[] r = fr.apply(SPECIES.length()); 2629 boolean[] mask = fm.apply(SPECIES.length()); 2630 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2631 2632 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2633 for (int i = 0; i < a.length; i += SPECIES.length()) { 2634 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2635 av.lanewise(VectorOperators.LSHR, (int)b[i], vmask).intoArray(r, i); 2636 } 2637 } 2638 2639 assertShiftArraysEquals(r, a, b, mask, Short64VectorTests::LSHR_unary); 2640 } 2641 2642 static short ASHR_unary(short a, short b) { 2643 return (short)((a >> (b & 15))); 2644 } 2645 2646 @Test(dataProvider = "shortBinaryOpProvider") 2647 static void ASHRShort64VectorTestsScalarShift(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2648 short[] a = fa.apply(SPECIES.length()); 2649 short[] b = fb.apply(SPECIES.length()); 2650 short[] r = fr.apply(SPECIES.length()); 2651 2652 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2653 for (int i = 0; i < a.length; i += SPECIES.length()) { 2654 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2655 av.lanewise(VectorOperators.ASHR, (int)b[i]).intoArray(r, i); 2656 } 2657 } 2658 2659 assertShiftArraysEquals(r, a, b, Short64VectorTests::ASHR_unary); 2660 } 2661 2662 @Test(dataProvider = "shortBinaryOpMaskProvider") 2663 static void ASHRShort64VectorTestsScalarShiftMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2664 IntFunction<boolean[]> fm) { 2665 short[] a = fa.apply(SPECIES.length()); 2666 short[] b = fb.apply(SPECIES.length()); 2667 short[] r = fr.apply(SPECIES.length()); 2668 boolean[] mask = fm.apply(SPECIES.length()); 2669 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2670 2671 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2672 for (int i = 0; i < a.length; i += SPECIES.length()) { 2673 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2674 av.lanewise(VectorOperators.ASHR, (int)b[i], vmask).intoArray(r, i); 2675 } 2676 } 2677 2678 assertShiftArraysEquals(r, a, b, mask, Short64VectorTests::ASHR_unary); 2679 } 2680 2681 static short ROR(short a, short b) { 2682 return (short)(ROR_scalar(a,b)); 2683 } 2684 2685 @Test(dataProvider = "shortBinaryOpProvider") 2686 static void RORShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2687 short[] a = fa.apply(SPECIES.length()); 2688 short[] b = fb.apply(SPECIES.length()); 2689 short[] r = fr.apply(SPECIES.length()); 2690 2691 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2692 for (int i = 0; i < a.length; i += SPECIES.length()) { 2693 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2694 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2695 av.lanewise(VectorOperators.ROR, bv).intoArray(r, i); 2696 } 2697 } 2698 2699 assertArraysEquals(r, a, b, Short64VectorTests::ROR); 2700 } 2701 2702 @Test(dataProvider = "shortBinaryOpMaskProvider") 2703 static void RORShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2704 IntFunction<boolean[]> fm) { 2705 short[] a = fa.apply(SPECIES.length()); 2706 short[] b = fb.apply(SPECIES.length()); 2707 short[] r = fr.apply(SPECIES.length()); 2708 boolean[] mask = fm.apply(SPECIES.length()); 2709 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2710 2711 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2712 for (int i = 0; i < a.length; i += SPECIES.length()) { 2713 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2714 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2715 av.lanewise(VectorOperators.ROR, bv, vmask).intoArray(r, i); 2716 } 2717 } 2718 2719 assertArraysEquals(r, a, b, mask, Short64VectorTests::ROR); 2720 } 2721 2722 static short ROL(short a, short b) { 2723 return (short)(ROL_scalar(a,b)); 2724 } 2725 2726 @Test(dataProvider = "shortBinaryOpProvider") 2727 static void ROLShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2728 short[] a = fa.apply(SPECIES.length()); 2729 short[] b = fb.apply(SPECIES.length()); 2730 short[] r = fr.apply(SPECIES.length()); 2731 2732 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2733 for (int i = 0; i < a.length; i += SPECIES.length()) { 2734 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2735 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2736 av.lanewise(VectorOperators.ROL, bv).intoArray(r, i); 2737 } 2738 } 2739 2740 assertArraysEquals(r, a, b, Short64VectorTests::ROL); 2741 } 2742 2743 @Test(dataProvider = "shortBinaryOpMaskProvider") 2744 static void ROLShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2745 IntFunction<boolean[]> fm) { 2746 short[] a = fa.apply(SPECIES.length()); 2747 short[] b = fb.apply(SPECIES.length()); 2748 short[] r = fr.apply(SPECIES.length()); 2749 boolean[] mask = fm.apply(SPECIES.length()); 2750 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2751 2752 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2753 for (int i = 0; i < a.length; i += SPECIES.length()) { 2754 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2755 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 2756 av.lanewise(VectorOperators.ROL, bv, vmask).intoArray(r, i); 2757 } 2758 } 2759 2760 assertArraysEquals(r, a, b, mask, Short64VectorTests::ROL); 2761 } 2762 2763 static short ROR_unary(short a, short b) { 2764 return (short)(ROR_scalar(a, b)); 2765 } 2766 2767 @Test(dataProvider = "shortBinaryOpProvider") 2768 static void RORShort64VectorTestsScalarShift(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2769 short[] a = fa.apply(SPECIES.length()); 2770 short[] b = fb.apply(SPECIES.length()); 2771 short[] r = fr.apply(SPECIES.length()); 2772 2773 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2774 for (int i = 0; i < a.length; i += SPECIES.length()) { 2775 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2776 av.lanewise(VectorOperators.ROR, (int)b[i]).intoArray(r, i); 2777 } 2778 } 2779 2780 assertShiftArraysEquals(r, a, b, Short64VectorTests::ROR_unary); 2781 } 2782 2783 @Test(dataProvider = "shortBinaryOpMaskProvider") 2784 static void RORShort64VectorTestsScalarShiftMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2785 IntFunction<boolean[]> fm) { 2786 short[] a = fa.apply(SPECIES.length()); 2787 short[] b = fb.apply(SPECIES.length()); 2788 short[] r = fr.apply(SPECIES.length()); 2789 boolean[] mask = fm.apply(SPECIES.length()); 2790 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2791 2792 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2793 for (int i = 0; i < a.length; i += SPECIES.length()) { 2794 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2795 av.lanewise(VectorOperators.ROR, (int)b[i], vmask).intoArray(r, i); 2796 } 2797 } 2798 2799 assertShiftArraysEquals(r, a, b, mask, Short64VectorTests::ROR_unary); 2800 } 2801 2802 static short ROL_unary(short a, short b) { 2803 return (short)(ROL_scalar(a, b)); 2804 } 2805 2806 @Test(dataProvider = "shortBinaryOpProvider") 2807 static void ROLShort64VectorTestsScalarShift(IntFunction<short[]> fa, IntFunction<short[]> fb) { 2808 short[] a = fa.apply(SPECIES.length()); 2809 short[] b = fb.apply(SPECIES.length()); 2810 short[] r = fr.apply(SPECIES.length()); 2811 2812 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2813 for (int i = 0; i < a.length; i += SPECIES.length()) { 2814 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2815 av.lanewise(VectorOperators.ROL, (int)b[i]).intoArray(r, i); 2816 } 2817 } 2818 2819 assertShiftArraysEquals(r, a, b, Short64VectorTests::ROL_unary); 2820 } 2821 2822 @Test(dataProvider = "shortBinaryOpMaskProvider") 2823 static void ROLShort64VectorTestsScalarShiftMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 2824 IntFunction<boolean[]> fm) { 2825 short[] a = fa.apply(SPECIES.length()); 2826 short[] b = fb.apply(SPECIES.length()); 2827 short[] r = fr.apply(SPECIES.length()); 2828 boolean[] mask = fm.apply(SPECIES.length()); 2829 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2830 2831 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2832 for (int i = 0; i < a.length; i += SPECIES.length()) { 2833 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2834 av.lanewise(VectorOperators.ROL, (int)b[i], vmask).intoArray(r, i); 2835 } 2836 } 2837 2838 assertShiftArraysEquals(r, a, b, mask, Short64VectorTests::ROL_unary); 2839 } 2840 static short LSHR_binary_const(short a) { 2841 return (short)(((a & 0xFFFF) >>> CONST_SHIFT)); 2842 } 2843 2844 @Test(dataProvider = "shortUnaryOpProvider") 2845 static void LSHRShort64VectorTestsScalarShiftConst(IntFunction<short[]> fa) { 2846 short[] a = fa.apply(SPECIES.length()); 2847 short[] r = fr.apply(SPECIES.length()); 2848 2849 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2850 for (int i = 0; i < a.length; i += SPECIES.length()) { 2851 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2852 av.lanewise(VectorOperators.LSHR, CONST_SHIFT).intoArray(r, i); 2853 } 2854 } 2855 2856 assertShiftConstEquals(r, a, Short64VectorTests::LSHR_binary_const); 2857 } 2858 2859 @Test(dataProvider = "shortUnaryOpMaskProvider") 2860 static void LSHRShort64VectorTestsScalarShiftMaskedConst(IntFunction<short[]> fa, 2861 IntFunction<boolean[]> fm) { 2862 short[] a = fa.apply(SPECIES.length()); 2863 short[] r = fr.apply(SPECIES.length()); 2864 boolean[] mask = fm.apply(SPECIES.length()); 2865 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2866 2867 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2868 for (int i = 0; i < a.length; i += SPECIES.length()) { 2869 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2870 av.lanewise(VectorOperators.LSHR, CONST_SHIFT, vmask).intoArray(r, i); 2871 } 2872 } 2873 2874 assertShiftConstEquals(r, a, mask, Short64VectorTests::LSHR_binary_const); 2875 } 2876 2877 static short LSHL_binary_const(short a) { 2878 return (short)((a << CONST_SHIFT)); 2879 } 2880 2881 @Test(dataProvider = "shortUnaryOpProvider") 2882 static void LSHLShort64VectorTestsScalarShiftConst(IntFunction<short[]> fa) { 2883 short[] a = fa.apply(SPECIES.length()); 2884 short[] r = fr.apply(SPECIES.length()); 2885 2886 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2887 for (int i = 0; i < a.length; i += SPECIES.length()) { 2888 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2889 av.lanewise(VectorOperators.LSHL, CONST_SHIFT).intoArray(r, i); 2890 } 2891 } 2892 2893 assertShiftConstEquals(r, a, Short64VectorTests::LSHL_binary_const); 2894 } 2895 2896 @Test(dataProvider = "shortUnaryOpMaskProvider") 2897 static void LSHLShort64VectorTestsScalarShiftMaskedConst(IntFunction<short[]> fa, 2898 IntFunction<boolean[]> fm) { 2899 short[] a = fa.apply(SPECIES.length()); 2900 short[] r = fr.apply(SPECIES.length()); 2901 boolean[] mask = fm.apply(SPECIES.length()); 2902 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2903 2904 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2905 for (int i = 0; i < a.length; i += SPECIES.length()) { 2906 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2907 av.lanewise(VectorOperators.LSHL, CONST_SHIFT, vmask).intoArray(r, i); 2908 } 2909 } 2910 2911 assertShiftConstEquals(r, a, mask, Short64VectorTests::LSHL_binary_const); 2912 } 2913 2914 static short ASHR_binary_const(short a) { 2915 return (short)((a >> CONST_SHIFT)); 2916 } 2917 2918 @Test(dataProvider = "shortUnaryOpProvider") 2919 static void ASHRShort64VectorTestsScalarShiftConst(IntFunction<short[]> fa) { 2920 short[] a = fa.apply(SPECIES.length()); 2921 short[] r = fr.apply(SPECIES.length()); 2922 2923 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2924 for (int i = 0; i < a.length; i += SPECIES.length()) { 2925 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2926 av.lanewise(VectorOperators.ASHR, CONST_SHIFT).intoArray(r, i); 2927 } 2928 } 2929 2930 assertShiftConstEquals(r, a, Short64VectorTests::ASHR_binary_const); 2931 } 2932 2933 @Test(dataProvider = "shortUnaryOpMaskProvider") 2934 static void ASHRShort64VectorTestsScalarShiftMaskedConst(IntFunction<short[]> fa, 2935 IntFunction<boolean[]> fm) { 2936 short[] a = fa.apply(SPECIES.length()); 2937 short[] r = fr.apply(SPECIES.length()); 2938 boolean[] mask = fm.apply(SPECIES.length()); 2939 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2940 2941 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2942 for (int i = 0; i < a.length; i += SPECIES.length()) { 2943 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2944 av.lanewise(VectorOperators.ASHR, CONST_SHIFT, vmask).intoArray(r, i); 2945 } 2946 } 2947 2948 assertShiftConstEquals(r, a, mask, Short64VectorTests::ASHR_binary_const); 2949 } 2950 2951 static short ROR_binary_const(short a) { 2952 return (short)(ROR_scalar(a, CONST_SHIFT)); 2953 } 2954 2955 @Test(dataProvider = "shortUnaryOpProvider") 2956 static void RORShort64VectorTestsScalarShiftConst(IntFunction<short[]> fa) { 2957 short[] a = fa.apply(SPECIES.length()); 2958 short[] r = fr.apply(SPECIES.length()); 2959 2960 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2961 for (int i = 0; i < a.length; i += SPECIES.length()) { 2962 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2963 av.lanewise(VectorOperators.ROR, CONST_SHIFT).intoArray(r, i); 2964 } 2965 } 2966 2967 assertShiftConstEquals(r, a, Short64VectorTests::ROR_binary_const); 2968 } 2969 2970 @Test(dataProvider = "shortUnaryOpMaskProvider") 2971 static void RORShort64VectorTestsScalarShiftMaskedConst(IntFunction<short[]> fa, 2972 IntFunction<boolean[]> fm) { 2973 short[] a = fa.apply(SPECIES.length()); 2974 short[] r = fr.apply(SPECIES.length()); 2975 boolean[] mask = fm.apply(SPECIES.length()); 2976 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 2977 2978 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2979 for (int i = 0; i < a.length; i += SPECIES.length()) { 2980 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 2981 av.lanewise(VectorOperators.ROR, CONST_SHIFT, vmask).intoArray(r, i); 2982 } 2983 } 2984 2985 assertShiftConstEquals(r, a, mask, Short64VectorTests::ROR_binary_const); 2986 } 2987 2988 static short ROL_binary_const(short a) { 2989 return (short)(ROL_scalar(a, CONST_SHIFT)); 2990 } 2991 2992 @Test(dataProvider = "shortUnaryOpProvider") 2993 static void ROLShort64VectorTestsScalarShiftConst(IntFunction<short[]> fa) { 2994 short[] a = fa.apply(SPECIES.length()); 2995 short[] r = fr.apply(SPECIES.length()); 2996 2997 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2998 for (int i = 0; i < a.length; i += SPECIES.length()) { 2999 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3000 av.lanewise(VectorOperators.ROL, CONST_SHIFT).intoArray(r, i); 3001 } 3002 } 3003 3004 assertShiftConstEquals(r, a, Short64VectorTests::ROL_binary_const); 3005 } 3006 3007 @Test(dataProvider = "shortUnaryOpMaskProvider") 3008 static void ROLShort64VectorTestsScalarShiftMaskedConst(IntFunction<short[]> fa, 3009 IntFunction<boolean[]> fm) { 3010 short[] a = fa.apply(SPECIES.length()); 3011 short[] r = fr.apply(SPECIES.length()); 3012 boolean[] mask = fm.apply(SPECIES.length()); 3013 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3014 3015 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3016 for (int i = 0; i < a.length; i += SPECIES.length()) { 3017 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3018 av.lanewise(VectorOperators.ROL, CONST_SHIFT, vmask).intoArray(r, i); 3019 } 3020 } 3021 3022 assertShiftConstEquals(r, a, mask, Short64VectorTests::ROL_binary_const); 3023 } 3024 3025 3026 static ShortVector bv_MIN = ShortVector.broadcast(SPECIES, (short)10); 3027 3028 @Test(dataProvider = "shortUnaryOpProvider") 3029 static void MINShort64VectorTestsWithMemOp(IntFunction<short[]> fa) { 3030 short[] a = fa.apply(SPECIES.length()); 3031 short[] r = fr.apply(SPECIES.length()); 3032 3033 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3034 for (int i = 0; i < a.length; i += SPECIES.length()) { 3035 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3036 av.lanewise(VectorOperators.MIN, bv_MIN).intoArray(r, i); 3037 } 3038 } 3039 3040 assertArraysEquals(r, a, (short)10, Short64VectorTests::MIN); 3041 } 3042 3043 static ShortVector bv_min = ShortVector.broadcast(SPECIES, (short)10); 3044 3045 @Test(dataProvider = "shortUnaryOpProvider") 3046 static void minShort64VectorTestsWithMemOp(IntFunction<short[]> fa) { 3047 short[] a = fa.apply(SPECIES.length()); 3048 short[] r = fr.apply(SPECIES.length()); 3049 3050 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3051 for (int i = 0; i < a.length; i += SPECIES.length()) { 3052 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3053 av.min(bv_min).intoArray(r, i); 3054 } 3055 } 3056 3057 assertArraysEquals(r, a, (short)10, Short64VectorTests::min); 3058 } 3059 3060 static ShortVector bv_MIN_M = ShortVector.broadcast(SPECIES, (short)10); 3061 3062 @Test(dataProvider = "shortUnaryOpMaskProvider") 3063 static void MINShort64VectorTestsMaskedWithMemOp(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 3064 short[] a = fa.apply(SPECIES.length()); 3065 short[] r = fr.apply(SPECIES.length()); 3066 boolean[] mask = fm.apply(SPECIES.length()); 3067 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3068 3069 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3070 for (int i = 0; i < a.length; i += SPECIES.length()) { 3071 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3072 av.lanewise(VectorOperators.MIN, bv_MIN_M, vmask).intoArray(r, i); 3073 } 3074 } 3075 3076 assertArraysEquals(r, a, (short)10, mask, Short64VectorTests::MIN); 3077 } 3078 3079 static ShortVector bv_MAX = ShortVector.broadcast(SPECIES, (short)10); 3080 3081 @Test(dataProvider = "shortUnaryOpProvider") 3082 static void MAXShort64VectorTestsWithMemOp(IntFunction<short[]> fa) { 3083 short[] a = fa.apply(SPECIES.length()); 3084 short[] r = fr.apply(SPECIES.length()); 3085 3086 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3087 for (int i = 0; i < a.length; i += SPECIES.length()) { 3088 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3089 av.lanewise(VectorOperators.MAX, bv_MAX).intoArray(r, i); 3090 } 3091 } 3092 3093 assertArraysEquals(r, a, (short)10, Short64VectorTests::MAX); 3094 } 3095 3096 static ShortVector bv_max = ShortVector.broadcast(SPECIES, (short)10); 3097 3098 @Test(dataProvider = "shortUnaryOpProvider") 3099 static void maxShort64VectorTestsWithMemOp(IntFunction<short[]> fa) { 3100 short[] a = fa.apply(SPECIES.length()); 3101 short[] r = fr.apply(SPECIES.length()); 3102 3103 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3104 for (int i = 0; i < a.length; i += SPECIES.length()) { 3105 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3106 av.max(bv_max).intoArray(r, i); 3107 } 3108 } 3109 3110 assertArraysEquals(r, a, (short)10, Short64VectorTests::max); 3111 } 3112 3113 static ShortVector bv_MAX_M = ShortVector.broadcast(SPECIES, (short)10); 3114 3115 @Test(dataProvider = "shortUnaryOpMaskProvider") 3116 static void MAXShort64VectorTestsMaskedWithMemOp(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 3117 short[] a = fa.apply(SPECIES.length()); 3118 short[] r = fr.apply(SPECIES.length()); 3119 boolean[] mask = fm.apply(SPECIES.length()); 3120 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3121 3122 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3123 for (int i = 0; i < a.length; i += SPECIES.length()) { 3124 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3125 av.lanewise(VectorOperators.MAX, bv_MAX_M, vmask).intoArray(r, i); 3126 } 3127 } 3128 3129 assertArraysEquals(r, a, (short)10, mask, Short64VectorTests::MAX); 3130 } 3131 3132 static short MIN(short a, short b) { 3133 return (short)(Math.min(a, b)); 3134 } 3135 3136 @Test(dataProvider = "shortBinaryOpProvider") 3137 static void MINShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3138 short[] a = fa.apply(SPECIES.length()); 3139 short[] b = fb.apply(SPECIES.length()); 3140 short[] r = fr.apply(SPECIES.length()); 3141 3142 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3143 for (int i = 0; i < a.length; i += SPECIES.length()) { 3144 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3145 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3146 av.lanewise(VectorOperators.MIN, bv).intoArray(r, i); 3147 } 3148 } 3149 3150 assertArraysEquals(r, a, b, Short64VectorTests::MIN); 3151 } 3152 3153 static short min(short a, short b) { 3154 return (short)(Math.min(a, b)); 3155 } 3156 3157 @Test(dataProvider = "shortBinaryOpProvider") 3158 static void minShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3159 short[] a = fa.apply(SPECIES.length()); 3160 short[] b = fb.apply(SPECIES.length()); 3161 short[] r = fr.apply(SPECIES.length()); 3162 3163 for (int i = 0; i < a.length; i += SPECIES.length()) { 3164 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3165 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3166 av.min(bv).intoArray(r, i); 3167 } 3168 3169 assertArraysEquals(r, a, b, Short64VectorTests::min); 3170 } 3171 3172 static short MAX(short a, short b) { 3173 return (short)(Math.max(a, b)); 3174 } 3175 3176 @Test(dataProvider = "shortBinaryOpProvider") 3177 static void MAXShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3178 short[] a = fa.apply(SPECIES.length()); 3179 short[] b = fb.apply(SPECIES.length()); 3180 short[] r = fr.apply(SPECIES.length()); 3181 3182 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3183 for (int i = 0; i < a.length; i += SPECIES.length()) { 3184 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3185 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3186 av.lanewise(VectorOperators.MAX, bv).intoArray(r, i); 3187 } 3188 } 3189 3190 assertArraysEquals(r, a, b, Short64VectorTests::MAX); 3191 } 3192 3193 static short max(short a, short b) { 3194 return (short)(Math.max(a, b)); 3195 } 3196 3197 @Test(dataProvider = "shortBinaryOpProvider") 3198 static void maxShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3199 short[] a = fa.apply(SPECIES.length()); 3200 short[] b = fb.apply(SPECIES.length()); 3201 short[] r = fr.apply(SPECIES.length()); 3202 3203 for (int i = 0; i < a.length; i += SPECIES.length()) { 3204 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3205 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3206 av.max(bv).intoArray(r, i); 3207 } 3208 3209 assertArraysEquals(r, a, b, Short64VectorTests::max); 3210 } 3211 3212 static short UMIN(short a, short b) { 3213 return (short)(VectorMath.minUnsigned(a, b)); 3214 } 3215 3216 @Test(dataProvider = "shortBinaryOpProvider") 3217 static void UMINShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3218 short[] a = fa.apply(SPECIES.length()); 3219 short[] b = fb.apply(SPECIES.length()); 3220 short[] r = fr.apply(SPECIES.length()); 3221 3222 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3223 for (int i = 0; i < a.length; i += SPECIES.length()) { 3224 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3225 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3226 av.lanewise(VectorOperators.UMIN, bv).intoArray(r, i); 3227 } 3228 } 3229 3230 assertArraysEquals(r, a, b, Short64VectorTests::UMIN); 3231 } 3232 3233 @Test(dataProvider = "shortBinaryOpMaskProvider") 3234 static void UMINShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 3235 IntFunction<boolean[]> fm) { 3236 short[] a = fa.apply(SPECIES.length()); 3237 short[] b = fb.apply(SPECIES.length()); 3238 short[] r = fr.apply(SPECIES.length()); 3239 boolean[] mask = fm.apply(SPECIES.length()); 3240 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3241 3242 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3243 for (int i = 0; i < a.length; i += SPECIES.length()) { 3244 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3245 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3246 av.lanewise(VectorOperators.UMIN, bv, vmask).intoArray(r, i); 3247 } 3248 } 3249 3250 assertArraysEquals(r, a, b, mask, Short64VectorTests::UMIN); 3251 } 3252 3253 static short UMAX(short a, short b) { 3254 return (short)(VectorMath.maxUnsigned(a, b)); 3255 } 3256 3257 @Test(dataProvider = "shortBinaryOpProvider") 3258 static void UMAXShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3259 short[] a = fa.apply(SPECIES.length()); 3260 short[] b = fb.apply(SPECIES.length()); 3261 short[] r = fr.apply(SPECIES.length()); 3262 3263 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3264 for (int i = 0; i < a.length; i += SPECIES.length()) { 3265 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3266 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3267 av.lanewise(VectorOperators.UMAX, bv).intoArray(r, i); 3268 } 3269 } 3270 3271 assertArraysEquals(r, a, b, Short64VectorTests::UMAX); 3272 } 3273 3274 @Test(dataProvider = "shortBinaryOpMaskProvider") 3275 static void UMAXShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 3276 IntFunction<boolean[]> fm) { 3277 short[] a = fa.apply(SPECIES.length()); 3278 short[] b = fb.apply(SPECIES.length()); 3279 short[] r = fr.apply(SPECIES.length()); 3280 boolean[] mask = fm.apply(SPECIES.length()); 3281 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3282 3283 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3284 for (int i = 0; i < a.length; i += SPECIES.length()) { 3285 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3286 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3287 av.lanewise(VectorOperators.UMAX, bv, vmask).intoArray(r, i); 3288 } 3289 } 3290 3291 assertArraysEquals(r, a, b, mask, Short64VectorTests::UMAX); 3292 } 3293 3294 static short SADD(short a, short b) { 3295 return (short)(VectorMath.addSaturating(a, b)); 3296 } 3297 3298 @Test(dataProvider = "shortSaturatingBinaryOpProvider") 3299 static void SADDShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3300 short[] a = fa.apply(SPECIES.length()); 3301 short[] b = fb.apply(SPECIES.length()); 3302 short[] r = fr.apply(SPECIES.length()); 3303 3304 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3305 for (int i = 0; i < a.length; i += SPECIES.length()) { 3306 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3307 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3308 av.lanewise(VectorOperators.SADD, bv).intoArray(r, i); 3309 } 3310 } 3311 3312 assertArraysEquals(r, a, b, Short64VectorTests::SADD); 3313 } 3314 3315 @Test(dataProvider = "shortSaturatingBinaryOpMaskProvider") 3316 static void SADDShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 3317 IntFunction<boolean[]> fm) { 3318 short[] a = fa.apply(SPECIES.length()); 3319 short[] b = fb.apply(SPECIES.length()); 3320 short[] r = fr.apply(SPECIES.length()); 3321 boolean[] mask = fm.apply(SPECIES.length()); 3322 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3323 3324 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3325 for (int i = 0; i < a.length; i += SPECIES.length()) { 3326 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3327 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3328 av.lanewise(VectorOperators.SADD, bv, vmask).intoArray(r, i); 3329 } 3330 } 3331 3332 assertArraysEquals(r, a, b, mask, Short64VectorTests::SADD); 3333 } 3334 3335 static short SSUB(short a, short b) { 3336 return (short)(VectorMath.subSaturating(a, b)); 3337 } 3338 3339 @Test(dataProvider = "shortSaturatingBinaryOpProvider") 3340 static void SSUBShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3341 short[] a = fa.apply(SPECIES.length()); 3342 short[] b = fb.apply(SPECIES.length()); 3343 short[] r = fr.apply(SPECIES.length()); 3344 3345 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3346 for (int i = 0; i < a.length; i += SPECIES.length()) { 3347 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3348 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3349 av.lanewise(VectorOperators.SSUB, bv).intoArray(r, i); 3350 } 3351 } 3352 3353 assertArraysEquals(r, a, b, Short64VectorTests::SSUB); 3354 } 3355 3356 @Test(dataProvider = "shortSaturatingBinaryOpMaskProvider") 3357 static void SSUBShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 3358 IntFunction<boolean[]> fm) { 3359 short[] a = fa.apply(SPECIES.length()); 3360 short[] b = fb.apply(SPECIES.length()); 3361 short[] r = fr.apply(SPECIES.length()); 3362 boolean[] mask = fm.apply(SPECIES.length()); 3363 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3364 3365 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3366 for (int i = 0; i < a.length; i += SPECIES.length()) { 3367 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3368 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3369 av.lanewise(VectorOperators.SSUB, bv, vmask).intoArray(r, i); 3370 } 3371 } 3372 3373 assertArraysEquals(r, a, b, mask, Short64VectorTests::SSUB); 3374 } 3375 3376 static short SUADD(short a, short b) { 3377 return (short)(VectorMath.addSaturatingUnsigned(a, b)); 3378 } 3379 3380 @Test(dataProvider = "shortSaturatingBinaryOpProvider") 3381 static void SUADDShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3382 short[] a = fa.apply(SPECIES.length()); 3383 short[] b = fb.apply(SPECIES.length()); 3384 short[] r = fr.apply(SPECIES.length()); 3385 3386 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3387 for (int i = 0; i < a.length; i += SPECIES.length()) { 3388 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3389 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3390 av.lanewise(VectorOperators.SUADD, bv).intoArray(r, i); 3391 } 3392 } 3393 3394 assertArraysEquals(r, a, b, Short64VectorTests::SUADD); 3395 } 3396 3397 @Test(dataProvider = "shortSaturatingBinaryOpMaskProvider") 3398 static void SUADDShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 3399 IntFunction<boolean[]> fm) { 3400 short[] a = fa.apply(SPECIES.length()); 3401 short[] b = fb.apply(SPECIES.length()); 3402 short[] r = fr.apply(SPECIES.length()); 3403 boolean[] mask = fm.apply(SPECIES.length()); 3404 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3405 3406 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3407 for (int i = 0; i < a.length; i += SPECIES.length()) { 3408 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3409 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3410 av.lanewise(VectorOperators.SUADD, bv, vmask).intoArray(r, i); 3411 } 3412 } 3413 3414 assertArraysEquals(r, a, b, mask, Short64VectorTests::SUADD); 3415 } 3416 3417 static short SUSUB(short a, short b) { 3418 return (short)(VectorMath.subSaturatingUnsigned(a, b)); 3419 } 3420 3421 @Test(dataProvider = "shortSaturatingBinaryOpProvider") 3422 static void SUSUBShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3423 short[] a = fa.apply(SPECIES.length()); 3424 short[] b = fb.apply(SPECIES.length()); 3425 short[] r = fr.apply(SPECIES.length()); 3426 3427 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3428 for (int i = 0; i < a.length; i += SPECIES.length()) { 3429 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3430 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3431 av.lanewise(VectorOperators.SUSUB, bv).intoArray(r, i); 3432 } 3433 } 3434 3435 assertArraysEquals(r, a, b, Short64VectorTests::SUSUB); 3436 } 3437 3438 @Test(dataProvider = "shortSaturatingBinaryOpMaskProvider") 3439 static void SUSUBShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 3440 IntFunction<boolean[]> fm) { 3441 short[] a = fa.apply(SPECIES.length()); 3442 short[] b = fb.apply(SPECIES.length()); 3443 short[] r = fr.apply(SPECIES.length()); 3444 boolean[] mask = fm.apply(SPECIES.length()); 3445 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3446 3447 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3448 for (int i = 0; i < a.length; i += SPECIES.length()) { 3449 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3450 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3451 av.lanewise(VectorOperators.SUSUB, bv, vmask).intoArray(r, i); 3452 } 3453 } 3454 3455 assertArraysEquals(r, a, b, mask, Short64VectorTests::SUSUB); 3456 } 3457 3458 @Test(dataProvider = "shortBinaryOpProvider") 3459 static void MINShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3460 short[] a = fa.apply(SPECIES.length()); 3461 short[] b = fb.apply(SPECIES.length()); 3462 short[] r = fr.apply(SPECIES.length()); 3463 3464 for (int i = 0; i < a.length; i += SPECIES.length()) { 3465 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3466 av.lanewise(VectorOperators.MIN, b[i]).intoArray(r, i); 3467 } 3468 3469 assertBroadcastArraysEquals(r, a, b, Short64VectorTests::MIN); 3470 } 3471 3472 @Test(dataProvider = "shortBinaryOpProvider") 3473 static void minShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3474 short[] a = fa.apply(SPECIES.length()); 3475 short[] b = fb.apply(SPECIES.length()); 3476 short[] r = fr.apply(SPECIES.length()); 3477 3478 for (int i = 0; i < a.length; i += SPECIES.length()) { 3479 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3480 av.min(b[i]).intoArray(r, i); 3481 } 3482 3483 assertBroadcastArraysEquals(r, a, b, Short64VectorTests::min); 3484 } 3485 3486 @Test(dataProvider = "shortBinaryOpProvider") 3487 static void MAXShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3488 short[] a = fa.apply(SPECIES.length()); 3489 short[] b = fb.apply(SPECIES.length()); 3490 short[] r = fr.apply(SPECIES.length()); 3491 3492 for (int i = 0; i < a.length; i += SPECIES.length()) { 3493 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3494 av.lanewise(VectorOperators.MAX, b[i]).intoArray(r, i); 3495 } 3496 3497 assertBroadcastArraysEquals(r, a, b, Short64VectorTests::MAX); 3498 } 3499 3500 @Test(dataProvider = "shortBinaryOpProvider") 3501 static void maxShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 3502 short[] a = fa.apply(SPECIES.length()); 3503 short[] b = fb.apply(SPECIES.length()); 3504 short[] r = fr.apply(SPECIES.length()); 3505 3506 for (int i = 0; i < a.length; i += SPECIES.length()) { 3507 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3508 av.max(b[i]).intoArray(r, i); 3509 } 3510 3511 assertBroadcastArraysEquals(r, a, b, Short64VectorTests::max); 3512 } 3513 @Test(dataProvider = "shortSaturatingBinaryOpAssocProvider") 3514 static void SUADDAssocShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb, IntFunction<short[]> fc) { 3515 short[] a = fa.apply(SPECIES.length()); 3516 short[] b = fb.apply(SPECIES.length()); 3517 short[] c = fc.apply(SPECIES.length()); 3518 short[] rl = fr.apply(SPECIES.length()); 3519 short[] rr = fr.apply(SPECIES.length()); 3520 3521 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3522 for (int i = 0; i < a.length; i += SPECIES.length()) { 3523 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3524 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3525 ShortVector cv = ShortVector.fromArray(SPECIES, c, i); 3526 av.lanewise(VectorOperators.SUADD, bv).lanewise(VectorOperators.SUADD, cv).intoArray(rl, i); 3527 av.lanewise(VectorOperators.SUADD, bv.lanewise(VectorOperators.SUADD, cv)).intoArray(rr, i); 3528 } 3529 } 3530 3531 assertArraysEqualsAssociative(rl, rr, a, b, c, Short64VectorTests::SUADD); 3532 } 3533 3534 @Test(dataProvider = "shortSaturatingBinaryOpAssocMaskProvider") 3535 static void SUADDAssocShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 3536 IntFunction<short[]> fc, IntFunction<boolean[]> fm) { 3537 short[] a = fa.apply(SPECIES.length()); 3538 short[] b = fb.apply(SPECIES.length()); 3539 short[] c = fc.apply(SPECIES.length()); 3540 boolean[] mask = fm.apply(SPECIES.length()); 3541 short[] rl = fr.apply(SPECIES.length()); 3542 short[] rr = fr.apply(SPECIES.length()); 3543 3544 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3545 3546 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3547 for (int i = 0; i < a.length; i += SPECIES.length()) { 3548 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3549 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 3550 ShortVector cv = ShortVector.fromArray(SPECIES, c, i); 3551 av.lanewise(VectorOperators.SUADD, bv, vmask).lanewise(VectorOperators.SUADD, cv, vmask).intoArray(rl, i); 3552 av.lanewise(VectorOperators.SUADD, bv.lanewise(VectorOperators.SUADD, cv, vmask), vmask).intoArray(rr, i); 3553 } 3554 } 3555 3556 assertArraysEqualsAssociative(rl, rr, a, b, c, mask, Short64VectorTests::SUADD); 3557 } 3558 3559 static short ANDReduce(short[] a, int idx) { 3560 short res = -1; 3561 for (int i = idx; i < (idx + SPECIES.length()); i++) { 3562 res &= a[i]; 3563 } 3564 3565 return res; 3566 } 3567 3568 static short ANDReduceAll(short[] a) { 3569 short res = -1; 3570 for (int i = 0; i < a.length; i += SPECIES.length()) { 3571 res &= ANDReduce(a, i); 3572 } 3573 3574 return res; 3575 } 3576 3577 @Test(dataProvider = "shortUnaryOpProvider") 3578 static void ANDReduceShort64VectorTests(IntFunction<short[]> fa) { 3579 short[] a = fa.apply(SPECIES.length()); 3580 short[] r = fr.apply(SPECIES.length()); 3581 short ra = -1; 3582 3583 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3584 for (int i = 0; i < a.length; i += SPECIES.length()) { 3585 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3586 r[i] = av.reduceLanes(VectorOperators.AND); 3587 } 3588 } 3589 3590 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3591 ra = -1; 3592 for (int i = 0; i < a.length; i += SPECIES.length()) { 3593 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3594 ra &= av.reduceLanes(VectorOperators.AND); 3595 } 3596 } 3597 3598 assertReductionArraysEquals(r, ra, a, 3599 Short64VectorTests::ANDReduce, Short64VectorTests::ANDReduceAll); 3600 } 3601 3602 static short ANDReduceMasked(short[] a, int idx, boolean[] mask) { 3603 short res = -1; 3604 for (int i = idx; i < (idx + SPECIES.length()); i++) { 3605 if (mask[i % SPECIES.length()]) 3606 res &= a[i]; 3607 } 3608 3609 return res; 3610 } 3611 3612 static short ANDReduceAllMasked(short[] a, boolean[] mask) { 3613 short res = -1; 3614 for (int i = 0; i < a.length; i += SPECIES.length()) { 3615 res &= ANDReduceMasked(a, i, mask); 3616 } 3617 3618 return res; 3619 } 3620 3621 @Test(dataProvider = "shortUnaryOpMaskProvider") 3622 static void ANDReduceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 3623 short[] a = fa.apply(SPECIES.length()); 3624 short[] r = fr.apply(SPECIES.length()); 3625 boolean[] mask = fm.apply(SPECIES.length()); 3626 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3627 short ra = -1; 3628 3629 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3630 for (int i = 0; i < a.length; i += SPECIES.length()) { 3631 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3632 r[i] = av.reduceLanes(VectorOperators.AND, vmask); 3633 } 3634 } 3635 3636 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3637 ra = -1; 3638 for (int i = 0; i < a.length; i += SPECIES.length()) { 3639 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3640 ra &= av.reduceLanes(VectorOperators.AND, vmask); 3641 } 3642 } 3643 3644 assertReductionArraysEqualsMasked(r, ra, a, mask, 3645 Short64VectorTests::ANDReduceMasked, Short64VectorTests::ANDReduceAllMasked); 3646 } 3647 3648 static short ORReduce(short[] a, int idx) { 3649 short res = 0; 3650 for (int i = idx; i < (idx + SPECIES.length()); i++) { 3651 res |= a[i]; 3652 } 3653 3654 return res; 3655 } 3656 3657 static short ORReduceAll(short[] a) { 3658 short res = 0; 3659 for (int i = 0; i < a.length; i += SPECIES.length()) { 3660 res |= ORReduce(a, i); 3661 } 3662 3663 return res; 3664 } 3665 3666 @Test(dataProvider = "shortUnaryOpProvider") 3667 static void ORReduceShort64VectorTests(IntFunction<short[]> fa) { 3668 short[] a = fa.apply(SPECIES.length()); 3669 short[] r = fr.apply(SPECIES.length()); 3670 short ra = 0; 3671 3672 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3673 for (int i = 0; i < a.length; i += SPECIES.length()) { 3674 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3675 r[i] = av.reduceLanes(VectorOperators.OR); 3676 } 3677 } 3678 3679 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3680 ra = 0; 3681 for (int i = 0; i < a.length; i += SPECIES.length()) { 3682 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3683 ra |= av.reduceLanes(VectorOperators.OR); 3684 } 3685 } 3686 3687 assertReductionArraysEquals(r, ra, a, 3688 Short64VectorTests::ORReduce, Short64VectorTests::ORReduceAll); 3689 } 3690 3691 static short ORReduceMasked(short[] a, int idx, boolean[] mask) { 3692 short res = 0; 3693 for (int i = idx; i < (idx + SPECIES.length()); i++) { 3694 if (mask[i % SPECIES.length()]) 3695 res |= a[i]; 3696 } 3697 3698 return res; 3699 } 3700 3701 static short ORReduceAllMasked(short[] a, boolean[] mask) { 3702 short res = 0; 3703 for (int i = 0; i < a.length; i += SPECIES.length()) { 3704 res |= ORReduceMasked(a, i, mask); 3705 } 3706 3707 return res; 3708 } 3709 3710 @Test(dataProvider = "shortUnaryOpMaskProvider") 3711 static void ORReduceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 3712 short[] a = fa.apply(SPECIES.length()); 3713 short[] r = fr.apply(SPECIES.length()); 3714 boolean[] mask = fm.apply(SPECIES.length()); 3715 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3716 short ra = 0; 3717 3718 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3719 for (int i = 0; i < a.length; i += SPECIES.length()) { 3720 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3721 r[i] = av.reduceLanes(VectorOperators.OR, vmask); 3722 } 3723 } 3724 3725 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3726 ra = 0; 3727 for (int i = 0; i < a.length; i += SPECIES.length()) { 3728 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3729 ra |= av.reduceLanes(VectorOperators.OR, vmask); 3730 } 3731 } 3732 3733 assertReductionArraysEqualsMasked(r, ra, a, mask, 3734 Short64VectorTests::ORReduceMasked, Short64VectorTests::ORReduceAllMasked); 3735 } 3736 3737 static short XORReduce(short[] a, int idx) { 3738 short res = 0; 3739 for (int i = idx; i < (idx + SPECIES.length()); i++) { 3740 res ^= a[i]; 3741 } 3742 3743 return res; 3744 } 3745 3746 static short XORReduceAll(short[] a) { 3747 short res = 0; 3748 for (int i = 0; i < a.length; i += SPECIES.length()) { 3749 res ^= XORReduce(a, i); 3750 } 3751 3752 return res; 3753 } 3754 3755 @Test(dataProvider = "shortUnaryOpProvider") 3756 static void XORReduceShort64VectorTests(IntFunction<short[]> fa) { 3757 short[] a = fa.apply(SPECIES.length()); 3758 short[] r = fr.apply(SPECIES.length()); 3759 short ra = 0; 3760 3761 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3762 for (int i = 0; i < a.length; i += SPECIES.length()) { 3763 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3764 r[i] = av.reduceLanes(VectorOperators.XOR); 3765 } 3766 } 3767 3768 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3769 ra = 0; 3770 for (int i = 0; i < a.length; i += SPECIES.length()) { 3771 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3772 ra ^= av.reduceLanes(VectorOperators.XOR); 3773 } 3774 } 3775 3776 assertReductionArraysEquals(r, ra, a, 3777 Short64VectorTests::XORReduce, Short64VectorTests::XORReduceAll); 3778 } 3779 3780 static short XORReduceMasked(short[] a, int idx, boolean[] mask) { 3781 short res = 0; 3782 for (int i = idx; i < (idx + SPECIES.length()); i++) { 3783 if (mask[i % SPECIES.length()]) 3784 res ^= a[i]; 3785 } 3786 3787 return res; 3788 } 3789 3790 static short XORReduceAllMasked(short[] a, boolean[] mask) { 3791 short res = 0; 3792 for (int i = 0; i < a.length; i += SPECIES.length()) { 3793 res ^= XORReduceMasked(a, i, mask); 3794 } 3795 3796 return res; 3797 } 3798 3799 @Test(dataProvider = "shortUnaryOpMaskProvider") 3800 static void XORReduceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 3801 short[] a = fa.apply(SPECIES.length()); 3802 short[] r = fr.apply(SPECIES.length()); 3803 boolean[] mask = fm.apply(SPECIES.length()); 3804 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3805 short ra = 0; 3806 3807 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3808 for (int i = 0; i < a.length; i += SPECIES.length()) { 3809 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3810 r[i] = av.reduceLanes(VectorOperators.XOR, vmask); 3811 } 3812 } 3813 3814 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3815 ra = 0; 3816 for (int i = 0; i < a.length; i += SPECIES.length()) { 3817 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3818 ra ^= av.reduceLanes(VectorOperators.XOR, vmask); 3819 } 3820 } 3821 3822 assertReductionArraysEqualsMasked(r, ra, a, mask, 3823 Short64VectorTests::XORReduceMasked, Short64VectorTests::XORReduceAllMasked); 3824 } 3825 3826 static short ADDReduce(short[] a, int idx) { 3827 short res = 0; 3828 for (int i = idx; i < (idx + SPECIES.length()); i++) { 3829 res += a[i]; 3830 } 3831 3832 return res; 3833 } 3834 3835 static short ADDReduceAll(short[] a) { 3836 short res = 0; 3837 for (int i = 0; i < a.length; i += SPECIES.length()) { 3838 res += ADDReduce(a, i); 3839 } 3840 3841 return res; 3842 } 3843 3844 @Test(dataProvider = "shortUnaryOpProvider") 3845 static void ADDReduceShort64VectorTests(IntFunction<short[]> fa) { 3846 short[] a = fa.apply(SPECIES.length()); 3847 short[] r = fr.apply(SPECIES.length()); 3848 short ra = 0; 3849 3850 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3851 for (int i = 0; i < a.length; i += SPECIES.length()) { 3852 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3853 r[i] = av.reduceLanes(VectorOperators.ADD); 3854 } 3855 } 3856 3857 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3858 ra = 0; 3859 for (int i = 0; i < a.length; i += SPECIES.length()) { 3860 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3861 ra += av.reduceLanes(VectorOperators.ADD); 3862 } 3863 } 3864 3865 assertReductionArraysEquals(r, ra, a, 3866 Short64VectorTests::ADDReduce, Short64VectorTests::ADDReduceAll); 3867 } 3868 3869 static short ADDReduceMasked(short[] a, int idx, boolean[] mask) { 3870 short res = 0; 3871 for (int i = idx; i < (idx + SPECIES.length()); i++) { 3872 if (mask[i % SPECIES.length()]) 3873 res += a[i]; 3874 } 3875 3876 return res; 3877 } 3878 3879 static short ADDReduceAllMasked(short[] a, boolean[] mask) { 3880 short res = 0; 3881 for (int i = 0; i < a.length; i += SPECIES.length()) { 3882 res += ADDReduceMasked(a, i, mask); 3883 } 3884 3885 return res; 3886 } 3887 3888 @Test(dataProvider = "shortUnaryOpMaskProvider") 3889 static void ADDReduceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 3890 short[] a = fa.apply(SPECIES.length()); 3891 short[] r = fr.apply(SPECIES.length()); 3892 boolean[] mask = fm.apply(SPECIES.length()); 3893 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3894 short ra = 0; 3895 3896 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3897 for (int i = 0; i < a.length; i += SPECIES.length()) { 3898 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3899 r[i] = av.reduceLanes(VectorOperators.ADD, vmask); 3900 } 3901 } 3902 3903 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3904 ra = 0; 3905 for (int i = 0; i < a.length; i += SPECIES.length()) { 3906 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3907 ra += av.reduceLanes(VectorOperators.ADD, vmask); 3908 } 3909 } 3910 3911 assertReductionArraysEqualsMasked(r, ra, a, mask, 3912 Short64VectorTests::ADDReduceMasked, Short64VectorTests::ADDReduceAllMasked); 3913 } 3914 3915 static short MULReduce(short[] a, int idx) { 3916 short res = 1; 3917 for (int i = idx; i < (idx + SPECIES.length()); i++) { 3918 res *= a[i]; 3919 } 3920 3921 return res; 3922 } 3923 3924 static short MULReduceAll(short[] a) { 3925 short res = 1; 3926 for (int i = 0; i < a.length; i += SPECIES.length()) { 3927 res *= MULReduce(a, i); 3928 } 3929 3930 return res; 3931 } 3932 3933 @Test(dataProvider = "shortUnaryOpProvider") 3934 static void MULReduceShort64VectorTests(IntFunction<short[]> fa) { 3935 short[] a = fa.apply(SPECIES.length()); 3936 short[] r = fr.apply(SPECIES.length()); 3937 short ra = 1; 3938 3939 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3940 for (int i = 0; i < a.length; i += SPECIES.length()) { 3941 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3942 r[i] = av.reduceLanes(VectorOperators.MUL); 3943 } 3944 } 3945 3946 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3947 ra = 1; 3948 for (int i = 0; i < a.length; i += SPECIES.length()) { 3949 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3950 ra *= av.reduceLanes(VectorOperators.MUL); 3951 } 3952 } 3953 3954 assertReductionArraysEquals(r, ra, a, 3955 Short64VectorTests::MULReduce, Short64VectorTests::MULReduceAll); 3956 } 3957 3958 static short MULReduceMasked(short[] a, int idx, boolean[] mask) { 3959 short res = 1; 3960 for (int i = idx; i < (idx + SPECIES.length()); i++) { 3961 if (mask[i % SPECIES.length()]) 3962 res *= a[i]; 3963 } 3964 3965 return res; 3966 } 3967 3968 static short MULReduceAllMasked(short[] a, boolean[] mask) { 3969 short res = 1; 3970 for (int i = 0; i < a.length; i += SPECIES.length()) { 3971 res *= MULReduceMasked(a, i, mask); 3972 } 3973 3974 return res; 3975 } 3976 3977 @Test(dataProvider = "shortUnaryOpMaskProvider") 3978 static void MULReduceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 3979 short[] a = fa.apply(SPECIES.length()); 3980 short[] r = fr.apply(SPECIES.length()); 3981 boolean[] mask = fm.apply(SPECIES.length()); 3982 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3983 short ra = 1; 3984 3985 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3986 for (int i = 0; i < a.length; i += SPECIES.length()) { 3987 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3988 r[i] = av.reduceLanes(VectorOperators.MUL, vmask); 3989 } 3990 } 3991 3992 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3993 ra = 1; 3994 for (int i = 0; i < a.length; i += SPECIES.length()) { 3995 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 3996 ra *= av.reduceLanes(VectorOperators.MUL, vmask); 3997 } 3998 } 3999 4000 assertReductionArraysEqualsMasked(r, ra, a, mask, 4001 Short64VectorTests::MULReduceMasked, Short64VectorTests::MULReduceAllMasked); 4002 } 4003 4004 static short MINReduce(short[] a, int idx) { 4005 short res = Short.MAX_VALUE; 4006 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4007 res = (short) Math.min(res, a[i]); 4008 } 4009 4010 return res; 4011 } 4012 4013 static short MINReduceAll(short[] a) { 4014 short res = Short.MAX_VALUE; 4015 for (int i = 0; i < a.length; i += SPECIES.length()) { 4016 res = (short) Math.min(res, MINReduce(a, i)); 4017 } 4018 4019 return res; 4020 } 4021 4022 @Test(dataProvider = "shortUnaryOpProvider") 4023 static void MINReduceShort64VectorTests(IntFunction<short[]> fa) { 4024 short[] a = fa.apply(SPECIES.length()); 4025 short[] r = fr.apply(SPECIES.length()); 4026 short ra = Short.MAX_VALUE; 4027 4028 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4029 for (int i = 0; i < a.length; i += SPECIES.length()) { 4030 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4031 r[i] = av.reduceLanes(VectorOperators.MIN); 4032 } 4033 } 4034 4035 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4036 ra = Short.MAX_VALUE; 4037 for (int i = 0; i < a.length; i += SPECIES.length()) { 4038 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4039 ra = (short) Math.min(ra, av.reduceLanes(VectorOperators.MIN)); 4040 } 4041 } 4042 4043 assertReductionArraysEquals(r, ra, a, 4044 Short64VectorTests::MINReduce, Short64VectorTests::MINReduceAll); 4045 } 4046 4047 static short MINReduceMasked(short[] a, int idx, boolean[] mask) { 4048 short res = Short.MAX_VALUE; 4049 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4050 if (mask[i % SPECIES.length()]) 4051 res = (short) Math.min(res, a[i]); 4052 } 4053 4054 return res; 4055 } 4056 4057 static short MINReduceAllMasked(short[] a, boolean[] mask) { 4058 short res = Short.MAX_VALUE; 4059 for (int i = 0; i < a.length; i += SPECIES.length()) { 4060 res = (short) Math.min(res, MINReduceMasked(a, i, mask)); 4061 } 4062 4063 return res; 4064 } 4065 4066 @Test(dataProvider = "shortUnaryOpMaskProvider") 4067 static void MINReduceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 4068 short[] a = fa.apply(SPECIES.length()); 4069 short[] r = fr.apply(SPECIES.length()); 4070 boolean[] mask = fm.apply(SPECIES.length()); 4071 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4072 short ra = Short.MAX_VALUE; 4073 4074 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4075 for (int i = 0; i < a.length; i += SPECIES.length()) { 4076 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4077 r[i] = av.reduceLanes(VectorOperators.MIN, vmask); 4078 } 4079 } 4080 4081 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4082 ra = Short.MAX_VALUE; 4083 for (int i = 0; i < a.length; i += SPECIES.length()) { 4084 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4085 ra = (short) Math.min(ra, av.reduceLanes(VectorOperators.MIN, vmask)); 4086 } 4087 } 4088 4089 assertReductionArraysEqualsMasked(r, ra, a, mask, 4090 Short64VectorTests::MINReduceMasked, Short64VectorTests::MINReduceAllMasked); 4091 } 4092 4093 static short MAXReduce(short[] a, int idx) { 4094 short res = Short.MIN_VALUE; 4095 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4096 res = (short) Math.max(res, a[i]); 4097 } 4098 4099 return res; 4100 } 4101 4102 static short MAXReduceAll(short[] a) { 4103 short res = Short.MIN_VALUE; 4104 for (int i = 0; i < a.length; i += SPECIES.length()) { 4105 res = (short) Math.max(res, MAXReduce(a, i)); 4106 } 4107 4108 return res; 4109 } 4110 4111 @Test(dataProvider = "shortUnaryOpProvider") 4112 static void MAXReduceShort64VectorTests(IntFunction<short[]> fa) { 4113 short[] a = fa.apply(SPECIES.length()); 4114 short[] r = fr.apply(SPECIES.length()); 4115 short ra = Short.MIN_VALUE; 4116 4117 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4118 for (int i = 0; i < a.length; i += SPECIES.length()) { 4119 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4120 r[i] = av.reduceLanes(VectorOperators.MAX); 4121 } 4122 } 4123 4124 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4125 ra = Short.MIN_VALUE; 4126 for (int i = 0; i < a.length; i += SPECIES.length()) { 4127 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4128 ra = (short) Math.max(ra, av.reduceLanes(VectorOperators.MAX)); 4129 } 4130 } 4131 4132 assertReductionArraysEquals(r, ra, a, 4133 Short64VectorTests::MAXReduce, Short64VectorTests::MAXReduceAll); 4134 } 4135 4136 static short MAXReduceMasked(short[] a, int idx, boolean[] mask) { 4137 short res = Short.MIN_VALUE; 4138 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4139 if (mask[i % SPECIES.length()]) 4140 res = (short) Math.max(res, a[i]); 4141 } 4142 4143 return res; 4144 } 4145 4146 static short MAXReduceAllMasked(short[] a, boolean[] mask) { 4147 short res = Short.MIN_VALUE; 4148 for (int i = 0; i < a.length; i += SPECIES.length()) { 4149 res = (short) Math.max(res, MAXReduceMasked(a, i, mask)); 4150 } 4151 4152 return res; 4153 } 4154 4155 @Test(dataProvider = "shortUnaryOpMaskProvider") 4156 static void MAXReduceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 4157 short[] a = fa.apply(SPECIES.length()); 4158 short[] r = fr.apply(SPECIES.length()); 4159 boolean[] mask = fm.apply(SPECIES.length()); 4160 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4161 short ra = Short.MIN_VALUE; 4162 4163 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4164 for (int i = 0; i < a.length; i += SPECIES.length()) { 4165 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4166 r[i] = av.reduceLanes(VectorOperators.MAX, vmask); 4167 } 4168 } 4169 4170 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4171 ra = Short.MIN_VALUE; 4172 for (int i = 0; i < a.length; i += SPECIES.length()) { 4173 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4174 ra = (short) Math.max(ra, av.reduceLanes(VectorOperators.MAX, vmask)); 4175 } 4176 } 4177 4178 assertReductionArraysEqualsMasked(r, ra, a, mask, 4179 Short64VectorTests::MAXReduceMasked, Short64VectorTests::MAXReduceAllMasked); 4180 } 4181 4182 static short UMINReduce(short[] a, int idx) { 4183 short res = Short.MAX_VALUE; 4184 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4185 res = (short) VectorMath.minUnsigned(res, a[i]); 4186 } 4187 4188 return res; 4189 } 4190 4191 static short UMINReduceAll(short[] a) { 4192 short res = Short.MAX_VALUE; 4193 for (int i = 0; i < a.length; i += SPECIES.length()) { 4194 res = (short) VectorMath.minUnsigned(res, UMINReduce(a, i)); 4195 } 4196 4197 return res; 4198 } 4199 4200 @Test(dataProvider = "shortUnaryOpProvider") 4201 static void UMINReduceShort64VectorTests(IntFunction<short[]> fa) { 4202 short[] a = fa.apply(SPECIES.length()); 4203 short[] r = fr.apply(SPECIES.length()); 4204 short ra = Short.MAX_VALUE; 4205 4206 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4207 for (int i = 0; i < a.length; i += SPECIES.length()) { 4208 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4209 r[i] = av.reduceLanes(VectorOperators.UMIN); 4210 } 4211 } 4212 4213 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4214 ra = Short.MAX_VALUE; 4215 for (int i = 0; i < a.length; i += SPECIES.length()) { 4216 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4217 ra = (short) VectorMath.minUnsigned(ra, av.reduceLanes(VectorOperators.UMIN)); 4218 } 4219 } 4220 4221 assertReductionArraysEquals(r, ra, a, 4222 Short64VectorTests::UMINReduce, Short64VectorTests::UMINReduceAll); 4223 } 4224 4225 static short UMINReduceMasked(short[] a, int idx, boolean[] mask) { 4226 short res = Short.MAX_VALUE; 4227 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4228 if (mask[i % SPECIES.length()]) 4229 res = (short) VectorMath.minUnsigned(res, a[i]); 4230 } 4231 4232 return res; 4233 } 4234 4235 static short UMINReduceAllMasked(short[] a, boolean[] mask) { 4236 short res = Short.MAX_VALUE; 4237 for (int i = 0; i < a.length; i += SPECIES.length()) { 4238 res = (short) VectorMath.minUnsigned(res, UMINReduceMasked(a, i, mask)); 4239 } 4240 4241 return res; 4242 } 4243 4244 @Test(dataProvider = "shortUnaryOpMaskProvider") 4245 static void UMINReduceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 4246 short[] a = fa.apply(SPECIES.length()); 4247 short[] r = fr.apply(SPECIES.length()); 4248 boolean[] mask = fm.apply(SPECIES.length()); 4249 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4250 short ra = Short.MAX_VALUE; 4251 4252 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4253 for (int i = 0; i < a.length; i += SPECIES.length()) { 4254 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4255 r[i] = av.reduceLanes(VectorOperators.UMIN, vmask); 4256 } 4257 } 4258 4259 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4260 ra = Short.MAX_VALUE; 4261 for (int i = 0; i < a.length; i += SPECIES.length()) { 4262 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4263 ra = (short) VectorMath.minUnsigned(ra, av.reduceLanes(VectorOperators.UMIN, vmask)); 4264 } 4265 } 4266 4267 assertReductionArraysEqualsMasked(r, ra, a, mask, 4268 Short64VectorTests::UMINReduceMasked, Short64VectorTests::UMINReduceAllMasked); 4269 } 4270 4271 static short UMAXReduce(short[] a, int idx) { 4272 short res = Short.MIN_VALUE; 4273 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4274 res = (short) VectorMath.maxUnsigned(res, a[i]); 4275 } 4276 4277 return res; 4278 } 4279 4280 static short UMAXReduceAll(short[] a) { 4281 short res = Short.MIN_VALUE; 4282 for (int i = 0; i < a.length; i += SPECIES.length()) { 4283 res = (short) VectorMath.maxUnsigned(res, UMAXReduce(a, i)); 4284 } 4285 4286 return res; 4287 } 4288 4289 @Test(dataProvider = "shortUnaryOpProvider") 4290 static void UMAXReduceShort64VectorTests(IntFunction<short[]> fa) { 4291 short[] a = fa.apply(SPECIES.length()); 4292 short[] r = fr.apply(SPECIES.length()); 4293 short ra = Short.MIN_VALUE; 4294 4295 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4296 for (int i = 0; i < a.length; i += SPECIES.length()) { 4297 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4298 r[i] = av.reduceLanes(VectorOperators.UMAX); 4299 } 4300 } 4301 4302 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4303 ra = Short.MIN_VALUE; 4304 for (int i = 0; i < a.length; i += SPECIES.length()) { 4305 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4306 ra = (short) VectorMath.maxUnsigned(ra, av.reduceLanes(VectorOperators.UMAX)); 4307 } 4308 } 4309 4310 assertReductionArraysEquals(r, ra, a, 4311 Short64VectorTests::UMAXReduce, Short64VectorTests::UMAXReduceAll); 4312 } 4313 4314 static short UMAXReduceMasked(short[] a, int idx, boolean[] mask) { 4315 short res = Short.MIN_VALUE; 4316 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4317 if (mask[i % SPECIES.length()]) 4318 res = (short) VectorMath.maxUnsigned(res, a[i]); 4319 } 4320 4321 return res; 4322 } 4323 4324 static short UMAXReduceAllMasked(short[] a, boolean[] mask) { 4325 short res = Short.MIN_VALUE; 4326 for (int i = 0; i < a.length; i += SPECIES.length()) { 4327 res = (short) VectorMath.maxUnsigned(res, UMAXReduceMasked(a, i, mask)); 4328 } 4329 4330 return res; 4331 } 4332 4333 @Test(dataProvider = "shortUnaryOpMaskProvider") 4334 static void UMAXReduceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 4335 short[] a = fa.apply(SPECIES.length()); 4336 short[] r = fr.apply(SPECIES.length()); 4337 boolean[] mask = fm.apply(SPECIES.length()); 4338 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4339 short ra = Short.MIN_VALUE; 4340 4341 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4342 for (int i = 0; i < a.length; i += SPECIES.length()) { 4343 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4344 r[i] = av.reduceLanes(VectorOperators.UMAX, vmask); 4345 } 4346 } 4347 4348 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4349 ra = Short.MIN_VALUE; 4350 for (int i = 0; i < a.length; i += SPECIES.length()) { 4351 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4352 ra = (short) VectorMath.maxUnsigned(ra, av.reduceLanes(VectorOperators.UMAX, vmask)); 4353 } 4354 } 4355 4356 assertReductionArraysEqualsMasked(r, ra, a, mask, 4357 Short64VectorTests::UMAXReduceMasked, Short64VectorTests::UMAXReduceAllMasked); 4358 } 4359 4360 static short FIRST_NONZEROReduce(short[] a, int idx) { 4361 short res = (short) 0; 4362 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4363 res = firstNonZero(res, a[i]); 4364 } 4365 4366 return res; 4367 } 4368 4369 static short FIRST_NONZEROReduceAll(short[] a) { 4370 short res = (short) 0; 4371 for (int i = 0; i < a.length; i += SPECIES.length()) { 4372 res = firstNonZero(res, FIRST_NONZEROReduce(a, i)); 4373 } 4374 4375 return res; 4376 } 4377 4378 @Test(dataProvider = "shortUnaryOpProvider") 4379 static void FIRST_NONZEROReduceShort64VectorTests(IntFunction<short[]> fa) { 4380 short[] a = fa.apply(SPECIES.length()); 4381 short[] r = fr.apply(SPECIES.length()); 4382 short ra = (short) 0; 4383 4384 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4385 for (int i = 0; i < a.length; i += SPECIES.length()) { 4386 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4387 r[i] = av.reduceLanes(VectorOperators.FIRST_NONZERO); 4388 } 4389 } 4390 4391 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4392 ra = (short) 0; 4393 for (int i = 0; i < a.length; i += SPECIES.length()) { 4394 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4395 ra = firstNonZero(ra, av.reduceLanes(VectorOperators.FIRST_NONZERO)); 4396 } 4397 } 4398 4399 assertReductionArraysEquals(r, ra, a, 4400 Short64VectorTests::FIRST_NONZEROReduce, Short64VectorTests::FIRST_NONZEROReduceAll); 4401 } 4402 4403 static short FIRST_NONZEROReduceMasked(short[] a, int idx, boolean[] mask) { 4404 short res = (short) 0; 4405 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4406 if (mask[i % SPECIES.length()]) 4407 res = firstNonZero(res, a[i]); 4408 } 4409 4410 return res; 4411 } 4412 4413 static short FIRST_NONZEROReduceAllMasked(short[] a, boolean[] mask) { 4414 short res = (short) 0; 4415 for (int i = 0; i < a.length; i += SPECIES.length()) { 4416 res = firstNonZero(res, FIRST_NONZEROReduceMasked(a, i, mask)); 4417 } 4418 4419 return res; 4420 } 4421 4422 @Test(dataProvider = "shortUnaryOpMaskProvider") 4423 static void FIRST_NONZEROReduceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 4424 short[] a = fa.apply(SPECIES.length()); 4425 short[] r = fr.apply(SPECIES.length()); 4426 boolean[] mask = fm.apply(SPECIES.length()); 4427 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4428 short ra = (short) 0; 4429 4430 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4431 for (int i = 0; i < a.length; i += SPECIES.length()) { 4432 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4433 r[i] = av.reduceLanes(VectorOperators.FIRST_NONZERO, vmask); 4434 } 4435 } 4436 4437 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4438 ra = (short) 0; 4439 for (int i = 0; i < a.length; i += SPECIES.length()) { 4440 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4441 ra = firstNonZero(ra, av.reduceLanes(VectorOperators.FIRST_NONZERO, vmask)); 4442 } 4443 } 4444 4445 assertReductionArraysEqualsMasked(r, ra, a, mask, 4446 Short64VectorTests::FIRST_NONZEROReduceMasked, Short64VectorTests::FIRST_NONZEROReduceAllMasked); 4447 } 4448 4449 static boolean anyTrue(boolean[] a, int idx) { 4450 boolean res = false; 4451 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4452 res |= a[i]; 4453 } 4454 4455 return res; 4456 } 4457 4458 @Test(dataProvider = "boolUnaryOpProvider") 4459 static void anyTrueShort64VectorTests(IntFunction<boolean[]> fm) { 4460 boolean[] mask = fm.apply(SPECIES.length()); 4461 boolean[] r = fmr.apply(SPECIES.length()); 4462 4463 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4464 for (int i = 0; i < mask.length; i += SPECIES.length()) { 4465 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, i); 4466 r[i] = vmask.anyTrue(); 4467 } 4468 } 4469 4470 assertReductionBoolArraysEquals(r, mask, Short64VectorTests::anyTrue); 4471 } 4472 4473 static boolean allTrue(boolean[] a, int idx) { 4474 boolean res = true; 4475 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4476 res &= a[i]; 4477 } 4478 4479 return res; 4480 } 4481 4482 @Test(dataProvider = "boolUnaryOpProvider") 4483 static void allTrueShort64VectorTests(IntFunction<boolean[]> fm) { 4484 boolean[] mask = fm.apply(SPECIES.length()); 4485 boolean[] r = fmr.apply(SPECIES.length()); 4486 4487 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4488 for (int i = 0; i < mask.length; i += SPECIES.length()) { 4489 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, i); 4490 r[i] = vmask.allTrue(); 4491 } 4492 } 4493 4494 assertReductionBoolArraysEquals(r, mask, Short64VectorTests::allTrue); 4495 } 4496 4497 static short SUADDReduce(short[] a, int idx) { 4498 short res = 0; 4499 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4500 res = (short) VectorMath.addSaturatingUnsigned(res, a[i]); 4501 } 4502 4503 return res; 4504 } 4505 4506 static short SUADDReduceAll(short[] a) { 4507 short res = 0; 4508 for (int i = 0; i < a.length; i += SPECIES.length()) { 4509 res = (short) VectorMath.addSaturatingUnsigned(res, SUADDReduce(a, i)); 4510 } 4511 4512 return res; 4513 } 4514 4515 @Test(dataProvider = "shortSaturatingUnaryOpProvider") 4516 static void SUADDReduceShort64VectorTests(IntFunction<short[]> fa) { 4517 short[] a = fa.apply(SPECIES.length()); 4518 short[] r = fr.apply(SPECIES.length()); 4519 short ra = 0; 4520 4521 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4522 for (int i = 0; i < a.length; i += SPECIES.length()) { 4523 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4524 r[i] = av.reduceLanes(VectorOperators.SUADD); 4525 } 4526 } 4527 4528 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4529 ra = 0; 4530 for (int i = 0; i < a.length; i += SPECIES.length()) { 4531 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4532 ra = (short) VectorMath.addSaturatingUnsigned(ra, av.reduceLanes(VectorOperators.SUADD)); 4533 } 4534 } 4535 4536 assertReductionArraysEquals(r, ra, a, 4537 Short64VectorTests::SUADDReduce, Short64VectorTests::SUADDReduceAll); 4538 } 4539 4540 static short SUADDReduceMasked(short[] a, int idx, boolean[] mask) { 4541 short res = 0; 4542 for (int i = idx; i < (idx + SPECIES.length()); i++) { 4543 if (mask[i % SPECIES.length()]) 4544 res = (short) VectorMath.addSaturatingUnsigned(res, a[i]); 4545 } 4546 4547 return res; 4548 } 4549 4550 static short SUADDReduceAllMasked(short[] a, boolean[] mask) { 4551 short res = 0; 4552 for (int i = 0; i < a.length; i += SPECIES.length()) { 4553 res = (short) VectorMath.addSaturatingUnsigned(res, SUADDReduceMasked(a, i, mask)); 4554 } 4555 4556 return res; 4557 } 4558 @Test(dataProvider = "shortSaturatingUnaryOpMaskProvider") 4559 static void SUADDReduceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 4560 short[] a = fa.apply(SPECIES.length()); 4561 short[] r = fr.apply(SPECIES.length()); 4562 boolean[] mask = fm.apply(SPECIES.length()); 4563 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4564 short ra = 0; 4565 4566 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4567 for (int i = 0; i < a.length; i += SPECIES.length()) { 4568 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4569 r[i] = av.reduceLanes(VectorOperators.SUADD, vmask); 4570 } 4571 } 4572 4573 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4574 ra = 0; 4575 for (int i = 0; i < a.length; i += SPECIES.length()) { 4576 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4577 ra = (short) VectorMath.addSaturatingUnsigned(ra, av.reduceLanes(VectorOperators.SUADD, vmask)); 4578 } 4579 } 4580 4581 assertReductionArraysEqualsMasked(r, ra, a, mask, 4582 Short64VectorTests::SUADDReduceMasked, Short64VectorTests::SUADDReduceAllMasked); 4583 } 4584 4585 @Test(dataProvider = "shortBinaryOpProvider") 4586 static void withShort64VectorTests(IntFunction<short []> fa, IntFunction<short []> fb) { 4587 short[] a = fa.apply(SPECIES.length()); 4588 short[] b = fb.apply(SPECIES.length()); 4589 short[] r = fr.apply(SPECIES.length()); 4590 4591 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4592 for (int i = 0, j = 0; i < a.length; i += SPECIES.length()) { 4593 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4594 av.withLane(j, b[i + j]).intoArray(r, i); 4595 a[i + j] = b[i + j]; 4596 j = (j + 1) & (SPECIES.length() - 1); 4597 } 4598 } 4599 4600 4601 assertArraysStrictlyEquals(r, a); 4602 } 4603 4604 static boolean testIS_DEFAULT(short a) { 4605 return bits(a)==0; 4606 } 4607 4608 @Test(dataProvider = "shortTestOpProvider") 4609 static void IS_DEFAULTShort64VectorTests(IntFunction<short[]> fa) { 4610 short[] a = fa.apply(SPECIES.length()); 4611 4612 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4613 for (int i = 0; i < a.length; i += SPECIES.length()) { 4614 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4615 VectorMask<Short> mv = av.test(VectorOperators.IS_DEFAULT); 4616 4617 // Check results as part of computation. 4618 for (int j = 0; j < SPECIES.length(); j++) { 4619 Assert.assertEquals(mv.laneIsSet(j), testIS_DEFAULT(a[i + j])); 4620 } 4621 } 4622 } 4623 } 4624 4625 @Test(dataProvider = "shortTestOpMaskProvider") 4626 static void IS_DEFAULTMaskedShort64VectorTests(IntFunction<short[]> fa, 4627 IntFunction<boolean[]> fm) { 4628 short[] a = fa.apply(SPECIES.length()); 4629 boolean[] mask = fm.apply(SPECIES.length()); 4630 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4631 4632 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4633 for (int i = 0; i < a.length; i += SPECIES.length()) { 4634 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4635 VectorMask<Short> mv = av.test(VectorOperators.IS_DEFAULT, vmask); 4636 4637 // Check results as part of computation. 4638 for (int j = 0; j < SPECIES.length(); j++) { 4639 Assert.assertEquals(mv.laneIsSet(j), vmask.laneIsSet(j) && testIS_DEFAULT(a[i + j])); 4640 } 4641 } 4642 } 4643 } 4644 4645 static boolean testIS_NEGATIVE(short a) { 4646 return bits(a)<0; 4647 } 4648 4649 @Test(dataProvider = "shortTestOpProvider") 4650 static void IS_NEGATIVEShort64VectorTests(IntFunction<short[]> fa) { 4651 short[] a = fa.apply(SPECIES.length()); 4652 4653 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4654 for (int i = 0; i < a.length; i += SPECIES.length()) { 4655 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4656 VectorMask<Short> mv = av.test(VectorOperators.IS_NEGATIVE); 4657 4658 // Check results as part of computation. 4659 for (int j = 0; j < SPECIES.length(); j++) { 4660 Assert.assertEquals(mv.laneIsSet(j), testIS_NEGATIVE(a[i + j])); 4661 } 4662 } 4663 } 4664 } 4665 4666 @Test(dataProvider = "shortTestOpMaskProvider") 4667 static void IS_NEGATIVEMaskedShort64VectorTests(IntFunction<short[]> fa, 4668 IntFunction<boolean[]> fm) { 4669 short[] a = fa.apply(SPECIES.length()); 4670 boolean[] mask = fm.apply(SPECIES.length()); 4671 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4672 4673 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4674 for (int i = 0; i < a.length; i += SPECIES.length()) { 4675 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4676 VectorMask<Short> mv = av.test(VectorOperators.IS_NEGATIVE, vmask); 4677 4678 // Check results as part of computation. 4679 for (int j = 0; j < SPECIES.length(); j++) { 4680 Assert.assertEquals(mv.laneIsSet(j), vmask.laneIsSet(j) && testIS_NEGATIVE(a[i + j])); 4681 } 4682 } 4683 } 4684 } 4685 4686 @Test(dataProvider = "shortCompareOpProvider") 4687 static void LTShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 4688 short[] a = fa.apply(SPECIES.length()); 4689 short[] b = fb.apply(SPECIES.length()); 4690 4691 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4692 for (int i = 0; i < a.length; i += SPECIES.length()) { 4693 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4694 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4695 VectorMask<Short> mv = av.compare(VectorOperators.LT, bv); 4696 4697 // Check results as part of computation. 4698 for (int j = 0; j < SPECIES.length(); j++) { 4699 Assert.assertEquals(mv.laneIsSet(j), lt(a[i + j], b[i + j])); 4700 } 4701 } 4702 } 4703 } 4704 4705 @Test(dataProvider = "shortCompareOpProvider") 4706 static void ltShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 4707 short[] a = fa.apply(SPECIES.length()); 4708 short[] b = fb.apply(SPECIES.length()); 4709 4710 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4711 for (int i = 0; i < a.length; i += SPECIES.length()) { 4712 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4713 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4714 VectorMask<Short> mv = av.lt(bv); 4715 4716 // Check results as part of computation. 4717 for (int j = 0; j < SPECIES.length(); j++) { 4718 Assert.assertEquals(mv.laneIsSet(j), lt(a[i + j], b[i + j])); 4719 } 4720 } 4721 } 4722 } 4723 4724 @Test(dataProvider = "shortCompareOpMaskProvider") 4725 static void LTShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 4726 IntFunction<boolean[]> fm) { 4727 short[] a = fa.apply(SPECIES.length()); 4728 short[] b = fb.apply(SPECIES.length()); 4729 boolean[] mask = fm.apply(SPECIES.length()); 4730 4731 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4732 4733 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4734 for (int i = 0; i < a.length; i += SPECIES.length()) { 4735 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4736 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4737 VectorMask<Short> mv = av.compare(VectorOperators.LT, bv, vmask); 4738 4739 // Check results as part of computation. 4740 for (int j = 0; j < SPECIES.length(); j++) { 4741 Assert.assertEquals(mv.laneIsSet(j), mask[j] && lt(a[i + j], b[i + j])); 4742 } 4743 } 4744 } 4745 } 4746 4747 @Test(dataProvider = "shortCompareOpProvider") 4748 static void GTShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 4749 short[] a = fa.apply(SPECIES.length()); 4750 short[] b = fb.apply(SPECIES.length()); 4751 4752 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4753 for (int i = 0; i < a.length; i += SPECIES.length()) { 4754 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4755 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4756 VectorMask<Short> mv = av.compare(VectorOperators.GT, bv); 4757 4758 // Check results as part of computation. 4759 for (int j = 0; j < SPECIES.length(); j++) { 4760 Assert.assertEquals(mv.laneIsSet(j), gt(a[i + j], b[i + j])); 4761 } 4762 } 4763 } 4764 } 4765 4766 @Test(dataProvider = "shortCompareOpMaskProvider") 4767 static void GTShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 4768 IntFunction<boolean[]> fm) { 4769 short[] a = fa.apply(SPECIES.length()); 4770 short[] b = fb.apply(SPECIES.length()); 4771 boolean[] mask = fm.apply(SPECIES.length()); 4772 4773 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4774 4775 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4776 for (int i = 0; i < a.length; i += SPECIES.length()) { 4777 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4778 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4779 VectorMask<Short> mv = av.compare(VectorOperators.GT, bv, vmask); 4780 4781 // Check results as part of computation. 4782 for (int j = 0; j < SPECIES.length(); j++) { 4783 Assert.assertEquals(mv.laneIsSet(j), mask[j] && gt(a[i + j], b[i + j])); 4784 } 4785 } 4786 } 4787 } 4788 4789 @Test(dataProvider = "shortCompareOpProvider") 4790 static void EQShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 4791 short[] a = fa.apply(SPECIES.length()); 4792 short[] b = fb.apply(SPECIES.length()); 4793 4794 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4795 for (int i = 0; i < a.length; i += SPECIES.length()) { 4796 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4797 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4798 VectorMask<Short> mv = av.compare(VectorOperators.EQ, bv); 4799 4800 // Check results as part of computation. 4801 for (int j = 0; j < SPECIES.length(); j++) { 4802 Assert.assertEquals(mv.laneIsSet(j), eq(a[i + j], b[i + j])); 4803 } 4804 } 4805 } 4806 } 4807 4808 @Test(dataProvider = "shortCompareOpProvider") 4809 static void eqShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 4810 short[] a = fa.apply(SPECIES.length()); 4811 short[] b = fb.apply(SPECIES.length()); 4812 4813 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4814 for (int i = 0; i < a.length; i += SPECIES.length()) { 4815 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4816 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4817 VectorMask<Short> mv = av.eq(bv); 4818 4819 // Check results as part of computation. 4820 for (int j = 0; j < SPECIES.length(); j++) { 4821 Assert.assertEquals(mv.laneIsSet(j), eq(a[i + j], b[i + j])); 4822 } 4823 } 4824 } 4825 } 4826 4827 @Test(dataProvider = "shortCompareOpMaskProvider") 4828 static void EQShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 4829 IntFunction<boolean[]> fm) { 4830 short[] a = fa.apply(SPECIES.length()); 4831 short[] b = fb.apply(SPECIES.length()); 4832 boolean[] mask = fm.apply(SPECIES.length()); 4833 4834 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4835 4836 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4837 for (int i = 0; i < a.length; i += SPECIES.length()) { 4838 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4839 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4840 VectorMask<Short> mv = av.compare(VectorOperators.EQ, bv, vmask); 4841 4842 // Check results as part of computation. 4843 for (int j = 0; j < SPECIES.length(); j++) { 4844 Assert.assertEquals(mv.laneIsSet(j), mask[j] && eq(a[i + j], b[i + j])); 4845 } 4846 } 4847 } 4848 } 4849 4850 @Test(dataProvider = "shortCompareOpProvider") 4851 static void NEShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 4852 short[] a = fa.apply(SPECIES.length()); 4853 short[] b = fb.apply(SPECIES.length()); 4854 4855 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4856 for (int i = 0; i < a.length; i += SPECIES.length()) { 4857 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4858 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4859 VectorMask<Short> mv = av.compare(VectorOperators.NE, bv); 4860 4861 // Check results as part of computation. 4862 for (int j = 0; j < SPECIES.length(); j++) { 4863 Assert.assertEquals(mv.laneIsSet(j), neq(a[i + j], b[i + j])); 4864 } 4865 } 4866 } 4867 } 4868 4869 @Test(dataProvider = "shortCompareOpMaskProvider") 4870 static void NEShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 4871 IntFunction<boolean[]> fm) { 4872 short[] a = fa.apply(SPECIES.length()); 4873 short[] b = fb.apply(SPECIES.length()); 4874 boolean[] mask = fm.apply(SPECIES.length()); 4875 4876 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4877 4878 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4879 for (int i = 0; i < a.length; i += SPECIES.length()) { 4880 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4881 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4882 VectorMask<Short> mv = av.compare(VectorOperators.NE, bv, vmask); 4883 4884 // Check results as part of computation. 4885 for (int j = 0; j < SPECIES.length(); j++) { 4886 Assert.assertEquals(mv.laneIsSet(j), mask[j] && neq(a[i + j], b[i + j])); 4887 } 4888 } 4889 } 4890 } 4891 4892 @Test(dataProvider = "shortCompareOpProvider") 4893 static void LEShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 4894 short[] a = fa.apply(SPECIES.length()); 4895 short[] b = fb.apply(SPECIES.length()); 4896 4897 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4898 for (int i = 0; i < a.length; i += SPECIES.length()) { 4899 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4900 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4901 VectorMask<Short> mv = av.compare(VectorOperators.LE, bv); 4902 4903 // Check results as part of computation. 4904 for (int j = 0; j < SPECIES.length(); j++) { 4905 Assert.assertEquals(mv.laneIsSet(j), le(a[i + j], b[i + j])); 4906 } 4907 } 4908 } 4909 } 4910 4911 @Test(dataProvider = "shortCompareOpMaskProvider") 4912 static void LEShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 4913 IntFunction<boolean[]> fm) { 4914 short[] a = fa.apply(SPECIES.length()); 4915 short[] b = fb.apply(SPECIES.length()); 4916 boolean[] mask = fm.apply(SPECIES.length()); 4917 4918 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4919 4920 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4921 for (int i = 0; i < a.length; i += SPECIES.length()) { 4922 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4923 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4924 VectorMask<Short> mv = av.compare(VectorOperators.LE, bv, vmask); 4925 4926 // Check results as part of computation. 4927 for (int j = 0; j < SPECIES.length(); j++) { 4928 Assert.assertEquals(mv.laneIsSet(j), mask[j] && le(a[i + j], b[i + j])); 4929 } 4930 } 4931 } 4932 } 4933 4934 @Test(dataProvider = "shortCompareOpProvider") 4935 static void GEShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 4936 short[] a = fa.apply(SPECIES.length()); 4937 short[] b = fb.apply(SPECIES.length()); 4938 4939 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4940 for (int i = 0; i < a.length; i += SPECIES.length()) { 4941 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4942 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4943 VectorMask<Short> mv = av.compare(VectorOperators.GE, bv); 4944 4945 // Check results as part of computation. 4946 for (int j = 0; j < SPECIES.length(); j++) { 4947 Assert.assertEquals(mv.laneIsSet(j), ge(a[i + j], b[i + j])); 4948 } 4949 } 4950 } 4951 } 4952 4953 @Test(dataProvider = "shortCompareOpMaskProvider") 4954 static void GEShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 4955 IntFunction<boolean[]> fm) { 4956 short[] a = fa.apply(SPECIES.length()); 4957 short[] b = fb.apply(SPECIES.length()); 4958 boolean[] mask = fm.apply(SPECIES.length()); 4959 4960 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 4961 4962 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4963 for (int i = 0; i < a.length; i += SPECIES.length()) { 4964 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4965 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4966 VectorMask<Short> mv = av.compare(VectorOperators.GE, bv, vmask); 4967 4968 // Check results as part of computation. 4969 for (int j = 0; j < SPECIES.length(); j++) { 4970 Assert.assertEquals(mv.laneIsSet(j), mask[j] && ge(a[i + j], b[i + j])); 4971 } 4972 } 4973 } 4974 } 4975 4976 @Test(dataProvider = "shortCompareOpProvider") 4977 static void ULTShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 4978 short[] a = fa.apply(SPECIES.length()); 4979 short[] b = fb.apply(SPECIES.length()); 4980 4981 for (int ic = 0; ic < INVOC_COUNT; ic++) { 4982 for (int i = 0; i < a.length; i += SPECIES.length()) { 4983 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 4984 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 4985 VectorMask<Short> mv = av.compare(VectorOperators.ULT, bv); 4986 4987 // Check results as part of computation. 4988 for (int j = 0; j < SPECIES.length(); j++) { 4989 Assert.assertEquals(mv.laneIsSet(j), ult(a[i + j], b[i + j])); 4990 } 4991 } 4992 } 4993 } 4994 4995 @Test(dataProvider = "shortCompareOpMaskProvider") 4996 static void ULTShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 4997 IntFunction<boolean[]> fm) { 4998 short[] a = fa.apply(SPECIES.length()); 4999 short[] b = fb.apply(SPECIES.length()); 5000 boolean[] mask = fm.apply(SPECIES.length()); 5001 5002 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5003 5004 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5005 for (int i = 0; i < a.length; i += SPECIES.length()) { 5006 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5007 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5008 VectorMask<Short> mv = av.compare(VectorOperators.ULT, bv, vmask); 5009 5010 // Check results as part of computation. 5011 for (int j = 0; j < SPECIES.length(); j++) { 5012 Assert.assertEquals(mv.laneIsSet(j), mask[j] && ult(a[i + j], b[i + j])); 5013 } 5014 } 5015 } 5016 } 5017 5018 @Test(dataProvider = "shortCompareOpProvider") 5019 static void UGTShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 5020 short[] a = fa.apply(SPECIES.length()); 5021 short[] b = fb.apply(SPECIES.length()); 5022 5023 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5024 for (int i = 0; i < a.length; i += SPECIES.length()) { 5025 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5026 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5027 VectorMask<Short> mv = av.compare(VectorOperators.UGT, bv); 5028 5029 // Check results as part of computation. 5030 for (int j = 0; j < SPECIES.length(); j++) { 5031 Assert.assertEquals(mv.laneIsSet(j), ugt(a[i + j], b[i + j])); 5032 } 5033 } 5034 } 5035 } 5036 5037 @Test(dataProvider = "shortCompareOpMaskProvider") 5038 static void UGTShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 5039 IntFunction<boolean[]> fm) { 5040 short[] a = fa.apply(SPECIES.length()); 5041 short[] b = fb.apply(SPECIES.length()); 5042 boolean[] mask = fm.apply(SPECIES.length()); 5043 5044 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5045 5046 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5047 for (int i = 0; i < a.length; i += SPECIES.length()) { 5048 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5049 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5050 VectorMask<Short> mv = av.compare(VectorOperators.UGT, bv, vmask); 5051 5052 // Check results as part of computation. 5053 for (int j = 0; j < SPECIES.length(); j++) { 5054 Assert.assertEquals(mv.laneIsSet(j), mask[j] && ugt(a[i + j], b[i + j])); 5055 } 5056 } 5057 } 5058 } 5059 5060 @Test(dataProvider = "shortCompareOpProvider") 5061 static void ULEShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 5062 short[] a = fa.apply(SPECIES.length()); 5063 short[] b = fb.apply(SPECIES.length()); 5064 5065 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5066 for (int i = 0; i < a.length; i += SPECIES.length()) { 5067 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5068 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5069 VectorMask<Short> mv = av.compare(VectorOperators.ULE, bv); 5070 5071 // Check results as part of computation. 5072 for (int j = 0; j < SPECIES.length(); j++) { 5073 Assert.assertEquals(mv.laneIsSet(j), ule(a[i + j], b[i + j])); 5074 } 5075 } 5076 } 5077 } 5078 5079 @Test(dataProvider = "shortCompareOpMaskProvider") 5080 static void ULEShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 5081 IntFunction<boolean[]> fm) { 5082 short[] a = fa.apply(SPECIES.length()); 5083 short[] b = fb.apply(SPECIES.length()); 5084 boolean[] mask = fm.apply(SPECIES.length()); 5085 5086 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5087 5088 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5089 for (int i = 0; i < a.length; i += SPECIES.length()) { 5090 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5091 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5092 VectorMask<Short> mv = av.compare(VectorOperators.ULE, bv, vmask); 5093 5094 // Check results as part of computation. 5095 for (int j = 0; j < SPECIES.length(); j++) { 5096 Assert.assertEquals(mv.laneIsSet(j), mask[j] && ule(a[i + j], b[i + j])); 5097 } 5098 } 5099 } 5100 } 5101 5102 @Test(dataProvider = "shortCompareOpProvider") 5103 static void UGEShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb) { 5104 short[] a = fa.apply(SPECIES.length()); 5105 short[] b = fb.apply(SPECIES.length()); 5106 5107 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5108 for (int i = 0; i < a.length; i += SPECIES.length()) { 5109 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5110 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5111 VectorMask<Short> mv = av.compare(VectorOperators.UGE, bv); 5112 5113 // Check results as part of computation. 5114 for (int j = 0; j < SPECIES.length(); j++) { 5115 Assert.assertEquals(mv.laneIsSet(j), uge(a[i + j], b[i + j])); 5116 } 5117 } 5118 } 5119 } 5120 5121 @Test(dataProvider = "shortCompareOpMaskProvider") 5122 static void UGEShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 5123 IntFunction<boolean[]> fm) { 5124 short[] a = fa.apply(SPECIES.length()); 5125 short[] b = fb.apply(SPECIES.length()); 5126 boolean[] mask = fm.apply(SPECIES.length()); 5127 5128 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5129 5130 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5131 for (int i = 0; i < a.length; i += SPECIES.length()) { 5132 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5133 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5134 VectorMask<Short> mv = av.compare(VectorOperators.UGE, bv, vmask); 5135 5136 // Check results as part of computation. 5137 for (int j = 0; j < SPECIES.length(); j++) { 5138 Assert.assertEquals(mv.laneIsSet(j), mask[j] && uge(a[i + j], b[i + j])); 5139 } 5140 } 5141 } 5142 } 5143 5144 @Test(dataProvider = "shortCompareOpProvider") 5145 static void LTShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 5146 short[] a = fa.apply(SPECIES.length()); 5147 short[] b = fb.apply(SPECIES.length()); 5148 5149 for (int i = 0; i < a.length; i += SPECIES.length()) { 5150 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5151 VectorMask<Short> mv = av.compare(VectorOperators.LT, b[i]); 5152 5153 // Check results as part of computation. 5154 for (int j = 0; j < SPECIES.length(); j++) { 5155 Assert.assertEquals(mv.laneIsSet(j), a[i + j] < b[i]); 5156 } 5157 } 5158 } 5159 5160 @Test(dataProvider = "shortCompareOpMaskProvider") 5161 static void LTShort64VectorTestsBroadcastMaskedSmokeTest(IntFunction<short[]> fa, 5162 IntFunction<short[]> fb, IntFunction<boolean[]> fm) { 5163 short[] a = fa.apply(SPECIES.length()); 5164 short[] b = fb.apply(SPECIES.length()); 5165 boolean[] mask = fm.apply(SPECIES.length()); 5166 5167 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5168 5169 for (int i = 0; i < a.length; i += SPECIES.length()) { 5170 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5171 VectorMask<Short> mv = av.compare(VectorOperators.LT, b[i], vmask); 5172 5173 // Check results as part of computation. 5174 for (int j = 0; j < SPECIES.length(); j++) { 5175 Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] < b[i])); 5176 } 5177 } 5178 } 5179 5180 @Test(dataProvider = "shortCompareOpProvider") 5181 static void LTShort64VectorTestsBroadcastLongSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 5182 short[] a = fa.apply(SPECIES.length()); 5183 short[] b = fb.apply(SPECIES.length()); 5184 5185 for (int i = 0; i < a.length; i += SPECIES.length()) { 5186 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5187 VectorMask<Short> mv = av.compare(VectorOperators.LT, (long)b[i]); 5188 5189 // Check results as part of computation. 5190 for (int j = 0; j < SPECIES.length(); j++) { 5191 Assert.assertEquals(mv.laneIsSet(j), a[i + j] < (short)((long)b[i])); 5192 } 5193 } 5194 } 5195 5196 @Test(dataProvider = "shortCompareOpMaskProvider") 5197 static void LTShort64VectorTestsBroadcastLongMaskedSmokeTest(IntFunction<short[]> fa, 5198 IntFunction<short[]> fb, IntFunction<boolean[]> fm) { 5199 short[] a = fa.apply(SPECIES.length()); 5200 short[] b = fb.apply(SPECIES.length()); 5201 boolean[] mask = fm.apply(SPECIES.length()); 5202 5203 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5204 5205 for (int i = 0; i < a.length; i += SPECIES.length()) { 5206 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5207 VectorMask<Short> mv = av.compare(VectorOperators.LT, (long)b[i], vmask); 5208 5209 // Check results as part of computation. 5210 for (int j = 0; j < SPECIES.length(); j++) { 5211 Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] < (short)((long)b[i]))); 5212 } 5213 } 5214 } 5215 5216 @Test(dataProvider = "shortCompareOpProvider") 5217 static void EQShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 5218 short[] a = fa.apply(SPECIES.length()); 5219 short[] b = fb.apply(SPECIES.length()); 5220 5221 for (int i = 0; i < a.length; i += SPECIES.length()) { 5222 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5223 VectorMask<Short> mv = av.compare(VectorOperators.EQ, b[i]); 5224 5225 // Check results as part of computation. 5226 for (int j = 0; j < SPECIES.length(); j++) { 5227 Assert.assertEquals(mv.laneIsSet(j), a[i + j] == b[i]); 5228 } 5229 } 5230 } 5231 5232 @Test(dataProvider = "shortCompareOpMaskProvider") 5233 static void EQShort64VectorTestsBroadcastMaskedSmokeTest(IntFunction<short[]> fa, 5234 IntFunction<short[]> fb, IntFunction<boolean[]> fm) { 5235 short[] a = fa.apply(SPECIES.length()); 5236 short[] b = fb.apply(SPECIES.length()); 5237 boolean[] mask = fm.apply(SPECIES.length()); 5238 5239 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5240 5241 for (int i = 0; i < a.length; i += SPECIES.length()) { 5242 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5243 VectorMask<Short> mv = av.compare(VectorOperators.EQ, b[i], vmask); 5244 5245 // Check results as part of computation. 5246 for (int j = 0; j < SPECIES.length(); j++) { 5247 Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] == b[i])); 5248 } 5249 } 5250 } 5251 5252 @Test(dataProvider = "shortCompareOpProvider") 5253 static void EQShort64VectorTestsBroadcastLongSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 5254 short[] a = fa.apply(SPECIES.length()); 5255 short[] b = fb.apply(SPECIES.length()); 5256 5257 for (int i = 0; i < a.length; i += SPECIES.length()) { 5258 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5259 VectorMask<Short> mv = av.compare(VectorOperators.EQ, (long)b[i]); 5260 5261 // Check results as part of computation. 5262 for (int j = 0; j < SPECIES.length(); j++) { 5263 Assert.assertEquals(mv.laneIsSet(j), a[i + j] == (short)((long)b[i])); 5264 } 5265 } 5266 } 5267 5268 @Test(dataProvider = "shortCompareOpMaskProvider") 5269 static void EQShort64VectorTestsBroadcastLongMaskedSmokeTest(IntFunction<short[]> fa, 5270 IntFunction<short[]> fb, IntFunction<boolean[]> fm) { 5271 short[] a = fa.apply(SPECIES.length()); 5272 short[] b = fb.apply(SPECIES.length()); 5273 boolean[] mask = fm.apply(SPECIES.length()); 5274 5275 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5276 5277 for (int i = 0; i < a.length; i += SPECIES.length()) { 5278 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5279 VectorMask<Short> mv = av.compare(VectorOperators.EQ, (long)b[i], vmask); 5280 5281 // Check results as part of computation. 5282 for (int j = 0; j < SPECIES.length(); j++) { 5283 Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] == (short)((long)b[i]))); 5284 } 5285 } 5286 } 5287 5288 static short blend(short a, short b, boolean mask) { 5289 return mask ? b : a; 5290 } 5291 5292 @Test(dataProvider = "shortBinaryOpMaskProvider") 5293 static void blendShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb, 5294 IntFunction<boolean[]> fm) { 5295 short[] a = fa.apply(SPECIES.length()); 5296 short[] b = fb.apply(SPECIES.length()); 5297 short[] r = fr.apply(SPECIES.length()); 5298 boolean[] mask = fm.apply(SPECIES.length()); 5299 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5300 5301 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5302 for (int i = 0; i < a.length; i += SPECIES.length()) { 5303 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5304 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5305 av.blend(bv, vmask).intoArray(r, i); 5306 } 5307 } 5308 5309 assertArraysEquals(r, a, b, mask, Short64VectorTests::blend); 5310 } 5311 5312 @Test(dataProvider = "shortUnaryOpShuffleProvider") 5313 static void RearrangeShort64VectorTests(IntFunction<short[]> fa, 5314 BiFunction<Integer,Integer,int[]> fs) { 5315 short[] a = fa.apply(SPECIES.length()); 5316 int[] order = fs.apply(a.length, SPECIES.length()); 5317 short[] r = fr.apply(SPECIES.length()); 5318 5319 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5320 for (int i = 0; i < a.length; i += SPECIES.length()) { 5321 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5322 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i); 5323 } 5324 } 5325 5326 assertRearrangeArraysEquals(r, a, order, SPECIES.length()); 5327 } 5328 5329 @Test(dataProvider = "shortUnaryOpShuffleMaskProvider") 5330 static void RearrangeShort64VectorTestsMaskedSmokeTest(IntFunction<short[]> fa, 5331 BiFunction<Integer,Integer,int[]> fs, 5332 IntFunction<boolean[]> fm) { 5333 short[] a = fa.apply(SPECIES.length()); 5334 int[] order = fs.apply(a.length, SPECIES.length()); 5335 short[] r = fr.apply(SPECIES.length()); 5336 boolean[] mask = fm.apply(SPECIES.length()); 5337 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5338 5339 for (int i = 0; i < a.length; i += SPECIES.length()) { 5340 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5341 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i), vmask).intoArray(r, i); 5342 } 5343 5344 assertRearrangeArraysEquals(r, a, order, mask, SPECIES.length()); 5345 } 5346 5347 @Test(dataProvider = "shortUnaryOpMaskProvider") 5348 static void compressShort64VectorTests(IntFunction<short[]> fa, 5349 IntFunction<boolean[]> fm) { 5350 short[] a = fa.apply(SPECIES.length()); 5351 short[] r = fr.apply(SPECIES.length()); 5352 boolean[] mask = fm.apply(SPECIES.length()); 5353 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5354 5355 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5356 for (int i = 0; i < a.length; i += SPECIES.length()) { 5357 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5358 av.compress(vmask).intoArray(r, i); 5359 } 5360 } 5361 5362 assertcompressArraysEquals(r, a, mask, SPECIES.length()); 5363 } 5364 5365 @Test(dataProvider = "shortUnaryOpMaskProvider") 5366 static void expandShort64VectorTests(IntFunction<short[]> fa, 5367 IntFunction<boolean[]> fm) { 5368 short[] a = fa.apply(SPECIES.length()); 5369 short[] r = fr.apply(SPECIES.length()); 5370 boolean[] mask = fm.apply(SPECIES.length()); 5371 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5372 5373 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5374 for (int i = 0; i < a.length; i += SPECIES.length()) { 5375 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5376 av.expand(vmask).intoArray(r, i); 5377 } 5378 } 5379 5380 assertexpandArraysEquals(r, a, mask, SPECIES.length()); 5381 } 5382 5383 @Test(dataProvider = "shortUnaryOpProvider") 5384 static void getShort64VectorTests(IntFunction<short[]> fa) { 5385 short[] a = fa.apply(SPECIES.length()); 5386 short[] r = fr.apply(SPECIES.length()); 5387 5388 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5389 for (int i = 0; i < a.length; i += SPECIES.length()) { 5390 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5391 int num_lanes = SPECIES.length(); 5392 // Manually unroll because full unroll happens after intrinsification. 5393 // Unroll is needed because get intrinsic requires for index to be a known constant. 5394 if (num_lanes == 1) { 5395 r[i]=av.lane(0); 5396 } else if (num_lanes == 2) { 5397 r[i]=av.lane(0); 5398 r[i+1]=av.lane(1); 5399 } else if (num_lanes == 4) { 5400 r[i]=av.lane(0); 5401 r[i+1]=av.lane(1); 5402 r[i+2]=av.lane(2); 5403 r[i+3]=av.lane(3); 5404 } else if (num_lanes == 8) { 5405 r[i]=av.lane(0); 5406 r[i+1]=av.lane(1); 5407 r[i+2]=av.lane(2); 5408 r[i+3]=av.lane(3); 5409 r[i+4]=av.lane(4); 5410 r[i+5]=av.lane(5); 5411 r[i+6]=av.lane(6); 5412 r[i+7]=av.lane(7); 5413 } else if (num_lanes == 16) { 5414 r[i]=av.lane(0); 5415 r[i+1]=av.lane(1); 5416 r[i+2]=av.lane(2); 5417 r[i+3]=av.lane(3); 5418 r[i+4]=av.lane(4); 5419 r[i+5]=av.lane(5); 5420 r[i+6]=av.lane(6); 5421 r[i+7]=av.lane(7); 5422 r[i+8]=av.lane(8); 5423 r[i+9]=av.lane(9); 5424 r[i+10]=av.lane(10); 5425 r[i+11]=av.lane(11); 5426 r[i+12]=av.lane(12); 5427 r[i+13]=av.lane(13); 5428 r[i+14]=av.lane(14); 5429 r[i+15]=av.lane(15); 5430 } else if (num_lanes == 32) { 5431 r[i]=av.lane(0); 5432 r[i+1]=av.lane(1); 5433 r[i+2]=av.lane(2); 5434 r[i+3]=av.lane(3); 5435 r[i+4]=av.lane(4); 5436 r[i+5]=av.lane(5); 5437 r[i+6]=av.lane(6); 5438 r[i+7]=av.lane(7); 5439 r[i+8]=av.lane(8); 5440 r[i+9]=av.lane(9); 5441 r[i+10]=av.lane(10); 5442 r[i+11]=av.lane(11); 5443 r[i+12]=av.lane(12); 5444 r[i+13]=av.lane(13); 5445 r[i+14]=av.lane(14); 5446 r[i+15]=av.lane(15); 5447 r[i+16]=av.lane(16); 5448 r[i+17]=av.lane(17); 5449 r[i+18]=av.lane(18); 5450 r[i+19]=av.lane(19); 5451 r[i+20]=av.lane(20); 5452 r[i+21]=av.lane(21); 5453 r[i+22]=av.lane(22); 5454 r[i+23]=av.lane(23); 5455 r[i+24]=av.lane(24); 5456 r[i+25]=av.lane(25); 5457 r[i+26]=av.lane(26); 5458 r[i+27]=av.lane(27); 5459 r[i+28]=av.lane(28); 5460 r[i+29]=av.lane(29); 5461 r[i+30]=av.lane(30); 5462 r[i+31]=av.lane(31); 5463 } else if (num_lanes == 64) { 5464 r[i]=av.lane(0); 5465 r[i+1]=av.lane(1); 5466 r[i+2]=av.lane(2); 5467 r[i+3]=av.lane(3); 5468 r[i+4]=av.lane(4); 5469 r[i+5]=av.lane(5); 5470 r[i+6]=av.lane(6); 5471 r[i+7]=av.lane(7); 5472 r[i+8]=av.lane(8); 5473 r[i+9]=av.lane(9); 5474 r[i+10]=av.lane(10); 5475 r[i+11]=av.lane(11); 5476 r[i+12]=av.lane(12); 5477 r[i+13]=av.lane(13); 5478 r[i+14]=av.lane(14); 5479 r[i+15]=av.lane(15); 5480 r[i+16]=av.lane(16); 5481 r[i+17]=av.lane(17); 5482 r[i+18]=av.lane(18); 5483 r[i+19]=av.lane(19); 5484 r[i+20]=av.lane(20); 5485 r[i+21]=av.lane(21); 5486 r[i+22]=av.lane(22); 5487 r[i+23]=av.lane(23); 5488 r[i+24]=av.lane(24); 5489 r[i+25]=av.lane(25); 5490 r[i+26]=av.lane(26); 5491 r[i+27]=av.lane(27); 5492 r[i+28]=av.lane(28); 5493 r[i+29]=av.lane(29); 5494 r[i+30]=av.lane(30); 5495 r[i+31]=av.lane(31); 5496 r[i+32]=av.lane(32); 5497 r[i+33]=av.lane(33); 5498 r[i+34]=av.lane(34); 5499 r[i+35]=av.lane(35); 5500 r[i+36]=av.lane(36); 5501 r[i+37]=av.lane(37); 5502 r[i+38]=av.lane(38); 5503 r[i+39]=av.lane(39); 5504 r[i+40]=av.lane(40); 5505 r[i+41]=av.lane(41); 5506 r[i+42]=av.lane(42); 5507 r[i+43]=av.lane(43); 5508 r[i+44]=av.lane(44); 5509 r[i+45]=av.lane(45); 5510 r[i+46]=av.lane(46); 5511 r[i+47]=av.lane(47); 5512 r[i+48]=av.lane(48); 5513 r[i+49]=av.lane(49); 5514 r[i+50]=av.lane(50); 5515 r[i+51]=av.lane(51); 5516 r[i+52]=av.lane(52); 5517 r[i+53]=av.lane(53); 5518 r[i+54]=av.lane(54); 5519 r[i+55]=av.lane(55); 5520 r[i+56]=av.lane(56); 5521 r[i+57]=av.lane(57); 5522 r[i+58]=av.lane(58); 5523 r[i+59]=av.lane(59); 5524 r[i+60]=av.lane(60); 5525 r[i+61]=av.lane(61); 5526 r[i+62]=av.lane(62); 5527 r[i+63]=av.lane(63); 5528 } else { 5529 for (int j = 0; j < SPECIES.length(); j++) { 5530 r[i+j]=av.lane(j); 5531 } 5532 } 5533 } 5534 } 5535 5536 assertArraysStrictlyEquals(r, a); 5537 } 5538 5539 @Test(dataProvider = "shortUnaryOpProvider") 5540 static void BroadcastShort64VectorTests(IntFunction<short[]> fa) { 5541 short[] a = fa.apply(SPECIES.length()); 5542 short[] r = new short[a.length]; 5543 5544 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5545 for (int i = 0; i < a.length; i += SPECIES.length()) { 5546 ShortVector.broadcast(SPECIES, a[i]).intoArray(r, i); 5547 } 5548 } 5549 5550 assertBroadcastArraysEquals(r, a); 5551 } 5552 5553 @Test(dataProvider = "shortUnaryOpProvider") 5554 static void ZeroShort64VectorTests(IntFunction<short[]> fa) { 5555 short[] a = fa.apply(SPECIES.length()); 5556 short[] r = new short[a.length]; 5557 5558 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5559 for (int i = 0; i < a.length; i += SPECIES.length()) { 5560 ShortVector.zero(SPECIES).intoArray(a, i); 5561 } 5562 } 5563 5564 Assert.assertEquals(a, r); 5565 } 5566 5567 static short[] sliceUnary(short[] a, int origin, int idx) { 5568 short[] res = new short[SPECIES.length()]; 5569 for (int i = 0; i < SPECIES.length(); i++){ 5570 if(i+origin < SPECIES.length()) 5571 res[i] = a[idx+i+origin]; 5572 else 5573 res[i] = (short)0; 5574 } 5575 return res; 5576 } 5577 5578 @Test(dataProvider = "shortUnaryOpProvider") 5579 static void sliceUnaryShort64VectorTests(IntFunction<short[]> fa) { 5580 short[] a = fa.apply(SPECIES.length()); 5581 short[] r = new short[a.length]; 5582 int origin = RAND.nextInt(SPECIES.length()); 5583 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5584 for (int i = 0; i < a.length; i += SPECIES.length()) { 5585 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5586 av.slice(origin).intoArray(r, i); 5587 } 5588 } 5589 5590 assertArraysEquals(r, a, origin, Short64VectorTests::sliceUnary); 5591 } 5592 5593 static short[] sliceBinary(short[] a, short[] b, int origin, int idx) { 5594 short[] res = new short[SPECIES.length()]; 5595 for (int i = 0, j = 0; i < SPECIES.length(); i++){ 5596 if(i+origin < SPECIES.length()) 5597 res[i] = a[idx+i+origin]; 5598 else { 5599 res[i] = b[idx+j]; 5600 j++; 5601 } 5602 } 5603 return res; 5604 } 5605 5606 @Test(dataProvider = "shortBinaryOpProvider") 5607 static void sliceBinaryShort64VectorTestsBinary(IntFunction<short[]> fa, IntFunction<short[]> fb) { 5608 short[] a = fa.apply(SPECIES.length()); 5609 short[] b = fb.apply(SPECIES.length()); 5610 short[] r = new short[a.length]; 5611 int origin = RAND.nextInt(SPECIES.length()); 5612 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5613 for (int i = 0; i < a.length; i += SPECIES.length()) { 5614 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5615 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5616 av.slice(origin, bv).intoArray(r, i); 5617 } 5618 } 5619 5620 assertArraysEquals(r, a, b, origin, Short64VectorTests::sliceBinary); 5621 } 5622 5623 static short[] slice(short[] a, short[] b, int origin, boolean[] mask, int idx) { 5624 short[] res = new short[SPECIES.length()]; 5625 for (int i = 0, j = 0; i < SPECIES.length(); i++){ 5626 if(i+origin < SPECIES.length()) 5627 res[i] = mask[i] ? a[idx+i+origin] : (short)0; 5628 else { 5629 res[i] = mask[i] ? b[idx+j] : (short)0; 5630 j++; 5631 } 5632 } 5633 return res; 5634 } 5635 5636 @Test(dataProvider = "shortBinaryOpMaskProvider") 5637 static void sliceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 5638 IntFunction<boolean[]> fm) { 5639 short[] a = fa.apply(SPECIES.length()); 5640 short[] b = fb.apply(SPECIES.length()); 5641 boolean[] mask = fm.apply(SPECIES.length()); 5642 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5643 5644 short[] r = new short[a.length]; 5645 int origin = RAND.nextInt(SPECIES.length()); 5646 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5647 for (int i = 0; i < a.length; i += SPECIES.length()) { 5648 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5649 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5650 av.slice(origin, bv, vmask).intoArray(r, i); 5651 } 5652 } 5653 5654 assertArraysEquals(r, a, b, origin, mask, Short64VectorTests::slice); 5655 } 5656 5657 static short[] unsliceUnary(short[] a, int origin, int idx) { 5658 short[] res = new short[SPECIES.length()]; 5659 for (int i = 0, j = 0; i < SPECIES.length(); i++){ 5660 if(i < origin) 5661 res[i] = (short)0; 5662 else { 5663 res[i] = a[idx+j]; 5664 j++; 5665 } 5666 } 5667 return res; 5668 } 5669 5670 @Test(dataProvider = "shortUnaryOpProvider") 5671 static void unsliceUnaryShort64VectorTests(IntFunction<short[]> fa) { 5672 short[] a = fa.apply(SPECIES.length()); 5673 short[] r = new short[a.length]; 5674 int origin = RAND.nextInt(SPECIES.length()); 5675 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5676 for (int i = 0; i < a.length; i += SPECIES.length()) { 5677 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5678 av.unslice(origin).intoArray(r, i); 5679 } 5680 } 5681 5682 assertArraysEquals(r, a, origin, Short64VectorTests::unsliceUnary); 5683 } 5684 5685 static short[] unsliceBinary(short[] a, short[] b, int origin, int part, int idx) { 5686 short[] res = new short[SPECIES.length()]; 5687 for (int i = 0, j = 0; i < SPECIES.length(); i++){ 5688 if (part == 0) { 5689 if (i < origin) 5690 res[i] = b[idx+i]; 5691 else { 5692 res[i] = a[idx+j]; 5693 j++; 5694 } 5695 } else if (part == 1) { 5696 if (i < origin) 5697 res[i] = a[idx+SPECIES.length()-origin+i]; 5698 else { 5699 res[i] = b[idx+origin+j]; 5700 j++; 5701 } 5702 } 5703 } 5704 return res; 5705 } 5706 5707 @Test(dataProvider = "shortBinaryOpProvider") 5708 static void unsliceBinaryShort64VectorTestsBinary(IntFunction<short[]> fa, IntFunction<short[]> fb) { 5709 short[] a = fa.apply(SPECIES.length()); 5710 short[] b = fb.apply(SPECIES.length()); 5711 short[] r = new short[a.length]; 5712 int origin = RAND.nextInt(SPECIES.length()); 5713 int part = RAND.nextInt(2); 5714 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5715 for (int i = 0; i < a.length; i += SPECIES.length()) { 5716 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5717 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5718 av.unslice(origin, bv, part).intoArray(r, i); 5719 } 5720 } 5721 5722 assertArraysEquals(r, a, b, origin, part, Short64VectorTests::unsliceBinary); 5723 } 5724 5725 static short[] unslice(short[] a, short[] b, int origin, int part, boolean[] mask, int idx) { 5726 short[] res = new short[SPECIES.length()]; 5727 for (int i = 0, j = 0; i < SPECIES.length(); i++){ 5728 if(i+origin < SPECIES.length()) 5729 res[i] = b[idx+i+origin]; 5730 else { 5731 res[i] = b[idx+j]; 5732 j++; 5733 } 5734 } 5735 for (int i = 0; i < SPECIES.length(); i++){ 5736 res[i] = mask[i] ? a[idx+i] : res[i]; 5737 } 5738 short[] res1 = new short[SPECIES.length()]; 5739 if (part == 0) { 5740 for (int i = 0, j = 0; i < SPECIES.length(); i++){ 5741 if (i < origin) 5742 res1[i] = b[idx+i]; 5743 else { 5744 res1[i] = res[j]; 5745 j++; 5746 } 5747 } 5748 } else if (part == 1) { 5749 for (int i = 0, j = 0; i < SPECIES.length(); i++){ 5750 if (i < origin) 5751 res1[i] = res[SPECIES.length()-origin+i]; 5752 else { 5753 res1[i] = b[idx+origin+j]; 5754 j++; 5755 } 5756 } 5757 } 5758 return res1; 5759 } 5760 5761 @Test(dataProvider = "shortBinaryOpMaskProvider") 5762 static void unsliceShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 5763 IntFunction<boolean[]> fm) { 5764 short[] a = fa.apply(SPECIES.length()); 5765 short[] b = fb.apply(SPECIES.length()); 5766 boolean[] mask = fm.apply(SPECIES.length()); 5767 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5768 short[] r = new short[a.length]; 5769 int origin = RAND.nextInt(SPECIES.length()); 5770 int part = RAND.nextInt(2); 5771 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5772 for (int i = 0; i < a.length; i += SPECIES.length()) { 5773 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5774 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5775 av.unslice(origin, bv, part, vmask).intoArray(r, i); 5776 } 5777 } 5778 5779 assertArraysEquals(r, a, b, origin, part, mask, Short64VectorTests::unslice); 5780 } 5781 5782 static short BITWISE_BLEND(short a, short b, short c) { 5783 return (short)((a&~(c))|(b&c)); 5784 } 5785 5786 static short bitwiseBlend(short a, short b, short c) { 5787 return (short)((a&~(c))|(b&c)); 5788 } 5789 5790 @Test(dataProvider = "shortTernaryOpProvider") 5791 static void BITWISE_BLENDShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb, IntFunction<short[]> fc) { 5792 short[] a = fa.apply(SPECIES.length()); 5793 short[] b = fb.apply(SPECIES.length()); 5794 short[] c = fc.apply(SPECIES.length()); 5795 short[] r = fr.apply(SPECIES.length()); 5796 5797 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5798 for (int i = 0; i < a.length; i += SPECIES.length()) { 5799 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5800 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5801 ShortVector cv = ShortVector.fromArray(SPECIES, c, i); 5802 av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv).intoArray(r, i); 5803 } 5804 } 5805 5806 assertArraysEquals(r, a, b, c, Short64VectorTests::BITWISE_BLEND); 5807 } 5808 5809 @Test(dataProvider = "shortTernaryOpProvider") 5810 static void bitwiseBlendShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb, IntFunction<short[]> fc) { 5811 short[] a = fa.apply(SPECIES.length()); 5812 short[] b = fb.apply(SPECIES.length()); 5813 short[] c = fc.apply(SPECIES.length()); 5814 short[] r = fr.apply(SPECIES.length()); 5815 5816 for (int i = 0; i < a.length; i += SPECIES.length()) { 5817 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5818 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5819 ShortVector cv = ShortVector.fromArray(SPECIES, c, i); 5820 av.bitwiseBlend(bv, cv).intoArray(r, i); 5821 } 5822 5823 assertArraysEquals(r, a, b, c, Short64VectorTests::bitwiseBlend); 5824 } 5825 5826 @Test(dataProvider = "shortTernaryOpMaskProvider") 5827 static void BITWISE_BLENDShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<short[]> fb, 5828 IntFunction<short[]> fc, IntFunction<boolean[]> fm) { 5829 short[] a = fa.apply(SPECIES.length()); 5830 short[] b = fb.apply(SPECIES.length()); 5831 short[] c = fc.apply(SPECIES.length()); 5832 short[] r = fr.apply(SPECIES.length()); 5833 boolean[] mask = fm.apply(SPECIES.length()); 5834 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5835 5836 for (int ic = 0; ic < INVOC_COUNT; ic++) { 5837 for (int i = 0; i < a.length; i += SPECIES.length()) { 5838 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5839 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5840 ShortVector cv = ShortVector.fromArray(SPECIES, c, i); 5841 av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv, vmask).intoArray(r, i); 5842 } 5843 } 5844 5845 assertArraysEquals(r, a, b, c, mask, Short64VectorTests::BITWISE_BLEND); 5846 } 5847 5848 @Test(dataProvider = "shortTernaryOpProvider") 5849 static void BITWISE_BLENDShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, IntFunction<short[]> fc) { 5850 short[] a = fa.apply(SPECIES.length()); 5851 short[] b = fb.apply(SPECIES.length()); 5852 short[] c = fc.apply(SPECIES.length()); 5853 short[] r = fr.apply(SPECIES.length()); 5854 5855 for (int i = 0; i < a.length; i += SPECIES.length()) { 5856 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5857 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5858 av.lanewise(VectorOperators.BITWISE_BLEND, bv, c[i]).intoArray(r, i); 5859 } 5860 assertBroadcastArraysEquals(r, a, b, c, Short64VectorTests::BITWISE_BLEND); 5861 } 5862 5863 @Test(dataProvider = "shortTernaryOpProvider") 5864 static void BITWISE_BLENDShort64VectorTestsAltBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, IntFunction<short[]> fc) { 5865 short[] a = fa.apply(SPECIES.length()); 5866 short[] b = fb.apply(SPECIES.length()); 5867 short[] c = fc.apply(SPECIES.length()); 5868 short[] r = fr.apply(SPECIES.length()); 5869 5870 for (int i = 0; i < a.length; i += SPECIES.length()) { 5871 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5872 ShortVector cv = ShortVector.fromArray(SPECIES, c, i); 5873 av.lanewise(VectorOperators.BITWISE_BLEND, b[i], cv).intoArray(r, i); 5874 } 5875 assertAltBroadcastArraysEquals(r, a, b, c, Short64VectorTests::BITWISE_BLEND); 5876 } 5877 5878 @Test(dataProvider = "shortTernaryOpProvider") 5879 static void bitwiseBlendShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, IntFunction<short[]> fc) { 5880 short[] a = fa.apply(SPECIES.length()); 5881 short[] b = fb.apply(SPECIES.length()); 5882 short[] c = fc.apply(SPECIES.length()); 5883 short[] r = fr.apply(SPECIES.length()); 5884 5885 for (int i = 0; i < a.length; i += SPECIES.length()) { 5886 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5887 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5888 av.bitwiseBlend(bv, c[i]).intoArray(r, i); 5889 } 5890 assertBroadcastArraysEquals(r, a, b, c, Short64VectorTests::bitwiseBlend); 5891 } 5892 5893 @Test(dataProvider = "shortTernaryOpProvider") 5894 static void bitwiseBlendShort64VectorTestsAltBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, IntFunction<short[]> fc) { 5895 short[] a = fa.apply(SPECIES.length()); 5896 short[] b = fb.apply(SPECIES.length()); 5897 short[] c = fc.apply(SPECIES.length()); 5898 short[] r = fr.apply(SPECIES.length()); 5899 5900 for (int i = 0; i < a.length; i += SPECIES.length()) { 5901 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5902 ShortVector cv = ShortVector.fromArray(SPECIES, c, i); 5903 av.bitwiseBlend(b[i], cv).intoArray(r, i); 5904 } 5905 assertAltBroadcastArraysEquals(r, a, b, c, Short64VectorTests::bitwiseBlend); 5906 } 5907 5908 @Test(dataProvider = "shortTernaryOpMaskProvider") 5909 static void BITWISE_BLENDShort64VectorTestsBroadcastMaskedSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, 5910 IntFunction<short[]> fc, IntFunction<boolean[]> fm) { 5911 short[] a = fa.apply(SPECIES.length()); 5912 short[] b = fb.apply(SPECIES.length()); 5913 short[] c = fc.apply(SPECIES.length()); 5914 short[] r = fr.apply(SPECIES.length()); 5915 boolean[] mask = fm.apply(SPECIES.length()); 5916 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5917 5918 for (int i = 0; i < a.length; i += SPECIES.length()) { 5919 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5920 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 5921 av.lanewise(VectorOperators.BITWISE_BLEND, bv, c[i], vmask).intoArray(r, i); 5922 } 5923 5924 assertBroadcastArraysEquals(r, a, b, c, mask, Short64VectorTests::BITWISE_BLEND); 5925 } 5926 5927 @Test(dataProvider = "shortTernaryOpMaskProvider") 5928 static void BITWISE_BLENDShort64VectorTestsAltBroadcastMaskedSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, 5929 IntFunction<short[]> fc, IntFunction<boolean[]> fm) { 5930 short[] a = fa.apply(SPECIES.length()); 5931 short[] b = fb.apply(SPECIES.length()); 5932 short[] c = fc.apply(SPECIES.length()); 5933 short[] r = fr.apply(SPECIES.length()); 5934 boolean[] mask = fm.apply(SPECIES.length()); 5935 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5936 5937 for (int i = 0; i < a.length; i += SPECIES.length()) { 5938 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5939 ShortVector cv = ShortVector.fromArray(SPECIES, c, i); 5940 av.lanewise(VectorOperators.BITWISE_BLEND, b[i], cv, vmask).intoArray(r, i); 5941 } 5942 5943 assertAltBroadcastArraysEquals(r, a, b, c, mask, Short64VectorTests::BITWISE_BLEND); 5944 } 5945 5946 @Test(dataProvider = "shortTernaryOpProvider") 5947 static void BITWISE_BLENDShort64VectorTestsDoubleBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, IntFunction<short[]> fc) { 5948 short[] a = fa.apply(SPECIES.length()); 5949 short[] b = fb.apply(SPECIES.length()); 5950 short[] c = fc.apply(SPECIES.length()); 5951 short[] r = fr.apply(SPECIES.length()); 5952 5953 for (int i = 0; i < a.length; i += SPECIES.length()) { 5954 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5955 av.lanewise(VectorOperators.BITWISE_BLEND, b[i], c[i]).intoArray(r, i); 5956 } 5957 5958 assertDoubleBroadcastArraysEquals(r, a, b, c, Short64VectorTests::BITWISE_BLEND); 5959 } 5960 5961 @Test(dataProvider = "shortTernaryOpProvider") 5962 static void bitwiseBlendShort64VectorTestsDoubleBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, IntFunction<short[]> fc) { 5963 short[] a = fa.apply(SPECIES.length()); 5964 short[] b = fb.apply(SPECIES.length()); 5965 short[] c = fc.apply(SPECIES.length()); 5966 short[] r = fr.apply(SPECIES.length()); 5967 5968 for (int i = 0; i < a.length; i += SPECIES.length()) { 5969 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5970 av.bitwiseBlend(b[i], c[i]).intoArray(r, i); 5971 } 5972 5973 assertDoubleBroadcastArraysEquals(r, a, b, c, Short64VectorTests::bitwiseBlend); 5974 } 5975 5976 @Test(dataProvider = "shortTernaryOpMaskProvider") 5977 static void BITWISE_BLENDShort64VectorTestsDoubleBroadcastMaskedSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, 5978 IntFunction<short[]> fc, IntFunction<boolean[]> fm) { 5979 short[] a = fa.apply(SPECIES.length()); 5980 short[] b = fb.apply(SPECIES.length()); 5981 short[] c = fc.apply(SPECIES.length()); 5982 short[] r = fr.apply(SPECIES.length()); 5983 boolean[] mask = fm.apply(SPECIES.length()); 5984 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 5985 5986 for (int i = 0; i < a.length; i += SPECIES.length()) { 5987 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 5988 av.lanewise(VectorOperators.BITWISE_BLEND, b[i], c[i], vmask).intoArray(r, i); 5989 } 5990 5991 assertDoubleBroadcastArraysEquals(r, a, b, c, mask, Short64VectorTests::BITWISE_BLEND); 5992 } 5993 5994 static short NEG(short a) { 5995 return (short)(-((short)a)); 5996 } 5997 5998 static short neg(short a) { 5999 return (short)(-((short)a)); 6000 } 6001 6002 @Test(dataProvider = "shortUnaryOpProvider") 6003 static void NEGShort64VectorTests(IntFunction<short[]> fa) { 6004 short[] a = fa.apply(SPECIES.length()); 6005 short[] r = fr.apply(SPECIES.length()); 6006 6007 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6008 for (int i = 0; i < a.length; i += SPECIES.length()) { 6009 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6010 av.lanewise(VectorOperators.NEG).intoArray(r, i); 6011 } 6012 } 6013 6014 assertArraysEquals(r, a, Short64VectorTests::NEG); 6015 } 6016 6017 @Test(dataProvider = "shortUnaryOpProvider") 6018 static void negShort64VectorTests(IntFunction<short[]> fa) { 6019 short[] a = fa.apply(SPECIES.length()); 6020 short[] r = fr.apply(SPECIES.length()); 6021 6022 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6023 for (int i = 0; i < a.length; i += SPECIES.length()) { 6024 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6025 av.neg().intoArray(r, i); 6026 } 6027 } 6028 6029 assertArraysEquals(r, a, Short64VectorTests::neg); 6030 } 6031 6032 @Test(dataProvider = "shortUnaryOpMaskProvider") 6033 static void NEGMaskedShort64VectorTests(IntFunction<short[]> fa, 6034 IntFunction<boolean[]> fm) { 6035 short[] a = fa.apply(SPECIES.length()); 6036 short[] r = fr.apply(SPECIES.length()); 6037 boolean[] mask = fm.apply(SPECIES.length()); 6038 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 6039 6040 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6041 for (int i = 0; i < a.length; i += SPECIES.length()) { 6042 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6043 av.lanewise(VectorOperators.NEG, vmask).intoArray(r, i); 6044 } 6045 } 6046 6047 assertArraysEquals(r, a, mask, Short64VectorTests::NEG); 6048 } 6049 6050 static short ABS(short a) { 6051 return (short)(Math.abs((short)a)); 6052 } 6053 6054 static short abs(short a) { 6055 return (short)(Math.abs((short)a)); 6056 } 6057 6058 @Test(dataProvider = "shortUnaryOpProvider") 6059 static void ABSShort64VectorTests(IntFunction<short[]> fa) { 6060 short[] a = fa.apply(SPECIES.length()); 6061 short[] r = fr.apply(SPECIES.length()); 6062 6063 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6064 for (int i = 0; i < a.length; i += SPECIES.length()) { 6065 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6066 av.lanewise(VectorOperators.ABS).intoArray(r, i); 6067 } 6068 } 6069 6070 assertArraysEquals(r, a, Short64VectorTests::ABS); 6071 } 6072 6073 @Test(dataProvider = "shortUnaryOpProvider") 6074 static void absShort64VectorTests(IntFunction<short[]> fa) { 6075 short[] a = fa.apply(SPECIES.length()); 6076 short[] r = fr.apply(SPECIES.length()); 6077 6078 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6079 for (int i = 0; i < a.length; i += SPECIES.length()) { 6080 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6081 av.abs().intoArray(r, i); 6082 } 6083 } 6084 6085 assertArraysEquals(r, a, Short64VectorTests::abs); 6086 } 6087 6088 @Test(dataProvider = "shortUnaryOpMaskProvider") 6089 static void ABSMaskedShort64VectorTests(IntFunction<short[]> fa, 6090 IntFunction<boolean[]> fm) { 6091 short[] a = fa.apply(SPECIES.length()); 6092 short[] r = fr.apply(SPECIES.length()); 6093 boolean[] mask = fm.apply(SPECIES.length()); 6094 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 6095 6096 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6097 for (int i = 0; i < a.length; i += SPECIES.length()) { 6098 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6099 av.lanewise(VectorOperators.ABS, vmask).intoArray(r, i); 6100 } 6101 } 6102 6103 assertArraysEquals(r, a, mask, Short64VectorTests::ABS); 6104 } 6105 6106 static short NOT(short a) { 6107 return (short)(~((short)a)); 6108 } 6109 6110 static short not(short a) { 6111 return (short)(~((short)a)); 6112 } 6113 6114 @Test(dataProvider = "shortUnaryOpProvider") 6115 static void NOTShort64VectorTests(IntFunction<short[]> fa) { 6116 short[] a = fa.apply(SPECIES.length()); 6117 short[] r = fr.apply(SPECIES.length()); 6118 6119 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6120 for (int i = 0; i < a.length; i += SPECIES.length()) { 6121 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6122 av.lanewise(VectorOperators.NOT).intoArray(r, i); 6123 } 6124 } 6125 6126 assertArraysEquals(r, a, Short64VectorTests::NOT); 6127 } 6128 6129 @Test(dataProvider = "shortUnaryOpProvider") 6130 static void notShort64VectorTests(IntFunction<short[]> fa) { 6131 short[] a = fa.apply(SPECIES.length()); 6132 short[] r = fr.apply(SPECIES.length()); 6133 6134 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6135 for (int i = 0; i < a.length; i += SPECIES.length()) { 6136 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6137 av.not().intoArray(r, i); 6138 } 6139 } 6140 6141 assertArraysEquals(r, a, Short64VectorTests::not); 6142 } 6143 6144 @Test(dataProvider = "shortUnaryOpMaskProvider") 6145 static void NOTMaskedShort64VectorTests(IntFunction<short[]> fa, 6146 IntFunction<boolean[]> fm) { 6147 short[] a = fa.apply(SPECIES.length()); 6148 short[] r = fr.apply(SPECIES.length()); 6149 boolean[] mask = fm.apply(SPECIES.length()); 6150 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 6151 6152 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6153 for (int i = 0; i < a.length; i += SPECIES.length()) { 6154 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6155 av.lanewise(VectorOperators.NOT, vmask).intoArray(r, i); 6156 } 6157 } 6158 6159 assertArraysEquals(r, a, mask, Short64VectorTests::NOT); 6160 } 6161 6162 static short ZOMO(short a) { 6163 return (short)((a==0?0:-1)); 6164 } 6165 6166 @Test(dataProvider = "shortUnaryOpProvider") 6167 static void ZOMOShort64VectorTests(IntFunction<short[]> fa) { 6168 short[] a = fa.apply(SPECIES.length()); 6169 short[] r = fr.apply(SPECIES.length()); 6170 6171 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6172 for (int i = 0; i < a.length; i += SPECIES.length()) { 6173 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6174 av.lanewise(VectorOperators.ZOMO).intoArray(r, i); 6175 } 6176 } 6177 6178 assertArraysEquals(r, a, Short64VectorTests::ZOMO); 6179 } 6180 6181 @Test(dataProvider = "shortUnaryOpMaskProvider") 6182 static void ZOMOMaskedShort64VectorTests(IntFunction<short[]> fa, 6183 IntFunction<boolean[]> fm) { 6184 short[] a = fa.apply(SPECIES.length()); 6185 short[] r = fr.apply(SPECIES.length()); 6186 boolean[] mask = fm.apply(SPECIES.length()); 6187 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 6188 6189 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6190 for (int i = 0; i < a.length; i += SPECIES.length()) { 6191 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6192 av.lanewise(VectorOperators.ZOMO, vmask).intoArray(r, i); 6193 } 6194 } 6195 6196 assertArraysEquals(r, a, mask, Short64VectorTests::ZOMO); 6197 } 6198 6199 static short BIT_COUNT(short a) { 6200 return (short)(Integer.bitCount((int)a & 0xFFFF)); 6201 } 6202 6203 @Test(dataProvider = "shortUnaryOpProvider") 6204 static void BIT_COUNTShort64VectorTests(IntFunction<short[]> fa) { 6205 short[] a = fa.apply(SPECIES.length()); 6206 short[] r = fr.apply(SPECIES.length()); 6207 6208 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6209 for (int i = 0; i < a.length; i += SPECIES.length()) { 6210 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6211 av.lanewise(VectorOperators.BIT_COUNT).intoArray(r, i); 6212 } 6213 } 6214 6215 assertArraysEquals(r, a, Short64VectorTests::BIT_COUNT); 6216 } 6217 6218 @Test(dataProvider = "shortUnaryOpMaskProvider") 6219 static void BIT_COUNTMaskedShort64VectorTests(IntFunction<short[]> fa, 6220 IntFunction<boolean[]> fm) { 6221 short[] a = fa.apply(SPECIES.length()); 6222 short[] r = fr.apply(SPECIES.length()); 6223 boolean[] mask = fm.apply(SPECIES.length()); 6224 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 6225 6226 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6227 for (int i = 0; i < a.length; i += SPECIES.length()) { 6228 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6229 av.lanewise(VectorOperators.BIT_COUNT, vmask).intoArray(r, i); 6230 } 6231 } 6232 6233 assertArraysEquals(r, a, mask, Short64VectorTests::BIT_COUNT); 6234 } 6235 6236 static short TRAILING_ZEROS_COUNT(short a) { 6237 return (short)(TRAILING_ZEROS_COUNT_scalar(a)); 6238 } 6239 6240 @Test(dataProvider = "shortUnaryOpProvider") 6241 static void TRAILING_ZEROS_COUNTShort64VectorTests(IntFunction<short[]> fa) { 6242 short[] a = fa.apply(SPECIES.length()); 6243 short[] r = fr.apply(SPECIES.length()); 6244 6245 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6246 for (int i = 0; i < a.length; i += SPECIES.length()) { 6247 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6248 av.lanewise(VectorOperators.TRAILING_ZEROS_COUNT).intoArray(r, i); 6249 } 6250 } 6251 6252 assertArraysEquals(r, a, Short64VectorTests::TRAILING_ZEROS_COUNT); 6253 } 6254 6255 @Test(dataProvider = "shortUnaryOpMaskProvider") 6256 static void TRAILING_ZEROS_COUNTMaskedShort64VectorTests(IntFunction<short[]> fa, 6257 IntFunction<boolean[]> fm) { 6258 short[] a = fa.apply(SPECIES.length()); 6259 short[] r = fr.apply(SPECIES.length()); 6260 boolean[] mask = fm.apply(SPECIES.length()); 6261 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 6262 6263 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6264 for (int i = 0; i < a.length; i += SPECIES.length()) { 6265 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6266 av.lanewise(VectorOperators.TRAILING_ZEROS_COUNT, vmask).intoArray(r, i); 6267 } 6268 } 6269 6270 assertArraysEquals(r, a, mask, Short64VectorTests::TRAILING_ZEROS_COUNT); 6271 } 6272 6273 static short LEADING_ZEROS_COUNT(short a) { 6274 return (short)(LEADING_ZEROS_COUNT_scalar(a)); 6275 } 6276 6277 @Test(dataProvider = "shortUnaryOpProvider") 6278 static void LEADING_ZEROS_COUNTShort64VectorTests(IntFunction<short[]> fa) { 6279 short[] a = fa.apply(SPECIES.length()); 6280 short[] r = fr.apply(SPECIES.length()); 6281 6282 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6283 for (int i = 0; i < a.length; i += SPECIES.length()) { 6284 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6285 av.lanewise(VectorOperators.LEADING_ZEROS_COUNT).intoArray(r, i); 6286 } 6287 } 6288 6289 assertArraysEquals(r, a, Short64VectorTests::LEADING_ZEROS_COUNT); 6290 } 6291 6292 @Test(dataProvider = "shortUnaryOpMaskProvider") 6293 static void LEADING_ZEROS_COUNTMaskedShort64VectorTests(IntFunction<short[]> fa, 6294 IntFunction<boolean[]> fm) { 6295 short[] a = fa.apply(SPECIES.length()); 6296 short[] r = fr.apply(SPECIES.length()); 6297 boolean[] mask = fm.apply(SPECIES.length()); 6298 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 6299 6300 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6301 for (int i = 0; i < a.length; i += SPECIES.length()) { 6302 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6303 av.lanewise(VectorOperators.LEADING_ZEROS_COUNT, vmask).intoArray(r, i); 6304 } 6305 } 6306 6307 assertArraysEquals(r, a, mask, Short64VectorTests::LEADING_ZEROS_COUNT); 6308 } 6309 6310 static short REVERSE(short a) { 6311 return (short)(REVERSE_scalar(a)); 6312 } 6313 6314 @Test(dataProvider = "shortUnaryOpProvider") 6315 static void REVERSEShort64VectorTests(IntFunction<short[]> fa) { 6316 short[] a = fa.apply(SPECIES.length()); 6317 short[] r = fr.apply(SPECIES.length()); 6318 6319 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6320 for (int i = 0; i < a.length; i += SPECIES.length()) { 6321 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6322 av.lanewise(VectorOperators.REVERSE).intoArray(r, i); 6323 } 6324 } 6325 6326 assertArraysEquals(r, a, Short64VectorTests::REVERSE); 6327 } 6328 6329 @Test(dataProvider = "shortUnaryOpMaskProvider") 6330 static void REVERSEMaskedShort64VectorTests(IntFunction<short[]> fa, 6331 IntFunction<boolean[]> fm) { 6332 short[] a = fa.apply(SPECIES.length()); 6333 short[] r = fr.apply(SPECIES.length()); 6334 boolean[] mask = fm.apply(SPECIES.length()); 6335 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 6336 6337 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6338 for (int i = 0; i < a.length; i += SPECIES.length()) { 6339 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6340 av.lanewise(VectorOperators.REVERSE, vmask).intoArray(r, i); 6341 } 6342 } 6343 6344 assertArraysEquals(r, a, mask, Short64VectorTests::REVERSE); 6345 } 6346 6347 static short REVERSE_BYTES(short a) { 6348 return (short)(Short.reverseBytes(a)); 6349 } 6350 6351 @Test(dataProvider = "shortUnaryOpProvider") 6352 static void REVERSE_BYTESShort64VectorTests(IntFunction<short[]> fa) { 6353 short[] a = fa.apply(SPECIES.length()); 6354 short[] r = fr.apply(SPECIES.length()); 6355 6356 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6357 for (int i = 0; i < a.length; i += SPECIES.length()) { 6358 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6359 av.lanewise(VectorOperators.REVERSE_BYTES).intoArray(r, i); 6360 } 6361 } 6362 6363 assertArraysEquals(r, a, Short64VectorTests::REVERSE_BYTES); 6364 } 6365 6366 @Test(dataProvider = "shortUnaryOpMaskProvider") 6367 static void REVERSE_BYTESMaskedShort64VectorTests(IntFunction<short[]> fa, 6368 IntFunction<boolean[]> fm) { 6369 short[] a = fa.apply(SPECIES.length()); 6370 short[] r = fr.apply(SPECIES.length()); 6371 boolean[] mask = fm.apply(SPECIES.length()); 6372 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 6373 6374 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6375 for (int i = 0; i < a.length; i += SPECIES.length()) { 6376 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6377 av.lanewise(VectorOperators.REVERSE_BYTES, vmask).intoArray(r, i); 6378 } 6379 } 6380 6381 assertArraysEquals(r, a, mask, Short64VectorTests::REVERSE_BYTES); 6382 } 6383 6384 @Test(dataProvider = "shortCompareOpProvider") 6385 static void ltShort64VectorTestsBroadcastSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 6386 short[] a = fa.apply(SPECIES.length()); 6387 short[] b = fb.apply(SPECIES.length()); 6388 6389 for (int i = 0; i < a.length; i += SPECIES.length()) { 6390 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6391 VectorMask<Short> mv = av.lt(b[i]); 6392 6393 // Check results as part of computation. 6394 for (int j = 0; j < SPECIES.length(); j++) { 6395 Assert.assertEquals(mv.laneIsSet(j), a[i + j] < b[i]); 6396 } 6397 } 6398 } 6399 6400 @Test(dataProvider = "shortCompareOpProvider") 6401 static void eqShort64VectorTestsBroadcastMaskedSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb) { 6402 short[] a = fa.apply(SPECIES.length()); 6403 short[] b = fb.apply(SPECIES.length()); 6404 6405 for (int i = 0; i < a.length; i += SPECIES.length()) { 6406 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6407 VectorMask<Short> mv = av.eq(b[i]); 6408 6409 // Check results as part of computation. 6410 for (int j = 0; j < SPECIES.length(); j++) { 6411 Assert.assertEquals(mv.laneIsSet(j), a[i + j] == b[i]); 6412 } 6413 } 6414 } 6415 6416 @Test(dataProvider = "shortUnaryOpProvider") 6417 static void toIntArrayShort64VectorTestsSmokeTest(IntFunction<short[]> fa) { 6418 short[] a = fa.apply(SPECIES.length()); 6419 6420 for (int i = 0; i < a.length; i += SPECIES.length()) { 6421 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6422 int[] r = av.toIntArray(); 6423 assertArraysEquals(r, a, i); 6424 } 6425 } 6426 6427 @Test(dataProvider = "shortUnaryOpProvider") 6428 static void toLongArrayShort64VectorTestsSmokeTest(IntFunction<short[]> fa) { 6429 short[] a = fa.apply(SPECIES.length()); 6430 6431 for (int i = 0; i < a.length; i += SPECIES.length()) { 6432 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6433 long[] r = av.toLongArray(); 6434 assertArraysEquals(r, a, i); 6435 } 6436 } 6437 6438 @Test(dataProvider = "shortUnaryOpProvider") 6439 static void toDoubleArrayShort64VectorTestsSmokeTest(IntFunction<short[]> fa) { 6440 short[] a = fa.apply(SPECIES.length()); 6441 6442 for (int i = 0; i < a.length; i += SPECIES.length()) { 6443 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6444 double[] r = av.toDoubleArray(); 6445 assertArraysEquals(r, a, i); 6446 } 6447 } 6448 6449 @Test(dataProvider = "shortUnaryOpProvider") 6450 static void toStringShort64VectorTestsSmokeTest(IntFunction<short[]> fa) { 6451 short[] a = fa.apply(SPECIES.length()); 6452 6453 for (int i = 0; i < a.length; i += SPECIES.length()) { 6454 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6455 String str = av.toString(); 6456 6457 short subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length()); 6458 Assert.assertTrue(str.equals(Arrays.toString(subarr)), "at index " + i + ", string should be = " + Arrays.toString(subarr) + ", but is = " + str); 6459 } 6460 } 6461 6462 @Test(dataProvider = "shortUnaryOpProvider") 6463 static void hashCodeShort64VectorTestsSmokeTest(IntFunction<short[]> fa) { 6464 short[] a = fa.apply(SPECIES.length()); 6465 6466 for (int i = 0; i < a.length; i += SPECIES.length()) { 6467 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6468 int hash = av.hashCode(); 6469 6470 short subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length()); 6471 int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr)); 6472 Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash); 6473 } 6474 } 6475 6476 6477 static long ADDReduceLong(short[] a, int idx) { 6478 short res = 0; 6479 for (int i = idx; i < (idx + SPECIES.length()); i++) { 6480 res += a[i]; 6481 } 6482 6483 return (long)res; 6484 } 6485 6486 static long ADDReduceAllLong(short[] a) { 6487 long res = 0; 6488 for (int i = 0; i < a.length; i += SPECIES.length()) { 6489 res += ADDReduceLong(a, i); 6490 } 6491 6492 return res; 6493 } 6494 6495 @Test(dataProvider = "shortUnaryOpProvider") 6496 static void ADDReduceLongShort64VectorTests(IntFunction<short[]> fa) { 6497 short[] a = fa.apply(SPECIES.length()); 6498 long[] r = lfr.apply(SPECIES.length()); 6499 long ra = 0; 6500 6501 for (int i = 0; i < a.length; i += SPECIES.length()) { 6502 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6503 r[i] = av.reduceLanesToLong(VectorOperators.ADD); 6504 } 6505 6506 ra = 0; 6507 for (int i = 0; i < a.length; i ++) { 6508 ra += r[i]; 6509 } 6510 6511 assertReductionLongArraysEquals(r, ra, a, 6512 Short64VectorTests::ADDReduceLong, Short64VectorTests::ADDReduceAllLong); 6513 } 6514 6515 static long ADDReduceLongMasked(short[] a, int idx, boolean[] mask) { 6516 short res = 0; 6517 for (int i = idx; i < (idx + SPECIES.length()); i++) { 6518 if(mask[i % SPECIES.length()]) 6519 res += a[i]; 6520 } 6521 6522 return (long)res; 6523 } 6524 6525 static long ADDReduceAllLongMasked(short[] a, boolean[] mask) { 6526 long res = 0; 6527 for (int i = 0; i < a.length; i += SPECIES.length()) { 6528 res += ADDReduceLongMasked(a, i, mask); 6529 } 6530 6531 return res; 6532 } 6533 6534 @Test(dataProvider = "shortUnaryOpMaskProvider") 6535 static void ADDReduceLongShort64VectorTestsMasked(IntFunction<short[]> fa, IntFunction<boolean[]> fm) { 6536 short[] a = fa.apply(SPECIES.length()); 6537 long[] r = lfr.apply(SPECIES.length()); 6538 boolean[] mask = fm.apply(SPECIES.length()); 6539 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 6540 long ra = 0; 6541 6542 for (int i = 0; i < a.length; i += SPECIES.length()) { 6543 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6544 r[i] = av.reduceLanesToLong(VectorOperators.ADD, vmask); 6545 } 6546 6547 ra = 0; 6548 for (int i = 0; i < a.length; i ++) { 6549 ra += r[i]; 6550 } 6551 6552 assertReductionLongArraysEqualsMasked(r, ra, a, mask, 6553 Short64VectorTests::ADDReduceLongMasked, Short64VectorTests::ADDReduceAllLongMasked); 6554 } 6555 6556 @Test(dataProvider = "shortUnaryOpProvider") 6557 static void BroadcastLongShort64VectorTestsSmokeTest(IntFunction<short[]> fa) { 6558 short[] a = fa.apply(SPECIES.length()); 6559 short[] r = new short[a.length]; 6560 6561 for (int i = 0; i < a.length; i += SPECIES.length()) { 6562 ShortVector.broadcast(SPECIES, (long)a[i]).intoArray(r, i); 6563 } 6564 assertBroadcastArraysEquals(r, a); 6565 } 6566 6567 @Test(dataProvider = "shortBinaryOpMaskProvider") 6568 static void blendShort64VectorTestsBroadcastLongSmokeTest(IntFunction<short[]> fa, IntFunction<short[]> fb, 6569 IntFunction<boolean[]> fm) { 6570 short[] a = fa.apply(SPECIES.length()); 6571 short[] b = fb.apply(SPECIES.length()); 6572 short[] r = fr.apply(SPECIES.length()); 6573 boolean[] mask = fm.apply(SPECIES.length()); 6574 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 6575 6576 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6577 for (int i = 0; i < a.length; i += SPECIES.length()) { 6578 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6579 av.blend((long)b[i], vmask).intoArray(r, i); 6580 } 6581 } 6582 assertBroadcastLongArraysEquals(r, a, b, mask, Short64VectorTests::blend); 6583 } 6584 6585 6586 @Test(dataProvider = "shortUnaryOpSelectFromProvider") 6587 static void SelectFromShort64VectorTests(IntFunction<short[]> fa, 6588 BiFunction<Integer,Integer,short[]> fs) { 6589 short[] a = fa.apply(SPECIES.length()); 6590 short[] order = fs.apply(a.length, SPECIES.length()); 6591 short[] r = fr.apply(SPECIES.length()); 6592 6593 for (int i = 0; i < a.length; i += SPECIES.length()) { 6594 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6595 ShortVector bv = ShortVector.fromArray(SPECIES, order, i); 6596 bv.selectFrom(av).intoArray(r, i); 6597 } 6598 6599 assertSelectFromArraysEquals(r, a, order, SPECIES.length()); 6600 } 6601 6602 @Test(dataProvider = "shortSelectFromTwoVectorOpProvider") 6603 static void SelectFromTwoVectorShort64VectorTests(IntFunction<short[]> fa, IntFunction<short[]> fb, IntFunction<short[]> fc) { 6604 short[] a = fa.apply(SPECIES.length()); 6605 short[] b = fb.apply(SPECIES.length()); 6606 short[] idx = fc.apply(SPECIES.length()); 6607 short[] r = fr.apply(SPECIES.length()); 6608 6609 for (int ic = 0; ic < INVOC_COUNT; ic++) { 6610 for (int i = 0; i < idx.length; i += SPECIES.length()) { 6611 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6612 ShortVector bv = ShortVector.fromArray(SPECIES, b, i); 6613 ShortVector idxv = ShortVector.fromArray(SPECIES, idx, i); 6614 idxv.selectFrom(av, bv).intoArray(r, i); 6615 } 6616 } 6617 assertSelectFromTwoVectorEquals(r, idx, a, b, SPECIES.length()); 6618 } 6619 6620 @Test(dataProvider = "shortUnaryOpSelectFromMaskProvider") 6621 static void SelectFromShort64VectorTestsMaskedSmokeTest(IntFunction<short[]> fa, 6622 BiFunction<Integer,Integer,short[]> fs, 6623 IntFunction<boolean[]> fm) { 6624 short[] a = fa.apply(SPECIES.length()); 6625 short[] order = fs.apply(a.length, SPECIES.length()); 6626 short[] r = fr.apply(SPECIES.length()); 6627 boolean[] mask = fm.apply(SPECIES.length()); 6628 VectorMask<Short> vmask = VectorMask.fromArray(SPECIES, mask, 0); 6629 6630 for (int i = 0; i < a.length; i += SPECIES.length()) { 6631 ShortVector av = ShortVector.fromArray(SPECIES, a, i); 6632 ShortVector bv = ShortVector.fromArray(SPECIES, order, i); 6633 bv.selectFrom(av, vmask).intoArray(r, i); 6634 } 6635 6636 assertSelectFromArraysEquals(r, a, order, mask, SPECIES.length()); 6637 } 6638 6639 @Test(dataProvider = "shuffleProvider") 6640 static void shuffleMiscellaneousShort64VectorTestsSmokeTest(BiFunction<Integer,Integer,int[]> fs) { 6641 int[] a = fs.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length()); 6642 6643 for (int i = 0; i < a.length; i += SPECIES.length()) { 6644 var shuffle = VectorShuffle.fromArray(SPECIES, a, i); 6645 int hash = shuffle.hashCode(); 6646 int length = shuffle.length(); 6647 6648 int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length()); 6649 int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr)); 6650 Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash); 6651 Assert.assertEquals(length, SPECIES.length()); 6652 } 6653 } 6654 6655 @Test(dataProvider = "shuffleProvider") 6656 static void shuffleToStringShort64VectorTestsSmokeTest(BiFunction<Integer,Integer,int[]> fs) { 6657 int[] a = fs.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length()); 6658 6659 for (int i = 0; i < a.length; i += SPECIES.length()) { 6660 var shuffle = VectorShuffle.fromArray(SPECIES, a, i); 6661 String str = shuffle.toString(); 6662 6663 int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length()); 6664 Assert.assertTrue(str.equals("Shuffle" + Arrays.toString(subarr)), "at index " + 6665 i + ", string should be = " + Arrays.toString(subarr) + ", but is = " + str); 6666 } 6667 } 6668 6669 @Test(dataProvider = "shuffleCompareOpProvider") 6670 static void shuffleEqualsShort64VectorTestsSmokeTest(BiFunction<Integer,Integer,int[]> fa, BiFunction<Integer,Integer,int[]> fb) { 6671 int[] a = fa.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length()); 6672 int[] b = fb.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length()); 6673 6674 for (int i = 0; i < a.length; i += SPECIES.length()) { 6675 var av = VectorShuffle.fromArray(SPECIES, a, i); 6676 var bv = VectorShuffle.fromArray(SPECIES, b, i); 6677 boolean eq = av.equals(bv); 6678 int to = i + SPECIES.length(); 6679 Assert.assertEquals(eq, Arrays.equals(a, i, to, b, i, to)); 6680 } 6681 } 6682 6683 @Test(dataProvider = "maskCompareOpProvider") 6684 static void maskEqualsShort64VectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) { 6685 boolean[] a = fa.apply(SPECIES.length()); 6686 boolean[] b = fb.apply(SPECIES.length()); 6687 6688 for (int i = 0; i < a.length; i += SPECIES.length()) { 6689 var av = SPECIES.loadMask(a, i); 6690 var bv = SPECIES.loadMask(b, i); 6691 boolean equals = av.equals(bv); 6692 int to = i + SPECIES.length(); 6693 Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); 6694 } 6695 } 6696 6697 static boolean band(boolean a, boolean b) { 6698 return a & b; 6699 } 6700 6701 @Test(dataProvider = "maskCompareOpProvider") 6702 static void maskAndShort64VectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) { 6703 boolean[] a = fa.apply(SPECIES.length()); 6704 boolean[] b = fb.apply(SPECIES.length()); 6705 boolean[] r = new boolean[a.length]; 6706 6707 for (int i = 0; i < a.length; i += SPECIES.length()) { 6708 var av = SPECIES.loadMask(a, i); 6709 var bv = SPECIES.loadMask(b, i); 6710 var cv = av.and(bv); 6711 cv.intoArray(r, i); 6712 } 6713 assertArraysEquals(r, a, b, Short64VectorTests::band); 6714 } 6715 6716 static boolean bor(boolean a, boolean b) { 6717 return a | b; 6718 } 6719 6720 @Test(dataProvider = "maskCompareOpProvider") 6721 static void maskOrShort64VectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) { 6722 boolean[] a = fa.apply(SPECIES.length()); 6723 boolean[] b = fb.apply(SPECIES.length()); 6724 boolean[] r = new boolean[a.length]; 6725 6726 for (int i = 0; i < a.length; i += SPECIES.length()) { 6727 var av = SPECIES.loadMask(a, i); 6728 var bv = SPECIES.loadMask(b, i); 6729 var cv = av.or(bv); 6730 cv.intoArray(r, i); 6731 } 6732 assertArraysEquals(r, a, b, Short64VectorTests::bor); 6733 } 6734 6735 static boolean bxor(boolean a, boolean b) { 6736 return a != b; 6737 } 6738 6739 @Test(dataProvider = "maskCompareOpProvider") 6740 static void maskXorShort64VectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) { 6741 boolean[] a = fa.apply(SPECIES.length()); 6742 boolean[] b = fb.apply(SPECIES.length()); 6743 boolean[] r = new boolean[a.length]; 6744 6745 for (int i = 0; i < a.length; i += SPECIES.length()) { 6746 var av = SPECIES.loadMask(a, i); 6747 var bv = SPECIES.loadMask(b, i); 6748 var cv = av.xor(bv); 6749 cv.intoArray(r, i); 6750 } 6751 assertArraysEquals(r, a, b, Short64VectorTests::bxor); 6752 } 6753 6754 static boolean bandNot(boolean a, boolean b) { 6755 return a & !b; 6756 } 6757 6758 @Test(dataProvider = "maskCompareOpProvider") 6759 static void maskAndNotShort64VectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) { 6760 boolean[] a = fa.apply(SPECIES.length()); 6761 boolean[] b = fb.apply(SPECIES.length()); 6762 boolean[] r = new boolean[a.length]; 6763 6764 for (int i = 0; i < a.length; i += SPECIES.length()) { 6765 var av = SPECIES.loadMask(a, i); 6766 var bv = SPECIES.loadMask(b, i); 6767 var cv = av.andNot(bv); 6768 cv.intoArray(r, i); 6769 } 6770 assertArraysEquals(r, a, b, Short64VectorTests::bandNot); 6771 } 6772 6773 static boolean beq(boolean a, boolean b) { 6774 return (a == b); 6775 } 6776 6777 @Test(dataProvider = "maskCompareOpProvider") 6778 static void maskEqShort64VectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) { 6779 boolean[] a = fa.apply(SPECIES.length()); 6780 boolean[] b = fb.apply(SPECIES.length()); 6781 boolean[] r = new boolean[a.length]; 6782 6783 for (int i = 0; i < a.length; i += SPECIES.length()) { 6784 var av = SPECIES.loadMask(a, i); 6785 var bv = SPECIES.loadMask(b, i); 6786 var cv = av.eq(bv); 6787 cv.intoArray(r, i); 6788 } 6789 assertArraysEquals(r, a, b, Short64VectorTests::beq); 6790 } 6791 6792 @Test(dataProvider = "maskProvider") 6793 static void maskHashCodeShort64VectorTestsSmokeTest(IntFunction<boolean[]> fa) { 6794 boolean[] a = fa.apply(SPECIES.length()); 6795 6796 for (int i = 0; i < a.length; i += SPECIES.length()) { 6797 var vmask = SPECIES.loadMask(a, i); 6798 int hash = vmask.hashCode(); 6799 6800 boolean subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length()); 6801 int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr)); 6802 Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash); 6803 } 6804 } 6805 6806 static int maskTrueCount(boolean[] a, int idx) { 6807 int trueCount = 0; 6808 for (int i = idx; i < idx + SPECIES.length(); i++) { 6809 trueCount += a[i] ? 1 : 0; 6810 } 6811 return trueCount; 6812 } 6813 6814 @Test(dataProvider = "maskProvider") 6815 static void maskTrueCountShort64VectorTestsSmokeTest(IntFunction<boolean[]> fa) { 6816 boolean[] a = fa.apply(SPECIES.length()); 6817 int[] r = new int[a.length]; 6818 6819 for (int ic = 0; ic < INVOC_COUNT * INVOC_COUNT; ic++) { 6820 for (int i = 0; i < a.length; i += SPECIES.length()) { 6821 var vmask = SPECIES.loadMask(a, i); 6822 r[i] = vmask.trueCount(); 6823 } 6824 } 6825 6826 assertMaskReductionArraysEquals(r, a, Short64VectorTests::maskTrueCount); 6827 } 6828 6829 static int maskLastTrue(boolean[] a, int idx) { 6830 int i = idx + SPECIES.length() - 1; 6831 for (; i >= idx; i--) { 6832 if (a[i]) { 6833 break; 6834 } 6835 } 6836 return i - idx; 6837 } 6838 6839 @Test(dataProvider = "maskProvider") 6840 static void maskLastTrueShort64VectorTestsSmokeTest(IntFunction<boolean[]> fa) { 6841 boolean[] a = fa.apply(SPECIES.length()); 6842 int[] r = new int[a.length]; 6843 6844 for (int ic = 0; ic < INVOC_COUNT * INVOC_COUNT; ic++) { 6845 for (int i = 0; i < a.length; i += SPECIES.length()) { 6846 var vmask = SPECIES.loadMask(a, i); 6847 r[i] = vmask.lastTrue(); 6848 } 6849 } 6850 6851 assertMaskReductionArraysEquals(r, a, Short64VectorTests::maskLastTrue); 6852 } 6853 6854 static int maskFirstTrue(boolean[] a, int idx) { 6855 int i = idx; 6856 for (; i < idx + SPECIES.length(); i++) { 6857 if (a[i]) { 6858 break; 6859 } 6860 } 6861 return i - idx; 6862 } 6863 6864 @Test(dataProvider = "maskProvider") 6865 static void maskFirstTrueShort64VectorTestsSmokeTest(IntFunction<boolean[]> fa) { 6866 boolean[] a = fa.apply(SPECIES.length()); 6867 int[] r = new int[a.length]; 6868 6869 for (int ic = 0; ic < INVOC_COUNT * INVOC_COUNT; ic++) { 6870 for (int i = 0; i < a.length; i += SPECIES.length()) { 6871 var vmask = SPECIES.loadMask(a, i); 6872 r[i] = vmask.firstTrue(); 6873 } 6874 } 6875 6876 assertMaskReductionArraysEquals(r, a, Short64VectorTests::maskFirstTrue); 6877 } 6878 6879 @Test(dataProvider = "maskProvider") 6880 static void maskCompressShort64VectorTestsSmokeTest(IntFunction<boolean[]> fa) { 6881 int trueCount = 0; 6882 boolean[] a = fa.apply(SPECIES.length()); 6883 6884 for (int ic = 0; ic < INVOC_COUNT * INVOC_COUNT; ic++) { 6885 for (int i = 0; i < a.length; i += SPECIES.length()) { 6886 var vmask = SPECIES.loadMask(a, i); 6887 trueCount = vmask.trueCount(); 6888 var rmask = vmask.compress(); 6889 for (int j = 0; j < SPECIES.length(); j++) { 6890 Assert.assertEquals(rmask.laneIsSet(j), j < trueCount); 6891 } 6892 } 6893 } 6894 } 6895 6896 @DataProvider 6897 public static Object[][] longMaskProvider() { 6898 return new Object[][]{ 6899 {0xFFFFFFFFFFFFFFFFL}, 6900 {0x0000000000000000L}, 6901 {0x5555555555555555L}, 6902 {0x0123456789abcdefL}, 6903 }; 6904 } 6905 6906 @Test(dataProvider = "longMaskProvider") 6907 static void maskFromToLongShort64VectorTestsSmokeTest(long inputLong) { 6908 var vmask = VectorMask.fromLong(SPECIES, inputLong); 6909 long outputLong = vmask.toLong(); 6910 Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); 6911 } 6912 6913 @DataProvider 6914 public static Object[][] offsetProvider() { 6915 return new Object[][]{ 6916 {0}, 6917 {-1}, 6918 {+1}, 6919 {+2}, 6920 {-2}, 6921 }; 6922 } 6923 6924 @Test(dataProvider = "offsetProvider") 6925 static void indexInRangeShort64VectorTestsSmokeTest(int offset) { 6926 int limit = SPECIES.length() * BUFFER_REPS; 6927 for (int i = 0; i < limit; i += SPECIES.length()) { 6928 var actualMask = SPECIES.indexInRange(i + offset, limit); 6929 var expectedMask = SPECIES.maskAll(true).indexInRange(i + offset, limit); 6930 assert(actualMask.equals(expectedMask)); 6931 for (int j = 0; j < SPECIES.length(); j++) { 6932 int index = i + j + offset; 6933 Assert.assertEquals(actualMask.laneIsSet(j), index >= 0 && index < limit); 6934 } 6935 } 6936 } 6937 6938 @Test(dataProvider = "offsetProvider") 6939 static void indexInRangeLongShort64VectorTestsSmokeTest(int offset) { 6940 long limit = SPECIES.length() * BUFFER_REPS; 6941 for (long i = 0; i < limit; i += SPECIES.length()) { 6942 var actualMask = SPECIES.indexInRange(i + offset, limit); 6943 var expectedMask = SPECIES.maskAll(true).indexInRange(i + offset, limit); 6944 assert(actualMask.equals(expectedMask)); 6945 for (int j = 0; j < SPECIES.length(); j++) { 6946 long index = i + j + offset; 6947 Assert.assertEquals(actualMask.laneIsSet(j), index >= 0 && index < limit); 6948 } 6949 } 6950 } 6951 6952 @DataProvider 6953 public static Object[][] lengthProvider() { 6954 return new Object[][]{ 6955 {0}, 6956 {1}, 6957 {32}, 6958 {37}, 6959 {1024}, 6960 {1024+1}, 6961 {1024+5}, 6962 }; 6963 } 6964 6965 @Test(dataProvider = "lengthProvider") 6966 static void loopBoundShort64VectorTestsSmokeTest(int length) { 6967 int actualLoopBound = SPECIES.loopBound(length); 6968 int expectedLoopBound = length - Math.floorMod(length, SPECIES.length()); 6969 Assert.assertEquals(actualLoopBound, expectedLoopBound); 6970 } 6971 6972 @Test(dataProvider = "lengthProvider") 6973 static void loopBoundLongShort64VectorTestsSmokeTest(int _length) { 6974 long length = _length; 6975 long actualLoopBound = SPECIES.loopBound(length); 6976 long expectedLoopBound = length - Math.floorMod(length, SPECIES.length()); 6977 Assert.assertEquals(actualLoopBound, expectedLoopBound); 6978 } 6979 6980 @Test 6981 static void ElementSizeShort64VectorTestsSmokeTest() { 6982 ShortVector av = ShortVector.zero(SPECIES); 6983 int elsize = av.elementSize(); 6984 Assert.assertEquals(elsize, Short.SIZE); 6985 } 6986 6987 @Test 6988 static void VectorShapeShort64VectorTestsSmokeTest() { 6989 ShortVector av = ShortVector.zero(SPECIES); 6990 VectorShape vsh = av.shape(); 6991 assert(vsh.equals(VectorShape.S_64_BIT)); 6992 } 6993 6994 @Test 6995 static void ShapeWithLanesShort64VectorTestsSmokeTest() { 6996 ShortVector av = ShortVector.zero(SPECIES); 6997 VectorShape vsh = av.shape(); 6998 VectorSpecies species = vsh.withLanes(short.class); 6999 assert(species.equals(SPECIES)); 7000 } 7001 7002 @Test 7003 static void ElementTypeShort64VectorTestsSmokeTest() { 7004 ShortVector av = ShortVector.zero(SPECIES); 7005 assert(av.species().elementType() == short.class); 7006 } 7007 7008 @Test 7009 static void SpeciesElementSizeShort64VectorTestsSmokeTest() { 7010 ShortVector av = ShortVector.zero(SPECIES); 7011 assert(av.species().elementSize() == Short.SIZE); 7012 } 7013 7014 @Test 7015 static void VectorTypeShort64VectorTestsSmokeTest() { 7016 ShortVector av = ShortVector.zero(SPECIES); 7017 assert(av.species().vectorType() == av.getClass()); 7018 } 7019 7020 @Test 7021 static void WithLanesShort64VectorTestsSmokeTest() { 7022 ShortVector av = ShortVector.zero(SPECIES); 7023 VectorSpecies species = av.species().withLanes(short.class); 7024 assert(species.equals(SPECIES)); 7025 } 7026 7027 @Test 7028 static void WithShapeShort64VectorTestsSmokeTest() { 7029 ShortVector av = ShortVector.zero(SPECIES); 7030 VectorShape vsh = av.shape(); 7031 VectorSpecies species = av.species().withShape(vsh); 7032 assert(species.equals(SPECIES)); 7033 } 7034 7035 @Test 7036 static void MaskAllTrueShort64VectorTestsSmokeTest() { 7037 for (int ic = 0; ic < INVOC_COUNT; ic++) { 7038 Assert.assertEquals(SPECIES.maskAll(true).toLong(), -1L >>> (64 - SPECIES.length())); 7039 } 7040 } 7041 }