< prev index next >

src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Double512Vector.java

Print this page




 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 }
< prev index next >