906 @Override
907 @ForceInline
908 public double minAll(Mask<Double> m) {
909 return blend((Double512Vector)DoubleVector.broadcast(SPECIES, Double.MAX_VALUE), m).minAll();
910 }
911
912 @Override
913 @ForceInline
914 public double maxAll(Mask<Double> m) {
915 return blend((Double512Vector)DoubleVector.broadcast(SPECIES, Double.MIN_VALUE), m).maxAll();
916 }
917
918 @Override
919 @ForceInline
920 public Shuffle<Double> toShuffle() {
921 double[] a = toArray();
922 int[] sa = new int[a.length];
923 for (int i = 0; i < a.length; i++) {
924 sa[i] = (int) a[i];
925 }
926 return DoubleVector.shuffleFromArray(SPECIES, sa, 0);
927 }
928
929 // Memory operations
930
931 private static final int ARRAY_SHIFT = 31 - Integer.numberOfLeadingZeros(Unsafe.ARRAY_DOUBLE_INDEX_SCALE);
932 private static final int BOOLEAN_ARRAY_SHIFT = 31 - Integer.numberOfLeadingZeros(Unsafe.ARRAY_BOOLEAN_INDEX_SCALE);
933
934 @Override
935 @ForceInline
936 public void intoArray(double[] a, int ix) {
937 Objects.requireNonNull(a);
938 ix = VectorIntrinsics.checkIndex(ix, a.length, LENGTH);
939 VectorIntrinsics.store(Double512Vector.class, double.class, LENGTH,
940 a, (((long) ix) << ARRAY_SHIFT) + Unsafe.ARRAY_DOUBLE_BASE_OFFSET,
941 this,
942 a, ix,
943 (arr, idx, v) -> v.forEach((i, e) -> arr[idx + i] = e));
944 }
945
946 @Override
1402 Double512Mask m = (Double512Mask)o;
1403 return VectorIntrinsics.binaryOp(VECTOR_OP_OR, Double512Mask.class, long.class, LENGTH,
1404 this, m,
1405 (m1, m2) -> m1.bOp(m2, (i, a, b) -> a | b));
1406 }
1407
1408 // Reductions
1409
1410 @Override
1411 @ForceInline
1412 public boolean anyTrue() {
1413 return VectorIntrinsics.test(BT_ne, Double512Mask.class, long.class, LENGTH,
1414 this, this,
1415 (m, __) -> anyTrueHelper(((Double512Mask)m).getBits()));
1416 }
1417
1418 @Override
1419 @ForceInline
1420 public boolean allTrue() {
1421 return VectorIntrinsics.test(BT_overflow, Double512Mask.class, long.class, LENGTH,
1422 this, DoubleVector.maskAllTrue(species()),
1423 (m, __) -> allTrueHelper(((Double512Mask)m).getBits()));
1424 }
1425 }
1426
1427 // Shuffle
1428
1429 static final class Double512Shuffle extends AbstractShuffle<Double> {
1430 Double512Shuffle(byte[] reorder) {
1431 super(reorder);
1432 }
1433
1434 public Double512Shuffle(int[] reorder) {
1435 super(reorder);
1436 }
1437
1438 public Double512Shuffle(int[] reorder, int i) {
1439 super(reorder, i);
1440 }
1441
1442 public Double512Shuffle(IntUnaryOperator f) {
1466 Class<?> stype = species.elementType();
1467 int [] shuffleArray = toArray();
1468 if (stype == byte.class) {
1469 return (Shuffle<F>) new Byte512Vector.Byte512Shuffle(shuffleArray);
1470 } else if (stype == short.class) {
1471 return (Shuffle<F>) new Short512Vector.Short512Shuffle(shuffleArray);
1472 } else if (stype == int.class) {
1473 return (Shuffle<F>) new Int512Vector.Int512Shuffle(shuffleArray);
1474 } else if (stype == long.class) {
1475 return (Shuffle<F>) new Long512Vector.Long512Shuffle(shuffleArray);
1476 } else if (stype == float.class) {
1477 return (Shuffle<F>) new Float512Vector.Float512Shuffle(shuffleArray);
1478 } else if (stype == double.class) {
1479 return (Shuffle<F>) new Double512Vector.Double512Shuffle(shuffleArray);
1480 } else {
1481 throw new UnsupportedOperationException("Bad lane type for casting.");
1482 }
1483 }
1484
1485 @Override
1486 public Double512Shuffle rearrange(Vector.Shuffle<Double> o) {
1487 Double512Shuffle s = (Double512Shuffle) o;
1488 byte[] r = new byte[reorder.length];
1489 for (int i = 0; i < reorder.length; i++) {
1490 r[i] = reorder[s.reorder[i]];
1491 }
1492 return new Double512Shuffle(r);
1493 }
1494 }
1495
1496 // Species
1497
1498 @Override
1499 public Species<Double> species() {
1500 return SPECIES;
1501 }
1502 }
|
906 @Override
907 @ForceInline
908 public double minAll(Mask<Double> m) {
909 return blend((Double512Vector)DoubleVector.broadcast(SPECIES, Double.MAX_VALUE), m).minAll();
910 }
911
912 @Override
913 @ForceInline
914 public double maxAll(Mask<Double> m) {
915 return blend((Double512Vector)DoubleVector.broadcast(SPECIES, Double.MIN_VALUE), m).maxAll();
916 }
917
918 @Override
919 @ForceInline
920 public Shuffle<Double> toShuffle() {
921 double[] a = toArray();
922 int[] sa = new int[a.length];
923 for (int i = 0; i < a.length; i++) {
924 sa[i] = (int) a[i];
925 }
926 return Shuffle.fromArray(SPECIES, sa, 0);
927 }
928
929 // Memory operations
930
931 private static final int ARRAY_SHIFT = 31 - Integer.numberOfLeadingZeros(Unsafe.ARRAY_DOUBLE_INDEX_SCALE);
932 private static final int BOOLEAN_ARRAY_SHIFT = 31 - Integer.numberOfLeadingZeros(Unsafe.ARRAY_BOOLEAN_INDEX_SCALE);
933
934 @Override
935 @ForceInline
936 public void intoArray(double[] a, int ix) {
937 Objects.requireNonNull(a);
938 ix = VectorIntrinsics.checkIndex(ix, a.length, LENGTH);
939 VectorIntrinsics.store(Double512Vector.class, double.class, LENGTH,
940 a, (((long) ix) << ARRAY_SHIFT) + Unsafe.ARRAY_DOUBLE_BASE_OFFSET,
941 this,
942 a, ix,
943 (arr, idx, v) -> v.forEach((i, e) -> arr[idx + i] = e));
944 }
945
946 @Override
1402 Double512Mask m = (Double512Mask)o;
1403 return VectorIntrinsics.binaryOp(VECTOR_OP_OR, Double512Mask.class, long.class, LENGTH,
1404 this, m,
1405 (m1, m2) -> m1.bOp(m2, (i, a, b) -> a | b));
1406 }
1407
1408 // Reductions
1409
1410 @Override
1411 @ForceInline
1412 public boolean anyTrue() {
1413 return VectorIntrinsics.test(BT_ne, Double512Mask.class, long.class, LENGTH,
1414 this, this,
1415 (m, __) -> anyTrueHelper(((Double512Mask)m).getBits()));
1416 }
1417
1418 @Override
1419 @ForceInline
1420 public boolean allTrue() {
1421 return VectorIntrinsics.test(BT_overflow, Double512Mask.class, long.class, LENGTH,
1422 this, Mask.maskAllTrue(species()),
1423 (m, __) -> allTrueHelper(((Double512Mask)m).getBits()));
1424 }
1425 }
1426
1427 // Shuffle
1428
1429 static final class Double512Shuffle extends AbstractShuffle<Double> {
1430 Double512Shuffle(byte[] reorder) {
1431 super(reorder);
1432 }
1433
1434 public Double512Shuffle(int[] reorder) {
1435 super(reorder);
1436 }
1437
1438 public Double512Shuffle(int[] reorder, int i) {
1439 super(reorder, i);
1440 }
1441
1442 public Double512Shuffle(IntUnaryOperator f) {
1466 Class<?> stype = species.elementType();
1467 int [] shuffleArray = toArray();
1468 if (stype == byte.class) {
1469 return (Shuffle<F>) new Byte512Vector.Byte512Shuffle(shuffleArray);
1470 } else if (stype == short.class) {
1471 return (Shuffle<F>) new Short512Vector.Short512Shuffle(shuffleArray);
1472 } else if (stype == int.class) {
1473 return (Shuffle<F>) new Int512Vector.Int512Shuffle(shuffleArray);
1474 } else if (stype == long.class) {
1475 return (Shuffle<F>) new Long512Vector.Long512Shuffle(shuffleArray);
1476 } else if (stype == float.class) {
1477 return (Shuffle<F>) new Float512Vector.Float512Shuffle(shuffleArray);
1478 } else if (stype == double.class) {
1479 return (Shuffle<F>) new Double512Vector.Double512Shuffle(shuffleArray);
1480 } else {
1481 throw new UnsupportedOperationException("Bad lane type for casting.");
1482 }
1483 }
1484
1485 @Override
1486 public Double512Shuffle rearrange(Shuffle<Double> o) {
1487 Double512Shuffle s = (Double512Shuffle) o;
1488 byte[] r = new byte[reorder.length];
1489 for (int i = 0; i < reorder.length; i++) {
1490 r[i] = reorder[s.reorder[i]];
1491 }
1492 return new Double512Shuffle(r);
1493 }
1494 }
1495
1496 // Species
1497
1498 @Override
1499 public Species<Double> species() {
1500 return SPECIES;
1501 }
1502 }
|