< prev index next >

src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte512Vector.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(Byte512Vector.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(Byte512Vector.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); ! ((Byte512Vector)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 >