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
|