< prev index next >

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

Print this page




1077 
1078     @Override
1079     void forEach(VectorMask<Long> o, FUnCon f) {
1080         boolean[] mbits = ((Long64Mask)o).getBits();
1081         forEach((i, a) -> {
1082             if (mbits[i]) { f.apply(i, a); }
1083         });
1084     }
1085 
1086 
1087     Double64Vector toFP() {
1088         long[] vec = getElements();
1089         double[] res = new double[this.species().length()];
1090         for(int i = 0; i < this.species().length(); i++){
1091             res[i] = Double.longBitsToDouble(vec[i]);
1092         }
1093         return new Double64Vector(res);
1094     }
1095 
1096     @Override

1097     public Long64Vector rotateLanesLeft(int j) {
1098         long[] vec = getElements();
1099         long[] res = new long[length()];
1100         for (int i = 0; i < length(); i++){
1101             res[(j + i) % length()] = vec[i];



1102         }
1103         return new Long64Vector(res);
1104     }
1105 
1106     @Override

1107     public Long64Vector rotateLanesRight(int j) {
1108         long[] vec = getElements();
1109         long[] res = new long[length()];
1110         for (int i = 0; i < length(); i++){
1111             int z = i - j;
1112             if(j < 0) {
1113                 res[length() + z] = vec[i];
1114             } else {
1115                 res[z] = vec[i];
1116             }

1117         }
1118         return new Long64Vector(res);
1119     }
1120 
1121     @Override


1122     public Long64Vector shiftLanesLeft(int j) {
1123         long[] vec = getElements();
1124         long[] res = new long[length()];
1125         for (int i = 0; i < length() - j; i++) {
1126             res[i] = vec[i + j];






1127         }
1128         return new Long64Vector(res);
1129     }
1130 
1131     @Override


1132     public Long64Vector shiftLanesRight(int j) {
1133         long[] vec = getElements();
1134         long[] res = new long[length()];
1135         for (int i = 0; i < length() - j; i++){
1136             res[i + j] = vec[i];






1137         }
1138         return new Long64Vector(res);
1139     }
1140 
1141     @Override
1142     @ForceInline
1143     public Long64Vector rearrange(Vector<Long> v,
1144                                   VectorShuffle<Long> s, VectorMask<Long> m) {
1145         return this.rearrange(s).blend(v.rearrange(s), m);
1146     }
1147 
1148     @Override
1149     @ForceInline
1150     public Long64Vector rearrange(VectorShuffle<Long> o1) {
1151         Objects.requireNonNull(o1);
1152         Long64Shuffle s =  (Long64Shuffle)o1;
1153 
1154         return VectorIntrinsics.rearrangeOp(
1155             Long64Vector.class, Long64Shuffle.class, long.class, LENGTH,
1156             this, s,
1157             (v1, s_) -> v1.uOp((i, a) -> {
1158                 int ei = s_.lane(i);


1357             super(reorder);
1358         }
1359 
1360         public Long64Shuffle(int[] reorder) {
1361             super(reorder);
1362         }
1363 
1364         public Long64Shuffle(int[] reorder, int i) {
1365             super(reorder, i);
1366         }
1367 
1368         public Long64Shuffle(IntUnaryOperator f) {
1369             super(f);
1370         }
1371 
1372         @Override
1373         public VectorSpecies<Long> species() {
1374             return SPECIES;
1375         }
1376 
1377         @Override
1378         public LongVector toVector() {
1379             long[] va = new long[SPECIES.length()];
1380             for (int i = 0; i < va.length; i++) {
1381               va[i] = (long) lane(i);
1382             }
1383             return LongVector.fromArray(SPECIES, va, 0);
1384         }
1385 
1386         @Override
1387         @ForceInline








1388         @SuppressWarnings("unchecked")
1389         public <F> VectorShuffle<F> cast(VectorSpecies<F> species) {
1390             if (length() != species.length())
1391                 throw new IllegalArgumentException("Shuffle length and species length differ");
1392             Class<?> stype = species.elementType();
1393             int [] shuffleArray = toArray();
1394             if (stype == byte.class) {
1395                 return (VectorShuffle<F>) new Byte64Vector.Byte64Shuffle(shuffleArray);
1396             } else if (stype == short.class) {
1397                 return (VectorShuffle<F>) new Short64Vector.Short64Shuffle(shuffleArray);
1398             } else if (stype == int.class) {
1399                 return (VectorShuffle<F>) new Int64Vector.Int64Shuffle(shuffleArray);
1400             } else if (stype == long.class) {
1401                 return (VectorShuffle<F>) new Long64Vector.Long64Shuffle(shuffleArray);
1402             } else if (stype == float.class) {
1403                 return (VectorShuffle<F>) new Float64Vector.Float64Shuffle(shuffleArray);
1404             } else if (stype == double.class) {
1405                 return (VectorShuffle<F>) new Double64Vector.Double64Shuffle(shuffleArray);
1406             } else {
1407                 throw new UnsupportedOperationException("Bad lane type for casting.");
1408             }
1409         }

1410 
1411         @Override
1412         public Long64Shuffle rearrange(VectorShuffle<Long> o) {
1413             Long64Shuffle s = (Long64Shuffle) o;
1414             byte[] r = new byte[reorder.length];
1415             for (int i = 0; i < reorder.length; i++) {
1416                 r[i] = reorder[s.reorder[i]];
1417             }
1418             return new Long64Shuffle(r);
1419         }
1420     }
1421 
1422     // VectorSpecies
1423 
1424     @Override
1425     public VectorSpecies<Long> species() {
1426         return SPECIES;
1427     }
1428 }


1077 
1078     @Override
1079     void forEach(VectorMask<Long> o, FUnCon f) {
1080         boolean[] mbits = ((Long64Mask)o).getBits();
1081         forEach((i, a) -> {
1082             if (mbits[i]) { f.apply(i, a); }
1083         });
1084     }
1085 
1086 
1087     Double64Vector toFP() {
1088         long[] vec = getElements();
1089         double[] res = new double[this.species().length()];
1090         for(int i = 0; i < this.species().length(); i++){
1091             res[i] = Double.longBitsToDouble(vec[i]);
1092         }
1093         return new Double64Vector(res);
1094     }
1095 
1096     @Override
1097     @ForceInline
1098     public Long64Vector rotateLanesLeft(int j) {
1099       int L = length();
1100       if (j < 0) {
1101          throw new IllegalArgumentException("Index " + j + " must be zero or positive");
1102       } else {
1103         j = j & (L-1);
1104         VectorShuffle<Long> PermMask  = VectorShuffle.shuffleIota(SPECIES, L - j);
1105         return this.rearrange(PermMask);
1106       }

1107     }
1108 
1109     @Override
1110     @ForceInline
1111     public Long64Vector rotateLanesRight(int j) {
1112       int L = length();
1113       if (j < 0) {
1114          throw new IllegalArgumentException("Index " + j + " must be zero or positive");



1115       } else {
1116         j = j & (L-1);
1117         VectorShuffle<Long> PermMask = VectorShuffle.shuffleIota(SPECIES, j);
1118         return this.rearrange(PermMask);
1119       }

1120     }
1121 
1122     @Override
1123     @ForceInline
1124     @SuppressWarnings("unchecked")
1125     public Long64Vector shiftLanesLeft(int j) {
1126        int L = length();
1127        if (j < 0) {
1128          throw new IllegalArgumentException("Index " + j + " must be zero or positive");
1129        } else if ( j >= L ) {
1130          return ZERO;
1131        } else {
1132          Long64Shuffle     Iota    = (Long64Shuffle)(VectorShuffle.shuffleIota(SPECIES, L-j));
1133          VectorMask<Long> BlendMask = Iota.toVector().lessThan(Long64Vector.broadcast(SPECIES, (long)(L-j)));
1134          Iota    = (Long64Shuffle)(VectorShuffle.shuffleIota(SPECIES, L -j));
1135          return ZERO.blend(this.rearrange(Iota),BlendMask);
1136        }

1137     }
1138 
1139     @Override
1140     @ForceInline
1141     @SuppressWarnings("unchecked")
1142     public Long64Vector shiftLanesRight(int j) {
1143        int L = length();
1144        if (j < 0) {
1145          throw new IllegalArgumentException("Index " + j + " must be zero or positive");
1146        } else if ( j >= L ) {
1147          return ZERO;
1148        } else {
1149          Long64Shuffle     Iota    = (Long64Shuffle)(VectorShuffle.shuffleIota(SPECIES, j));
1150          VectorMask<Long> BlendMask = Iota.toVector().greaterThanEq(Long64Vector.broadcast(SPECIES, (long)(j)));
1151          Iota    = (Long64Shuffle)(VectorShuffle.shuffleIota(SPECIES, j));
1152          return ZERO.blend(this.rearrange(Iota),BlendMask);
1153        }

1154     }
1155 
1156     @Override
1157     @ForceInline
1158     public Long64Vector rearrange(Vector<Long> v,
1159                                   VectorShuffle<Long> s, VectorMask<Long> m) {
1160         return this.rearrange(s).blend(v.rearrange(s), m);
1161     }
1162 
1163     @Override
1164     @ForceInline
1165     public Long64Vector rearrange(VectorShuffle<Long> o1) {
1166         Objects.requireNonNull(o1);
1167         Long64Shuffle s =  (Long64Shuffle)o1;
1168 
1169         return VectorIntrinsics.rearrangeOp(
1170             Long64Vector.class, Long64Shuffle.class, long.class, LENGTH,
1171             this, s,
1172             (v1, s_) -> v1.uOp((i, a) -> {
1173                 int ei = s_.lane(i);


1372             super(reorder);
1373         }
1374 
1375         public Long64Shuffle(int[] reorder) {
1376             super(reorder);
1377         }
1378 
1379         public Long64Shuffle(int[] reorder, int i) {
1380             super(reorder, i);
1381         }
1382 
1383         public Long64Shuffle(IntUnaryOperator f) {
1384             super(f);
1385         }
1386 
1387         @Override
1388         public VectorSpecies<Long> species() {
1389             return SPECIES;
1390         }
1391 
1392         private LongVector toVector_helper() {

1393             long[] va = new long[SPECIES.length()];
1394             for (int i = 0; i < va.length; i++) {
1395               va[i] = (long) lane(i);
1396             }
1397             return LongVector.fromArray(SPECIES, va, 0);
1398         }
1399 
1400         @Override
1401         @ForceInline
1402         public LongVector toVector() {
1403             return VectorIntrinsics.shuffleToVector(Long64Vector.class, long.class, Long64Shuffle.class, this,
1404                                                     SPECIES.length(), 
1405                                                     (s) -> (((Long64Shuffle)(s)).toVector_helper()));
1406         }
1407 
1408         @Override
1409         @ForceInline
1410         @SuppressWarnings("unchecked")
1411         public <F> VectorShuffle<F> cast(VectorSpecies<F> species) {
1412             if (length() != species.length())
1413                 throw new IllegalArgumentException("Shuffle length and species length differ");
1414             Class<?> stype = species.elementType();
1415             int [] shuffleArray = toArray();
1416             if (stype == byte.class) {
1417                 return (VectorShuffle<F>) new Byte64Vector.Byte64Shuffle(shuffleArray);
1418             } else if (stype == short.class) {
1419                 return (VectorShuffle<F>) new Short64Vector.Short64Shuffle(shuffleArray);
1420             } else if (stype == int.class) {
1421                 return (VectorShuffle<F>) new Int64Vector.Int64Shuffle(shuffleArray);
1422             } else if (stype == long.class) {
1423                 return (VectorShuffle<F>) new Long64Vector.Long64Shuffle(shuffleArray);
1424             } else if (stype == float.class) {
1425                 return (VectorShuffle<F>) new Float64Vector.Float64Shuffle(shuffleArray);
1426             } else if (stype == double.class) {
1427                 return (VectorShuffle<F>) new Double64Vector.Double64Shuffle(shuffleArray);
1428             } else {
1429                 throw new UnsupportedOperationException("Bad lane type for casting.");
1430             }
1431         }
1432 
1433 
1434         @Override
1435         public Long64Shuffle rearrange(VectorShuffle<Long> o) {
1436             Long64Shuffle s = (Long64Shuffle) o;
1437             byte[] r = new byte[reorder.length];
1438             for (int i = 0; i < reorder.length; i++) {
1439                 r[i] = reorder[s.reorder[i]];
1440             }
1441             return new Long64Shuffle(r);
1442         }
1443     }
1444 
1445     // VectorSpecies
1446 
1447     @Override
1448     public VectorSpecies<Long> species() {
1449         return SPECIES;
1450     }
1451 }
< prev index next >