< prev index next >
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short256Vector.java
Print this page
rev 55589 : 8221816: [vector] IndexOutOfBoundsException for fromArray/intoArray with unset mask lanes
Reviewed-by: duke
@@ -835,23 +835,33 @@
@Override
@ForceInline
public void intoArray(short[] a, int ix) {
Objects.requireNonNull(a);
ix = VectorIntrinsics.checkIndex(ix, a.length, LENGTH);
+ intoArrayWithoutCheck(a, ix);
+ }
+
+ @ForceInline
+ private void intoArrayWithoutCheck(short[] a, int ix) {
VectorIntrinsics.store(Short256Vector.class, short.class, LENGTH,
a, (((long) ix) << ARRAY_SHIFT) + Unsafe.ARRAY_SHORT_BASE_OFFSET,
this,
a, ix,
(arr, idx, v) -> v.forEach((i, e) -> arr[idx + i] = e));
}
@Override
@ForceInline
public final void intoArray(short[] a, int ax, Mask<Short> m) {
- ShortVector oldVal = ShortVector.fromArray(SPECIES, a, ax);
+ Objects.requireNonNull(a);
+ if (ax + LENGTH <= a.length) {
+ ShortVector oldVal = ShortVector.fromArrayWithoutCheck(SPECIES, a, ax);
ShortVector newVal = oldVal.blend(this, m);
- newVal.intoArray(a, ax);
+ ((Short256Vector)newVal).intoArrayWithoutCheck(a, ax);
+ } else {
+ forEach(m, (i, e) -> a[ax + i] = e);
+ }
}
@Override
@ForceInline
public void intoByteArray(byte[] a, int ix) {
< prev index next >