229 230 interface FBinMaskOp { 231 int apply(int a, int b, boolean m); 232 233 static FBinMaskOp lift(FBinOp f) { 234 return (a, b, m) -> m ? f.apply(a, b) : a; 235 } 236 } 237 238 static void assertArraysEquals(int[] a, int[] b, int[] r, FBinOp f) { 239 int i = 0; 240 try { 241 for (; i < a.length; i++) { 242 Assert.assertEquals(r[i], f.apply(a[i], b[i])); 243 } 244 } catch (AssertionError e) { 245 Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); 246 } 247 } 248 249 static void assertArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinOp f) { 250 assertArraysEquals(a, b, r, mask, FBinMaskOp.lift(f)); 251 } 252 253 static void assertArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinMaskOp f) { 254 int i = 0; 255 try { 256 for (; i < a.length; i++) { 257 Assert.assertEquals(r[i], f.apply(a[i], b[i], mask[i % SPECIES.length()])); 258 } 259 } catch (AssertionError err) { 260 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()]); 261 } 262 } 263 264 static void assertShiftArraysEquals(int[] a, int[] b, int[] r, FBinOp f) { 265 int i = 0; 266 int j = 0; 267 try { 268 for (; j < a.length; j += SPECIES.length()) { 269 for (i = 0; i < SPECIES.length(); i++) { 270 Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j])); 271 } 272 } 273 } catch (AssertionError e) { 274 Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j]), "at index #" + i + ", " + j); 275 } 276 } 277 278 static void assertShiftArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinOp f) { 279 assertShiftArraysEquals(a, b, r, mask, FBinMaskOp.lift(f)); 280 } 281 282 static void assertShiftArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinMaskOp f) { 283 int i = 0; 1362 static int OR(int a, int b) { 1363 return (int)(a | b); 1364 } 1365 1366 @Test(dataProvider = "intBinaryOpProvider") 1367 static void ORIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { 1368 int[] a = fa.apply(SPECIES.length()); 1369 int[] b = fb.apply(SPECIES.length()); 1370 int[] r = fr.apply(SPECIES.length()); 1371 1372 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1373 for (int i = 0; i < a.length; i += SPECIES.length()) { 1374 IntVector av = IntVector.fromArray(SPECIES, a, i); 1375 IntVector bv = IntVector.fromArray(SPECIES, b, i); 1376 av.lanewise(VectorOperators.OR, bv).intoArray(r, i); 1377 } 1378 } 1379 1380 assertArraysEquals(a, b, r, IntMaxVectorTests::OR); 1381 } 1382 1383 1384 1385 @Test(dataProvider = "intBinaryOpMaskProvider") 1386 static void ORIntMaxVectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb, 1387 IntFunction<boolean[]> fm) { 1388 int[] a = fa.apply(SPECIES.length()); 1389 int[] b = fb.apply(SPECIES.length()); 1390 int[] r = fr.apply(SPECIES.length()); 1391 boolean[] mask = fm.apply(SPECIES.length()); 1392 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1393 1394 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1395 for (int i = 0; i < a.length; i += SPECIES.length()) { 1396 IntVector av = IntVector.fromArray(SPECIES, a, i); 1397 IntVector bv = IntVector.fromArray(SPECIES, b, i); 1398 av.lanewise(VectorOperators.OR, bv, vmask).intoArray(r, i); 1399 } 1400 } 1401 1430 static void XORIntMaxVectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb, 1431 IntFunction<boolean[]> fm) { 1432 int[] a = fa.apply(SPECIES.length()); 1433 int[] b = fb.apply(SPECIES.length()); 1434 int[] r = fr.apply(SPECIES.length()); 1435 boolean[] mask = fm.apply(SPECIES.length()); 1436 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1437 1438 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1439 for (int i = 0; i < a.length; i += SPECIES.length()) { 1440 IntVector av = IntVector.fromArray(SPECIES, a, i); 1441 IntVector bv = IntVector.fromArray(SPECIES, b, i); 1442 av.lanewise(VectorOperators.XOR, bv, vmask).intoArray(r, i); 1443 } 1444 } 1445 1446 assertArraysEquals(a, b, r, mask, IntMaxVectorTests::XOR); 1447 } 1448 1449 1450 static int LSHL(int a, int b) { 1451 return (int)((a << b)); 1452 } 1453 1454 @Test(dataProvider = "intBinaryOpProvider") 1455 static void LSHLIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { 1456 int[] a = fa.apply(SPECIES.length()); 1457 int[] b = fb.apply(SPECIES.length()); 1458 int[] r = fr.apply(SPECIES.length()); 1459 1460 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1461 for (int i = 0; i < a.length; i += SPECIES.length()) { 1462 IntVector av = IntVector.fromArray(SPECIES, a, i); 1463 IntVector bv = IntVector.fromArray(SPECIES, b, i); 1464 av.lanewise(VectorOperators.LSHL, bv).intoArray(r, i); 1465 } 1466 } 1467 1468 assertArraysEquals(a, b, r, IntMaxVectorTests::LSHL); 1469 } 1792 return (int)(Math.max(a, b)); 1793 } 1794 1795 @Test(dataProvider = "intBinaryOpProvider") 1796 static void maxIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { 1797 int[] a = fa.apply(SPECIES.length()); 1798 int[] b = fb.apply(SPECIES.length()); 1799 int[] r = fr.apply(SPECIES.length()); 1800 1801 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1802 for (int i = 0; i < a.length; i += SPECIES.length()) { 1803 IntVector av = IntVector.fromArray(SPECIES, a, i); 1804 IntVector bv = IntVector.fromArray(SPECIES, b, i); 1805 av.max(bv).intoArray(r, i); 1806 } 1807 } 1808 1809 assertArraysEquals(a, b, r, IntMaxVectorTests::max); 1810 } 1811 1812 static int AND(int[] a, int idx) { 1813 int res = -1; 1814 for (int i = idx; i < (idx + SPECIES.length()); i++) { 1815 res &= a[i]; 1816 } 1817 1818 return res; 1819 } 1820 1821 static int AND(int[] a) { 1822 int res = -1; 1823 for (int i = 0; i < a.length; i += SPECIES.length()) { 1824 int tmp = -1; 1825 for (int j = 0; j < SPECIES.length(); j++) { 1826 tmp &= a[i + j]; 1827 } 1828 res &= tmp; 1829 } 1830 1831 return res; 3236 boolean[] mask = fm.apply(SPECIES.length()); 3237 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3238 3239 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3240 for (int i = 0; i < a.length; i += SPECIES.length()) { 3241 IntVector av = IntVector.fromArray(SPECIES, a, i); 3242 IntVector bv = IntVector.fromArray(SPECIES, b, i); 3243 IntVector cv = IntVector.fromArray(SPECIES, c, i); 3244 av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv, vmask).intoArray(r, i); 3245 } 3246 } 3247 3248 assertArraysEquals(a, b, c, r, mask, IntMaxVectorTests::BITWISE_BLEND); 3249 } 3250 3251 3252 static int NEG(int a) { 3253 return (int)(-((int)a)); 3254 } 3255 3256 @Test(dataProvider = "intUnaryOpProvider") 3257 static void NEGIntMaxVectorTests(IntFunction<int[]> fa) { 3258 int[] a = fa.apply(SPECIES.length()); 3259 int[] r = fr.apply(SPECIES.length()); 3260 3261 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3262 for (int i = 0; i < a.length; i += SPECIES.length()) { 3263 IntVector av = IntVector.fromArray(SPECIES, a, i); 3264 av.lanewise(VectorOperators.NEG).intoArray(r, i); 3265 } 3266 } 3267 3268 assertArraysEquals(a, r, IntMaxVectorTests::NEG); 3269 } 3270 3271 @Test(dataProvider = "intUnaryOpMaskProvider") 3272 static void NEGMaskedIntMaxVectorTests(IntFunction<int[]> fa, 3273 IntFunction<boolean[]> fm) { 3274 int[] a = fa.apply(SPECIES.length()); 3275 int[] r = fr.apply(SPECIES.length()); 3276 boolean[] mask = fm.apply(SPECIES.length()); 3277 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3278 3279 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3280 for (int i = 0; i < a.length; i += SPECIES.length()) { 3281 IntVector av = IntVector.fromArray(SPECIES, a, i); 3282 av.lanewise(VectorOperators.NEG, vmask).intoArray(r, i); 3283 } 3284 } 3285 3286 assertArraysEquals(a, r, mask, IntMaxVectorTests::NEG); 3287 } 3288 3289 static int ABS(int a) { 3290 return (int)(Math.abs((int)a)); 3330 int[] a = fa.apply(SPECIES.length()); 3331 int[] r = fr.apply(SPECIES.length()); 3332 boolean[] mask = fm.apply(SPECIES.length()); 3333 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3334 3335 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3336 for (int i = 0; i < a.length; i += SPECIES.length()) { 3337 IntVector av = IntVector.fromArray(SPECIES, a, i); 3338 av.lanewise(VectorOperators.ABS, vmask).intoArray(r, i); 3339 } 3340 } 3341 3342 assertArraysEquals(a, r, mask, IntMaxVectorTests::ABS); 3343 } 3344 3345 3346 static int NOT(int a) { 3347 return (int)(~((int)a)); 3348 } 3349 3350 3351 3352 @Test(dataProvider = "intUnaryOpProvider") 3353 static void NOTIntMaxVectorTests(IntFunction<int[]> fa) { 3354 int[] a = fa.apply(SPECIES.length()); 3355 int[] r = fr.apply(SPECIES.length()); 3356 3357 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3358 for (int i = 0; i < a.length; i += SPECIES.length()) { 3359 IntVector av = IntVector.fromArray(SPECIES, a, i); 3360 av.lanewise(VectorOperators.NOT).intoArray(r, i); 3361 } 3362 } 3363 3364 assertArraysEquals(a, r, IntMaxVectorTests::NOT); 3365 } 3366 3367 3368 3369 @Test(dataProvider = "intUnaryOpMaskProvider") 3370 static void NOTMaskedIntMaxVectorTests(IntFunction<int[]> fa, 3371 IntFunction<boolean[]> fm) { 3372 int[] a = fa.apply(SPECIES.length()); 3373 int[] r = fr.apply(SPECIES.length()); 3374 boolean[] mask = fm.apply(SPECIES.length()); 3375 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3376 3377 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3378 for (int i = 0; i < a.length; i += SPECIES.length()) { 3379 IntVector av = IntVector.fromArray(SPECIES, a, i); 3380 av.lanewise(VectorOperators.NOT, vmask).intoArray(r, i); 3381 } 3382 } 3383 3384 assertArraysEquals(a, r, mask, IntMaxVectorTests::NOT); | 229 230 interface FBinMaskOp { 231 int apply(int a, int b, boolean m); 232 233 static FBinMaskOp lift(FBinOp f) { 234 return (a, b, m) -> m ? f.apply(a, b) : a; 235 } 236 } 237 238 static void assertArraysEquals(int[] a, int[] b, int[] r, FBinOp f) { 239 int i = 0; 240 try { 241 for (; i < a.length; i++) { 242 Assert.assertEquals(r[i], f.apply(a[i], b[i])); 243 } 244 } catch (AssertionError e) { 245 Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); 246 } 247 } 248 249 static void assertBroadcastArraysEquals(int[] a, int[] b, int[] r, FBinOp f) { 250 int i = 0; 251 try { 252 for (; i < a.length; i++) { 253 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()])); 254 } 255 } catch (AssertionError e) { 256 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()]), "(" + a[i] + ", " + b[(i / SPECIES.length()) * SPECIES.length()] + ") at index #" + i); 257 } 258 } 259 260 static void assertArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinOp f) { 261 assertArraysEquals(a, b, r, mask, FBinMaskOp.lift(f)); 262 } 263 264 static void assertArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinMaskOp f) { 265 int i = 0; 266 try { 267 for (; i < a.length; i++) { 268 Assert.assertEquals(r[i], f.apply(a[i], b[i], mask[i % SPECIES.length()])); 269 } 270 } catch (AssertionError err) { 271 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()]); 272 } 273 } 274 275 static void assertBroadcastArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinOp f) { 276 assertBroadcastArraysEquals(a, b, r, mask, FBinMaskOp.lift(f)); 277 } 278 279 static void assertBroadcastArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinMaskOp f) { 280 int i = 0; 281 try { 282 for (; i < a.length; i++) { 283 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], mask[i % SPECIES.length()])); 284 } 285 } catch (AssertionError err) { 286 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " + mask[i % SPECIES.length()]); 287 } 288 } 289 290 static void assertShiftArraysEquals(int[] a, int[] b, int[] r, FBinOp f) { 291 int i = 0; 292 int j = 0; 293 try { 294 for (; j < a.length; j += SPECIES.length()) { 295 for (i = 0; i < SPECIES.length(); i++) { 296 Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j])); 297 } 298 } 299 } catch (AssertionError e) { 300 Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j]), "at index #" + i + ", " + j); 301 } 302 } 303 304 static void assertShiftArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinOp f) { 305 assertShiftArraysEquals(a, b, r, mask, FBinMaskOp.lift(f)); 306 } 307 308 static void assertShiftArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinMaskOp f) { 309 int i = 0; 1388 static int OR(int a, int b) { 1389 return (int)(a | b); 1390 } 1391 1392 @Test(dataProvider = "intBinaryOpProvider") 1393 static void ORIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { 1394 int[] a = fa.apply(SPECIES.length()); 1395 int[] b = fb.apply(SPECIES.length()); 1396 int[] r = fr.apply(SPECIES.length()); 1397 1398 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1399 for (int i = 0; i < a.length; i += SPECIES.length()) { 1400 IntVector av = IntVector.fromArray(SPECIES, a, i); 1401 IntVector bv = IntVector.fromArray(SPECIES, b, i); 1402 av.lanewise(VectorOperators.OR, bv).intoArray(r, i); 1403 } 1404 } 1405 1406 assertArraysEquals(a, b, r, IntMaxVectorTests::OR); 1407 } 1408 static int or(int a, int b) { 1409 return (int)(a | b); 1410 } 1411 1412 @Test(dataProvider = "intBinaryOpProvider") 1413 static void orIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { 1414 int[] a = fa.apply(SPECIES.length()); 1415 int[] b = fb.apply(SPECIES.length()); 1416 int[] r = fr.apply(SPECIES.length()); 1417 1418 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1419 for (int i = 0; i < a.length; i += SPECIES.length()) { 1420 IntVector av = IntVector.fromArray(SPECIES, a, i); 1421 IntVector bv = IntVector.fromArray(SPECIES, b, i); 1422 av.or(bv).intoArray(r, i); 1423 } 1424 } 1425 1426 assertArraysEquals(a, b, r, IntMaxVectorTests::or); 1427 } 1428 1429 1430 1431 @Test(dataProvider = "intBinaryOpMaskProvider") 1432 static void ORIntMaxVectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb, 1433 IntFunction<boolean[]> fm) { 1434 int[] a = fa.apply(SPECIES.length()); 1435 int[] b = fb.apply(SPECIES.length()); 1436 int[] r = fr.apply(SPECIES.length()); 1437 boolean[] mask = fm.apply(SPECIES.length()); 1438 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1439 1440 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1441 for (int i = 0; i < a.length; i += SPECIES.length()) { 1442 IntVector av = IntVector.fromArray(SPECIES, a, i); 1443 IntVector bv = IntVector.fromArray(SPECIES, b, i); 1444 av.lanewise(VectorOperators.OR, bv, vmask).intoArray(r, i); 1445 } 1446 } 1447 1476 static void XORIntMaxVectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb, 1477 IntFunction<boolean[]> fm) { 1478 int[] a = fa.apply(SPECIES.length()); 1479 int[] b = fb.apply(SPECIES.length()); 1480 int[] r = fr.apply(SPECIES.length()); 1481 boolean[] mask = fm.apply(SPECIES.length()); 1482 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1483 1484 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1485 for (int i = 0; i < a.length; i += SPECIES.length()) { 1486 IntVector av = IntVector.fromArray(SPECIES, a, i); 1487 IntVector bv = IntVector.fromArray(SPECIES, b, i); 1488 av.lanewise(VectorOperators.XOR, bv, vmask).intoArray(r, i); 1489 } 1490 } 1491 1492 assertArraysEquals(a, b, r, mask, IntMaxVectorTests::XOR); 1493 } 1494 1495 1496 @Test(dataProvider = "intBinaryOpProvider") 1497 static void addIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { 1498 int[] a = fa.apply(SPECIES.length()); 1499 int[] b = fb.apply(SPECIES.length()); 1500 int[] r = fr.apply(SPECIES.length()); 1501 1502 for (int i = 0; i < a.length; i += SPECIES.length()) { 1503 IntVector av = IntVector.fromArray(SPECIES, a, i); 1504 av.add(b[i]).intoArray(r, i); 1505 } 1506 1507 assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::add); 1508 } 1509 1510 @Test(dataProvider = "intBinaryOpMaskProvider") 1511 static void addIntMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, 1512 IntFunction<boolean[]> fm) { 1513 int[] a = fa.apply(SPECIES.length()); 1514 int[] b = fb.apply(SPECIES.length()); 1515 int[] r = fr.apply(SPECIES.length()); 1516 boolean[] mask = fm.apply(SPECIES.length()); 1517 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1518 1519 for (int i = 0; i < a.length; i += SPECIES.length()) { 1520 IntVector av = IntVector.fromArray(SPECIES, a, i); 1521 av.add(b[i], vmask).intoArray(r, i); 1522 } 1523 1524 assertBroadcastArraysEquals(a, b, r, mask, IntMaxVectorTests::add); 1525 } 1526 1527 @Test(dataProvider = "intBinaryOpProvider") 1528 static void subIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { 1529 int[] a = fa.apply(SPECIES.length()); 1530 int[] b = fb.apply(SPECIES.length()); 1531 int[] r = fr.apply(SPECIES.length()); 1532 1533 for (int i = 0; i < a.length; i += SPECIES.length()) { 1534 IntVector av = IntVector.fromArray(SPECIES, a, i); 1535 av.sub(b[i]).intoArray(r, i); 1536 } 1537 1538 assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::sub); 1539 } 1540 1541 @Test(dataProvider = "intBinaryOpMaskProvider") 1542 static void subIntMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, 1543 IntFunction<boolean[]> fm) { 1544 int[] a = fa.apply(SPECIES.length()); 1545 int[] b = fb.apply(SPECIES.length()); 1546 int[] r = fr.apply(SPECIES.length()); 1547 boolean[] mask = fm.apply(SPECIES.length()); 1548 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1549 1550 for (int i = 0; i < a.length; i += SPECIES.length()) { 1551 IntVector av = IntVector.fromArray(SPECIES, a, i); 1552 av.sub(b[i], vmask).intoArray(r, i); 1553 } 1554 1555 assertBroadcastArraysEquals(a, b, r, mask, IntMaxVectorTests::sub); 1556 } 1557 1558 @Test(dataProvider = "intBinaryOpProvider") 1559 static void mulIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { 1560 int[] a = fa.apply(SPECIES.length()); 1561 int[] b = fb.apply(SPECIES.length()); 1562 int[] r = fr.apply(SPECIES.length()); 1563 1564 for (int i = 0; i < a.length; i += SPECIES.length()) { 1565 IntVector av = IntVector.fromArray(SPECIES, a, i); 1566 av.mul(b[i]).intoArray(r, i); 1567 } 1568 1569 assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::mul); 1570 } 1571 1572 @Test(dataProvider = "intBinaryOpMaskProvider") 1573 static void mulIntMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, 1574 IntFunction<boolean[]> fm) { 1575 int[] a = fa.apply(SPECIES.length()); 1576 int[] b = fb.apply(SPECIES.length()); 1577 int[] r = fr.apply(SPECIES.length()); 1578 boolean[] mask = fm.apply(SPECIES.length()); 1579 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1580 1581 for (int i = 0; i < a.length; i += SPECIES.length()) { 1582 IntVector av = IntVector.fromArray(SPECIES, a, i); 1583 av.mul(b[i], vmask).intoArray(r, i); 1584 } 1585 1586 assertBroadcastArraysEquals(a, b, r, mask, IntMaxVectorTests::mul); 1587 } 1588 1589 1590 1591 1592 @Test(dataProvider = "intBinaryOpProvider") 1593 static void divIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { 1594 int[] a = fa.apply(SPECIES.length()); 1595 int[] b = fb.apply(SPECIES.length()); 1596 int[] r = fr.apply(SPECIES.length()); 1597 1598 replaceZero(b, (int) 1); 1599 1600 for (int i = 0; i < a.length; i += SPECIES.length()) { 1601 IntVector av = IntVector.fromArray(SPECIES, a, i); 1602 av.div(b[i]).intoArray(r, i); 1603 } 1604 1605 assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::div); 1606 } 1607 1608 1609 1610 @Test(dataProvider = "intBinaryOpMaskProvider") 1611 static void divIntMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, 1612 IntFunction<boolean[]> fm) { 1613 int[] a = fa.apply(SPECIES.length()); 1614 int[] b = fb.apply(SPECIES.length()); 1615 int[] r = fr.apply(SPECIES.length()); 1616 boolean[] mask = fm.apply(SPECIES.length()); 1617 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1618 1619 replaceZero(b, (int) 1); 1620 1621 for (int i = 0; i < a.length; i += SPECIES.length()) { 1622 IntVector av = IntVector.fromArray(SPECIES, a, i); 1623 av.div(b[i], vmask).intoArray(r, i); 1624 } 1625 1626 assertBroadcastArraysEquals(a, b, r, mask, IntMaxVectorTests::div); 1627 } 1628 1629 1630 1631 @Test(dataProvider = "intBinaryOpProvider") 1632 static void ORIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { 1633 int[] a = fa.apply(SPECIES.length()); 1634 int[] b = fb.apply(SPECIES.length()); 1635 int[] r = fr.apply(SPECIES.length()); 1636 1637 for (int i = 0; i < a.length; i += SPECIES.length()) { 1638 IntVector av = IntVector.fromArray(SPECIES, a, i); 1639 av.lanewise(VectorOperators.OR, b[i]).intoArray(r, i); 1640 } 1641 1642 assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::OR); 1643 } 1644 1645 @Test(dataProvider = "intBinaryOpProvider") 1646 static void orIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { 1647 int[] a = fa.apply(SPECIES.length()); 1648 int[] b = fb.apply(SPECIES.length()); 1649 int[] r = fr.apply(SPECIES.length()); 1650 1651 for (int i = 0; i < a.length; i += SPECIES.length()) { 1652 IntVector av = IntVector.fromArray(SPECIES, a, i); 1653 av.or(b[i]).intoArray(r, i); 1654 } 1655 1656 assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::or); 1657 } 1658 1659 1660 1661 @Test(dataProvider = "intBinaryOpMaskProvider") 1662 static void ORIntMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb, 1663 IntFunction<boolean[]> fm) { 1664 int[] a = fa.apply(SPECIES.length()); 1665 int[] b = fb.apply(SPECIES.length()); 1666 int[] r = fr.apply(SPECIES.length()); 1667 boolean[] mask = fm.apply(SPECIES.length()); 1668 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1669 1670 for (int i = 0; i < a.length; i += SPECIES.length()) { 1671 IntVector av = IntVector.fromArray(SPECIES, a, i); 1672 av.lanewise(VectorOperators.OR, b[i], vmask).intoArray(r, i); 1673 } 1674 1675 assertBroadcastArraysEquals(a, b, r, mask, IntMaxVectorTests::OR); 1676 } 1677 1678 1679 static int LSHL(int a, int b) { 1680 return (int)((a << b)); 1681 } 1682 1683 @Test(dataProvider = "intBinaryOpProvider") 1684 static void LSHLIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { 1685 int[] a = fa.apply(SPECIES.length()); 1686 int[] b = fb.apply(SPECIES.length()); 1687 int[] r = fr.apply(SPECIES.length()); 1688 1689 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1690 for (int i = 0; i < a.length; i += SPECIES.length()) { 1691 IntVector av = IntVector.fromArray(SPECIES, a, i); 1692 IntVector bv = IntVector.fromArray(SPECIES, b, i); 1693 av.lanewise(VectorOperators.LSHL, bv).intoArray(r, i); 1694 } 1695 } 1696 1697 assertArraysEquals(a, b, r, IntMaxVectorTests::LSHL); 1698 } 2021 return (int)(Math.max(a, b)); 2022 } 2023 2024 @Test(dataProvider = "intBinaryOpProvider") 2025 static void maxIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) { 2026 int[] a = fa.apply(SPECIES.length()); 2027 int[] b = fb.apply(SPECIES.length()); 2028 int[] r = fr.apply(SPECIES.length()); 2029 2030 for (int ic = 0; ic < INVOC_COUNT; ic++) { 2031 for (int i = 0; i < a.length; i += SPECIES.length()) { 2032 IntVector av = IntVector.fromArray(SPECIES, a, i); 2033 IntVector bv = IntVector.fromArray(SPECIES, b, i); 2034 av.max(bv).intoArray(r, i); 2035 } 2036 } 2037 2038 assertArraysEquals(a, b, r, IntMaxVectorTests::max); 2039 } 2040 2041 @Test(dataProvider = "intBinaryOpProvider") 2042 static void MINIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { 2043 int[] a = fa.apply(SPECIES.length()); 2044 int[] b = fb.apply(SPECIES.length()); 2045 int[] r = fr.apply(SPECIES.length()); 2046 2047 for (int i = 0; i < a.length; i += SPECIES.length()) { 2048 IntVector av = IntVector.fromArray(SPECIES, a, i); 2049 av.lanewise(VectorOperators.MIN, b[i]).intoArray(r, i); 2050 } 2051 2052 assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::MIN); 2053 } 2054 2055 @Test(dataProvider = "intBinaryOpProvider") 2056 static void minIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { 2057 int[] a = fa.apply(SPECIES.length()); 2058 int[] b = fb.apply(SPECIES.length()); 2059 int[] r = fr.apply(SPECIES.length()); 2060 2061 for (int i = 0; i < a.length; i += SPECIES.length()) { 2062 IntVector av = IntVector.fromArray(SPECIES, a, i); 2063 av.min(b[i]).intoArray(r, i); 2064 } 2065 2066 assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::min); 2067 } 2068 2069 @Test(dataProvider = "intBinaryOpProvider") 2070 static void MAXIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { 2071 int[] a = fa.apply(SPECIES.length()); 2072 int[] b = fb.apply(SPECIES.length()); 2073 int[] r = fr.apply(SPECIES.length()); 2074 2075 for (int i = 0; i < a.length; i += SPECIES.length()) { 2076 IntVector av = IntVector.fromArray(SPECIES, a, i); 2077 av.lanewise(VectorOperators.MAX, b[i]).intoArray(r, i); 2078 } 2079 2080 assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::MAX); 2081 } 2082 2083 @Test(dataProvider = "intBinaryOpProvider") 2084 static void maxIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) { 2085 int[] a = fa.apply(SPECIES.length()); 2086 int[] b = fb.apply(SPECIES.length()); 2087 int[] r = fr.apply(SPECIES.length()); 2088 2089 for (int i = 0; i < a.length; i += SPECIES.length()) { 2090 IntVector av = IntVector.fromArray(SPECIES, a, i); 2091 av.max(b[i]).intoArray(r, i); 2092 } 2093 2094 assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::max); 2095 } 2096 2097 static int AND(int[] a, int idx) { 2098 int res = -1; 2099 for (int i = idx; i < (idx + SPECIES.length()); i++) { 2100 res &= a[i]; 2101 } 2102 2103 return res; 2104 } 2105 2106 static int AND(int[] a) { 2107 int res = -1; 2108 for (int i = 0; i < a.length; i += SPECIES.length()) { 2109 int tmp = -1; 2110 for (int j = 0; j < SPECIES.length(); j++) { 2111 tmp &= a[i + j]; 2112 } 2113 res &= tmp; 2114 } 2115 2116 return res; 3521 boolean[] mask = fm.apply(SPECIES.length()); 3522 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3523 3524 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3525 for (int i = 0; i < a.length; i += SPECIES.length()) { 3526 IntVector av = IntVector.fromArray(SPECIES, a, i); 3527 IntVector bv = IntVector.fromArray(SPECIES, b, i); 3528 IntVector cv = IntVector.fromArray(SPECIES, c, i); 3529 av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv, vmask).intoArray(r, i); 3530 } 3531 } 3532 3533 assertArraysEquals(a, b, c, r, mask, IntMaxVectorTests::BITWISE_BLEND); 3534 } 3535 3536 3537 static int NEG(int a) { 3538 return (int)(-((int)a)); 3539 } 3540 3541 static int neg(int a) { 3542 return (int)(-((int)a)); 3543 } 3544 3545 @Test(dataProvider = "intUnaryOpProvider") 3546 static void NEGIntMaxVectorTests(IntFunction<int[]> fa) { 3547 int[] a = fa.apply(SPECIES.length()); 3548 int[] r = fr.apply(SPECIES.length()); 3549 3550 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3551 for (int i = 0; i < a.length; i += SPECIES.length()) { 3552 IntVector av = IntVector.fromArray(SPECIES, a, i); 3553 av.lanewise(VectorOperators.NEG).intoArray(r, i); 3554 } 3555 } 3556 3557 assertArraysEquals(a, r, IntMaxVectorTests::NEG); 3558 } 3559 3560 @Test(dataProvider = "intUnaryOpProvider") 3561 static void negIntMaxVectorTests(IntFunction<int[]> fa) { 3562 int[] a = fa.apply(SPECIES.length()); 3563 int[] r = fr.apply(SPECIES.length()); 3564 3565 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3566 for (int i = 0; i < a.length; i += SPECIES.length()) { 3567 IntVector av = IntVector.fromArray(SPECIES, a, i); 3568 av.neg().intoArray(r, i); 3569 } 3570 } 3571 3572 assertArraysEquals(a, r, IntMaxVectorTests::neg); 3573 } 3574 3575 @Test(dataProvider = "intUnaryOpMaskProvider") 3576 static void NEGMaskedIntMaxVectorTests(IntFunction<int[]> fa, 3577 IntFunction<boolean[]> fm) { 3578 int[] a = fa.apply(SPECIES.length()); 3579 int[] r = fr.apply(SPECIES.length()); 3580 boolean[] mask = fm.apply(SPECIES.length()); 3581 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3582 3583 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3584 for (int i = 0; i < a.length; i += SPECIES.length()) { 3585 IntVector av = IntVector.fromArray(SPECIES, a, i); 3586 av.lanewise(VectorOperators.NEG, vmask).intoArray(r, i); 3587 } 3588 } 3589 3590 assertArraysEquals(a, r, mask, IntMaxVectorTests::NEG); 3591 } 3592 3593 static int ABS(int a) { 3594 return (int)(Math.abs((int)a)); 3634 int[] a = fa.apply(SPECIES.length()); 3635 int[] r = fr.apply(SPECIES.length()); 3636 boolean[] mask = fm.apply(SPECIES.length()); 3637 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3638 3639 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3640 for (int i = 0; i < a.length; i += SPECIES.length()) { 3641 IntVector av = IntVector.fromArray(SPECIES, a, i); 3642 av.lanewise(VectorOperators.ABS, vmask).intoArray(r, i); 3643 } 3644 } 3645 3646 assertArraysEquals(a, r, mask, IntMaxVectorTests::ABS); 3647 } 3648 3649 3650 static int NOT(int a) { 3651 return (int)(~((int)a)); 3652 } 3653 3654 static int not(int a) { 3655 return (int)(~((int)a)); 3656 } 3657 3658 3659 3660 @Test(dataProvider = "intUnaryOpProvider") 3661 static void NOTIntMaxVectorTests(IntFunction<int[]> fa) { 3662 int[] a = fa.apply(SPECIES.length()); 3663 int[] r = fr.apply(SPECIES.length()); 3664 3665 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3666 for (int i = 0; i < a.length; i += SPECIES.length()) { 3667 IntVector av = IntVector.fromArray(SPECIES, a, i); 3668 av.lanewise(VectorOperators.NOT).intoArray(r, i); 3669 } 3670 } 3671 3672 assertArraysEquals(a, r, IntMaxVectorTests::NOT); 3673 } 3674 3675 @Test(dataProvider = "intUnaryOpProvider") 3676 static void notIntMaxVectorTests(IntFunction<int[]> fa) { 3677 int[] a = fa.apply(SPECIES.length()); 3678 int[] r = fr.apply(SPECIES.length()); 3679 3680 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3681 for (int i = 0; i < a.length; i += SPECIES.length()) { 3682 IntVector av = IntVector.fromArray(SPECIES, a, i); 3683 av.not().intoArray(r, i); 3684 } 3685 } 3686 3687 assertArraysEquals(a, r, IntMaxVectorTests::not); 3688 } 3689 3690 3691 3692 @Test(dataProvider = "intUnaryOpMaskProvider") 3693 static void NOTMaskedIntMaxVectorTests(IntFunction<int[]> fa, 3694 IntFunction<boolean[]> fm) { 3695 int[] a = fa.apply(SPECIES.length()); 3696 int[] r = fr.apply(SPECIES.length()); 3697 boolean[] mask = fm.apply(SPECIES.length()); 3698 VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0); 3699 3700 for (int ic = 0; ic < INVOC_COUNT; ic++) { 3701 for (int i = 0; i < a.length; i += SPECIES.length()) { 3702 IntVector av = IntVector.fromArray(SPECIES, a, i); 3703 av.lanewise(VectorOperators.NOT, vmask).intoArray(r, i); 3704 } 3705 } 3706 3707 assertArraysEquals(a, r, mask, IntMaxVectorTests::NOT); |