< prev index next >
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/LongMaxVector.java
Print this page
rev 55589 : 8221817: [vector] No suitable species for indexMap of Gather/Scatter VectorAPI
Reviewed-by: duke
*** 44,57 ****
static final int LENGTH = SPECIES.length();
// Index vector species
private static final IntVector.IntSpecies INDEX_SPEC;
static {
! int bitSize = Vector.bitSizeForVectorLength(int.class, LENGTH);
Vector.Shape shape = Shape.forBitSize(bitSize);
INDEX_SPEC = (IntVector.IntSpecies) Species.of(int.class, shape);
}
private final long[] vec; // Don't access directly, use getElements() instead.
private long[] getElements() {
return VectorIntrinsics.maybeRebox(this).vec;
--- 44,61 ----
static final int LENGTH = SPECIES.length();
// Index vector species
private static final IntVector.IntSpecies INDEX_SPEC;
+ private static final Mask<Integer> INDEX_MASK;
static {
! int bitSize = Vector.bitSizeForVectorLength(long.class, LENGTH);
Vector.Shape shape = Shape.forBitSize(bitSize);
INDEX_SPEC = (IntVector.IntSpecies) Species.of(int.class, shape);
+ boolean[] mask = new boolean[INDEX_SPEC.length()];
+ Arrays.fill(mask, 0, LENGTH, true);
+ INDEX_MASK = IntVector.maskFromArray(INDEX_SPEC, mask, 0);
}
private final long[] vec; // Don't access directly, use getElements() instead.
private long[] getElements() {
return VectorIntrinsics.maybeRebox(this).vec;
*** 899,909 ****
public void intoArray(long[] a, int ix, int[] b, int iy) {
Objects.requireNonNull(a);
Objects.requireNonNull(b);
// Index vector: vix[0:n] = i -> ix + indexMap[iy + i]
! IntVector vix = IntVector.fromArray(INDEX_SPEC, b, iy).add(ix);
vix = VectorIntrinsics.checkIndex(vix, a.length);
VectorIntrinsics.storeWithMap(LongMaxVector.class, long.class, LENGTH, vix.getClass(),
a, Unsafe.ARRAY_LONG_BASE_OFFSET, vix,
--- 903,913 ----
public void intoArray(long[] a, int ix, int[] b, int iy) {
Objects.requireNonNull(a);
Objects.requireNonNull(b);
// Index vector: vix[0:n] = i -> ix + indexMap[iy + i]
! IntVector vix = IntVector.fromArray(INDEX_SPEC, b, iy, INDEX_MASK).add(ix);
vix = VectorIntrinsics.checkIndex(vix, a.length);
VectorIntrinsics.storeWithMap(LongMaxVector.class, long.class, LENGTH, vix.getClass(),
a, Unsafe.ARRAY_LONG_BASE_OFFSET, vix,
*** 1461,1470 ****
--- 1465,1479 ----
IntVector.IntSpecies indexSpecies() {
return INDEX_SPEC;
}
@Override
+ Mask<Integer> indexMask() {
+ return INDEX_MASK;
+ }
+
+ @Override
LongMaxVector op(FOp f) {
long[] res = new long[length()];
for (int i = 0; i < length(); i++) {
res[i] = f.apply(i);
}
< prev index next >