< prev index next >
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Double64Vector.java
Print this page
rev 55589 : 8221816: [vector] IndexOutOfBoundsException for fromArray/intoArray with unset mask lanes
Reviewed-by: duke
@@ -935,38 +935,32 @@
@Override
@ForceInline
public void intoArray(double[] a, int ix) {
Objects.requireNonNull(a);
- ix = VectorIntrinsics.checkIndex(ix, a.length, LENGTH);
- VectorIntrinsics.store(Double64Vector.class, double.class, LENGTH,
- a, (((long) ix) << ARRAY_SHIFT) + Unsafe.ARRAY_DOUBLE_BASE_OFFSET,
- this,
- a, ix,
- (arr, idx, v) -> v.forEach((i, e) -> arr[idx + i] = e));
+ forEach((i, e) -> a[ix + i] = e);
}
@Override
@ForceInline
public final void intoArray(double[] a, int ax, Mask<Double> m) {
- DoubleVector oldVal = DoubleVector.fromArray(SPECIES, a, ax);
- DoubleVector newVal = oldVal.blend(this, m);
- newVal.intoArray(a, ax);
+ Objects.requireNonNull(a);
+ forEach(m, (i, e) -> a[ax + i] = e);
}
+
@Override
@ForceInline
public void intoArray(double[] a, int ix, int[] b, int iy) {
this.intoArray(a, ix + b[iy]);
}
@Override
@ForceInline
public final void intoArray(double[] a, int ax, Mask<Double> m, int[] b, int iy) {
- // @@@ This can result in out of bounds errors for unset mask lanes
- DoubleVector oldVal = DoubleVector.fromArray(SPECIES, a, ax, b, iy);
- DoubleVector newVal = oldVal.blend(this, m);
- newVal.intoArray(a, ax, b, iy);
+ Objects.requireNonNull(a);
+ Objects.requireNonNull(b);
+ forEach(m, (i, e) -> a[ax + b[iy+i]] = e);
}
@Override
@ForceInline
public void intoByteArray(byte[] a, int ix) {
< prev index next >