< prev index next >

src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Long64Vector.java

Print this page
rev 55589 : 8221816: [vector] IndexOutOfBoundsException for fromArray/intoArray with unset mask lanes
Reviewed-by: duke


 860     @Override
 861     @ForceInline
 862     public Shuffle<Long> toShuffle() {
 863         long[] a = toArray();
 864         int[] sa = new int[a.length];
 865         for (int i = 0; i < a.length; i++) {
 866             sa[i] = (int) a[i];
 867         }
 868         return LongVector.shuffleFromArray(SPECIES, sa, 0);
 869     }
 870 
 871     // Memory operations
 872 
 873     private static final int ARRAY_SHIFT         = 31 - Integer.numberOfLeadingZeros(Unsafe.ARRAY_LONG_INDEX_SCALE);
 874     private static final int BOOLEAN_ARRAY_SHIFT = 31 - Integer.numberOfLeadingZeros(Unsafe.ARRAY_BOOLEAN_INDEX_SCALE);
 875 
 876     @Override
 877     @ForceInline
 878     public void intoArray(long[] a, int ix) {
 879         Objects.requireNonNull(a);
 880         ix = VectorIntrinsics.checkIndex(ix, a.length, LENGTH);
 881         VectorIntrinsics.store(Long64Vector.class, long.class, LENGTH,
 882                                a, (((long) ix) << ARRAY_SHIFT) + Unsafe.ARRAY_LONG_BASE_OFFSET,
 883                                this,
 884                                a, ix,
 885                                (arr, idx, v) -> v.forEach((i, e) -> arr[idx + i] = e));
 886     }
 887 
 888     @Override
 889     @ForceInline
 890     public final void intoArray(long[] a, int ax, Mask<Long> m) {
 891         LongVector oldVal = LongVector.fromArray(SPECIES, a, ax);
 892         LongVector newVal = oldVal.blend(this, m);
 893         newVal.intoArray(a, ax);
 894     }

 895     @Override
 896     @ForceInline
 897     public void intoArray(long[] a, int ix, int[] b, int iy) {
 898         this.intoArray(a, ix + b[iy]);
 899     }
 900 
 901      @Override
 902      @ForceInline
 903      public final void intoArray(long[] a, int ax, Mask<Long> m, int[] b, int iy) {
 904          // @@@ This can result in out of bounds errors for unset mask lanes
 905          LongVector oldVal = LongVector.fromArray(SPECIES, a, ax, b, iy);
 906          LongVector newVal = oldVal.blend(this, m);
 907          newVal.intoArray(a, ax, b, iy);
 908      }
 909 
 910     @Override
 911     @ForceInline
 912     public void intoByteArray(byte[] a, int ix) {
 913         Objects.requireNonNull(a);
 914         ix = VectorIntrinsics.checkIndex(ix, a.length, bitSize() / Byte.SIZE);
 915         VectorIntrinsics.store(Long64Vector.class, long.class, LENGTH,
 916                                a, ((long) ix) + Unsafe.ARRAY_BYTE_BASE_OFFSET,
 917                                this,
 918                                a, ix,
 919                                (c, idx, v) -> {
 920                                    ByteBuffer bbc = ByteBuffer.wrap(c, idx, c.length - idx).order(ByteOrder.nativeOrder());
 921                                    LongBuffer tb = bbc.asLongBuffer();
 922                                    v.forEach((i, e) -> tb.put(e));
 923                                });
 924     }
 925 
 926     @Override
 927     @ForceInline




 860     @Override
 861     @ForceInline
 862     public Shuffle<Long> toShuffle() {
 863         long[] a = toArray();
 864         int[] sa = new int[a.length];
 865         for (int i = 0; i < a.length; i++) {
 866             sa[i] = (int) a[i];
 867         }
 868         return LongVector.shuffleFromArray(SPECIES, sa, 0);
 869     }
 870 
 871     // Memory operations
 872 
 873     private static final int ARRAY_SHIFT         = 31 - Integer.numberOfLeadingZeros(Unsafe.ARRAY_LONG_INDEX_SCALE);
 874     private static final int BOOLEAN_ARRAY_SHIFT = 31 - Integer.numberOfLeadingZeros(Unsafe.ARRAY_BOOLEAN_INDEX_SCALE);
 875 
 876     @Override
 877     @ForceInline
 878     public void intoArray(long[] a, int ix) {
 879         Objects.requireNonNull(a);
 880         forEach((i, e) -> a[ix + i] = e);





 881     }
 882 
 883     @Override
 884     @ForceInline
 885     public final void intoArray(long[] a, int ax, Mask<Long> m) {
 886         Objects.requireNonNull(a);
 887         forEach(m, (i, e) -> a[ax + i] = e);

 888     }
 889 
 890     @Override
 891     @ForceInline
 892     public void intoArray(long[] a, int ix, int[] b, int iy) {
 893         this.intoArray(a, ix + b[iy]);
 894     }
 895 
 896     @Override
 897     @ForceInline
 898     public final void intoArray(long[] a, int ax, Mask<Long> m, int[] b, int iy) {
 899         Objects.requireNonNull(a);
 900         Objects.requireNonNull(b);
 901         forEach(m, (i, e) -> a[ax + b[iy+i]] = e);

 902     }
 903 
 904     @Override
 905     @ForceInline
 906     public void intoByteArray(byte[] a, int ix) {
 907         Objects.requireNonNull(a);
 908         ix = VectorIntrinsics.checkIndex(ix, a.length, bitSize() / Byte.SIZE);
 909         VectorIntrinsics.store(Long64Vector.class, long.class, LENGTH,
 910                                a, ((long) ix) + Unsafe.ARRAY_BYTE_BASE_OFFSET,
 911                                this,
 912                                a, ix,
 913                                (c, idx, v) -> {
 914                                    ByteBuffer bbc = ByteBuffer.wrap(c, idx, c.length - idx).order(ByteOrder.nativeOrder());
 915                                    LongBuffer tb = bbc.asLongBuffer();
 916                                    v.forEach((i, e) -> tb.put(e));
 917                                });
 918     }
 919 
 920     @Override
 921     @ForceInline


< prev index next >