< prev index next >
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte64Vector.java
Print this page
rev 55589 : 8221816: [vector] IndexOutOfBoundsException for fromArray/intoArray with unset mask lanes
Reviewed-by: duke
*** 834,856 ****
@Override
@ForceInline
public void intoArray(byte[] a, int ix) {
Objects.requireNonNull(a);
ix = VectorIntrinsics.checkIndex(ix, a.length, LENGTH);
VectorIntrinsics.store(Byte64Vector.class, byte.class, LENGTH,
a, (((long) ix) << ARRAY_SHIFT) + Unsafe.ARRAY_BYTE_BASE_OFFSET,
this,
a, ix,
(arr, idx, v) -> v.forEach((i, e) -> arr[idx + i] = e));
}
@Override
@ForceInline
public final void intoArray(byte[] a, int ax, Mask<Byte> m) {
! ByteVector oldVal = ByteVector.fromArray(SPECIES, a, ax);
ByteVector newVal = oldVal.blend(this, m);
! newVal.intoArray(a, ax);
}
@Override
@ForceInline
public void intoByteArray(byte[] a, int ix) {
--- 834,866 ----
@Override
@ForceInline
public void intoArray(byte[] a, int ix) {
Objects.requireNonNull(a);
ix = VectorIntrinsics.checkIndex(ix, a.length, LENGTH);
+ intoArrayWithoutCheck(a, ix);
+ }
+
+ @ForceInline
+ private void intoArrayWithoutCheck(byte[] a, int ix) {
VectorIntrinsics.store(Byte64Vector.class, byte.class, LENGTH,
a, (((long) ix) << ARRAY_SHIFT) + Unsafe.ARRAY_BYTE_BASE_OFFSET,
this,
a, ix,
(arr, idx, v) -> v.forEach((i, e) -> arr[idx + i] = e));
}
@Override
@ForceInline
public final void intoArray(byte[] a, int ax, Mask<Byte> m) {
! Objects.requireNonNull(a);
! if (ax + LENGTH <= a.length) {
! ByteVector oldVal = ByteVector.fromArrayWithoutCheck(SPECIES, a, ax);
ByteVector newVal = oldVal.blend(this, m);
! ((Byte64Vector)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 >