< 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,972 ****
@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));
}
@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);
}
@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);
}
@Override
@ForceInline
public void intoByteArray(byte[] a, int ix) {
--- 935,966 ----
@Override
@ForceInline
public void intoArray(double[] a, int ix) {
Objects.requireNonNull(a);
! forEach((i, e) -> a[ix + i] = e);
}
@Override
@ForceInline
public final void intoArray(double[] a, int ax, Mask<Double> m) {
! 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) {
! 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 >