< 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 >