+ * This is useful to pre-allocate the output buffer before calling
+ * {@link #headlessCompress(int[], IntWrapper, int, int[], IntWrapper)}.
+ *
+ *
+ * @param compressedPositions
+ * since not all schemes compress every input integer, this parameter
+ * returns how many input integers will actually be compressed.
+ * This is useful when composing multiple schemes.
+ * @param inlength
+ * number of integers to be compressed
+ * @return the maximum number of integers needed in the output array
+ */
+ int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength);
}
diff --git a/src/main/java/me/lemire/integercompression/UncompressibleInputException.java b/src/main/java/me/lemire/integercompression/UncompressibleInputException.java
deleted file mode 100644
index c490946..0000000
--- a/src/main/java/me/lemire/integercompression/UncompressibleInputException.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package me.lemire.integercompression;
-
-/**
- * This exception might be thrown if the input is poorly compressible.
- *
- */
-public class UncompressibleInputException extends RuntimeException {
-
- /**
- * Create new exception
- * @param string explanation for the exception
- */
- public UncompressibleInputException(String string) {
- super(string);
- }
-
- private static final long serialVersionUID = -798583799846489873L;
-
-}
diff --git a/src/main/java/me/lemire/integercompression/Util.java b/src/main/java/me/lemire/integercompression/Util.java
index 346e3b2..63fc918 100644
--- a/src/main/java/me/lemire/integercompression/Util.java
+++ b/src/main/java/me/lemire/integercompression/Util.java
@@ -15,13 +15,13 @@
public final class Util {
-
- // check whether x is small than y as unsigned ints (supported by Java 8 natively);
- protected static final boolean smallerorequalthan(int x, int y) {
- return (x + Integer.MIN_VALUE) <= (y + Integer.MIN_VALUE);
- }
-
- /**
+
+ // check whether x is small than y as unsigned ints (supported by Java 8 natively);
+ protected static final boolean smallerorequalthan(int x, int y) {
+ return (x + Integer.MIN_VALUE) <= (y + Integer.MIN_VALUE);
+ }
+
+ /**
* Compute the maximum of the integer logarithms (ceil(log(x+1)) of a range
* of value
*
diff --git a/src/main/java/me/lemire/integercompression/VariableByte.java b/src/main/java/me/lemire/integercompression/VariableByte.java
index 92cfaeb..c9b04d0 100644
--- a/src/main/java/me/lemire/integercompression/VariableByte.java
+++ b/src/main/java/me/lemire/integercompression/VariableByte.java
@@ -21,6 +21,8 @@
*/
public class VariableByte implements IntegerCODEC, ByteIntegerCODEC, SkippableIntegerCODEC {
+ private static final int MAX_BYTES_PER_INT = 5;
+
private static byte extract7bits(int i, long val) {
return (byte) ((val >> (7 * i)) & ((1 << 7) - 1));
}
@@ -208,6 +210,14 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o
inpos.set(p + (s!=0 ? 1 : 0));
}
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int maxLengthInBytes = inlength * MAX_BYTES_PER_INT;
+ int maxLengthInInts = (maxLengthInBytes + Integer.BYTES - 1) / Integer.BYTES;
+ compressedPositions.add(inlength);
+ return maxLengthInInts;
+ }
+
/**
* Creates a new buffer of the requested size.
*
diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java b/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java
index c5fee69..ef4a386 100644
--- a/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java
+++ b/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java
@@ -308,10 +308,10 @@ private static void testByteCodec(PrintWriter csvLog, int sparsity,
public static void main(String args[]) throws FileNotFoundException {
System.out
.println("# benchmark based on the ClusterData model from:");
- System.out.println("# Vo Ngoc Anh and Alistair Moffat. ");
- System.out.println("# Index compression using 64-bit words.");
+ System.out.println("# Vo Ngoc Anh and Alistair Moffat. ");
+ System.out.println("# Index compression using 64-bit words.");
System.out
- .println("# Softw. Pract. Exper.40, 2 (February 2010), 131-147. ");
+ .println("# Softw. Pract. Exper.40, 2 (February 2010), 131-147. ");
System.out.println();
PrintWriter writer = null;
diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java
index 363b841..b930568 100644
--- a/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java
+++ b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java
@@ -241,10 +241,10 @@ private static void testCodec(PrintWriter csvLog, int sparsity, Object c,
*/
public static void main(String args[]) throws FileNotFoundException {
System.out.println("# benchmark based on the ClusterData model from:");
- System.out.println("# Vo Ngoc Anh and Alistair Moffat. ");
- System.out.println("# Index compression using 64-bit words.");
+ System.out.println("# Vo Ngoc Anh and Alistair Moffat. ");
+ System.out.println("# Index compression using 64-bit words.");
System.out
- .println("# Softw. Pract. Exper.40, 2 (February 2010), 131-147. ");
+ .println("# Softw. Pract. Exper.40, 2 (February 2010), 131-147. ");
System.out.println();
PrintWriter writer = null;
diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java b/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java
index 7e1c161..f50a367 100644
--- a/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java
+++ b/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java
@@ -49,7 +49,8 @@
public class IntegratedBinaryPacking implements IntegratedIntegerCODEC,
SkippableIntegratedIntegerCODEC {
- static final int BLOCK_SIZE = 32;
+ public static final int BLOCK_SIZE = 32;
+ private static final int MAX_BIT_WIDTH = Integer.SIZE;
@Override
public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
@@ -170,4 +171,13 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
initvalue.set(initoffset);
inpos.set(tmpinpos);
}
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int blockCount = inlength / BLOCK_SIZE;
+ int headersSizeInInts = blockCount / Integer.BYTES + (blockCount % Integer.BYTES);
+ int blocksSizeInInts = blockCount * MAX_BIT_WIDTH;
+ compressedPositions.add(blockCount * BLOCK_SIZE);
+ return headersSizeInInts + blocksSizeInInts;
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java
index 5808bdd..1d935c4 100644
--- a/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java
+++ b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java
@@ -3,7 +3,6 @@
import java.util.Arrays;
import me.lemire.integercompression.IntWrapper;
-import me.lemire.integercompression.UncompressibleInputException;
/**
* This is a convenience class that wraps a codec to provide
@@ -36,19 +35,14 @@ public IntegratedIntCompressor() {
*
* @param input array to be compressed
* @return compressed array
- * @throws UncompressibleInputException if the data is too poorly compressible
*/
public int[] compress(int[] input) {
- int [] compressed = new int[input.length + input.length / 100 + 1024];
+ int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length);
+ int [] compressed = new int[maxCompressedLength + 1]; // +1 to store the length of the input
compressed[0] = input.length;
IntWrapper outpos = new IntWrapper(1);
IntWrapper initvalue = new IntWrapper(0);
- try {
- codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos, initvalue);
- } catch (IndexOutOfBoundsException ioebe) {
- throw new UncompressibleInputException(
- "Your input is too poorly compressible with the current codec : " + codec);
- }
+ codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos, initvalue);
compressed = Arrays.copyOf(compressed,outpos.intValue());
return compressed;
}
diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java b/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java
index 918a900..a577031 100644
--- a/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java
+++ b/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java
@@ -24,6 +24,8 @@
public class IntegratedVariableByte implements IntegratedIntegerCODEC, IntegratedByteIntegerCODEC,
SkippableIntegratedIntegerCODEC {
+ private static final int MAX_BYTES_PER_INT = 5;
+
private static byte extract7bits(int i, long val) {
return (byte)((val >> (7 * i)) & ((1 << 7) - 1));
}
@@ -257,6 +259,14 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
inpos.set(p + (s!=0 ? 1 : 0));
}
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int maxLengthInBytes = inlength * MAX_BYTES_PER_INT;
+ int maxLengthInInts = (maxLengthInBytes + Integer.BYTES - 1) / Integer.BYTES;
+ compressedPositions.add(inlength);
+ return maxLengthInInts;
+ }
+
/**
* Creates a new buffer of the requested size.
*
diff --git a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java
index 09c4dd8..4786ec5 100644
--- a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java
+++ b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java
@@ -66,14 +66,25 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
if (inlength == 0)
return;
int init = inpos.get();
+ int outposInit = outpos.get();
+
F1.headlessUncompress(in, inpos, inlength, out, outpos,num,initvalue);
if (inpos.get() == init) {
- inpos.increment();
+ inpos.increment();
}
inlength -= inpos.get() - init;
- num -= outpos.get();
+ num -= outpos.get() - outposInit;
F2.headlessUncompress(in, inpos, inlength, out, outpos,num,initvalue);
}
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int init = compressedPositions.get();
+ int maxLength = F1.maxHeadlessCompressedLength(compressedPositions, inlength);
+ maxLength += 1; // Add +1 for the potential F2 header. Question: is this header actually needed in the headless version?
+ inlength -= compressedPositions.get() - init;
+ maxLength += F2.maxHeadlessCompressedLength(compressedPositions, inlength);
+ return maxLength;
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedIntegerCODEC.java b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedIntegerCODEC.java
index 8b7fd4b..e2df754 100644
--- a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedIntegerCODEC.java
+++ b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedIntegerCODEC.java
@@ -71,4 +71,21 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out
public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
IntWrapper outpos, int num, IntWrapper initvalue);
+ /**
+ * Compute the maximum number of integers that might be required to store
+ * the compressed form of a given input array segment, without headers.
+ *
+ * This is useful to pre-allocate the output buffer before calling
+ * {@link #headlessCompress(int[], IntWrapper, int, int[], IntWrapper, IntWrapper)}.
+ *
+ *
+ * @param compressedPositions
+ * since not all schemes compress every input integer, this parameter
+ * returns how many input integers will actually be compressed.
+ * This is useful when composing multiple schemes.
+ * @param inlength
+ * number of integers to be compressed
+ * @return the maximum number of integers needed in the output array
+ */
+ int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength);
}
diff --git a/src/main/java/me/lemire/integercompression/synth/UniformDataGenerator.java b/src/main/java/me/lemire/integercompression/synth/UniformDataGenerator.java
index bbd386a..a50497c 100644
--- a/src/main/java/me/lemire/integercompression/synth/UniformDataGenerator.java
+++ b/src/main/java/me/lemire/integercompression/synth/UniformDataGenerator.java
@@ -42,7 +42,7 @@ int[] generateUniformHash(int N, int Max) {
int[] ans = new int[N];
HashSet s = new HashSet();
while (s.size() < N)
- s.add(new Integer(this.rand.nextInt(Max)));
+ s.add(this.rand.nextInt(Max));
Iterator i = s.iterator();
for (int k = 0; k < N; ++k)
ans[k] = i.next().intValue();
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBinaryPacking.java b/src/main/java/me/lemire/integercompression/vector/VectorBinaryPacking.java
new file mode 100644
index 0000000..6517357
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorBinaryPacking.java
@@ -0,0 +1,166 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ * (c) Intel Corp. (for Vector implementation)
+ */
+package me.lemire.integercompression.vector;
+
+import jdk.incubator.vector.IntVector;
+import jdk.incubator.vector.VectorOperators;
+import jdk.incubator.vector.VectorSpecies;
+import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.IntegerCODEC;
+import me.lemire.integercompression.SkippableIntegerCODEC;
+import me.lemire.integercompression.Util;
+import me.lemire.integercompression.vector.VectorBitPackerKernels.LaneWidth;
+
+/**
+ * BinaryPacking using the Vector API pack/unpack kernels: each block is packed at
+ * its own maximum bit width with no exceptions, so encoding is a single maxbits
+ * pass plus a vectorized pack. It encodes integers in blocks of BLOCK_SIZE
+ * integers. For arrays containing an arbitrary number of integers, you should use
+ * it in conjunction with another CODEC:
+ *
+ *
IntegerCODEC ic =
+ * new Composition(new VectorBinaryPacking(), new VariableByte()).
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, use IntegratedBinaryPacking instead.
+ *
+ * Blocks are packed in a vectorized layout that differs by hardware vector lane
+ * width. The lane width is fixed at construction and not stored on the wire, so a
+ * stream must be decoded at the same lane width it was encoded at. The default
+ * constructor packs at this machine's preferred width; the {@code (LaneWidth)}
+ * constructor pins a width so a heterogeneous cluster can decode on its narrowest
+ * node.
+ *
+ * @author Daniel Lemire
+ */
+public final class VectorBinaryPacking implements IntegerCODEC, SkippableIntegerCODEC {
+ public final static int BLOCK_SIZE = 256;
+ private static final int MAX_BIT_WIDTH = Integer.SIZE;
+ // Output words a packed block occupies per bit of width (BLOCK_SIZE / Integer.SIZE).
+ private static final int WORDS_PER_BLOCK_BIT = BLOCK_SIZE / Integer.SIZE;
+ // Blocks sharing one packed header word (four max-bit values, one byte each).
+ private static final int GROUP_SIZE_IN_BLOCKS = 4;
+ // The OR-reduction result is independent of vector width, so it uses the widest
+ // available species regardless of the wire lane width.
+ private static final VectorSpecies MAXBITS_SPECIES = IntVector.SPECIES_PREFERRED;
+
+ private final VectorBitPackerKernels kernel;
+
+ /** Packs at this machine's preferred vector lane width. */
+ public VectorBinaryPacking() {
+ this(LaneWidth.PREFERRED);
+ }
+
+ /** Pins the lane width so a heterogeneous cluster can decode on its narrowest node. */
+ public VectorBinaryPacking(LaneWidth laneWidth) {
+ this.kernel = laneWidth.kernel;
+ }
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ int tmpoutpos = outpos.get();
+ int s = inpos.get();
+ for (; s + BLOCK_SIZE * 4 - 1 < inpos.get() + inlength; s += BLOCK_SIZE * 4) {
+ final int mbits1 = maxbits(in, s);
+ final int mbits2 = maxbits(in, s + BLOCK_SIZE);
+ final int mbits3 = maxbits(in, s + 2 * BLOCK_SIZE);
+ final int mbits4 = maxbits(in, s + 3 * BLOCK_SIZE);
+ out[tmpoutpos++] = (mbits1 << 24) | (mbits2 << 16) | (mbits3 << 8) | (mbits4);
+ kernel.fastpackNoMask(in, s, out, tmpoutpos, mbits1);
+ tmpoutpos += WORDS_PER_BLOCK_BIT * mbits1;
+ kernel.fastpackNoMask(in, s + BLOCK_SIZE, out, tmpoutpos, mbits2);
+ tmpoutpos += WORDS_PER_BLOCK_BIT * mbits2;
+ kernel.fastpackNoMask(in, s + 2 * BLOCK_SIZE, out, tmpoutpos, mbits3);
+ tmpoutpos += WORDS_PER_BLOCK_BIT * mbits3;
+ kernel.fastpackNoMask(in, s + 3 * BLOCK_SIZE, out, tmpoutpos, mbits4);
+ tmpoutpos += WORDS_PER_BLOCK_BIT * mbits4;
+ }
+ for (; s < inpos.get() + inlength; s += BLOCK_SIZE) {
+ final int mbits = maxbits(in, s);
+ out[tmpoutpos++] = mbits;
+ kernel.fastpackNoMask(in, s, out, tmpoutpos, mbits);
+ tmpoutpos += WORDS_PER_BLOCK_BIT * mbits;
+ }
+ inpos.add(inlength);
+ outpos.set(tmpoutpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) {
+ final int outlength = Util.greatestMultiple(num, BLOCK_SIZE);
+ int tmpinpos = inpos.get();
+ int s = outpos.get();
+ for (; s + BLOCK_SIZE * 4 - 1 < outpos.get() + outlength; s += BLOCK_SIZE * 4) {
+ final int mbits1 = (in[tmpinpos] >>> 24);
+ final int mbits2 = (in[tmpinpos] >>> 16) & 0xFF;
+ final int mbits3 = (in[tmpinpos] >>> 8) & 0xFF;
+ final int mbits4 = (in[tmpinpos]) & 0xFF;
+ ++tmpinpos;
+ kernel.fastunpack(in, tmpinpos, out, s, mbits1);
+ tmpinpos += WORDS_PER_BLOCK_BIT * mbits1;
+ kernel.fastunpack(in, tmpinpos, out, s + BLOCK_SIZE, mbits2);
+ tmpinpos += WORDS_PER_BLOCK_BIT * mbits2;
+ kernel.fastunpack(in, tmpinpos, out, s + 2 * BLOCK_SIZE, mbits3);
+ tmpinpos += WORDS_PER_BLOCK_BIT * mbits3;
+ kernel.fastunpack(in, tmpinpos, out, s + 3 * BLOCK_SIZE, mbits4);
+ tmpinpos += WORDS_PER_BLOCK_BIT * mbits4;
+ }
+ for (; s < outpos.get() + outlength; s += BLOCK_SIZE) {
+ final int mbits = in[tmpinpos];
+ ++tmpinpos;
+ kernel.fastunpack(in, tmpinpos, out, s, mbits);
+ tmpinpos += WORDS_PER_BLOCK_BIT * mbits;
+ }
+ outpos.add(outlength);
+ inpos.set(tmpinpos);
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int blockCount = inlength / BLOCK_SIZE;
+ int headersSizeInInts = blockCount / GROUP_SIZE_IN_BLOCKS + (blockCount % GROUP_SIZE_IN_BLOCKS);
+ int blocksSizeInInts = blockCount * MAX_BIT_WIDTH * WORDS_PER_BLOCK_BIT;
+ compressedPositions.add(blockCount * BLOCK_SIZE);
+ return headersSizeInInts + blocksSizeInInts;
+ }
+
+ // Maximum bit width needed for a BLOCK_SIZE-value block: OR-reduce the values, then count significant bits.
+ private static int maxbits(int[] in, int pos) {
+ IntVector accumulator = IntVector.zero(MAXBITS_SPECIES);
+ for (int offset = 0; offset < BLOCK_SIZE; offset += MAXBITS_SPECIES.length()) {
+ accumulator = accumulator.or(IntVector.fromArray(MAXBITS_SPECIES, in, pos + offset));
+ }
+ int mask = accumulator.reduceLanes(VectorOperators.OR);
+ return Integer.SIZE - Integer.numberOfLeadingZeros(mask);
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName() + "(" + kernel.getClass().getSimpleName() + ")";
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBitPacker.java b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker.java
index 9b2e1ca..1b0df04 100644
--- a/src/main/java/me/lemire/integercompression/vector/VectorBitPacker.java
+++ b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker.java
@@ -15,77 +15,42 @@
* classes.
*
*/
-public class VectorBitPacker {
+public class VectorBitPacker implements VectorBitPackerKernels {
private static final VectorSpecies SPECIES_512 =
IntVector.SPECIES_512;
- private static final VectorSpecies SPECIES_256 =
- IntVector.SPECIES_256;
private static final int VLEN_512 = 16;
- private static final int VLEN_256 = 8;
private static final int BLOCK_SIZE = 256;
- private static final IntVector MASK_1 =
- IntVector.broadcast(SPECIES_256, (1 << 1) - 1);
private static final IntVector MASK_2 =
IntVector.broadcast(SPECIES_512, (1 << 2) - 1);
- private static final IntVector MASK_3 =
- IntVector.broadcast(SPECIES_256, (1 << 3) - 1);
private static final IntVector MASK_4 =
IntVector.broadcast(SPECIES_512, (1 << 4) - 1);
- private static final IntVector MASK_5 =
- IntVector.broadcast(SPECIES_256, (1 << 5) - 1);
private static final IntVector MASK_6 =
IntVector.broadcast(SPECIES_512, (1 << 6) - 1);
- private static final IntVector MASK_7 =
- IntVector.broadcast(SPECIES_256, (1 << 7) - 1);
private static final IntVector MASK_8 =
IntVector.broadcast(SPECIES_512, (1 << 8) - 1);
- private static final IntVector MASK_9 =
- IntVector.broadcast(SPECIES_256, (1 << 9) - 1);
private static final IntVector MASK_10 =
IntVector.broadcast(SPECIES_512, (1 << 10) - 1);
- private static final IntVector MASK_11 =
- IntVector.broadcast(SPECIES_256, (1 << 11) - 1);
private static final IntVector MASK_12 =
IntVector.broadcast(SPECIES_512, (1 << 12) - 1);
- private static final IntVector MASK_13 =
- IntVector.broadcast(SPECIES_256, (1 << 13) - 1);
private static final IntVector MASK_14 =
IntVector.broadcast(SPECIES_512, (1 << 14) - 1);
- private static final IntVector MASK_15 =
- IntVector.broadcast(SPECIES_256, (1 << 15) - 1);
private static final IntVector MASK_16 =
IntVector.broadcast(SPECIES_512, (1 << 16) - 1);
- private static final IntVector MASK_17 =
- IntVector.broadcast(SPECIES_256, (1 << 17) - 1);
private static final IntVector MASK_18 =
IntVector.broadcast(SPECIES_512, (1 << 18) - 1);
- private static final IntVector MASK_19 =
- IntVector.broadcast(SPECIES_256, (1 << 19) - 1);
private static final IntVector MASK_20 =
IntVector.broadcast(SPECIES_512, (1 << 20) - 1);
- private static final IntVector MASK_21 =
- IntVector.broadcast(SPECIES_256, (1 << 21) - 1);
private static final IntVector MASK_22 =
IntVector.broadcast(SPECIES_512, (1 << 22) - 1);
- private static final IntVector MASK_23 =
- IntVector.broadcast(SPECIES_256, (1 << 23) - 1);
private static final IntVector MASK_24 =
IntVector.broadcast(SPECIES_512, (1 << 24) - 1);
- private static final IntVector MASK_25 =
- IntVector.broadcast(SPECIES_256, (1 << 25) - 1);
private static final IntVector MASK_26 =
IntVector.broadcast(SPECIES_512, (1 << 26) - 1);
- private static final IntVector MASK_27 =
- IntVector.broadcast(SPECIES_256, (1 << 27) - 1);
private static final IntVector MASK_28 =
IntVector.broadcast(SPECIES_512, (1 << 28) - 1);
- private static final IntVector MASK_29 =
- IntVector.broadcast(SPECIES_256, (1 << 29) - 1);
private static final IntVector MASK_30 =
IntVector.broadcast(SPECIES_512, (1 << 30) - 1);
- private static final IntVector MASK_31 =
- IntVector.broadcast(SPECIES_256, (1 << 31) - 1);
/**
* Pack 32 integers
@@ -101,103 +66,104 @@ public class VectorBitPacker {
* @param b
* number of bits to use per integer
*/
- public static void fastpack(final int[] in, int inpos, final int[] out,
- int outpos, int b) {
+ @Override
+ public void fastpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
switch (b) {
case 0:
break;
case 1:
- fastpack1(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack1(in, inpos, out, outpos);
break;
case 2:
fastpack2(in, inpos, out, outpos);
break;
case 3:
- fastpack3(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack3(in, inpos, out, outpos);
break;
case 4:
fastpack4(in, inpos, out, outpos);
break;
case 5:
- fastpack5(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack5(in, inpos, out, outpos);
break;
case 6:
fastpack6(in, inpos, out, outpos);
break;
case 7:
- fastpack7(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack7(in, inpos, out, outpos);
break;
case 8:
fastpack8(in, inpos, out, outpos);
break;
case 9:
- fastpack9(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack9(in, inpos, out, outpos);
break;
case 10:
fastpack10(in, inpos, out, outpos);
break;
case 11:
- fastpack11(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack11(in, inpos, out, outpos);
break;
case 12:
fastpack12(in, inpos, out, outpos);
break;
case 13:
- fastpack13(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack13(in, inpos, out, outpos);
break;
case 14:
fastpack14(in, inpos, out, outpos);
break;
case 15:
- fastpack15(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack15(in, inpos, out, outpos);
break;
case 16:
fastpack16(in, inpos, out, outpos);
break;
case 17:
- fastpack17(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack17(in, inpos, out, outpos);
break;
case 18:
fastpack18(in, inpos, out, outpos);
break;
case 19:
- fastpack19(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack19(in, inpos, out, outpos);
break;
case 20:
fastpack20(in, inpos, out, outpos);
break;
case 21:
- fastpack21(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack21(in, inpos, out, outpos);
break;
case 22:
fastpack22(in, inpos, out, outpos);
break;
case 23:
- fastpack23(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack23(in, inpos, out, outpos);
break;
case 24:
fastpack24(in, inpos, out, outpos);
break;
case 25:
- fastpack25(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack25(in, inpos, out, outpos);
break;
case 26:
fastpack26(in, inpos, out, outpos);
break;
case 27:
- fastpack27(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack27(in, inpos, out, outpos);
break;
case 28:
fastpack28(in, inpos, out, outpos);
break;
case 29:
- fastpack29(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack29(in, inpos, out, outpos);
break;
case 30:
fastpack30(in, inpos, out, outpos);
break;
case 31:
- fastpack31(in, inpos, out, outpos);
+ VectorBitPacker256.fastpack31(in, inpos, out, outpos);
break;
case 32:
System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
@@ -205,103 +171,104 @@ public static void fastpack(final int[] in, int inpos, final int[] out,
}
}
- static void fastpackNoMask(final int[] in, int inpos, final int[] out,
+ @Override
+ public void fastpackNoMask(final int[] in, int inpos, final int[] out,
int outpos, int b) {
switch (b) {
case 0:
break;
case 1:
- fastpackNoMask1(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask1(in, inpos, out, outpos);
break;
case 2:
fastpackNoMask2(in, inpos, out, outpos);
break;
case 3:
- fastpackNoMask3(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask3(in, inpos, out, outpos);
break;
case 4:
fastpackNoMask4(in, inpos, out, outpos);
break;
case 5:
- fastpackNoMask5(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask5(in, inpos, out, outpos);
break;
case 6:
fastpackNoMask6(in, inpos, out, outpos);
break;
case 7:
- fastpackNoMask7(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask7(in, inpos, out, outpos);
break;
case 8:
fastpackNoMask8(in, inpos, out, outpos);
break;
case 9:
- fastpackNoMask9(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask9(in, inpos, out, outpos);
break;
case 10:
fastpackNoMask10(in, inpos, out, outpos);
break;
case 11:
- fastpackNoMask11(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask11(in, inpos, out, outpos);
break;
case 12:
fastpackNoMask12(in, inpos, out, outpos);
break;
case 13:
- fastpackNoMask13(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask13(in, inpos, out, outpos);
break;
case 14:
fastpackNoMask14(in, inpos, out, outpos);
break;
case 15:
- fastpackNoMask15(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask15(in, inpos, out, outpos);
break;
case 16:
fastpackNoMask16(in, inpos, out, outpos);
break;
case 17:
- fastpackNoMask17(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask17(in, inpos, out, outpos);
break;
case 18:
fastpackNoMask18(in, inpos, out, outpos);
break;
case 19:
- fastpackNoMask19(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask19(in, inpos, out, outpos);
break;
case 20:
fastpackNoMask20(in, inpos, out, outpos);
break;
case 21:
- fastpackNoMask21(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask21(in, inpos, out, outpos);
break;
case 22:
fastpackNoMask22(in, inpos, out, outpos);
break;
case 23:
- fastpackNoMask23(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask23(in, inpos, out, outpos);
break;
case 24:
fastpackNoMask24(in, inpos, out, outpos);
break;
case 25:
- fastpackNoMask25(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask25(in, inpos, out, outpos);
break;
case 26:
fastpackNoMask26(in, inpos, out, outpos);
break;
case 27:
- fastpackNoMask27(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask27(in, inpos, out, outpos);
break;
case 28:
fastpackNoMask28(in, inpos, out, outpos);
break;
case 29:
- fastpackNoMask29(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask29(in, inpos, out, outpos);
break;
case 30:
fastpackNoMask30(in, inpos, out, outpos);
break;
case 31:
- fastpackNoMask31(in, inpos, out, outpos);
+ VectorBitPacker256.fastpackNoMask31(in, inpos, out, outpos);
break;
case 32:
System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
@@ -323,104 +290,105 @@ static void fastpackNoMask(final int[] in, int inpos, final int[] out,
* @param b
* number of bits to use per integer
*/
- public static void fastunpack(final int[] in, int inpos, final int[] out,
- int outpos, int b) {
+ @Override
+ public void fastunpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
switch (b) {
case 0:
Arrays.fill(out, outpos, outpos + 256, 0);
break;
case 1:
- fastunpack1(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack1(in, inpos, out, outpos);
break;
case 2:
fastunpack2(in, inpos, out, outpos);
break;
case 3:
- fastunpack3(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack3(in, inpos, out, outpos);
break;
case 4:
fastunpack4(in, inpos, out, outpos);
break;
case 5:
- fastunpack5(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack5(in, inpos, out, outpos);
break;
case 6:
fastunpack6(in, inpos, out, outpos);
break;
case 7:
- fastunpack7(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack7(in, inpos, out, outpos);
break;
case 8:
fastunpack8(in, inpos, out, outpos);
break;
case 9:
- fastunpack9(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack9(in, inpos, out, outpos);
break;
case 10:
fastunpack10(in, inpos, out, outpos);
break;
case 11:
- fastunpack11(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack11(in, inpos, out, outpos);
break;
case 12:
fastunpack12(in, inpos, out, outpos);
break;
case 13:
- fastunpack13(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack13(in, inpos, out, outpos);
break;
case 14:
fastunpack14(in, inpos, out, outpos);
break;
case 15:
- fastunpack15(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack15(in, inpos, out, outpos);
break;
case 16:
fastunpack16(in, inpos, out, outpos);
break;
case 17:
- fastunpack17(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack17(in, inpos, out, outpos);
break;
case 18:
fastunpack18(in, inpos, out, outpos);
break;
case 19:
- fastunpack19(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack19(in, inpos, out, outpos);
break;
case 20:
fastunpack20(in, inpos, out, outpos);
break;
case 21:
- fastunpack21(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack21(in, inpos, out, outpos);
break;
case 22:
fastunpack22(in, inpos, out, outpos);
break;
case 23:
- fastunpack23(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack23(in, inpos, out, outpos);
break;
case 24:
fastunpack24(in, inpos, out, outpos);
break;
case 25:
- fastunpack25(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack25(in, inpos, out, outpos);
break;
case 26:
fastunpack26(in, inpos, out, outpos);
break;
case 27:
- fastunpack27(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack27(in, inpos, out, outpos);
break;
case 28:
fastunpack28(in, inpos, out, outpos);
break;
case 29:
- fastunpack29(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack29(in, inpos, out, outpos);
break;
case 30:
fastunpack30(in, inpos, out, outpos);
break;
case 31:
- fastunpack31(in, inpos, out, outpos);
+ VectorBitPacker256.fastunpack31(in, inpos, out, outpos);
break;
case 32:
System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
@@ -428,176 +396,6 @@ public static void fastunpack(final int[] in, int inpos, final int[] out,
}
}
- public static int slowpack(final int[] in, int inpos, int inlen,
- final int[] out, int outpos, int b) {
- if (inlen == 0)
- return outpos;
- if (b == 32) {
- System.arraycopy(in, inpos, out, outpos, inlen);
- return outpos + inlen;
- }
- int mask = (1 << b) - 1;
- int c = 0;
- int l = 0;
- int r = 0;
- int val = 0;
- for (int i = 0; i < inlen; i++) {
- val = in[inpos + i] & mask;
- out[outpos] |= val << (c + r);
- c += b;
- l = (32 - r) % b;
- if (c + r >= 32) {
- if (i < inlen - 1 || l != 0)
- outpos++;
- r = l == 0 ? 0 : b - l;
- if (l != 0)
- out[outpos] = val >> (b - r);
- c = 0;
- }
- }
- return outpos;
- }
-
- public static int slowunpack(final int[] in, int inpos, final int[] out,
- int outpos, int outlen, int b) {
- if (outlen == 0) {
- return inpos;
- }
- if (b == 32) {
- System.arraycopy(in, inpos, out, outpos, outlen);
- return inpos + outlen;
- }
- int mask = (1 << b) - 1;
- int limit = outpos + outlen;
- int r = 0;
- int val = 0;
- int i = 0;
- for (; outpos < limit; i++) {
- if (r > 0)
- out[outpos++] =
- (val >>> (32 - (b - r))) | ((in[inpos + i] << (b - r)) & mask);
- val = in[inpos + i];
- int j = 0;
- int l = 32 - r;
- int ll = l % b == 0 ? l : l - b;
- while (j < ll && outpos < limit) {
- out[outpos++] = (val >> (j + r)) & mask;
- j += b;
- }
- r = l % b == 0 ? 0 : b - (l % b);
- }
- return inpos + i;
- }
-
- public static int numCompressedInts(int n, int b) {
- int width = b % 2 == 0 ? VLEN_512 : VLEN_256;
- if (n <= width)
- return n;
- int intsPerVec = (32 / b) * width;
- int q = (n + intsPerVec - 1) / intsPerVec;
- return q * width;
- }
-
- private static void fastpack1(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_1);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 22).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 25).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 26).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 27).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 28).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 29).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 30).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
private static void fastpack2(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
@@ -650,116 +448,6 @@ private static void fastpack2(final int[] in, int inpos, final int[] out,
oV.intoArray(out, outpos);
}
- private static void fastpack3(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_3);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 27).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 22).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 25).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 28).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 26).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
private static void fastpack4(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
@@ -816,126 +504,6 @@ private static void fastpack4(final int[] in, int inpos, final int[] out,
oV.intoArray(out, outpos);
}
- private static void fastpack5(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_5);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 25).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 26).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 22).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
private static void fastpack6(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
@@ -997,136 +565,6 @@ private static void fastpack6(final int[] in, int inpos, final int[] out,
oV.intoArray(out, outpos);
}
- private static void fastpack7(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_7);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 22).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
private static void fastpack8(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
@@ -1193,146 +631,6 @@ private static void fastpack8(final int[] in, int inpos, final int[] out,
oV.intoArray(out, outpos);
}
- private static void fastpack9(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_9);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 22).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
private static void fastpack10(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
@@ -1404,169 +702,19 @@ private static void fastpack10(final int[] in, int inpos, final int[] out,
oV.intoArray(out, outpos);
}
- private static void fastpack11(final int[] in, int inpos, final int[] out,
+ private static void fastpack12(final int[] in, int inpos, final int[] out,
int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_11);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 11).or(oV);
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_12);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 22).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpack12(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV.and(MASK_12);
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
@@ -1630,166 +778,6 @@ private static void fastpack12(final int[] in, int inpos, final int[] out,
oV.intoArray(out, outpos);
}
- private static void fastpack13(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_13);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
private static void fastpack14(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
@@ -1871,176 +859,6 @@ private static void fastpack14(final int[] in, int inpos, final int[] out,
oV.intoArray(out, outpos);
}
- private static void fastpack15(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_15);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
private static void fastpack16(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
@@ -2127,510 +945,564 @@ private static void fastpack16(final int[] in, int inpos, final int[] out,
oV.intoArray(out, outpos);
}
- private static void fastpack17(final int[] in, int inpos, final int[] out,
+ private static void fastpack18(final int[] in, int inpos, final int[] out,
int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_17);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 17).or(oV);
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_18);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 15);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 2).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 19).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 13);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 4).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 21).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 11);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 6).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 23).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 9);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 8).or(oV);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 25).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 7);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 10).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 27).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 5);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 12).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 29).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 3);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 14).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 31).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 1);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 16).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ }
+
+ private static void fastpack20(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_20);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 16);
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 1).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 18).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 14);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 3).or(oV);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 20).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 12);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 5).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 22).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 10);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 7).or(oV);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 24).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 8);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 9).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_20).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 26).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 6);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 11).or(oV);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 28).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 13).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 30).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 2);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 15).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
}
- private static void fastpack18(final int[] in, int inpos, final int[] out,
+ private static void fastpack22(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV.and(MASK_18);
+ var oV = iV.and(MASK_22);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
oV.intoArray(out, outpos);
}
- private static void fastpack19(final int[] in, int inpos, final int[] out,
+ private static void fastpack24(final int[] in, int inpos, final int[] out,
int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_19);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 19).or(oV);
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_24);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 13);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 6).or(oV);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 25).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 7);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 12).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_24).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 31).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 1);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 18).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 14);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 5).or(oV);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 24).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 8);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 11).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_24).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 30).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 2);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 17).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 15);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 4).or(oV);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 23).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 9);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 10).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_24).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 29).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 3);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 16).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 16);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 3).or(oV);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 22).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ }
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 10);
+ private static void fastpack26(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_26);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 9).or(oV);
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 28).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 15).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 17);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 2).or(oV);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 21).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 11);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 8).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 27).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 5);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 14).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 18);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 1).or(oV);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 20).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 12);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 7).or(oV);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 26).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 6);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 13).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
oV.intoArray(out, outpos);
- }
+ outpos += VLEN_512;
- private static void fastpack20(final int[] in, int inpos, final int[] out,
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack28(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV.and(MASK_20);
+ var oV = iV.and(MASK_28);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
@@ -2638,611 +1510,522 @@ private static void fastpack20(final int[] in, int inpos, final int[] out,
oV = oV.zero(SPECIES_512);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.and(MASK_20).or(oV);
+ oV = iV.and(MASK_28).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
}
- private static void fastpack21(final int[] in, int inpos, final int[] out,
+ private static void fastpack30(final int[] in, int inpos, final int[] out,
int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_21);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 31).or(oV);
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_30);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 1);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 20).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 12);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 9).or(oV);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 30).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 2);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 19).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 13);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 8).or(oV);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 29).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 3);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 18).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 14);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 7).or(oV);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 28).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 17).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 15);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 6).or(oV);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 27).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 5);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 16).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 16);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 5).or(oV);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 26).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 6);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 15).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 17);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 4).or(oV);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 25).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 7);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 14).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 18);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 3).or(oV);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 24).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 8);
+ }
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 13).or(oV);
+ private static void fastpackNoMask2(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 19);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 2).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 23).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 9);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 12).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 20);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 1).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 22).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 10);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 11).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
oV.intoArray(out, outpos);
}
- private static void fastpack22(final int[] in, int inpos, final int[] out,
- int outpos) {
+ private static void fastpackNoMask4(final int[] in, int inpos,
+ final int[] out, int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV.and(MASK_22);
+ var oV = iV;
iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
-
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+ oV = oV.zero(SPECIES_512);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+ oV = iV.or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
}
- private static void fastpack23(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_23);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 14).or(oV);
+ private static void fastpackNoMask6(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 18);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 5).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 28).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 4);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 19).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 13);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 10).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 22);
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 1).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 24).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 8);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 15).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 29).or(oV);
+ }
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ private static void fastpackNoMask8(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 3);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 20).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 11).or(oV);
+ outpos += VLEN_512;
+ oV = oV.zero(SPECIES_512);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.or(oV);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 21);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 2).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 25).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 7);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 16).or(oV);
+ oV = oV.zero(SPECIES_512);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.or(oV);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 16);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 7).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 30).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 2);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 21).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.or(oV);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 11);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 12).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 26).or(oV);
+ }
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ private static void fastpackNoMask10(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 6);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 17).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 15);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 8).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 31).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 1);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 22).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 10);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 13).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 19);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 4).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 27).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 5);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 18).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 14);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 9).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
oV.intoArray(out, outpos);
}
- private static void fastpack24(final int[] in, int inpos, final int[] out,
- int outpos) {
+ private static void fastpackNoMask12(final int[] in, int inpos,
+ final int[] out, int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV.and(MASK_24);
+ var oV = iV;
iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
-
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.and(MASK_24).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
@@ -3250,7535 +2033,1600 @@ private static void fastpack24(final int[] in, int inpos, final int[] out,
oV = oV.zero(SPECIES_512);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.and(MASK_24).or(oV);
+ oV = iV.or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.and(MASK_24).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
}
- private static void fastpack25(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_25);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 7);
+ private static void fastpackNoMask14(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 18).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 14);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 11).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 21);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 4).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 29).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 3);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 22).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 10);
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 15).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 17);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 8).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 24);
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 1).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 26).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 6);
+ }
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 19).or(oV);
+ private static void fastpackNoMask16(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+ oV = oV.zero(SPECIES_512);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 13);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 12).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 20);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 5).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 30).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 2);
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 23).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 9);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 16).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 16);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 9).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 23);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 2).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 27).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 5);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 20).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 12);
+ }
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 13).or(oV);
+ private static void fastpackNoMask18(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 19);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 6).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 31).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 1);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 24).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 17).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 15);
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 10).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 22);
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 3).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 28).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 4);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 21).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 11);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 14).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 18);
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 7).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
oV.intoArray(out, outpos);
}
- private static void fastpack26(final int[] in, int inpos, final int[] out,
- int outpos) {
+ private static void fastpackNoMask20(final int[] in, int inpos,
+ final int[] out, int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV.and(MASK_26);
+ var oV = iV;
iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+ oV = oV.zero(SPECIES_512);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+ oV = iV.or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
}
- private static void fastpack27(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_27);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 27).or(oV);
+ private static void fastpackNoMask22(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 5);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 22).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 15);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 12).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 20);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 7).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 25);
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 2).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 29).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 3);
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 24).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 19).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 13);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 14).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 18);
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 9).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 23);
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 4).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 31).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 1);
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 26).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 6);
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 21).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 11);
+ }
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 16).or(oV);
+ private static void fastpackNoMask24(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 16);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 11).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 21);
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 6).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 26);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 1).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 28).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 23).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 9);
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 18).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 13).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ oV = oV.zero(SPECIES_512);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 19);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 8).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 24);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 3).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 30).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 2);
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 25).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 20).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ oV = oV.zero(SPECIES_512);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 12);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 15).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 17);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 10).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 22);
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 5).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
}
- private static void fastpack28(final int[] in, int inpos, final int[] out,
- int outpos) {
+ private static void fastpackNoMask26(final int[] in, int inpos,
+ final int[] out, int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV.and(MASK_28);
+ var oV = iV;
iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = oV.zero(SPECIES_512);
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.and(MASK_28).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
oV.intoArray(out, outpos);
}
- private static void fastpack29(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_29);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 29).or(oV);
+ private static void fastpackNoMask28(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 3);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 26).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 6);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 23).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 9);
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 20).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 12);
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 17).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 15);
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 14).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 18);
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 11).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 8).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ oV = oV.zero(SPECIES_512);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 24);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.or(oV);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 5).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 27);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 2).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 31).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 1);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 28).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 25).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 7);
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 22).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 10);
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 19).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 13);
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 16).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 13).or(oV);
+ }
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 19);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 22);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 28);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 26);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpack30(final int[] in, int inpos, final int[] out,
- int outpos) {
+ private static void fastpackNoMask30(final int[] in, int inpos,
+ final int[] out, int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV.and(MASK_30);
+ var oV = iV;
iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
oV.intoArray(out, outpos);
}
- private static void fastpack31(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV.and(MASK_31);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 1);
+ private static void fastunpack2(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 30).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 2);
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 29).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 3);
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 28).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 4);
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 27).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 5);
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 26).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 6);
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 25).or(oV);
+ private static void fastunpack4(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 7);
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 24).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 8);
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 23).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 9);
+ var oV = iV.and(MASK_4);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 22).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xf).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 10);
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 21).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 11);
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 20).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 12);
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 19).or(oV);
+ private static void fastunpack6(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 13);
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 18).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 14);
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 17).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 2).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 16).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 16);
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 15).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 17);
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 14).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 18);
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 13).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 19);
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 12).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 22);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 24);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 26);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 28);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 30);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask1(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask2(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask3(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask4(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask5(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask6(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask7(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask8(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask9(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask10(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask11(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask12(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask13(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask14(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask15(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask16(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask17(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask18(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask19(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask20(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask21(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask22(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask23(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask24(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask25(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask26(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask27(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask28(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.or(oV);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask29(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask30(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastpackNoMask31(final int[] in, int inpos,
- final int[] out, int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- var oV = iV;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 1);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
- oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- }
-
- private static void fastunpack1(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 9).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 11).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 13).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 15).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 17).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 18).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 19).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 21).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 22).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 23).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 24).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 25).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 26).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 27).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 28).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 29).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 30).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 31).and(MASK_1).intoArray(out, outpos);
- outpos += VLEN_256;
- }
-
- private static void fastunpack2(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- iV.and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
- outpos += VLEN_512;
- }
-
- private static void fastunpack3(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 9).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 15).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 18).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 21).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 24).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 27).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 13).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 19).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 22).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 25).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 28).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_3);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 11).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 17).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 23).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 26).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 29).and(MASK_3).intoArray(out, outpos);
- outpos += VLEN_256;
- }
-
- private static void fastunpack4(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- iV.and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- var oV = iV.and(MASK_4);
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(0xf).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
- outpos += VLEN_512;
- }
-
- private static void fastunpack5(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 15).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 25).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 13).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 18).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 23).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 11).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 21).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 26).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 9).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 19).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 24).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_5);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 17).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 22).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 27).and(MASK_5).intoArray(out, outpos);
- outpos += VLEN_256;
- }
-
- private static void fastunpack6(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- iV.and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
- outpos += VLEN_512;
- }
-
- private static void fastunpack7(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 21).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 17).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 24).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 13).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 9).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 23).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 19).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 15).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 22).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_7);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 11).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 18).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 25).and(MASK_7).intoArray(out, outpos);
- outpos += VLEN_256;
- }
-
- private static void fastunpack8(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- iV.and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
-
- var oV = iV.and(MASK_8);
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(0xff).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(0xff).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(0xff).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
- outpos += VLEN_512;
- }
-
- private static void fastunpack9(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 9).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 18).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 13).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 22).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 17).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 21).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 11).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 15).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 19).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_9);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 23).and(MASK_9).intoArray(out, outpos);
- outpos += VLEN_256;
- }
-
- private static void fastunpack10(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- iV.and(MASK_10).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
- outpos += VLEN_512;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
- outpos += VLEN_512;
- }
-
- private static void fastunpack11(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 11).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 13).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 15).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 17).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 18).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 19).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 9).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_11);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 21).and(MASK_11).intoArray(out, outpos);
- outpos += VLEN_256;
- }
-
- private static void fastunpack12(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- iV.and(MASK_12).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
- outpos += VLEN_512;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(0xfff).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
- outpos += VLEN_512;
- }
-
- private static void fastunpack13(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 13).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 15).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 9).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 17).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 11).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 18).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_13);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 19).and(MASK_13).intoArray(out, outpos);
- outpos += VLEN_256;
- }
-
- private static void fastunpack14(final int[] in, int inpos, final int[] out,
- int outpos) {
+ private static void fastunpack8(final int[] in, int inpos, final int[] out,
+ int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- iV.and(MASK_14).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
- outpos += VLEN_512;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ iV.and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
- }
-
- private static void fastunpack15(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 15).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
- iV.lanewise(VectorOperators.LSHR, 13).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 11).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 9).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_15);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 17).and(MASK_15).intoArray(out, outpos);
- outpos += VLEN_256;
- }
-
- private static void fastunpack16(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- iV.and(MASK_16).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
- var oV = iV.and(MASK_16);
+ var oV = iV.and(MASK_8);
oV = oV.zero(SPECIES_512);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(0xffff).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(0xffff).or(oV);
+ oV = iV.and(0xff).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(0xffff).or(oV);
-
- oV.intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.and(0xffff).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0xff).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.and(0xffff).or(oV);
-
- oV.intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.and(0xffff).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xff).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
- oV = oV.zero(SPECIES_512);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.and(0xffff).or(oV);
-
- oV.intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
outpos += VLEN_512;
}
- private static void fastunpack17(final int[] in, int inpos, final int[] out,
+ private static void fastunpack10(final int[] in, int inpos, final int[] out,
int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 15).or(oV);
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_17);
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 13).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 2).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 11).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_17);
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 9).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_17);
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 7).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 6).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_17);
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 5).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_17);
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 3).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ private static void fastunpack12(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_17);
+ var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 1).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 16).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_17);
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 14).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 12).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_17);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 10).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xfff).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_17);
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 8).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 9).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 6).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 11).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_17);
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 4).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 13).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_17);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 2).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 15).and(MASK_17).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
}
- private static void fastunpack18(final int[] in, int inpos, final int[] out,
+ private static void fastunpack14(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
- iV.and(MASK_18).intoArray(out, outpos);
+ iV.and(MASK_14).intoArray(out, outpos);
outpos += VLEN_512;
- var oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 14).or(oV);
+ oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 10).or(oV);
+ oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 6).or(oV);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
- oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 2).or(oV);
+ oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 2).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 6).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 12).or(oV);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 10).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 8).or(oV);
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
- oV.intoArray(out, outpos);
+ private static void fastunpack16(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_16).intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+ var oV = iV.and(MASK_16);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 4).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xffff).or(oV);
oV.intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
outpos += VLEN_512;
- }
-
- private static void fastunpack19(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_19);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 13).or(oV);
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_19);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 7).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0xffff).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 12).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_19);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 1).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_19);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 14).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xffff).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_19);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 8).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(0xffff).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 11).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_19);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 2).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_19);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 15).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(0xffff).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_19);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 9).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(0xffff).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_19);
+ oV = oV.zero(SPECIES_512);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 3).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(0xffff).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_19);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 16).or(oV);
+ outpos += VLEN_512;
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
+ private static void fastunpack18(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_19);
+ var oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 10).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 14).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 9).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_19);
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 4).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 10).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_19);
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 17).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 6).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_19);
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 11).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 2).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_19);
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 5).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_19);
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 18).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_19);
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 12).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_19);
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 6).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 13).and(MASK_19).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
}
private static void fastunpack20(final int[] in, int inpos, final int[] out,
@@ -10878,206 +3726,6 @@ private static void fastunpack20(final int[] in, int inpos, final int[] out,
outpos += VLEN_512;
}
- private static void fastunpack21(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_21).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_21).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 9).and(MASK_21).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(0x7ffff).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_21).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_21).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_21).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_21).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_21).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_21).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_21).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_21).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_21);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 11).and(MASK_21).intoArray(out, outpos);
- outpos += VLEN_256;
- }
-
private static void fastunpack22(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
@@ -11138,256 +3786,46 @@ private static void fastunpack22(final int[] in, int inpos, final int[] out,
oV.intoArray(out, outpos);
outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
- oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
- oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
- outpos += VLEN_512;
- }
-
- private static void fastunpack23(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_23).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_23).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(0x7ffff).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_23).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_23).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_23).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_23).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(0x1fffff).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_23).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 8).and(MASK_23).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_23);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_23);
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 10).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 4).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_23);
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 19).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 14).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_23).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_23);
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 5).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 2).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_23);
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 14).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 12).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 9).and(MASK_23).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_512;
}
private static void fastunpack24(final int[] in, int inpos, final int[] out,
@@ -11497,226 +3935,6 @@ private static void fastunpack24(final int[] in, int inpos, final int[] out,
outpos += VLEN_512;
}
- private static void fastunpack25(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_25).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_25).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_25).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(0x7ffff).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_25).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(0x7fffff).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_25).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_25).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_25).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(0x1fffff).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_25);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 7).and(MASK_25).intoArray(out, outpos);
- outpos += VLEN_256;
- }
-
private static void fastunpack26(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
@@ -11799,264 +4017,34 @@ private static void fastunpack26(final int[] in, int inpos, final int[] out,
oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 2).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
- oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
-
- iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_512;
-
- iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
- outpos += VLEN_512;
- }
-
- private static void fastunpack27(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_27).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_27).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(0x7ffff).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 4).and(MASK_27).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(0x3ffffff).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(0x1fffff).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_27).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(0x7fffff).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_27).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(0x1ffffff).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_27);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_27);
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 12).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 8).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_27);
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 17).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 14).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_27);
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 22).or(oV);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 20).or(oV);
oV.intoArray(out, outpos);
- outpos += VLEN_256;
+ outpos += VLEN_512;
- iV.lanewise(VectorOperators.LSHR, 5).and(MASK_27).intoArray(out, outpos);
- outpos += VLEN_256;
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_512;
}
private static void fastunpack28(final int[] in, int inpos, final int[] out,
@@ -12176,246 +4164,6 @@ private static void fastunpack28(final int[] in, int inpos, final int[] out,
outpos += VLEN_512;
}
- private static void fastunpack29(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_29).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(0x3ffffff).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(0x7fffff).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 2).and(MASK_29).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(0xfffffff).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(0x1ffffff).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(0x7ffff).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_29).intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(0x7ffffff).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(0x1fffff).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_29);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 3).and(MASK_29).intoArray(out, outpos);
- outpos += VLEN_256;
- }
-
private static void fastunpack30(final int[] in, int inpos, final int[] out,
int outpos) {
var iV = IntVector.fromArray(SPECIES_512, in, inpos);
@@ -12538,253 +4286,4 @@ private static void fastunpack30(final int[] in, int inpos, final int[] out,
outpos += VLEN_512;
}
- private static void fastunpack31(final int[] in, int inpos, final int[] out,
- int outpos) {
- var iV = IntVector.fromArray(SPECIES_256, in, inpos);
- iV.and(MASK_31).intoArray(out, outpos);
- outpos += VLEN_256;
-
- var oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
- oV = iV.and(0x3fffffff).lanewise(VectorOperators.LSHL, 1).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
- oV = iV.and(0x1fffffff).lanewise(VectorOperators.LSHL, 2).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
- oV = iV.and(0xfffffff).lanewise(VectorOperators.LSHL, 3).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
- oV = iV.and(0x7ffffff).lanewise(VectorOperators.LSHL, 4).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
- oV = iV.and(0x3ffffff).lanewise(VectorOperators.LSHL, 5).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
- oV = iV.and(0x1ffffff).lanewise(VectorOperators.LSHL, 6).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
- oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 7).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
- oV = iV.and(0x7fffff).lanewise(VectorOperators.LSHL, 8).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
- oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 9).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
- oV = iV.and(0x1fffff).lanewise(VectorOperators.LSHL, 10).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
- oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 11).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
- oV = iV.and(0x7ffff).lanewise(VectorOperators.LSHL, 12).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
- oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 13).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
- oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 14).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
- oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 15).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
- oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 16).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
- oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 17).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
- oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 18).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
- oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 19).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
- oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 20).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
- oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 21).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
- oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 22).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
- oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 23).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
- oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 24).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
- oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 25).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
- oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 26).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
- oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 27).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
- oV = iV.and(7).lanewise(VectorOperators.LSHL, 28).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 3).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
- oV = iV.and(3).lanewise(VectorOperators.LSHL, 29).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- oV = iV.lanewise(VectorOperators.LSHR, 2).and(MASK_31);
-
- iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
- oV = iV.and(1).lanewise(VectorOperators.LSHL, 30).or(oV);
-
- oV.intoArray(out, outpos);
- outpos += VLEN_256;
-
- iV.lanewise(VectorOperators.LSHR, 1).and(MASK_31).intoArray(out, outpos);
- outpos += VLEN_256;
- }
}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBitPacker128.java b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker128.java
new file mode 100644
index 0000000..6e08546
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker128.java
@@ -0,0 +1,31953 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.vector;
+
+import java.util.Arrays;
+import jdk.incubator.vector.*;
+
+/**
+ * Vectorized bit-packing routines using 128-bit (4 x int32) vectors.
+ *
+ * A 256-integer block is packed across 4 SIMD lanes, each lane packing 64
+ * values into 2*b 32-bit words. Selected at runtime by VectorBitPackerKernels
+ * when the preferred hardware vector width is 128 bits (e.g. Arm NEON, Graviton).
+ */
+public class VectorBitPacker128 implements VectorBitPackerKernels {
+ private static final VectorSpecies SPECIES_128 =
+ IntVector.SPECIES_128;
+ private static final int VLEN_128 = 4;
+ private static final int BLOCK_SIZE = 256;
+
+ private static final IntVector MASK_1 =
+ IntVector.broadcast(SPECIES_128, (1 << 1) - 1);
+ private static final IntVector MASK_2 =
+ IntVector.broadcast(SPECIES_128, (1 << 2) - 1);
+ private static final IntVector MASK_3 =
+ IntVector.broadcast(SPECIES_128, (1 << 3) - 1);
+ private static final IntVector MASK_4 =
+ IntVector.broadcast(SPECIES_128, (1 << 4) - 1);
+ private static final IntVector MASK_5 =
+ IntVector.broadcast(SPECIES_128, (1 << 5) - 1);
+ private static final IntVector MASK_6 =
+ IntVector.broadcast(SPECIES_128, (1 << 6) - 1);
+ private static final IntVector MASK_7 =
+ IntVector.broadcast(SPECIES_128, (1 << 7) - 1);
+ private static final IntVector MASK_8 =
+ IntVector.broadcast(SPECIES_128, (1 << 8) - 1);
+ private static final IntVector MASK_9 =
+ IntVector.broadcast(SPECIES_128, (1 << 9) - 1);
+ private static final IntVector MASK_10 =
+ IntVector.broadcast(SPECIES_128, (1 << 10) - 1);
+ private static final IntVector MASK_11 =
+ IntVector.broadcast(SPECIES_128, (1 << 11) - 1);
+ private static final IntVector MASK_12 =
+ IntVector.broadcast(SPECIES_128, (1 << 12) - 1);
+ private static final IntVector MASK_13 =
+ IntVector.broadcast(SPECIES_128, (1 << 13) - 1);
+ private static final IntVector MASK_14 =
+ IntVector.broadcast(SPECIES_128, (1 << 14) - 1);
+ private static final IntVector MASK_15 =
+ IntVector.broadcast(SPECIES_128, (1 << 15) - 1);
+ private static final IntVector MASK_16 =
+ IntVector.broadcast(SPECIES_128, (1 << 16) - 1);
+ private static final IntVector MASK_17 =
+ IntVector.broadcast(SPECIES_128, (1 << 17) - 1);
+ private static final IntVector MASK_18 =
+ IntVector.broadcast(SPECIES_128, (1 << 18) - 1);
+ private static final IntVector MASK_19 =
+ IntVector.broadcast(SPECIES_128, (1 << 19) - 1);
+ private static final IntVector MASK_20 =
+ IntVector.broadcast(SPECIES_128, (1 << 20) - 1);
+ private static final IntVector MASK_21 =
+ IntVector.broadcast(SPECIES_128, (1 << 21) - 1);
+ private static final IntVector MASK_22 =
+ IntVector.broadcast(SPECIES_128, (1 << 22) - 1);
+ private static final IntVector MASK_23 =
+ IntVector.broadcast(SPECIES_128, (1 << 23) - 1);
+ private static final IntVector MASK_24 =
+ IntVector.broadcast(SPECIES_128, (1 << 24) - 1);
+ private static final IntVector MASK_25 =
+ IntVector.broadcast(SPECIES_128, (1 << 25) - 1);
+ private static final IntVector MASK_26 =
+ IntVector.broadcast(SPECIES_128, (1 << 26) - 1);
+ private static final IntVector MASK_27 =
+ IntVector.broadcast(SPECIES_128, (1 << 27) - 1);
+ private static final IntVector MASK_28 =
+ IntVector.broadcast(SPECIES_128, (1 << 28) - 1);
+ private static final IntVector MASK_29 =
+ IntVector.broadcast(SPECIES_128, (1 << 29) - 1);
+ private static final IntVector MASK_30 =
+ IntVector.broadcast(SPECIES_128, (1 << 30) - 1);
+ private static final IntVector MASK_31 =
+ IntVector.broadcast(SPECIES_128, (1 << 31) - 1);
+
+ @Override
+ public void fastpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ break;
+ case 1:
+ fastpack1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastpack2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastpack3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastpack4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastpack5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastpack6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastpack7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastpack8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastpack9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastpack10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastpack11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastpack12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastpack13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastpack14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastpack15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastpack16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastpack17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastpack18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastpack19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastpack20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastpack21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastpack22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastpack23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastpack24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastpack25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastpack26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastpack27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastpack28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastpack29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastpack30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastpack31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ @Override
+ public void fastpackNoMask(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ break;
+ case 1:
+ fastpackNoMask1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastpackNoMask2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastpackNoMask3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastpackNoMask4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastpackNoMask5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastpackNoMask6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastpackNoMask7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastpackNoMask8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastpackNoMask9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastpackNoMask10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastpackNoMask11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastpackNoMask12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastpackNoMask13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastpackNoMask14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastpackNoMask15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastpackNoMask16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastpackNoMask17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastpackNoMask18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastpackNoMask19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastpackNoMask20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastpackNoMask21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastpackNoMask22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastpackNoMask23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastpackNoMask24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastpackNoMask25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastpackNoMask26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastpackNoMask27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastpackNoMask28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastpackNoMask29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastpackNoMask30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastpackNoMask31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ @Override
+ public void fastunpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ Arrays.fill(out, outpos, outpos + 256, 0);
+ break;
+ case 1:
+ fastunpack1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastunpack2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastunpack3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastunpack4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastunpack5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastunpack6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastunpack7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastunpack8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastunpack9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastunpack10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastunpack11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastunpack12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastunpack13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastunpack14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastunpack15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastunpack16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastunpack17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastunpack18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastunpack19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastunpack20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastunpack21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastunpack22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastunpack23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastunpack24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastunpack25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastunpack26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastunpack27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastunpack28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastunpack29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastunpack30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastunpack31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ private static void fastpack1(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask1(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack1(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 29).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 31).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ iV.and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 29).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 31).and(MASK_1).intoArray(out, outpos);
+ }
+
+ private static void fastpack2(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask2(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack2(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ }
+
+ private static void fastpack3(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask3(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack3(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 29).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 29).and(MASK_3).intoArray(out, outpos);
+ }
+
+ private static void fastpack4(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask4(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack4(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ }
+
+ private static void fastpack5(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask5(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack5(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ iV.and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_5).intoArray(out, outpos);
+ }
+
+ private static void fastpack6(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask6(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack6(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ }
+
+ private static void fastpack7(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask7(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack7(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ iV.and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_7).intoArray(out, outpos);
+ }
+
+ private static void fastpack8(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask8(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack8(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ }
+
+ private static void fastpack9(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask9(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack9(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_9).intoArray(out, outpos);
+ }
+
+ private static void fastpack10(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask10(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack10(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ }
+
+ private static void fastpack11(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask11(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack11(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ iV.and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_11).intoArray(out, outpos);
+ }
+
+ private static void fastpack12(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask12(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack12(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ }
+
+ private static void fastpack13(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask13(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack13(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ iV.and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_13).intoArray(out, outpos);
+ }
+
+ private static void fastpack14(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask14(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack14(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ }
+
+ private static void fastpack15(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask15(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack15(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_15).intoArray(out, outpos);
+ }
+
+ private static void fastpack16(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask16(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack16(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ }
+
+ private static void fastpack17(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask17(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack17(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ iV.and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_17).intoArray(out, outpos);
+ }
+
+ private static void fastpack18(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask18(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack18(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ }
+
+ private static void fastpack19(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask19(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack19(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ iV.and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_19).intoArray(out, outpos);
+ }
+
+ private static void fastpack20(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask20(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack20(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ }
+
+ private static void fastpack21(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask21(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack21(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ iV.and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_21).intoArray(out, outpos);
+ }
+
+ private static void fastpack22(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask22(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack22(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ }
+
+ private static void fastpack23(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask23(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack23(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ iV.and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_23).intoArray(out, outpos);
+ }
+
+ private static void fastpack24(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask24(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack24(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ }
+
+ private static void fastpack25(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask25(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack25(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ iV.and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_25).intoArray(out, outpos);
+ }
+
+ private static void fastpack26(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask26(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack26(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ }
+
+ private static void fastpack27(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask27(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack27(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ iV.and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_27).intoArray(out, outpos);
+ }
+
+ private static void fastpack28(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask28(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack28(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ }
+
+ private static void fastpack29(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask29(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack29(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(134217727).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ iV.and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(134217727).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_29).intoArray(out, outpos);
+ }
+
+ private static void fastpack30(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask30(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack30(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ }
+
+ private static void fastpack31(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask31(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack31(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_31).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(1073741823).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(536870911).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(134217727).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_31).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ iV.and(MASK_31).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(1073741823).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(536870911).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(134217727).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_31).intoArray(out, outpos);
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBitPacker256.java b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker256.java
new file mode 100644
index 0000000..02596f5
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker256.java
@@ -0,0 +1,16226 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.vector;
+
+import java.util.Arrays;
+import jdk.incubator.vector.*;
+
+/**
+ * Vectorized bit-packing routines using 256-bit (8 x int32) vectors.
+ *
+ * A 256-integer block is packed across 8 SIMD lanes, each lane packing 32
+ * values into b 32-bit words. Selected at runtime by VectorBitPackerKernels
+ * when the preferred hardware vector width is 256 bits (e.g. AVX2, Graviton3),
+ * where the 512-bit paths of VectorBitPacker fall back to slow emulation.
+ */
+public class VectorBitPacker256 implements VectorBitPackerKernels {
+ private static final VectorSpecies SPECIES_256 =
+ IntVector.SPECIES_256;
+ private static final int VLEN_256 = 8;
+ private static final int BLOCK_SIZE = 256;
+
+ private static final IntVector MASK_1 =
+ IntVector.broadcast(SPECIES_256, (1 << 1) - 1);
+ private static final IntVector MASK_2 =
+ IntVector.broadcast(SPECIES_256, (1 << 2) - 1);
+ private static final IntVector MASK_3 =
+ IntVector.broadcast(SPECIES_256, (1 << 3) - 1);
+ private static final IntVector MASK_4 =
+ IntVector.broadcast(SPECIES_256, (1 << 4) - 1);
+ private static final IntVector MASK_5 =
+ IntVector.broadcast(SPECIES_256, (1 << 5) - 1);
+ private static final IntVector MASK_6 =
+ IntVector.broadcast(SPECIES_256, (1 << 6) - 1);
+ private static final IntVector MASK_7 =
+ IntVector.broadcast(SPECIES_256, (1 << 7) - 1);
+ private static final IntVector MASK_8 =
+ IntVector.broadcast(SPECIES_256, (1 << 8) - 1);
+ private static final IntVector MASK_9 =
+ IntVector.broadcast(SPECIES_256, (1 << 9) - 1);
+ private static final IntVector MASK_10 =
+ IntVector.broadcast(SPECIES_256, (1 << 10) - 1);
+ private static final IntVector MASK_11 =
+ IntVector.broadcast(SPECIES_256, (1 << 11) - 1);
+ private static final IntVector MASK_12 =
+ IntVector.broadcast(SPECIES_256, (1 << 12) - 1);
+ private static final IntVector MASK_13 =
+ IntVector.broadcast(SPECIES_256, (1 << 13) - 1);
+ private static final IntVector MASK_14 =
+ IntVector.broadcast(SPECIES_256, (1 << 14) - 1);
+ private static final IntVector MASK_15 =
+ IntVector.broadcast(SPECIES_256, (1 << 15) - 1);
+ private static final IntVector MASK_16 =
+ IntVector.broadcast(SPECIES_256, (1 << 16) - 1);
+ private static final IntVector MASK_17 =
+ IntVector.broadcast(SPECIES_256, (1 << 17) - 1);
+ private static final IntVector MASK_18 =
+ IntVector.broadcast(SPECIES_256, (1 << 18) - 1);
+ private static final IntVector MASK_19 =
+ IntVector.broadcast(SPECIES_256, (1 << 19) - 1);
+ private static final IntVector MASK_20 =
+ IntVector.broadcast(SPECIES_256, (1 << 20) - 1);
+ private static final IntVector MASK_21 =
+ IntVector.broadcast(SPECIES_256, (1 << 21) - 1);
+ private static final IntVector MASK_22 =
+ IntVector.broadcast(SPECIES_256, (1 << 22) - 1);
+ private static final IntVector MASK_23 =
+ IntVector.broadcast(SPECIES_256, (1 << 23) - 1);
+ private static final IntVector MASK_24 =
+ IntVector.broadcast(SPECIES_256, (1 << 24) - 1);
+ private static final IntVector MASK_25 =
+ IntVector.broadcast(SPECIES_256, (1 << 25) - 1);
+ private static final IntVector MASK_26 =
+ IntVector.broadcast(SPECIES_256, (1 << 26) - 1);
+ private static final IntVector MASK_27 =
+ IntVector.broadcast(SPECIES_256, (1 << 27) - 1);
+ private static final IntVector MASK_28 =
+ IntVector.broadcast(SPECIES_256, (1 << 28) - 1);
+ private static final IntVector MASK_29 =
+ IntVector.broadcast(SPECIES_256, (1 << 29) - 1);
+ private static final IntVector MASK_30 =
+ IntVector.broadcast(SPECIES_256, (1 << 30) - 1);
+ private static final IntVector MASK_31 =
+ IntVector.broadcast(SPECIES_256, (1 << 31) - 1);
+
+ @Override
+ public void fastpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ break;
+ case 1:
+ fastpack1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastpack2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastpack3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastpack4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastpack5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastpack6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastpack7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastpack8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastpack9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastpack10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastpack11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastpack12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastpack13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastpack14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastpack15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastpack16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastpack17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastpack18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastpack19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastpack20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastpack21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastpack22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastpack23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastpack24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastpack25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastpack26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastpack27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastpack28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastpack29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastpack30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastpack31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ @Override
+ public void fastpackNoMask(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ break;
+ case 1:
+ fastpackNoMask1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastpackNoMask2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastpackNoMask3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastpackNoMask4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastpackNoMask5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastpackNoMask6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastpackNoMask7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastpackNoMask8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastpackNoMask9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastpackNoMask10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastpackNoMask11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastpackNoMask12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastpackNoMask13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastpackNoMask14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastpackNoMask15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastpackNoMask16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastpackNoMask17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastpackNoMask18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastpackNoMask19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastpackNoMask20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastpackNoMask21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastpackNoMask22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastpackNoMask23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastpackNoMask24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastpackNoMask25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastpackNoMask26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastpackNoMask27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastpackNoMask28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastpackNoMask29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastpackNoMask30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastpackNoMask31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ @Override
+ public void fastunpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ Arrays.fill(out, outpos, outpos + 256, 0);
+ break;
+ case 1:
+ fastunpack1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastunpack2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastunpack3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastunpack4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastunpack5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastunpack6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastunpack7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastunpack8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastunpack9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastunpack10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastunpack11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastunpack12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastunpack13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastunpack14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastunpack15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastunpack16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastunpack17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastunpack18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastunpack19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastunpack20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastunpack21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastunpack22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastunpack23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastunpack24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastunpack25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastunpack26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastunpack27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastunpack28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastunpack29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastunpack30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastunpack31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ static void fastpack1(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask1(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack1(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 29).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 31).and(MASK_1).intoArray(out, outpos);
+ }
+
+ static void fastpack2(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask2(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack2(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ }
+
+ static void fastpack3(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask3(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack3(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 29).and(MASK_3).intoArray(out, outpos);
+ }
+
+ static void fastpack4(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask4(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack4(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ }
+
+ static void fastpack5(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask5(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack5(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_5).intoArray(out, outpos);
+ }
+
+ static void fastpack6(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask6(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack6(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ }
+
+ static void fastpack7(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask7(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack7(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_7).intoArray(out, outpos);
+ }
+
+ static void fastpack8(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask8(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack8(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ }
+
+ static void fastpack9(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask9(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack9(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_9).intoArray(out, outpos);
+ }
+
+ static void fastpack10(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask10(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack10(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ }
+
+ static void fastpack11(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask11(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack11(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_11).intoArray(out, outpos);
+ }
+
+ static void fastpack12(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask12(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack12(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ }
+
+ static void fastpack13(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask13(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack13(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_13).intoArray(out, outpos);
+ }
+
+ static void fastpack14(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask14(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack14(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ }
+
+ static void fastpack15(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask15(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack15(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_15).intoArray(out, outpos);
+ }
+
+ static void fastpack16(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask16(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack16(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ }
+
+ static void fastpack17(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask17(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack17(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_17).intoArray(out, outpos);
+ }
+
+ static void fastpack18(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask18(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack18(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ }
+
+ static void fastpack19(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask19(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack19(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_19).intoArray(out, outpos);
+ }
+
+ static void fastpack20(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask20(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack20(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ }
+
+ static void fastpack21(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask21(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack21(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_21).intoArray(out, outpos);
+ }
+
+ static void fastpack22(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask22(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack22(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ }
+
+ static void fastpack23(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask23(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack23(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_23).intoArray(out, outpos);
+ }
+
+ static void fastpack24(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask24(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack24(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ }
+
+ static void fastpack25(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask25(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack25(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_25).intoArray(out, outpos);
+ }
+
+ static void fastpack26(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask26(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack26(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ }
+
+ static void fastpack27(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask27(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack27(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_27).intoArray(out, outpos);
+ }
+
+ static void fastpack28(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask28(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack28(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ }
+
+ static void fastpack29(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask29(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack29(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(134217727).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_29).intoArray(out, outpos);
+ }
+
+ static void fastpack30(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask30(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack30(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ }
+
+ static void fastpack31(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask31(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack31(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_31).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(1073741823).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(536870911).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(134217727).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_31).intoArray(out, outpos);
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBitPackerKernels.java b/src/main/java/me/lemire/integercompression/vector/VectorBitPackerKernels.java
new file mode 100644
index 0000000..9179827
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorBitPackerKernels.java
@@ -0,0 +1,78 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.vector;
+
+import jdk.incubator.vector.IntVector;
+
+/**
+ * Width-specific vectorized bit-packing kernels for a 256-integer block.
+ * Implemented by VectorBitPacker (512-bit lanes), VectorBitPacker256 (256-bit
+ * lanes) and VectorBitPacker128 (128-bit lanes). The packed layout differs per
+ * width, so a stream is decoded by the same kernel that packed it.
+ */
+public interface VectorBitPackerKernels {
+
+ void fastpack(int[] in, int inpos, int[] out, int outpos, int b);
+
+ void fastpackNoMask(int[] in, int inpos, int[] out, int outpos, int b);
+
+ void fastunpack(int[] in, int inpos, int[] out, int outpos, int b);
+
+ /**
+ * Hardware vector lane width a stream was packed for. The packed byte layout
+ * differs per width and is not interchangeable across widths, so the stream
+ * carries its width (as {@link #code}) and is decoded by {@link #kernel}.
+ */
+ enum LaneWidth {
+ BITS_128(0, 128, new VectorBitPacker128()),
+ BITS_256(1, 256, new VectorBitPacker256()),
+ BITS_512(2, 512, new VectorBitPacker());
+
+ /** Compact wire tag stored in the stream (fits in 2 bits). */
+ public final int code;
+ /** Native vector lane width in bits. */
+ public final int bits;
+ /** Kernel that packs and unpacks at this width. */
+ public final VectorBitPackerKernels kernel;
+
+ LaneWidth(int code, int bits, VectorBitPackerKernels kernel) {
+ this.code = code;
+ this.bits = bits;
+ this.kernel = kernel;
+ }
+
+ /** Width whose kernel runs natively on this machine (encode default). */
+ public static final LaneWidth PREFERRED =
+ forHost(IntVector.SPECIES_PREFERRED.vectorBitSize());
+
+ /** Largest kernel width that runs natively on a machine of {@code hostBits}. */
+ public static LaneWidth forHost(int hostBits) {
+ LaneWidth best = null;
+ for (LaneWidth width : values()) {
+ if (width.bits <= hostBits && (best == null || width.bits > best.bits)) {
+ best = width;
+ }
+ }
+ if (best == null) {
+ throw new IllegalStateException(
+ "no vector bit-packing kernel fits this machine's preferred vector width of "
+ + hostBits + " bits");
+ }
+ return best;
+ }
+
+ /** Maps a stream wire tag back to its width. */
+ public static LaneWidth fromCode(int code) {
+ for (LaneWidth width : values()) {
+ if (width.code == code) {
+ return width;
+ }
+ }
+ throw new IllegalArgumentException("unknown vector lane-width tag " + code);
+ }
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java b/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java
index 0b6ca17..cc755c8 100644
--- a/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java
+++ b/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java
@@ -12,6 +12,7 @@
import me.lemire.integercompression.IntegerCODEC;
import me.lemire.integercompression.SkippableIntegerCODEC;
import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.vector.VectorBitPackerKernels.LaneWidth;
/**
* This is a patching scheme designed for speed.
@@ -41,16 +42,33 @@
* For multi-threaded applications, each thread should use its own FastPFOR
* object.
*
+ * Blocks are packed in a vectorized layout that differs by hardware vector
+ * lane width, so each stream is tagged with the width it was packed for and is
+ * decoded by the matching kernel. Decoding requires a machine whose preferred
+ * vector width is at least the stream's; a narrower machine fails fast rather
+ * than emulating. The default constructor packs at this machine's preferred
+ * width; the {@code (int, LaneWidth)} constructor pins a width so a
+ * heterogeneous cluster can decode on its narrowest node.
+ *
* @author Daniel Lemire
*/
public class VectorFastPFOR implements IntegerCODEC, SkippableIntegerCODEC {
private final static int OVERHEAD_OF_EACH_EXCEPT = 8;
+ private static final int OVERHEAD_OF_EACH_PAGE_IN_INTS = 36;
+ private static final int OVERHEAD_OF_EACH_BLOCK_IN_INTS = 1;
public final static int DEFAULT_PAGE_SIZE = 64 << 10;
public final static int BLOCK_SIZE = 256;
private final static int INTS_PER_BLOCK = BLOCK_SIZE >>> 5;
+ // The page header word holds the metadata offset in its low 30 bits and the
+ // packing lane-width tag in its top 2 bits.
+ private final static int WIDTH_SHIFT = 30;
+ private final static int WHEREMETA_MASK = (1 << WIDTH_SHIFT) - 1;
+
private final int pageSize;
+ private final LaneWidth encodeWidth;
+ private final VectorBitPackerKernels encoder;
private final int[][] dataTobePacked = new int[33][];
private int[] exceptData = null;
@@ -64,9 +82,18 @@ public class VectorFastPFOR implements IntegerCODEC, SkippableIntegerCODEC {
* @param pagesize
* the desired page size (recommended value is
* FastPFOR.DEFAULT_PAGE_SIZE)
+ * @param encodeWidth
+ * the vector lane width to pack with. Use
+ * {@link LaneWidth#PREFERRED} for this machine's fastest layout, or pin a
+ * cluster to its narrowest node's width so every node can decode the stream.
*/
- private VectorFastPFOR(int pagesize) {
+ public VectorFastPFOR(int pagesize, LaneWidth encodeWidth) {
+ if (pagesize >= (1 << WIDTH_SHIFT))
+ throw new IllegalArgumentException("page size must be smaller than "
+ + (1 << WIDTH_SHIFT));
pageSize = pagesize;
+ this.encodeWidth = encodeWidth;
+ this.encoder = encodeWidth.kernel;
// Initiate arrrays.
bem = new byte[3 * pageSize / BLOCK_SIZE + pagesize];
for (int k = 1; k < dataTobePacked.length; ++k)
@@ -75,9 +102,10 @@ private VectorFastPFOR(int pagesize) {
}
/**
- * Construct the fastPFOR CODEC with default parameters.
+ * Construct the fastPFOR CODEC with default parameters, packing with this
+ * machine's preferred vector lane width.
*/
- public VectorFastPFOR() { this(DEFAULT_PAGE_SIZE); }
+ public VectorFastPFOR() { this(DEFAULT_PAGE_SIZE, LaneWidth.PREFERRED); }
/**
* Compress data in blocks of BLOCK_SIZE integers (if fewer than BLOCK_SIZE
@@ -165,11 +193,11 @@ private void encodePage(int[] in, IntWrapper inpos, int thissize, int[] out,
} else {
bindex += 2;
}
- VectorBitPacker.fastpack(in, tmpinpos, out, tmpoutpos, tmpbestb);
+ encoder.fastpack(in, tmpinpos, out, tmpoutpos, tmpbestb);
tmpoutpos += INTS_PER_BLOCK * tmpbestb;
}
inpos.set(tmpinpos);
- out[headerpos] = tmpoutpos - headerpos;
+ out[headerpos] = (tmpoutpos - headerpos) | (encodeWidth.code << WIDTH_SHIFT);
int bytesize = bindex;
out[tmpoutpos++] = bytesize;
@@ -196,13 +224,13 @@ private void encodePage(int[] in, IntWrapper inpos, int thissize, int[] out,
int j = 0;
int n = (dataPointers[k] / BLOCK_SIZE) * BLOCK_SIZE;
for (; j < n; j += BLOCK_SIZE) {
- VectorBitPacker.fastpackNoMask(dataTobePacked[k], j, out, tmpoutpos,
+ encoder.fastpackNoMask(dataTobePacked[k], j, out, tmpoutpos,
k);
tmpoutpos += INTS_PER_BLOCK * k;
}
int r = dataPointers[k] % BLOCK_SIZE;
if (r != 0) {
- tmpoutpos = VectorBitPacker.slowpack(dataTobePacked[k], j, r, out,
+ tmpoutpos = slowpack(dataTobePacked[k], j, r, out,
tmpoutpos, k);
tmpoutpos++;
}
@@ -229,6 +257,15 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
}
}
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ inlength = inlength - inlength % BLOCK_SIZE;
+ int pageCount = (inlength + pageSize - 1) / pageSize;
+ int blockCount = inlength / BLOCK_SIZE;
+ int blockSizeInInts = OVERHEAD_OF_EACH_BLOCK_IN_INTS + BLOCK_SIZE;
+ return OVERHEAD_OF_EACH_PAGE_IN_INTS * pageCount + blockSizeInInts * blockCount + 24;
+ }
+
private void loadMetaData(int[] in, int inexcept, int bytesize) {
// Arrays.fill(bem, (byte)0);
int len = (bytesize + 3) / 4;
@@ -241,10 +278,29 @@ private void loadMetaData(int[] in, int inexcept, int bytesize) {
}
}
+ /**
+ * Rejects a stream packed for wider lanes than this machine runs natively.
+ * Decoding it would silently fall back to scalar emulation; failing loud lets
+ * the caller re-encode the cluster at a lower width instead.
+ */
+ static void checkDecodable(LaneWidth streamWidth, LaneWidth hostWidth) {
+ if (streamWidth.bits > hostWidth.bits) {
+ throw new IllegalStateException(
+ "VectorFastPFOR stream was packed for " + streamWidth.bits
+ + "-bit vector lanes, but this machine runs at most " + hostWidth.bits
+ + "-bit lanes natively. Re-encode with lanes <= " + hostWidth.bits
+ + " bits.");
+ }
+ }
+
private void decodePage(int[] in, IntWrapper inpos, int[] out,
IntWrapper outpos, int thissize) {
final int initpos = inpos.get();
- final int wheremeta = in[inpos.get()];
+ final int header = in[inpos.get()];
+ final int wheremeta = header & WHEREMETA_MASK;
+ final LaneWidth streamWidth = LaneWidth.fromCode(header >>> WIDTH_SHIFT);
+ checkDecodable(streamWidth, LaneWidth.PREFERRED);
+ final VectorBitPackerKernels decoder = streamWidth.kernel;
inpos.increment();
int inexcept = initpos + wheremeta;
@@ -263,11 +319,11 @@ private void decodePage(int[] in, IntWrapper inpos, int[] out,
int j = 0;
int len = (size / BLOCK_SIZE) * BLOCK_SIZE;
for (; j < len; j += BLOCK_SIZE) {
- VectorBitPacker.fastunpack(in, inexcept, dataTobePacked[k], j, k);
+ decoder.fastunpack(in, inexcept, dataTobePacked[k], j, k);
inexcept += INTS_PER_BLOCK * k;
}
int r = size % BLOCK_SIZE;
- inexcept = VectorBitPacker.slowunpack(in, inexcept, dataTobePacked[k],
+ inexcept = slowunpack(in, inexcept, dataTobePacked[k],
j, r, k);
} else {
int j = 0;
@@ -277,12 +333,12 @@ private void decodePage(int[] in, IntWrapper inpos, int[] out,
System.arraycopy(in, inexcept, buf, 0, in.length - inexcept);
int l = (size / BLOCK_SIZE) * BLOCK_SIZE;
for (; j < l; j += BLOCK_SIZE) {
- VectorBitPacker.fastunpack(buf, inexcept - initinexcept,
+ decoder.fastunpack(buf, inexcept - initinexcept,
dataTobePacked[k], j, k);
inexcept += INTS_PER_BLOCK * k;
}
int r = size % BLOCK_SIZE;
- inexcept = VectorBitPacker.slowunpack(in, inexcept, dataTobePacked[k],
+ inexcept = slowunpack(in, inexcept, dataTobePacked[k],
j, r, k);
}
}
@@ -295,7 +351,7 @@ private void decodePage(int[] in, IntWrapper inpos, int[] out,
++run, tmpoutpos += BLOCK_SIZE) {
final int b = bem[idx]; // byteContainer.get();
final int cexcept = bem[idx + 1] & 0xFF; // byteContainer.get() & 0xFF;
- VectorBitPacker.fastunpack(in, tmpinpos, out, tmpoutpos, b);
+ decoder.fastunpack(in, tmpinpos, out, tmpoutpos, b);
tmpinpos += INTS_PER_BLOCK * b;
if (cexcept > 0) {
final int maxbits = bem[idx + 2]; // byteContainer.get();
@@ -358,4 +414,73 @@ public String toString() {
protected ByteBuffer makeBuffer(int sizeInBytes) {
return ByteBuffer.allocateDirect(sizeInBytes);
}
+
+ /**
+ * Packs the sub-block exception remainder, which is not a multiple of the
+ * vector block size, into the sequential scalar layout read back by
+ * {@link #slowunpack}. Zeroes its target words first, then OR-accumulates the
+ * packed bits, so a reused output buffer carries no stale bits.
+ */
+ private static int slowpack(final int[] in, int inpos, int inlen,
+ final int[] out, int outpos, int b) {
+ if (inlen == 0)
+ return outpos;
+ if (b == 32) {
+ System.arraycopy(in, inpos, out, outpos, inlen);
+ return outpos + inlen;
+ }
+ int mask = (1 << b) - 1;
+ Arrays.fill(out, outpos, outpos + (inlen * b + 31) / 32, 0);
+ int c = 0;
+ int l = 0;
+ int r = 0;
+ int val = 0;
+ for (int i = 0; i < inlen; i++) {
+ val = in[inpos + i] & mask;
+ out[outpos] |= val << (c + r);
+ c += b;
+ l = (32 - r) % b;
+ if (c + r >= 32) {
+ if (i < inlen - 1 || l != 0)
+ outpos++;
+ r = l == 0 ? 0 : b - l;
+ if (l != 0)
+ out[outpos] = val >> (b - r);
+ c = 0;
+ }
+ }
+ return outpos;
+ }
+
+ /** Reverses {@link #slowpack}. */
+ private static int slowunpack(final int[] in, int inpos, final int[] out,
+ int outpos, int outlen, int b) {
+ if (outlen == 0) {
+ return inpos;
+ }
+ if (b == 32) {
+ System.arraycopy(in, inpos, out, outpos, outlen);
+ return inpos + outlen;
+ }
+ int mask = (1 << b) - 1;
+ int limit = outpos + outlen;
+ int r = 0;
+ int val = 0;
+ int i = 0;
+ for (; outpos < limit; i++) {
+ if (r > 0)
+ out[outpos++] =
+ (val >>> (32 - (b - r))) | ((in[inpos + i] << (b - r)) & mask);
+ val = in[inpos + i];
+ int j = 0;
+ int l = 32 - r;
+ int ll = l % b == 0 ? l : l - b;
+ while (j < ll && outpos < limit) {
+ out[outpos++] = (val >> (j + r)) & mask;
+ j += b;
+ }
+ r = l % b == 0 ? 0 : b - (l % b);
+ }
+ return inpos + i;
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorIntBitPackBenchmark.java b/src/main/java/me/lemire/integercompression/vector/VectorIntBitPackBenchmark.java
new file mode 100644
index 0000000..ee69c74
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorIntBitPackBenchmark.java
@@ -0,0 +1,103 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.vector;
+
+import java.text.DecimalFormat;
+import java.util.Random;
+
+import me.lemire.integercompression.BitPacking;
+
+/**
+ * Benchmarks the vectorized int bit-packing kernels against the scalar
+ * unrolled {@link BitPacking}, packing 256-integer blocks of each width.
+ * Speeds are millions of integers per second. (For expert use; requires
+ * --add-modules jdk.incubator.vector.)
+ */
+public class VectorIntBitPackBenchmark {
+
+ private static final int BLOCK = 256;
+ private static final int SUBBLOCKS = BLOCK / 32;
+
+ private static void scalarPack(int[] in, int[] out, int bit) {
+ for (int blk = 0; blk < SUBBLOCKS; blk++) {
+ BitPacking.fastpackwithoutmask(in, blk * 32, out, blk * bit, bit);
+ }
+ }
+
+ private static void scalarUnpack(int[] in, int[] out, int bit) {
+ for (int blk = 0; blk < SUBBLOCKS; blk++) {
+ BitPacking.fastunpack(in, blk * bit, out, blk * 32, bit);
+ }
+ }
+
+ private static void test(boolean verbose) {
+ DecimalFormat df = new DecimalFormat("0");
+ final int times = 100000;
+ Random r = new Random(0);
+ int[] data = new int[BLOCK];
+ int[] compressed = new int[8 * 32];
+ int[] uncompressed = new int[BLOCK];
+ VectorBitPacker256 vec256 = new VectorBitPacker256();
+ VectorBitPacker vec = new VectorBitPacker();
+
+ for (int bit = 1; bit <= 32; ++bit) {
+ int mask = bit == 32 ? -1 : (1 << bit) - 1;
+ long scalarComp = 0;
+ long scalarDecomp = 0;
+ long vec256Comp = 0;
+ long vec256Decomp = 0;
+ long vecComp = 0;
+ long vecDecomp = 0;
+ for (int t = 0; t < times; ++t) {
+ for (int k = 0; k < BLOCK; ++k) {
+ data[k] = r.nextInt() & mask;
+ }
+ long time1 = System.nanoTime();
+ scalarPack(data, compressed, bit);
+ long time2 = System.nanoTime();
+ scalarUnpack(compressed, uncompressed, bit);
+ long time3 = System.nanoTime();
+ vec256.fastpackNoMask(data, 0, compressed, 0, bit);
+ long time4 = System.nanoTime();
+ vec256.fastunpack(compressed, 0, uncompressed, 0, bit);
+ long time5 = System.nanoTime();
+ vec.fastpackNoMask(data, 0, compressed, 0, bit);
+ long time6 = System.nanoTime();
+ vec.fastunpack(compressed, 0, uncompressed, 0, bit);
+ long time7 = System.nanoTime();
+ scalarComp += time2 - time1;
+ scalarDecomp += time3 - time2;
+ vec256Comp += time4 - time3;
+ vec256Decomp += time5 - time4;
+ vecComp += time6 - time5;
+ vecDecomp += time7 - time6;
+ }
+ if (verbose) {
+ double sc = BLOCK * times * 1000.0;
+ System.out.println("bit = " + bit
+ + " | scalar comp = " + df.format(sc / scalarComp)
+ + " vec256 comp = " + df.format(sc / vec256Comp)
+ + " vec comp = " + df.format(sc / vecComp)
+ + " | scalar decomp = " + df.format(sc / scalarDecomp)
+ + " vec256 decomp = " + df.format(sc / vec256Decomp)
+ + " vec decomp = " + df.format(sc / vecDecomp));
+ }
+ }
+ }
+
+ /**
+ * Main method.
+ *
+ * @param args command-line arguments
+ */
+ public static void main(String[] args) {
+ System.out.println("Testing int packing (scalar vs VectorBitPacker256 vs "
+ + "VectorBitPacker), 256-int blocks, speeds in millions of ints/s");
+ test(false);
+ test(true);
+ }
+}
diff --git a/src/main/java/me/lemire/longcompression/BenchmarkLongBitPacking.java b/src/main/java/me/lemire/longcompression/BenchmarkLongBitPacking.java
new file mode 100644
index 0000000..d0486a8
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/BenchmarkLongBitPacking.java
@@ -0,0 +1,87 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.longcompression;
+
+import java.text.DecimalFormat;
+import java.util.Random;
+
+/**
+ * Class used to benchmark the speed of long bit packing, comparing the
+ * generic and unrolled {@link LongBitPacking} kernels. (For expert use.)
+ *
+ * @author Daniel Lemire
+ *
+ */
+public class BenchmarkLongBitPacking {
+
+ private static void test(boolean verbose) {
+ DecimalFormat dfspeed = new DecimalFormat("0");
+ final int N = 64;
+ final int times = 100000;
+ Random r = new Random(0);
+ long[] data = new long[N];
+ long[] compressed = new long[N];
+ long[] uncompressed = new long[N];
+ for (int bit = 1; bit < 64; ++bit) {
+ long mask = (1L << bit) - 1;
+ long slowcomp = 0;
+ long slowdecomp = 0;
+ long fastcomp = 0;
+ long fastdecomp = 0;
+ for (int t = 0; t < times; ++t) {
+ for (int k = 0; k < N; ++k) {
+ data[k] = r.nextLong() & mask;
+ }
+ long time1 = System.nanoTime();
+ LongBitPacking.slowpackwithoutmask(data, 0,
+ compressed, 0, bit);
+ long time2 = System.nanoTime();
+ LongBitPacking.slowunpack(compressed, 0,
+ uncompressed, 0, bit);
+ long time3 = System.nanoTime();
+ LongBitPacking.fastpackwithoutmask(data, 0,
+ compressed, 0, bit);
+ long time4 = System.nanoTime();
+ LongBitPacking.fastunpack(compressed, 0,
+ uncompressed, 0, bit);
+ long time5 = System.nanoTime();
+ slowcomp += time2 - time1;
+ slowdecomp += time3 - time2;
+ fastcomp += time4 - time3;
+ fastdecomp += time5 - time4;
+ }
+ if (verbose)
+ System.out.println("bit = "
+ + bit
+ + " slow comp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (slowcomp))
+ + " slow decomp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (slowdecomp))
+ + " unrolled comp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (fastcomp))
+ + " unrolled decomp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (fastdecomp)));
+ }
+ }
+
+ /**
+ * Main method
+ *
+ * @param args
+ * command-line arguments
+ */
+ public static void main(String[] args) {
+ System.out.println("Testing long packing (slow vs unrolled) ");
+ test(false);
+ test(true);
+ }
+
+}
diff --git a/src/main/java/me/lemire/longcompression/LongBinaryPacking.java b/src/main/java/me/lemire/longcompression/LongBinaryPacking.java
index 33bb8f1..b6ea58f 100644
--- a/src/main/java/me/lemire/longcompression/LongBinaryPacking.java
+++ b/src/main/java/me/lemire/longcompression/LongBinaryPacking.java
@@ -23,8 +23,9 @@
* @author Benoit Lacelle
*/
public final class LongBinaryPacking implements LongCODEC, SkippableLongCODEC {
- final static int BLOCK_SIZE = 64;
-
+ public final static int BLOCK_SIZE = 64;
+ private static final int MAX_BIT_WIDTH = Long.SIZE;
+
@Override
public void compress(long[] in, IntWrapper inpos, int inlength,
long[] out, IntWrapper outpos) {
@@ -136,6 +137,15 @@ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength,
inpos.set(tmpinpos);
}
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int blockCount = inlength / BLOCK_SIZE;
+ int headersSizeInLongs = blockCount / Long.BYTES + (blockCount % Long.BYTES);
+ int blocksSizeInLongs = blockCount * MAX_BIT_WIDTH;
+ compressedPositions.add(blockCount * BLOCK_SIZE);
+ return headersSizeInLongs + blocksSizeInLongs;
+ }
+
@Override
public String toString() {
return this.getClass().getSimpleName();
diff --git a/src/main/java/me/lemire/longcompression/LongBitPacking.java b/src/main/java/me/lemire/longcompression/LongBitPacking.java
index 2d282ec..4b5426f 100644
--- a/src/main/java/me/lemire/longcompression/LongBitPacking.java
+++ b/src/main/java/me/lemire/longcompression/LongBitPacking.java
@@ -41,14 +41,204 @@ public final class LongBitPacking {
*/
public static void fastpackwithoutmask(final long[] in, final int inpos,
final long[] out, final int outpos, final int bit) {
- if (bit == 0) {
- fastpackwithoutmask0(in, inpos, out, outpos);
- } else if (bit == 64) {
- fastpackwithoutmask64(in, inpos, out, outpos);
- } else if (bit > 0 && bit < 64) {
- slowpackwithoutmask(in, inpos, out, outpos, bit);
- } else {
- throw new IllegalArgumentException("Unsupported bit width: " + bit);
+ switch (bit) {
+ case 0:
+ fastpackwithoutmask0(in, inpos, out, outpos);
+ break;
+ case 1:
+ fastpackwithoutmask1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastpackwithoutmask2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastpackwithoutmask3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastpackwithoutmask4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastpackwithoutmask5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastpackwithoutmask6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastpackwithoutmask7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastpackwithoutmask8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastpackwithoutmask9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastpackwithoutmask10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastpackwithoutmask11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastpackwithoutmask12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastpackwithoutmask13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastpackwithoutmask14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastpackwithoutmask15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastpackwithoutmask16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastpackwithoutmask17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastpackwithoutmask18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastpackwithoutmask19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastpackwithoutmask20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastpackwithoutmask21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastpackwithoutmask22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastpackwithoutmask23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastpackwithoutmask24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastpackwithoutmask25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastpackwithoutmask26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastpackwithoutmask27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastpackwithoutmask28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastpackwithoutmask29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastpackwithoutmask30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastpackwithoutmask31(in, inpos, out, outpos);
+ break;
+ case 32:
+ fastpackwithoutmask32(in, inpos, out, outpos);
+ break;
+ case 33:
+ fastpackwithoutmask33(in, inpos, out, outpos);
+ break;
+ case 34:
+ fastpackwithoutmask34(in, inpos, out, outpos);
+ break;
+ case 35:
+ fastpackwithoutmask35(in, inpos, out, outpos);
+ break;
+ case 36:
+ fastpackwithoutmask36(in, inpos, out, outpos);
+ break;
+ case 37:
+ fastpackwithoutmask37(in, inpos, out, outpos);
+ break;
+ case 38:
+ fastpackwithoutmask38(in, inpos, out, outpos);
+ break;
+ case 39:
+ fastpackwithoutmask39(in, inpos, out, outpos);
+ break;
+ case 40:
+ fastpackwithoutmask40(in, inpos, out, outpos);
+ break;
+ case 41:
+ fastpackwithoutmask41(in, inpos, out, outpos);
+ break;
+ case 42:
+ fastpackwithoutmask42(in, inpos, out, outpos);
+ break;
+ case 43:
+ fastpackwithoutmask43(in, inpos, out, outpos);
+ break;
+ case 44:
+ fastpackwithoutmask44(in, inpos, out, outpos);
+ break;
+ case 45:
+ fastpackwithoutmask45(in, inpos, out, outpos);
+ break;
+ case 46:
+ fastpackwithoutmask46(in, inpos, out, outpos);
+ break;
+ case 47:
+ fastpackwithoutmask47(in, inpos, out, outpos);
+ break;
+ case 48:
+ fastpackwithoutmask48(in, inpos, out, outpos);
+ break;
+ case 49:
+ fastpackwithoutmask49(in, inpos, out, outpos);
+ break;
+ case 50:
+ fastpackwithoutmask50(in, inpos, out, outpos);
+ break;
+ case 51:
+ fastpackwithoutmask51(in, inpos, out, outpos);
+ break;
+ case 52:
+ fastpackwithoutmask52(in, inpos, out, outpos);
+ break;
+ case 53:
+ fastpackwithoutmask53(in, inpos, out, outpos);
+ break;
+ case 54:
+ fastpackwithoutmask54(in, inpos, out, outpos);
+ break;
+ case 55:
+ fastpackwithoutmask55(in, inpos, out, outpos);
+ break;
+ case 56:
+ fastpackwithoutmask56(in, inpos, out, outpos);
+ break;
+ case 57:
+ fastpackwithoutmask57(in, inpos, out, outpos);
+ break;
+ case 58:
+ fastpackwithoutmask58(in, inpos, out, outpos);
+ break;
+ case 59:
+ fastpackwithoutmask59(in, inpos, out, outpos);
+ break;
+ case 60:
+ fastpackwithoutmask60(in, inpos, out, outpos);
+ break;
+ case 61:
+ fastpackwithoutmask61(in, inpos, out, outpos);
+ break;
+ case 62:
+ fastpackwithoutmask62(in, inpos, out, outpos);
+ break;
+ case 63:
+ fastpackwithoutmask63(in, inpos, out, outpos);
+ break;
+ case 64:
+ fastpackwithoutmask64(in, inpos, out, outpos);
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported bit width: " + bit);
}
}
@@ -57,6 +247,6050 @@ protected static void fastpackwithoutmask0(final long[] in, int inpos,
// nothing
}
+ protected static void fastpackwithoutmask1(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 1)
+ | ((in[2 + inpos]) << 2)
+ | ((in[3 + inpos]) << 3)
+ | ((in[4 + inpos]) << 4)
+ | ((in[5 + inpos]) << 5)
+ | ((in[6 + inpos]) << 6)
+ | ((in[7 + inpos]) << 7)
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 9)
+ | ((in[10 + inpos]) << 10)
+ | ((in[11 + inpos]) << 11)
+ | ((in[12 + inpos]) << 12)
+ | ((in[13 + inpos]) << 13)
+ | ((in[14 + inpos]) << 14)
+ | ((in[15 + inpos]) << 15)
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 17)
+ | ((in[18 + inpos]) << 18)
+ | ((in[19 + inpos]) << 19)
+ | ((in[20 + inpos]) << 20)
+ | ((in[21 + inpos]) << 21)
+ | ((in[22 + inpos]) << 22)
+ | ((in[23 + inpos]) << 23)
+ | ((in[24 + inpos]) << 24)
+ | ((in[25 + inpos]) << 25)
+ | ((in[26 + inpos]) << 26)
+ | ((in[27 + inpos]) << 27)
+ | ((in[28 + inpos]) << 28)
+ | ((in[29 + inpos]) << 29)
+ | ((in[30 + inpos]) << 30)
+ | ((in[31 + inpos]) << 31)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 33)
+ | ((in[34 + inpos]) << 34)
+ | ((in[35 + inpos]) << 35)
+ | ((in[36 + inpos]) << 36)
+ | ((in[37 + inpos]) << 37)
+ | ((in[38 + inpos]) << 38)
+ | ((in[39 + inpos]) << 39)
+ | ((in[40 + inpos]) << 40)
+ | ((in[41 + inpos]) << 41)
+ | ((in[42 + inpos]) << 42)
+ | ((in[43 + inpos]) << 43)
+ | ((in[44 + inpos]) << 44)
+ | ((in[45 + inpos]) << 45)
+ | ((in[46 + inpos]) << 46)
+ | ((in[47 + inpos]) << 47)
+ | ((in[48 + inpos]) << 48)
+ | ((in[49 + inpos]) << 49)
+ | ((in[50 + inpos]) << 50)
+ | ((in[51 + inpos]) << 51)
+ | ((in[52 + inpos]) << 52)
+ | ((in[53 + inpos]) << 53)
+ | ((in[54 + inpos]) << 54)
+ | ((in[55 + inpos]) << 55)
+ | ((in[56 + inpos]) << 56)
+ | ((in[57 + inpos]) << 57)
+ | ((in[58 + inpos]) << 58)
+ | ((in[59 + inpos]) << 59)
+ | ((in[60 + inpos]) << 60)
+ | ((in[61 + inpos]) << 61)
+ | ((in[62 + inpos]) << 62)
+ | ((in[63 + inpos]) << 63);
+ }
+
+ protected static void fastpackwithoutmask2(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 2)
+ | ((in[2 + inpos]) << 4)
+ | ((in[3 + inpos]) << 6)
+ | ((in[4 + inpos]) << 8)
+ | ((in[5 + inpos]) << 10)
+ | ((in[6 + inpos]) << 12)
+ | ((in[7 + inpos]) << 14)
+ | ((in[8 + inpos]) << 16)
+ | ((in[9 + inpos]) << 18)
+ | ((in[10 + inpos]) << 20)
+ | ((in[11 + inpos]) << 22)
+ | ((in[12 + inpos]) << 24)
+ | ((in[13 + inpos]) << 26)
+ | ((in[14 + inpos]) << 28)
+ | ((in[15 + inpos]) << 30)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 34)
+ | ((in[18 + inpos]) << 36)
+ | ((in[19 + inpos]) << 38)
+ | ((in[20 + inpos]) << 40)
+ | ((in[21 + inpos]) << 42)
+ | ((in[22 + inpos]) << 44)
+ | ((in[23 + inpos]) << 46)
+ | ((in[24 + inpos]) << 48)
+ | ((in[25 + inpos]) << 50)
+ | ((in[26 + inpos]) << 52)
+ | ((in[27 + inpos]) << 54)
+ | ((in[28 + inpos]) << 56)
+ | ((in[29 + inpos]) << 58)
+ | ((in[30 + inpos]) << 60)
+ | ((in[31 + inpos]) << 62);
+ out[1 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 2)
+ | ((in[34 + inpos]) << 4)
+ | ((in[35 + inpos]) << 6)
+ | ((in[36 + inpos]) << 8)
+ | ((in[37 + inpos]) << 10)
+ | ((in[38 + inpos]) << 12)
+ | ((in[39 + inpos]) << 14)
+ | ((in[40 + inpos]) << 16)
+ | ((in[41 + inpos]) << 18)
+ | ((in[42 + inpos]) << 20)
+ | ((in[43 + inpos]) << 22)
+ | ((in[44 + inpos]) << 24)
+ | ((in[45 + inpos]) << 26)
+ | ((in[46 + inpos]) << 28)
+ | ((in[47 + inpos]) << 30)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 34)
+ | ((in[50 + inpos]) << 36)
+ | ((in[51 + inpos]) << 38)
+ | ((in[52 + inpos]) << 40)
+ | ((in[53 + inpos]) << 42)
+ | ((in[54 + inpos]) << 44)
+ | ((in[55 + inpos]) << 46)
+ | ((in[56 + inpos]) << 48)
+ | ((in[57 + inpos]) << 50)
+ | ((in[58 + inpos]) << 52)
+ | ((in[59 + inpos]) << 54)
+ | ((in[60 + inpos]) << 56)
+ | ((in[61 + inpos]) << 58)
+ | ((in[62 + inpos]) << 60)
+ | ((in[63 + inpos]) << 62);
+ }
+
+ protected static void fastpackwithoutmask3(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 3)
+ | ((in[2 + inpos]) << 6)
+ | ((in[3 + inpos]) << 9)
+ | ((in[4 + inpos]) << 12)
+ | ((in[5 + inpos]) << 15)
+ | ((in[6 + inpos]) << 18)
+ | ((in[7 + inpos]) << 21)
+ | ((in[8 + inpos]) << 24)
+ | ((in[9 + inpos]) << 27)
+ | ((in[10 + inpos]) << 30)
+ | ((in[11 + inpos]) << 33)
+ | ((in[12 + inpos]) << 36)
+ | ((in[13 + inpos]) << 39)
+ | ((in[14 + inpos]) << 42)
+ | ((in[15 + inpos]) << 45)
+ | ((in[16 + inpos]) << 48)
+ | ((in[17 + inpos]) << 51)
+ | ((in[18 + inpos]) << 54)
+ | ((in[19 + inpos]) << 57)
+ | ((in[20 + inpos]) << 60)
+ | ((in[21 + inpos]) << 63);
+ out[1 + outpos] = ((in[21 + inpos]) >>> (3 - 2))
+ | ((in[22 + inpos]) << 2)
+ | ((in[23 + inpos]) << 5)
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 11)
+ | ((in[26 + inpos]) << 14)
+ | ((in[27 + inpos]) << 17)
+ | ((in[28 + inpos]) << 20)
+ | ((in[29 + inpos]) << 23)
+ | ((in[30 + inpos]) << 26)
+ | ((in[31 + inpos]) << 29)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 35)
+ | ((in[34 + inpos]) << 38)
+ | ((in[35 + inpos]) << 41)
+ | ((in[36 + inpos]) << 44)
+ | ((in[37 + inpos]) << 47)
+ | ((in[38 + inpos]) << 50)
+ | ((in[39 + inpos]) << 53)
+ | ((in[40 + inpos]) << 56)
+ | ((in[41 + inpos]) << 59)
+ | ((in[42 + inpos]) << 62);
+ out[2 + outpos] = ((in[42 + inpos]) >>> (3 - 1))
+ | ((in[43 + inpos]) << 1)
+ | ((in[44 + inpos]) << 4)
+ | ((in[45 + inpos]) << 7)
+ | ((in[46 + inpos]) << 10)
+ | ((in[47 + inpos]) << 13)
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 19)
+ | ((in[50 + inpos]) << 22)
+ | ((in[51 + inpos]) << 25)
+ | ((in[52 + inpos]) << 28)
+ | ((in[53 + inpos]) << 31)
+ | ((in[54 + inpos]) << 34)
+ | ((in[55 + inpos]) << 37)
+ | ((in[56 + inpos]) << 40)
+ | ((in[57 + inpos]) << 43)
+ | ((in[58 + inpos]) << 46)
+ | ((in[59 + inpos]) << 49)
+ | ((in[60 + inpos]) << 52)
+ | ((in[61 + inpos]) << 55)
+ | ((in[62 + inpos]) << 58)
+ | ((in[63 + inpos]) << 61);
+ }
+
+ protected static void fastpackwithoutmask4(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 4)
+ | ((in[2 + inpos]) << 8)
+ | ((in[3 + inpos]) << 12)
+ | ((in[4 + inpos]) << 16)
+ | ((in[5 + inpos]) << 20)
+ | ((in[6 + inpos]) << 24)
+ | ((in[7 + inpos]) << 28)
+ | ((in[8 + inpos]) << 32)
+ | ((in[9 + inpos]) << 36)
+ | ((in[10 + inpos]) << 40)
+ | ((in[11 + inpos]) << 44)
+ | ((in[12 + inpos]) << 48)
+ | ((in[13 + inpos]) << 52)
+ | ((in[14 + inpos]) << 56)
+ | ((in[15 + inpos]) << 60);
+ out[1 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 4)
+ | ((in[18 + inpos]) << 8)
+ | ((in[19 + inpos]) << 12)
+ | ((in[20 + inpos]) << 16)
+ | ((in[21 + inpos]) << 20)
+ | ((in[22 + inpos]) << 24)
+ | ((in[23 + inpos]) << 28)
+ | ((in[24 + inpos]) << 32)
+ | ((in[25 + inpos]) << 36)
+ | ((in[26 + inpos]) << 40)
+ | ((in[27 + inpos]) << 44)
+ | ((in[28 + inpos]) << 48)
+ | ((in[29 + inpos]) << 52)
+ | ((in[30 + inpos]) << 56)
+ | ((in[31 + inpos]) << 60);
+ out[2 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 4)
+ | ((in[34 + inpos]) << 8)
+ | ((in[35 + inpos]) << 12)
+ | ((in[36 + inpos]) << 16)
+ | ((in[37 + inpos]) << 20)
+ | ((in[38 + inpos]) << 24)
+ | ((in[39 + inpos]) << 28)
+ | ((in[40 + inpos]) << 32)
+ | ((in[41 + inpos]) << 36)
+ | ((in[42 + inpos]) << 40)
+ | ((in[43 + inpos]) << 44)
+ | ((in[44 + inpos]) << 48)
+ | ((in[45 + inpos]) << 52)
+ | ((in[46 + inpos]) << 56)
+ | ((in[47 + inpos]) << 60);
+ out[3 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 4)
+ | ((in[50 + inpos]) << 8)
+ | ((in[51 + inpos]) << 12)
+ | ((in[52 + inpos]) << 16)
+ | ((in[53 + inpos]) << 20)
+ | ((in[54 + inpos]) << 24)
+ | ((in[55 + inpos]) << 28)
+ | ((in[56 + inpos]) << 32)
+ | ((in[57 + inpos]) << 36)
+ | ((in[58 + inpos]) << 40)
+ | ((in[59 + inpos]) << 44)
+ | ((in[60 + inpos]) << 48)
+ | ((in[61 + inpos]) << 52)
+ | ((in[62 + inpos]) << 56)
+ | ((in[63 + inpos]) << 60);
+ }
+
+ protected static void fastpackwithoutmask5(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 5)
+ | ((in[2 + inpos]) << 10)
+ | ((in[3 + inpos]) << 15)
+ | ((in[4 + inpos]) << 20)
+ | ((in[5 + inpos]) << 25)
+ | ((in[6 + inpos]) << 30)
+ | ((in[7 + inpos]) << 35)
+ | ((in[8 + inpos]) << 40)
+ | ((in[9 + inpos]) << 45)
+ | ((in[10 + inpos]) << 50)
+ | ((in[11 + inpos]) << 55)
+ | ((in[12 + inpos]) << 60);
+ out[1 + outpos] = ((in[12 + inpos]) >>> (5 - 1))
+ | ((in[13 + inpos]) << 1)
+ | ((in[14 + inpos]) << 6)
+ | ((in[15 + inpos]) << 11)
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 21)
+ | ((in[18 + inpos]) << 26)
+ | ((in[19 + inpos]) << 31)
+ | ((in[20 + inpos]) << 36)
+ | ((in[21 + inpos]) << 41)
+ | ((in[22 + inpos]) << 46)
+ | ((in[23 + inpos]) << 51)
+ | ((in[24 + inpos]) << 56)
+ | ((in[25 + inpos]) << 61);
+ out[2 + outpos] = ((in[25 + inpos]) >>> (5 - 2))
+ | ((in[26 + inpos]) << 2)
+ | ((in[27 + inpos]) << 7)
+ | ((in[28 + inpos]) << 12)
+ | ((in[29 + inpos]) << 17)
+ | ((in[30 + inpos]) << 22)
+ | ((in[31 + inpos]) << 27)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 37)
+ | ((in[34 + inpos]) << 42)
+ | ((in[35 + inpos]) << 47)
+ | ((in[36 + inpos]) << 52)
+ | ((in[37 + inpos]) << 57)
+ | ((in[38 + inpos]) << 62);
+ out[3 + outpos] = ((in[38 + inpos]) >>> (5 - 3))
+ | ((in[39 + inpos]) << 3)
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 13)
+ | ((in[42 + inpos]) << 18)
+ | ((in[43 + inpos]) << 23)
+ | ((in[44 + inpos]) << 28)
+ | ((in[45 + inpos]) << 33)
+ | ((in[46 + inpos]) << 38)
+ | ((in[47 + inpos]) << 43)
+ | ((in[48 + inpos]) << 48)
+ | ((in[49 + inpos]) << 53)
+ | ((in[50 + inpos]) << 58)
+ | ((in[51 + inpos]) << 63);
+ out[4 + outpos] = ((in[51 + inpos]) >>> (5 - 4))
+ | ((in[52 + inpos]) << 4)
+ | ((in[53 + inpos]) << 9)
+ | ((in[54 + inpos]) << 14)
+ | ((in[55 + inpos]) << 19)
+ | ((in[56 + inpos]) << 24)
+ | ((in[57 + inpos]) << 29)
+ | ((in[58 + inpos]) << 34)
+ | ((in[59 + inpos]) << 39)
+ | ((in[60 + inpos]) << 44)
+ | ((in[61 + inpos]) << 49)
+ | ((in[62 + inpos]) << 54)
+ | ((in[63 + inpos]) << 59);
+ }
+
+ protected static void fastpackwithoutmask6(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 6)
+ | ((in[2 + inpos]) << 12)
+ | ((in[3 + inpos]) << 18)
+ | ((in[4 + inpos]) << 24)
+ | ((in[5 + inpos]) << 30)
+ | ((in[6 + inpos]) << 36)
+ | ((in[7 + inpos]) << 42)
+ | ((in[8 + inpos]) << 48)
+ | ((in[9 + inpos]) << 54)
+ | ((in[10 + inpos]) << 60);
+ out[1 + outpos] = ((in[10 + inpos]) >>> (6 - 2))
+ | ((in[11 + inpos]) << 2)
+ | ((in[12 + inpos]) << 8)
+ | ((in[13 + inpos]) << 14)
+ | ((in[14 + inpos]) << 20)
+ | ((in[15 + inpos]) << 26)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 38)
+ | ((in[18 + inpos]) << 44)
+ | ((in[19 + inpos]) << 50)
+ | ((in[20 + inpos]) << 56)
+ | ((in[21 + inpos]) << 62);
+ out[2 + outpos] = ((in[21 + inpos]) >>> (6 - 4))
+ | ((in[22 + inpos]) << 4)
+ | ((in[23 + inpos]) << 10)
+ | ((in[24 + inpos]) << 16)
+ | ((in[25 + inpos]) << 22)
+ | ((in[26 + inpos]) << 28)
+ | ((in[27 + inpos]) << 34)
+ | ((in[28 + inpos]) << 40)
+ | ((in[29 + inpos]) << 46)
+ | ((in[30 + inpos]) << 52)
+ | ((in[31 + inpos]) << 58);
+ out[3 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 6)
+ | ((in[34 + inpos]) << 12)
+ | ((in[35 + inpos]) << 18)
+ | ((in[36 + inpos]) << 24)
+ | ((in[37 + inpos]) << 30)
+ | ((in[38 + inpos]) << 36)
+ | ((in[39 + inpos]) << 42)
+ | ((in[40 + inpos]) << 48)
+ | ((in[41 + inpos]) << 54)
+ | ((in[42 + inpos]) << 60);
+ out[4 + outpos] = ((in[42 + inpos]) >>> (6 - 2))
+ | ((in[43 + inpos]) << 2)
+ | ((in[44 + inpos]) << 8)
+ | ((in[45 + inpos]) << 14)
+ | ((in[46 + inpos]) << 20)
+ | ((in[47 + inpos]) << 26)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 38)
+ | ((in[50 + inpos]) << 44)
+ | ((in[51 + inpos]) << 50)
+ | ((in[52 + inpos]) << 56)
+ | ((in[53 + inpos]) << 62);
+ out[5 + outpos] = ((in[53 + inpos]) >>> (6 - 4))
+ | ((in[54 + inpos]) << 4)
+ | ((in[55 + inpos]) << 10)
+ | ((in[56 + inpos]) << 16)
+ | ((in[57 + inpos]) << 22)
+ | ((in[58 + inpos]) << 28)
+ | ((in[59 + inpos]) << 34)
+ | ((in[60 + inpos]) << 40)
+ | ((in[61 + inpos]) << 46)
+ | ((in[62 + inpos]) << 52)
+ | ((in[63 + inpos]) << 58);
+ }
+
+ protected static void fastpackwithoutmask7(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 7)
+ | ((in[2 + inpos]) << 14)
+ | ((in[3 + inpos]) << 21)
+ | ((in[4 + inpos]) << 28)
+ | ((in[5 + inpos]) << 35)
+ | ((in[6 + inpos]) << 42)
+ | ((in[7 + inpos]) << 49)
+ | ((in[8 + inpos]) << 56)
+ | ((in[9 + inpos]) << 63);
+ out[1 + outpos] = ((in[9 + inpos]) >>> (7 - 6))
+ | ((in[10 + inpos]) << 6)
+ | ((in[11 + inpos]) << 13)
+ | ((in[12 + inpos]) << 20)
+ | ((in[13 + inpos]) << 27)
+ | ((in[14 + inpos]) << 34)
+ | ((in[15 + inpos]) << 41)
+ | ((in[16 + inpos]) << 48)
+ | ((in[17 + inpos]) << 55)
+ | ((in[18 + inpos]) << 62);
+ out[2 + outpos] = ((in[18 + inpos]) >>> (7 - 5))
+ | ((in[19 + inpos]) << 5)
+ | ((in[20 + inpos]) << 12)
+ | ((in[21 + inpos]) << 19)
+ | ((in[22 + inpos]) << 26)
+ | ((in[23 + inpos]) << 33)
+ | ((in[24 + inpos]) << 40)
+ | ((in[25 + inpos]) << 47)
+ | ((in[26 + inpos]) << 54)
+ | ((in[27 + inpos]) << 61);
+ out[3 + outpos] = ((in[27 + inpos]) >>> (7 - 4))
+ | ((in[28 + inpos]) << 4)
+ | ((in[29 + inpos]) << 11)
+ | ((in[30 + inpos]) << 18)
+ | ((in[31 + inpos]) << 25)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 39)
+ | ((in[34 + inpos]) << 46)
+ | ((in[35 + inpos]) << 53)
+ | ((in[36 + inpos]) << 60);
+ out[4 + outpos] = ((in[36 + inpos]) >>> (7 - 3))
+ | ((in[37 + inpos]) << 3)
+ | ((in[38 + inpos]) << 10)
+ | ((in[39 + inpos]) << 17)
+ | ((in[40 + inpos]) << 24)
+ | ((in[41 + inpos]) << 31)
+ | ((in[42 + inpos]) << 38)
+ | ((in[43 + inpos]) << 45)
+ | ((in[44 + inpos]) << 52)
+ | ((in[45 + inpos]) << 59);
+ out[5 + outpos] = ((in[45 + inpos]) >>> (7 - 2))
+ | ((in[46 + inpos]) << 2)
+ | ((in[47 + inpos]) << 9)
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 23)
+ | ((in[50 + inpos]) << 30)
+ | ((in[51 + inpos]) << 37)
+ | ((in[52 + inpos]) << 44)
+ | ((in[53 + inpos]) << 51)
+ | ((in[54 + inpos]) << 58);
+ out[6 + outpos] = ((in[54 + inpos]) >>> (7 - 1))
+ | ((in[55 + inpos]) << 1)
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 15)
+ | ((in[58 + inpos]) << 22)
+ | ((in[59 + inpos]) << 29)
+ | ((in[60 + inpos]) << 36)
+ | ((in[61 + inpos]) << 43)
+ | ((in[62 + inpos]) << 50)
+ | ((in[63 + inpos]) << 57);
+ }
+
+ protected static void fastpackwithoutmask8(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 8)
+ | ((in[2 + inpos]) << 16)
+ | ((in[3 + inpos]) << 24)
+ | ((in[4 + inpos]) << 32)
+ | ((in[5 + inpos]) << 40)
+ | ((in[6 + inpos]) << 48)
+ | ((in[7 + inpos]) << 56);
+ out[1 + outpos] = in[8 + inpos] | ((in[9 + inpos]) << 8)
+ | ((in[10 + inpos]) << 16)
+ | ((in[11 + inpos]) << 24)
+ | ((in[12 + inpos]) << 32)
+ | ((in[13 + inpos]) << 40)
+ | ((in[14 + inpos]) << 48)
+ | ((in[15 + inpos]) << 56);
+ out[2 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 8)
+ | ((in[18 + inpos]) << 16)
+ | ((in[19 + inpos]) << 24)
+ | ((in[20 + inpos]) << 32)
+ | ((in[21 + inpos]) << 40)
+ | ((in[22 + inpos]) << 48)
+ | ((in[23 + inpos]) << 56);
+ out[3 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 8)
+ | ((in[26 + inpos]) << 16)
+ | ((in[27 + inpos]) << 24)
+ | ((in[28 + inpos]) << 32)
+ | ((in[29 + inpos]) << 40)
+ | ((in[30 + inpos]) << 48)
+ | ((in[31 + inpos]) << 56);
+ out[4 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 8)
+ | ((in[34 + inpos]) << 16)
+ | ((in[35 + inpos]) << 24)
+ | ((in[36 + inpos]) << 32)
+ | ((in[37 + inpos]) << 40)
+ | ((in[38 + inpos]) << 48)
+ | ((in[39 + inpos]) << 56);
+ out[5 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 8)
+ | ((in[42 + inpos]) << 16)
+ | ((in[43 + inpos]) << 24)
+ | ((in[44 + inpos]) << 32)
+ | ((in[45 + inpos]) << 40)
+ | ((in[46 + inpos]) << 48)
+ | ((in[47 + inpos]) << 56);
+ out[6 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 8)
+ | ((in[50 + inpos]) << 16)
+ | ((in[51 + inpos]) << 24)
+ | ((in[52 + inpos]) << 32)
+ | ((in[53 + inpos]) << 40)
+ | ((in[54 + inpos]) << 48)
+ | ((in[55 + inpos]) << 56);
+ out[7 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 8)
+ | ((in[58 + inpos]) << 16)
+ | ((in[59 + inpos]) << 24)
+ | ((in[60 + inpos]) << 32)
+ | ((in[61 + inpos]) << 40)
+ | ((in[62 + inpos]) << 48)
+ | ((in[63 + inpos]) << 56);
+ }
+
+ protected static void fastpackwithoutmask9(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 9)
+ | ((in[2 + inpos]) << 18)
+ | ((in[3 + inpos]) << 27)
+ | ((in[4 + inpos]) << 36)
+ | ((in[5 + inpos]) << 45)
+ | ((in[6 + inpos]) << 54)
+ | ((in[7 + inpos]) << 63);
+ out[1 + outpos] = ((in[7 + inpos]) >>> (9 - 8))
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 17)
+ | ((in[10 + inpos]) << 26)
+ | ((in[11 + inpos]) << 35)
+ | ((in[12 + inpos]) << 44)
+ | ((in[13 + inpos]) << 53)
+ | ((in[14 + inpos]) << 62);
+ out[2 + outpos] = ((in[14 + inpos]) >>> (9 - 7))
+ | ((in[15 + inpos]) << 7)
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 25)
+ | ((in[18 + inpos]) << 34)
+ | ((in[19 + inpos]) << 43)
+ | ((in[20 + inpos]) << 52)
+ | ((in[21 + inpos]) << 61);
+ out[3 + outpos] = ((in[21 + inpos]) >>> (9 - 6))
+ | ((in[22 + inpos]) << 6)
+ | ((in[23 + inpos]) << 15)
+ | ((in[24 + inpos]) << 24)
+ | ((in[25 + inpos]) << 33)
+ | ((in[26 + inpos]) << 42)
+ | ((in[27 + inpos]) << 51)
+ | ((in[28 + inpos]) << 60);
+ out[4 + outpos] = ((in[28 + inpos]) >>> (9 - 5))
+ | ((in[29 + inpos]) << 5)
+ | ((in[30 + inpos]) << 14)
+ | ((in[31 + inpos]) << 23)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 41)
+ | ((in[34 + inpos]) << 50)
+ | ((in[35 + inpos]) << 59);
+ out[5 + outpos] = ((in[35 + inpos]) >>> (9 - 4))
+ | ((in[36 + inpos]) << 4)
+ | ((in[37 + inpos]) << 13)
+ | ((in[38 + inpos]) << 22)
+ | ((in[39 + inpos]) << 31)
+ | ((in[40 + inpos]) << 40)
+ | ((in[41 + inpos]) << 49)
+ | ((in[42 + inpos]) << 58);
+ out[6 + outpos] = ((in[42 + inpos]) >>> (9 - 3))
+ | ((in[43 + inpos]) << 3)
+ | ((in[44 + inpos]) << 12)
+ | ((in[45 + inpos]) << 21)
+ | ((in[46 + inpos]) << 30)
+ | ((in[47 + inpos]) << 39)
+ | ((in[48 + inpos]) << 48)
+ | ((in[49 + inpos]) << 57);
+ out[7 + outpos] = ((in[49 + inpos]) >>> (9 - 2))
+ | ((in[50 + inpos]) << 2)
+ | ((in[51 + inpos]) << 11)
+ | ((in[52 + inpos]) << 20)
+ | ((in[53 + inpos]) << 29)
+ | ((in[54 + inpos]) << 38)
+ | ((in[55 + inpos]) << 47)
+ | ((in[56 + inpos]) << 56);
+ out[8 + outpos] = ((in[56 + inpos]) >>> (9 - 1))
+ | ((in[57 + inpos]) << 1)
+ | ((in[58 + inpos]) << 10)
+ | ((in[59 + inpos]) << 19)
+ | ((in[60 + inpos]) << 28)
+ | ((in[61 + inpos]) << 37)
+ | ((in[62 + inpos]) << 46)
+ | ((in[63 + inpos]) << 55);
+ }
+
+ protected static void fastpackwithoutmask10(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 10)
+ | ((in[2 + inpos]) << 20)
+ | ((in[3 + inpos]) << 30)
+ | ((in[4 + inpos]) << 40)
+ | ((in[5 + inpos]) << 50)
+ | ((in[6 + inpos]) << 60);
+ out[1 + outpos] = ((in[6 + inpos]) >>> (10 - 6))
+ | ((in[7 + inpos]) << 6)
+ | ((in[8 + inpos]) << 16)
+ | ((in[9 + inpos]) << 26)
+ | ((in[10 + inpos]) << 36)
+ | ((in[11 + inpos]) << 46)
+ | ((in[12 + inpos]) << 56);
+ out[2 + outpos] = ((in[12 + inpos]) >>> (10 - 2))
+ | ((in[13 + inpos]) << 2)
+ | ((in[14 + inpos]) << 12)
+ | ((in[15 + inpos]) << 22)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 42)
+ | ((in[18 + inpos]) << 52)
+ | ((in[19 + inpos]) << 62);
+ out[3 + outpos] = ((in[19 + inpos]) >>> (10 - 8))
+ | ((in[20 + inpos]) << 8)
+ | ((in[21 + inpos]) << 18)
+ | ((in[22 + inpos]) << 28)
+ | ((in[23 + inpos]) << 38)
+ | ((in[24 + inpos]) << 48)
+ | ((in[25 + inpos]) << 58);
+ out[4 + outpos] = ((in[25 + inpos]) >>> (10 - 4))
+ | ((in[26 + inpos]) << 4)
+ | ((in[27 + inpos]) << 14)
+ | ((in[28 + inpos]) << 24)
+ | ((in[29 + inpos]) << 34)
+ | ((in[30 + inpos]) << 44)
+ | ((in[31 + inpos]) << 54);
+ out[5 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 10)
+ | ((in[34 + inpos]) << 20)
+ | ((in[35 + inpos]) << 30)
+ | ((in[36 + inpos]) << 40)
+ | ((in[37 + inpos]) << 50)
+ | ((in[38 + inpos]) << 60);
+ out[6 + outpos] = ((in[38 + inpos]) >>> (10 - 6))
+ | ((in[39 + inpos]) << 6)
+ | ((in[40 + inpos]) << 16)
+ | ((in[41 + inpos]) << 26)
+ | ((in[42 + inpos]) << 36)
+ | ((in[43 + inpos]) << 46)
+ | ((in[44 + inpos]) << 56);
+ out[7 + outpos] = ((in[44 + inpos]) >>> (10 - 2))
+ | ((in[45 + inpos]) << 2)
+ | ((in[46 + inpos]) << 12)
+ | ((in[47 + inpos]) << 22)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 42)
+ | ((in[50 + inpos]) << 52)
+ | ((in[51 + inpos]) << 62);
+ out[8 + outpos] = ((in[51 + inpos]) >>> (10 - 8))
+ | ((in[52 + inpos]) << 8)
+ | ((in[53 + inpos]) << 18)
+ | ((in[54 + inpos]) << 28)
+ | ((in[55 + inpos]) << 38)
+ | ((in[56 + inpos]) << 48)
+ | ((in[57 + inpos]) << 58);
+ out[9 + outpos] = ((in[57 + inpos]) >>> (10 - 4))
+ | ((in[58 + inpos]) << 4)
+ | ((in[59 + inpos]) << 14)
+ | ((in[60 + inpos]) << 24)
+ | ((in[61 + inpos]) << 34)
+ | ((in[62 + inpos]) << 44)
+ | ((in[63 + inpos]) << 54);
+ }
+
+ protected static void fastpackwithoutmask11(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 11)
+ | ((in[2 + inpos]) << 22)
+ | ((in[3 + inpos]) << 33)
+ | ((in[4 + inpos]) << 44)
+ | ((in[5 + inpos]) << 55);
+ out[1 + outpos] = ((in[5 + inpos]) >>> (11 - 2))
+ | ((in[6 + inpos]) << 2)
+ | ((in[7 + inpos]) << 13)
+ | ((in[8 + inpos]) << 24)
+ | ((in[9 + inpos]) << 35)
+ | ((in[10 + inpos]) << 46)
+ | ((in[11 + inpos]) << 57);
+ out[2 + outpos] = ((in[11 + inpos]) >>> (11 - 4))
+ | ((in[12 + inpos]) << 4)
+ | ((in[13 + inpos]) << 15)
+ | ((in[14 + inpos]) << 26)
+ | ((in[15 + inpos]) << 37)
+ | ((in[16 + inpos]) << 48)
+ | ((in[17 + inpos]) << 59);
+ out[3 + outpos] = ((in[17 + inpos]) >>> (11 - 6))
+ | ((in[18 + inpos]) << 6)
+ | ((in[19 + inpos]) << 17)
+ | ((in[20 + inpos]) << 28)
+ | ((in[21 + inpos]) << 39)
+ | ((in[22 + inpos]) << 50)
+ | ((in[23 + inpos]) << 61);
+ out[4 + outpos] = ((in[23 + inpos]) >>> (11 - 8))
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 19)
+ | ((in[26 + inpos]) << 30)
+ | ((in[27 + inpos]) << 41)
+ | ((in[28 + inpos]) << 52)
+ | ((in[29 + inpos]) << 63);
+ out[5 + outpos] = ((in[29 + inpos]) >>> (11 - 10))
+ | ((in[30 + inpos]) << 10)
+ | ((in[31 + inpos]) << 21)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 43)
+ | ((in[34 + inpos]) << 54);
+ out[6 + outpos] = ((in[34 + inpos]) >>> (11 - 1))
+ | ((in[35 + inpos]) << 1)
+ | ((in[36 + inpos]) << 12)
+ | ((in[37 + inpos]) << 23)
+ | ((in[38 + inpos]) << 34)
+ | ((in[39 + inpos]) << 45)
+ | ((in[40 + inpos]) << 56);
+ out[7 + outpos] = ((in[40 + inpos]) >>> (11 - 3))
+ | ((in[41 + inpos]) << 3)
+ | ((in[42 + inpos]) << 14)
+ | ((in[43 + inpos]) << 25)
+ | ((in[44 + inpos]) << 36)
+ | ((in[45 + inpos]) << 47)
+ | ((in[46 + inpos]) << 58);
+ out[8 + outpos] = ((in[46 + inpos]) >>> (11 - 5))
+ | ((in[47 + inpos]) << 5)
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 27)
+ | ((in[50 + inpos]) << 38)
+ | ((in[51 + inpos]) << 49)
+ | ((in[52 + inpos]) << 60);
+ out[9 + outpos] = ((in[52 + inpos]) >>> (11 - 7))
+ | ((in[53 + inpos]) << 7)
+ | ((in[54 + inpos]) << 18)
+ | ((in[55 + inpos]) << 29)
+ | ((in[56 + inpos]) << 40)
+ | ((in[57 + inpos]) << 51)
+ | ((in[58 + inpos]) << 62);
+ out[10 + outpos] = ((in[58 + inpos]) >>> (11 - 9))
+ | ((in[59 + inpos]) << 9)
+ | ((in[60 + inpos]) << 20)
+ | ((in[61 + inpos]) << 31)
+ | ((in[62 + inpos]) << 42)
+ | ((in[63 + inpos]) << 53);
+ }
+
+ protected static void fastpackwithoutmask12(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 12)
+ | ((in[2 + inpos]) << 24)
+ | ((in[3 + inpos]) << 36)
+ | ((in[4 + inpos]) << 48)
+ | ((in[5 + inpos]) << 60);
+ out[1 + outpos] = ((in[5 + inpos]) >>> (12 - 8))
+ | ((in[6 + inpos]) << 8)
+ | ((in[7 + inpos]) << 20)
+ | ((in[8 + inpos]) << 32)
+ | ((in[9 + inpos]) << 44)
+ | ((in[10 + inpos]) << 56);
+ out[2 + outpos] = ((in[10 + inpos]) >>> (12 - 4))
+ | ((in[11 + inpos]) << 4)
+ | ((in[12 + inpos]) << 16)
+ | ((in[13 + inpos]) << 28)
+ | ((in[14 + inpos]) << 40)
+ | ((in[15 + inpos]) << 52);
+ out[3 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 12)
+ | ((in[18 + inpos]) << 24)
+ | ((in[19 + inpos]) << 36)
+ | ((in[20 + inpos]) << 48)
+ | ((in[21 + inpos]) << 60);
+ out[4 + outpos] = ((in[21 + inpos]) >>> (12 - 8))
+ | ((in[22 + inpos]) << 8)
+ | ((in[23 + inpos]) << 20)
+ | ((in[24 + inpos]) << 32)
+ | ((in[25 + inpos]) << 44)
+ | ((in[26 + inpos]) << 56);
+ out[5 + outpos] = ((in[26 + inpos]) >>> (12 - 4))
+ | ((in[27 + inpos]) << 4)
+ | ((in[28 + inpos]) << 16)
+ | ((in[29 + inpos]) << 28)
+ | ((in[30 + inpos]) << 40)
+ | ((in[31 + inpos]) << 52);
+ out[6 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 12)
+ | ((in[34 + inpos]) << 24)
+ | ((in[35 + inpos]) << 36)
+ | ((in[36 + inpos]) << 48)
+ | ((in[37 + inpos]) << 60);
+ out[7 + outpos] = ((in[37 + inpos]) >>> (12 - 8))
+ | ((in[38 + inpos]) << 8)
+ | ((in[39 + inpos]) << 20)
+ | ((in[40 + inpos]) << 32)
+ | ((in[41 + inpos]) << 44)
+ | ((in[42 + inpos]) << 56);
+ out[8 + outpos] = ((in[42 + inpos]) >>> (12 - 4))
+ | ((in[43 + inpos]) << 4)
+ | ((in[44 + inpos]) << 16)
+ | ((in[45 + inpos]) << 28)
+ | ((in[46 + inpos]) << 40)
+ | ((in[47 + inpos]) << 52);
+ out[9 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 12)
+ | ((in[50 + inpos]) << 24)
+ | ((in[51 + inpos]) << 36)
+ | ((in[52 + inpos]) << 48)
+ | ((in[53 + inpos]) << 60);
+ out[10 + outpos] = ((in[53 + inpos]) >>> (12 - 8))
+ | ((in[54 + inpos]) << 8)
+ | ((in[55 + inpos]) << 20)
+ | ((in[56 + inpos]) << 32)
+ | ((in[57 + inpos]) << 44)
+ | ((in[58 + inpos]) << 56);
+ out[11 + outpos] = ((in[58 + inpos]) >>> (12 - 4))
+ | ((in[59 + inpos]) << 4)
+ | ((in[60 + inpos]) << 16)
+ | ((in[61 + inpos]) << 28)
+ | ((in[62 + inpos]) << 40)
+ | ((in[63 + inpos]) << 52);
+ }
+
+ protected static void fastpackwithoutmask13(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 13)
+ | ((in[2 + inpos]) << 26)
+ | ((in[3 + inpos]) << 39)
+ | ((in[4 + inpos]) << 52);
+ out[1 + outpos] = ((in[4 + inpos]) >>> (13 - 1))
+ | ((in[5 + inpos]) << 1)
+ | ((in[6 + inpos]) << 14)
+ | ((in[7 + inpos]) << 27)
+ | ((in[8 + inpos]) << 40)
+ | ((in[9 + inpos]) << 53);
+ out[2 + outpos] = ((in[9 + inpos]) >>> (13 - 2))
+ | ((in[10 + inpos]) << 2)
+ | ((in[11 + inpos]) << 15)
+ | ((in[12 + inpos]) << 28)
+ | ((in[13 + inpos]) << 41)
+ | ((in[14 + inpos]) << 54);
+ out[3 + outpos] = ((in[14 + inpos]) >>> (13 - 3))
+ | ((in[15 + inpos]) << 3)
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 29)
+ | ((in[18 + inpos]) << 42)
+ | ((in[19 + inpos]) << 55);
+ out[4 + outpos] = ((in[19 + inpos]) >>> (13 - 4))
+ | ((in[20 + inpos]) << 4)
+ | ((in[21 + inpos]) << 17)
+ | ((in[22 + inpos]) << 30)
+ | ((in[23 + inpos]) << 43)
+ | ((in[24 + inpos]) << 56);
+ out[5 + outpos] = ((in[24 + inpos]) >>> (13 - 5))
+ | ((in[25 + inpos]) << 5)
+ | ((in[26 + inpos]) << 18)
+ | ((in[27 + inpos]) << 31)
+ | ((in[28 + inpos]) << 44)
+ | ((in[29 + inpos]) << 57);
+ out[6 + outpos] = ((in[29 + inpos]) >>> (13 - 6))
+ | ((in[30 + inpos]) << 6)
+ | ((in[31 + inpos]) << 19)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 45)
+ | ((in[34 + inpos]) << 58);
+ out[7 + outpos] = ((in[34 + inpos]) >>> (13 - 7))
+ | ((in[35 + inpos]) << 7)
+ | ((in[36 + inpos]) << 20)
+ | ((in[37 + inpos]) << 33)
+ | ((in[38 + inpos]) << 46)
+ | ((in[39 + inpos]) << 59);
+ out[8 + outpos] = ((in[39 + inpos]) >>> (13 - 8))
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 21)
+ | ((in[42 + inpos]) << 34)
+ | ((in[43 + inpos]) << 47)
+ | ((in[44 + inpos]) << 60);
+ out[9 + outpos] = ((in[44 + inpos]) >>> (13 - 9))
+ | ((in[45 + inpos]) << 9)
+ | ((in[46 + inpos]) << 22)
+ | ((in[47 + inpos]) << 35)
+ | ((in[48 + inpos]) << 48)
+ | ((in[49 + inpos]) << 61);
+ out[10 + outpos] = ((in[49 + inpos]) >>> (13 - 10))
+ | ((in[50 + inpos]) << 10)
+ | ((in[51 + inpos]) << 23)
+ | ((in[52 + inpos]) << 36)
+ | ((in[53 + inpos]) << 49)
+ | ((in[54 + inpos]) << 62);
+ out[11 + outpos] = ((in[54 + inpos]) >>> (13 - 11))
+ | ((in[55 + inpos]) << 11)
+ | ((in[56 + inpos]) << 24)
+ | ((in[57 + inpos]) << 37)
+ | ((in[58 + inpos]) << 50)
+ | ((in[59 + inpos]) << 63);
+ out[12 + outpos] = ((in[59 + inpos]) >>> (13 - 12))
+ | ((in[60 + inpos]) << 12)
+ | ((in[61 + inpos]) << 25)
+ | ((in[62 + inpos]) << 38)
+ | ((in[63 + inpos]) << 51);
+ }
+
+ protected static void fastpackwithoutmask14(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 14)
+ | ((in[2 + inpos]) << 28)
+ | ((in[3 + inpos]) << 42)
+ | ((in[4 + inpos]) << 56);
+ out[1 + outpos] = ((in[4 + inpos]) >>> (14 - 6))
+ | ((in[5 + inpos]) << 6)
+ | ((in[6 + inpos]) << 20)
+ | ((in[7 + inpos]) << 34)
+ | ((in[8 + inpos]) << 48)
+ | ((in[9 + inpos]) << 62);
+ out[2 + outpos] = ((in[9 + inpos]) >>> (14 - 12))
+ | ((in[10 + inpos]) << 12)
+ | ((in[11 + inpos]) << 26)
+ | ((in[12 + inpos]) << 40)
+ | ((in[13 + inpos]) << 54);
+ out[3 + outpos] = ((in[13 + inpos]) >>> (14 - 4))
+ | ((in[14 + inpos]) << 4)
+ | ((in[15 + inpos]) << 18)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 46)
+ | ((in[18 + inpos]) << 60);
+ out[4 + outpos] = ((in[18 + inpos]) >>> (14 - 10))
+ | ((in[19 + inpos]) << 10)
+ | ((in[20 + inpos]) << 24)
+ | ((in[21 + inpos]) << 38)
+ | ((in[22 + inpos]) << 52);
+ out[5 + outpos] = ((in[22 + inpos]) >>> (14 - 2))
+ | ((in[23 + inpos]) << 2)
+ | ((in[24 + inpos]) << 16)
+ | ((in[25 + inpos]) << 30)
+ | ((in[26 + inpos]) << 44)
+ | ((in[27 + inpos]) << 58);
+ out[6 + outpos] = ((in[27 + inpos]) >>> (14 - 8))
+ | ((in[28 + inpos]) << 8)
+ | ((in[29 + inpos]) << 22)
+ | ((in[30 + inpos]) << 36)
+ | ((in[31 + inpos]) << 50);
+ out[7 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 14)
+ | ((in[34 + inpos]) << 28)
+ | ((in[35 + inpos]) << 42)
+ | ((in[36 + inpos]) << 56);
+ out[8 + outpos] = ((in[36 + inpos]) >>> (14 - 6))
+ | ((in[37 + inpos]) << 6)
+ | ((in[38 + inpos]) << 20)
+ | ((in[39 + inpos]) << 34)
+ | ((in[40 + inpos]) << 48)
+ | ((in[41 + inpos]) << 62);
+ out[9 + outpos] = ((in[41 + inpos]) >>> (14 - 12))
+ | ((in[42 + inpos]) << 12)
+ | ((in[43 + inpos]) << 26)
+ | ((in[44 + inpos]) << 40)
+ | ((in[45 + inpos]) << 54);
+ out[10 + outpos] = ((in[45 + inpos]) >>> (14 - 4))
+ | ((in[46 + inpos]) << 4)
+ | ((in[47 + inpos]) << 18)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 46)
+ | ((in[50 + inpos]) << 60);
+ out[11 + outpos] = ((in[50 + inpos]) >>> (14 - 10))
+ | ((in[51 + inpos]) << 10)
+ | ((in[52 + inpos]) << 24)
+ | ((in[53 + inpos]) << 38)
+ | ((in[54 + inpos]) << 52);
+ out[12 + outpos] = ((in[54 + inpos]) >>> (14 - 2))
+ | ((in[55 + inpos]) << 2)
+ | ((in[56 + inpos]) << 16)
+ | ((in[57 + inpos]) << 30)
+ | ((in[58 + inpos]) << 44)
+ | ((in[59 + inpos]) << 58);
+ out[13 + outpos] = ((in[59 + inpos]) >>> (14 - 8))
+ | ((in[60 + inpos]) << 8)
+ | ((in[61 + inpos]) << 22)
+ | ((in[62 + inpos]) << 36)
+ | ((in[63 + inpos]) << 50);
+ }
+
+ protected static void fastpackwithoutmask15(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 15)
+ | ((in[2 + inpos]) << 30)
+ | ((in[3 + inpos]) << 45)
+ | ((in[4 + inpos]) << 60);
+ out[1 + outpos] = ((in[4 + inpos]) >>> (15 - 11))
+ | ((in[5 + inpos]) << 11)
+ | ((in[6 + inpos]) << 26)
+ | ((in[7 + inpos]) << 41)
+ | ((in[8 + inpos]) << 56);
+ out[2 + outpos] = ((in[8 + inpos]) >>> (15 - 7))
+ | ((in[9 + inpos]) << 7)
+ | ((in[10 + inpos]) << 22)
+ | ((in[11 + inpos]) << 37)
+ | ((in[12 + inpos]) << 52);
+ out[3 + outpos] = ((in[12 + inpos]) >>> (15 - 3))
+ | ((in[13 + inpos]) << 3)
+ | ((in[14 + inpos]) << 18)
+ | ((in[15 + inpos]) << 33)
+ | ((in[16 + inpos]) << 48)
+ | ((in[17 + inpos]) << 63);
+ out[4 + outpos] = ((in[17 + inpos]) >>> (15 - 14))
+ | ((in[18 + inpos]) << 14)
+ | ((in[19 + inpos]) << 29)
+ | ((in[20 + inpos]) << 44)
+ | ((in[21 + inpos]) << 59);
+ out[5 + outpos] = ((in[21 + inpos]) >>> (15 - 10))
+ | ((in[22 + inpos]) << 10)
+ | ((in[23 + inpos]) << 25)
+ | ((in[24 + inpos]) << 40)
+ | ((in[25 + inpos]) << 55);
+ out[6 + outpos] = ((in[25 + inpos]) >>> (15 - 6))
+ | ((in[26 + inpos]) << 6)
+ | ((in[27 + inpos]) << 21)
+ | ((in[28 + inpos]) << 36)
+ | ((in[29 + inpos]) << 51);
+ out[7 + outpos] = ((in[29 + inpos]) >>> (15 - 2))
+ | ((in[30 + inpos]) << 2)
+ | ((in[31 + inpos]) << 17)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 47)
+ | ((in[34 + inpos]) << 62);
+ out[8 + outpos] = ((in[34 + inpos]) >>> (15 - 13))
+ | ((in[35 + inpos]) << 13)
+ | ((in[36 + inpos]) << 28)
+ | ((in[37 + inpos]) << 43)
+ | ((in[38 + inpos]) << 58);
+ out[9 + outpos] = ((in[38 + inpos]) >>> (15 - 9))
+ | ((in[39 + inpos]) << 9)
+ | ((in[40 + inpos]) << 24)
+ | ((in[41 + inpos]) << 39)
+ | ((in[42 + inpos]) << 54);
+ out[10 + outpos] = ((in[42 + inpos]) >>> (15 - 5))
+ | ((in[43 + inpos]) << 5)
+ | ((in[44 + inpos]) << 20)
+ | ((in[45 + inpos]) << 35)
+ | ((in[46 + inpos]) << 50);
+ out[11 + outpos] = ((in[46 + inpos]) >>> (15 - 1))
+ | ((in[47 + inpos]) << 1)
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 31)
+ | ((in[50 + inpos]) << 46)
+ | ((in[51 + inpos]) << 61);
+ out[12 + outpos] = ((in[51 + inpos]) >>> (15 - 12))
+ | ((in[52 + inpos]) << 12)
+ | ((in[53 + inpos]) << 27)
+ | ((in[54 + inpos]) << 42)
+ | ((in[55 + inpos]) << 57);
+ out[13 + outpos] = ((in[55 + inpos]) >>> (15 - 8))
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 23)
+ | ((in[58 + inpos]) << 38)
+ | ((in[59 + inpos]) << 53);
+ out[14 + outpos] = ((in[59 + inpos]) >>> (15 - 4))
+ | ((in[60 + inpos]) << 4)
+ | ((in[61 + inpos]) << 19)
+ | ((in[62 + inpos]) << 34)
+ | ((in[63 + inpos]) << 49);
+ }
+
+ protected static void fastpackwithoutmask16(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 16)
+ | ((in[2 + inpos]) << 32)
+ | ((in[3 + inpos]) << 48);
+ out[1 + outpos] = in[4 + inpos]
+ | ((in[5 + inpos]) << 16)
+ | ((in[6 + inpos]) << 32)
+ | ((in[7 + inpos]) << 48);
+ out[2 + outpos] = in[8 + inpos]
+ | ((in[9 + inpos]) << 16)
+ | ((in[10 + inpos]) << 32)
+ | ((in[11 + inpos]) << 48);
+ out[3 + outpos] = in[12 + inpos]
+ | ((in[13 + inpos]) << 16)
+ | ((in[14 + inpos]) << 32)
+ | ((in[15 + inpos]) << 48);
+ out[4 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 16)
+ | ((in[18 + inpos]) << 32)
+ | ((in[19 + inpos]) << 48);
+ out[5 + outpos] = in[20 + inpos]
+ | ((in[21 + inpos]) << 16)
+ | ((in[22 + inpos]) << 32)
+ | ((in[23 + inpos]) << 48);
+ out[6 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 16)
+ | ((in[26 + inpos]) << 32)
+ | ((in[27 + inpos]) << 48);
+ out[7 + outpos] = in[28 + inpos]
+ | ((in[29 + inpos]) << 16)
+ | ((in[30 + inpos]) << 32)
+ | ((in[31 + inpos]) << 48);
+ out[8 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 16)
+ | ((in[34 + inpos]) << 32)
+ | ((in[35 + inpos]) << 48);
+ out[9 + outpos] = in[36 + inpos]
+ | ((in[37 + inpos]) << 16)
+ | ((in[38 + inpos]) << 32)
+ | ((in[39 + inpos]) << 48);
+ out[10 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 16)
+ | ((in[42 + inpos]) << 32)
+ | ((in[43 + inpos]) << 48);
+ out[11 + outpos] = in[44 + inpos]
+ | ((in[45 + inpos]) << 16)
+ | ((in[46 + inpos]) << 32)
+ | ((in[47 + inpos]) << 48);
+ out[12 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 16)
+ | ((in[50 + inpos]) << 32)
+ | ((in[51 + inpos]) << 48);
+ out[13 + outpos] = in[52 + inpos]
+ | ((in[53 + inpos]) << 16)
+ | ((in[54 + inpos]) << 32)
+ | ((in[55 + inpos]) << 48);
+ out[14 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 16)
+ | ((in[58 + inpos]) << 32)
+ | ((in[59 + inpos]) << 48);
+ out[15 + outpos] = in[60 + inpos]
+ | ((in[61 + inpos]) << 16)
+ | ((in[62 + inpos]) << 32)
+ | ((in[63 + inpos]) << 48);
+ }
+
+ protected static void fastpackwithoutmask17(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 17)
+ | ((in[2 + inpos]) << 34)
+ | ((in[3 + inpos]) << 51);
+ out[1 + outpos] = ((in[3 + inpos]) >>> (17 - 4))
+ | ((in[4 + inpos]) << 4)
+ | ((in[5 + inpos]) << 21)
+ | ((in[6 + inpos]) << 38)
+ | ((in[7 + inpos]) << 55);
+ out[2 + outpos] = ((in[7 + inpos]) >>> (17 - 8))
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 25)
+ | ((in[10 + inpos]) << 42)
+ | ((in[11 + inpos]) << 59);
+ out[3 + outpos] = ((in[11 + inpos]) >>> (17 - 12))
+ | ((in[12 + inpos]) << 12)
+ | ((in[13 + inpos]) << 29)
+ | ((in[14 + inpos]) << 46)
+ | ((in[15 + inpos]) << 63);
+ out[4 + outpos] = ((in[15 + inpos]) >>> (17 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 33)
+ | ((in[18 + inpos]) << 50);
+ out[5 + outpos] = ((in[18 + inpos]) >>> (17 - 3))
+ | ((in[19 + inpos]) << 3)
+ | ((in[20 + inpos]) << 20)
+ | ((in[21 + inpos]) << 37)
+ | ((in[22 + inpos]) << 54);
+ out[6 + outpos] = ((in[22 + inpos]) >>> (17 - 7))
+ | ((in[23 + inpos]) << 7)
+ | ((in[24 + inpos]) << 24)
+ | ((in[25 + inpos]) << 41)
+ | ((in[26 + inpos]) << 58);
+ out[7 + outpos] = ((in[26 + inpos]) >>> (17 - 11))
+ | ((in[27 + inpos]) << 11)
+ | ((in[28 + inpos]) << 28)
+ | ((in[29 + inpos]) << 45)
+ | ((in[30 + inpos]) << 62);
+ out[8 + outpos] = ((in[30 + inpos]) >>> (17 - 15))
+ | ((in[31 + inpos]) << 15)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 49);
+ out[9 + outpos] = ((in[33 + inpos]) >>> (17 - 2))
+ | ((in[34 + inpos]) << 2)
+ | ((in[35 + inpos]) << 19)
+ | ((in[36 + inpos]) << 36)
+ | ((in[37 + inpos]) << 53);
+ out[10 + outpos] = ((in[37 + inpos]) >>> (17 - 6))
+ | ((in[38 + inpos]) << 6)
+ | ((in[39 + inpos]) << 23)
+ | ((in[40 + inpos]) << 40)
+ | ((in[41 + inpos]) << 57);
+ out[11 + outpos] = ((in[41 + inpos]) >>> (17 - 10))
+ | ((in[42 + inpos]) << 10)
+ | ((in[43 + inpos]) << 27)
+ | ((in[44 + inpos]) << 44)
+ | ((in[45 + inpos]) << 61);
+ out[12 + outpos] = ((in[45 + inpos]) >>> (17 - 14))
+ | ((in[46 + inpos]) << 14)
+ | ((in[47 + inpos]) << 31)
+ | ((in[48 + inpos]) << 48);
+ out[13 + outpos] = ((in[48 + inpos]) >>> (17 - 1))
+ | ((in[49 + inpos]) << 1)
+ | ((in[50 + inpos]) << 18)
+ | ((in[51 + inpos]) << 35)
+ | ((in[52 + inpos]) << 52);
+ out[14 + outpos] = ((in[52 + inpos]) >>> (17 - 5))
+ | ((in[53 + inpos]) << 5)
+ | ((in[54 + inpos]) << 22)
+ | ((in[55 + inpos]) << 39)
+ | ((in[56 + inpos]) << 56);
+ out[15 + outpos] = ((in[56 + inpos]) >>> (17 - 9))
+ | ((in[57 + inpos]) << 9)
+ | ((in[58 + inpos]) << 26)
+ | ((in[59 + inpos]) << 43)
+ | ((in[60 + inpos]) << 60);
+ out[16 + outpos] = ((in[60 + inpos]) >>> (17 - 13))
+ | ((in[61 + inpos]) << 13)
+ | ((in[62 + inpos]) << 30)
+ | ((in[63 + inpos]) << 47);
+ }
+
+ protected static void fastpackwithoutmask18(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 18)
+ | ((in[2 + inpos]) << 36)
+ | ((in[3 + inpos]) << 54);
+ out[1 + outpos] = ((in[3 + inpos]) >>> (18 - 8))
+ | ((in[4 + inpos]) << 8)
+ | ((in[5 + inpos]) << 26)
+ | ((in[6 + inpos]) << 44)
+ | ((in[7 + inpos]) << 62);
+ out[2 + outpos] = ((in[7 + inpos]) >>> (18 - 16))
+ | ((in[8 + inpos]) << 16)
+ | ((in[9 + inpos]) << 34)
+ | ((in[10 + inpos]) << 52);
+ out[3 + outpos] = ((in[10 + inpos]) >>> (18 - 6))
+ | ((in[11 + inpos]) << 6)
+ | ((in[12 + inpos]) << 24)
+ | ((in[13 + inpos]) << 42)
+ | ((in[14 + inpos]) << 60);
+ out[4 + outpos] = ((in[14 + inpos]) >>> (18 - 14))
+ | ((in[15 + inpos]) << 14)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 50);
+ out[5 + outpos] = ((in[17 + inpos]) >>> (18 - 4))
+ | ((in[18 + inpos]) << 4)
+ | ((in[19 + inpos]) << 22)
+ | ((in[20 + inpos]) << 40)
+ | ((in[21 + inpos]) << 58);
+ out[6 + outpos] = ((in[21 + inpos]) >>> (18 - 12))
+ | ((in[22 + inpos]) << 12)
+ | ((in[23 + inpos]) << 30)
+ | ((in[24 + inpos]) << 48);
+ out[7 + outpos] = ((in[24 + inpos]) >>> (18 - 2))
+ | ((in[25 + inpos]) << 2)
+ | ((in[26 + inpos]) << 20)
+ | ((in[27 + inpos]) << 38)
+ | ((in[28 + inpos]) << 56);
+ out[8 + outpos] = ((in[28 + inpos]) >>> (18 - 10))
+ | ((in[29 + inpos]) << 10)
+ | ((in[30 + inpos]) << 28)
+ | ((in[31 + inpos]) << 46);
+ out[9 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 18)
+ | ((in[34 + inpos]) << 36)
+ | ((in[35 + inpos]) << 54);
+ out[10 + outpos] = ((in[35 + inpos]) >>> (18 - 8))
+ | ((in[36 + inpos]) << 8)
+ | ((in[37 + inpos]) << 26)
+ | ((in[38 + inpos]) << 44)
+ | ((in[39 + inpos]) << 62);
+ out[11 + outpos] = ((in[39 + inpos]) >>> (18 - 16))
+ | ((in[40 + inpos]) << 16)
+ | ((in[41 + inpos]) << 34)
+ | ((in[42 + inpos]) << 52);
+ out[12 + outpos] = ((in[42 + inpos]) >>> (18 - 6))
+ | ((in[43 + inpos]) << 6)
+ | ((in[44 + inpos]) << 24)
+ | ((in[45 + inpos]) << 42)
+ | ((in[46 + inpos]) << 60);
+ out[13 + outpos] = ((in[46 + inpos]) >>> (18 - 14))
+ | ((in[47 + inpos]) << 14)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 50);
+ out[14 + outpos] = ((in[49 + inpos]) >>> (18 - 4))
+ | ((in[50 + inpos]) << 4)
+ | ((in[51 + inpos]) << 22)
+ | ((in[52 + inpos]) << 40)
+ | ((in[53 + inpos]) << 58);
+ out[15 + outpos] = ((in[53 + inpos]) >>> (18 - 12))
+ | ((in[54 + inpos]) << 12)
+ | ((in[55 + inpos]) << 30)
+ | ((in[56 + inpos]) << 48);
+ out[16 + outpos] = ((in[56 + inpos]) >>> (18 - 2))
+ | ((in[57 + inpos]) << 2)
+ | ((in[58 + inpos]) << 20)
+ | ((in[59 + inpos]) << 38)
+ | ((in[60 + inpos]) << 56);
+ out[17 + outpos] = ((in[60 + inpos]) >>> (18 - 10))
+ | ((in[61 + inpos]) << 10)
+ | ((in[62 + inpos]) << 28)
+ | ((in[63 + inpos]) << 46);
+ }
+
+ protected static void fastpackwithoutmask19(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 19)
+ | ((in[2 + inpos]) << 38)
+ | ((in[3 + inpos]) << 57);
+ out[1 + outpos] = ((in[3 + inpos]) >>> (19 - 12))
+ | ((in[4 + inpos]) << 12)
+ | ((in[5 + inpos]) << 31)
+ | ((in[6 + inpos]) << 50);
+ out[2 + outpos] = ((in[6 + inpos]) >>> (19 - 5))
+ | ((in[7 + inpos]) << 5)
+ | ((in[8 + inpos]) << 24)
+ | ((in[9 + inpos]) << 43)
+ | ((in[10 + inpos]) << 62);
+ out[3 + outpos] = ((in[10 + inpos]) >>> (19 - 17))
+ | ((in[11 + inpos]) << 17)
+ | ((in[12 + inpos]) << 36)
+ | ((in[13 + inpos]) << 55);
+ out[4 + outpos] = ((in[13 + inpos]) >>> (19 - 10))
+ | ((in[14 + inpos]) << 10)
+ | ((in[15 + inpos]) << 29)
+ | ((in[16 + inpos]) << 48);
+ out[5 + outpos] = ((in[16 + inpos]) >>> (19 - 3))
+ | ((in[17 + inpos]) << 3)
+ | ((in[18 + inpos]) << 22)
+ | ((in[19 + inpos]) << 41)
+ | ((in[20 + inpos]) << 60);
+ out[6 + outpos] = ((in[20 + inpos]) >>> (19 - 15))
+ | ((in[21 + inpos]) << 15)
+ | ((in[22 + inpos]) << 34)
+ | ((in[23 + inpos]) << 53);
+ out[7 + outpos] = ((in[23 + inpos]) >>> (19 - 8))
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 27)
+ | ((in[26 + inpos]) << 46);
+ out[8 + outpos] = ((in[26 + inpos]) >>> (19 - 1))
+ | ((in[27 + inpos]) << 1)
+ | ((in[28 + inpos]) << 20)
+ | ((in[29 + inpos]) << 39)
+ | ((in[30 + inpos]) << 58);
+ out[9 + outpos] = ((in[30 + inpos]) >>> (19 - 13))
+ | ((in[31 + inpos]) << 13)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 51);
+ out[10 + outpos] = ((in[33 + inpos]) >>> (19 - 6))
+ | ((in[34 + inpos]) << 6)
+ | ((in[35 + inpos]) << 25)
+ | ((in[36 + inpos]) << 44)
+ | ((in[37 + inpos]) << 63);
+ out[11 + outpos] = ((in[37 + inpos]) >>> (19 - 18))
+ | ((in[38 + inpos]) << 18)
+ | ((in[39 + inpos]) << 37)
+ | ((in[40 + inpos]) << 56);
+ out[12 + outpos] = ((in[40 + inpos]) >>> (19 - 11))
+ | ((in[41 + inpos]) << 11)
+ | ((in[42 + inpos]) << 30)
+ | ((in[43 + inpos]) << 49);
+ out[13 + outpos] = ((in[43 + inpos]) >>> (19 - 4))
+ | ((in[44 + inpos]) << 4)
+ | ((in[45 + inpos]) << 23)
+ | ((in[46 + inpos]) << 42)
+ | ((in[47 + inpos]) << 61);
+ out[14 + outpos] = ((in[47 + inpos]) >>> (19 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 35)
+ | ((in[50 + inpos]) << 54);
+ out[15 + outpos] = ((in[50 + inpos]) >>> (19 - 9))
+ | ((in[51 + inpos]) << 9)
+ | ((in[52 + inpos]) << 28)
+ | ((in[53 + inpos]) << 47);
+ out[16 + outpos] = ((in[53 + inpos]) >>> (19 - 2))
+ | ((in[54 + inpos]) << 2)
+ | ((in[55 + inpos]) << 21)
+ | ((in[56 + inpos]) << 40)
+ | ((in[57 + inpos]) << 59);
+ out[17 + outpos] = ((in[57 + inpos]) >>> (19 - 14))
+ | ((in[58 + inpos]) << 14)
+ | ((in[59 + inpos]) << 33)
+ | ((in[60 + inpos]) << 52);
+ out[18 + outpos] = ((in[60 + inpos]) >>> (19 - 7))
+ | ((in[61 + inpos]) << 7)
+ | ((in[62 + inpos]) << 26)
+ | ((in[63 + inpos]) << 45);
+ }
+
+ protected static void fastpackwithoutmask20(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 20)
+ | ((in[2 + inpos]) << 40)
+ | ((in[3 + inpos]) << 60);
+ out[1 + outpos] = ((in[3 + inpos]) >>> (20 - 16))
+ | ((in[4 + inpos]) << 16)
+ | ((in[5 + inpos]) << 36)
+ | ((in[6 + inpos]) << 56);
+ out[2 + outpos] = ((in[6 + inpos]) >>> (20 - 12))
+ | ((in[7 + inpos]) << 12)
+ | ((in[8 + inpos]) << 32)
+ | ((in[9 + inpos]) << 52);
+ out[3 + outpos] = ((in[9 + inpos]) >>> (20 - 8))
+ | ((in[10 + inpos]) << 8)
+ | ((in[11 + inpos]) << 28)
+ | ((in[12 + inpos]) << 48);
+ out[4 + outpos] = ((in[12 + inpos]) >>> (20 - 4))
+ | ((in[13 + inpos]) << 4)
+ | ((in[14 + inpos]) << 24)
+ | ((in[15 + inpos]) << 44);
+ out[5 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 20)
+ | ((in[18 + inpos]) << 40)
+ | ((in[19 + inpos]) << 60);
+ out[6 + outpos] = ((in[19 + inpos]) >>> (20 - 16))
+ | ((in[20 + inpos]) << 16)
+ | ((in[21 + inpos]) << 36)
+ | ((in[22 + inpos]) << 56);
+ out[7 + outpos] = ((in[22 + inpos]) >>> (20 - 12))
+ | ((in[23 + inpos]) << 12)
+ | ((in[24 + inpos]) << 32)
+ | ((in[25 + inpos]) << 52);
+ out[8 + outpos] = ((in[25 + inpos]) >>> (20 - 8))
+ | ((in[26 + inpos]) << 8)
+ | ((in[27 + inpos]) << 28)
+ | ((in[28 + inpos]) << 48);
+ out[9 + outpos] = ((in[28 + inpos]) >>> (20 - 4))
+ | ((in[29 + inpos]) << 4)
+ | ((in[30 + inpos]) << 24)
+ | ((in[31 + inpos]) << 44);
+ out[10 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 20)
+ | ((in[34 + inpos]) << 40)
+ | ((in[35 + inpos]) << 60);
+ out[11 + outpos] = ((in[35 + inpos]) >>> (20 - 16))
+ | ((in[36 + inpos]) << 16)
+ | ((in[37 + inpos]) << 36)
+ | ((in[38 + inpos]) << 56);
+ out[12 + outpos] = ((in[38 + inpos]) >>> (20 - 12))
+ | ((in[39 + inpos]) << 12)
+ | ((in[40 + inpos]) << 32)
+ | ((in[41 + inpos]) << 52);
+ out[13 + outpos] = ((in[41 + inpos]) >>> (20 - 8))
+ | ((in[42 + inpos]) << 8)
+ | ((in[43 + inpos]) << 28)
+ | ((in[44 + inpos]) << 48);
+ out[14 + outpos] = ((in[44 + inpos]) >>> (20 - 4))
+ | ((in[45 + inpos]) << 4)
+ | ((in[46 + inpos]) << 24)
+ | ((in[47 + inpos]) << 44);
+ out[15 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 20)
+ | ((in[50 + inpos]) << 40)
+ | ((in[51 + inpos]) << 60);
+ out[16 + outpos] = ((in[51 + inpos]) >>> (20 - 16))
+ | ((in[52 + inpos]) << 16)
+ | ((in[53 + inpos]) << 36)
+ | ((in[54 + inpos]) << 56);
+ out[17 + outpos] = ((in[54 + inpos]) >>> (20 - 12))
+ | ((in[55 + inpos]) << 12)
+ | ((in[56 + inpos]) << 32)
+ | ((in[57 + inpos]) << 52);
+ out[18 + outpos] = ((in[57 + inpos]) >>> (20 - 8))
+ | ((in[58 + inpos]) << 8)
+ | ((in[59 + inpos]) << 28)
+ | ((in[60 + inpos]) << 48);
+ out[19 + outpos] = ((in[60 + inpos]) >>> (20 - 4))
+ | ((in[61 + inpos]) << 4)
+ | ((in[62 + inpos]) << 24)
+ | ((in[63 + inpos]) << 44);
+ }
+
+ protected static void fastpackwithoutmask21(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 21)
+ | ((in[2 + inpos]) << 42)
+ | ((in[3 + inpos]) << 63);
+ out[1 + outpos] = ((in[3 + inpos]) >>> (21 - 20))
+ | ((in[4 + inpos]) << 20)
+ | ((in[5 + inpos]) << 41)
+ | ((in[6 + inpos]) << 62);
+ out[2 + outpos] = ((in[6 + inpos]) >>> (21 - 19))
+ | ((in[7 + inpos]) << 19)
+ | ((in[8 + inpos]) << 40)
+ | ((in[9 + inpos]) << 61);
+ out[3 + outpos] = ((in[9 + inpos]) >>> (21 - 18))
+ | ((in[10 + inpos]) << 18)
+ | ((in[11 + inpos]) << 39)
+ | ((in[12 + inpos]) << 60);
+ out[4 + outpos] = ((in[12 + inpos]) >>> (21 - 17))
+ | ((in[13 + inpos]) << 17)
+ | ((in[14 + inpos]) << 38)
+ | ((in[15 + inpos]) << 59);
+ out[5 + outpos] = ((in[15 + inpos]) >>> (21 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 37)
+ | ((in[18 + inpos]) << 58);
+ out[6 + outpos] = ((in[18 + inpos]) >>> (21 - 15))
+ | ((in[19 + inpos]) << 15)
+ | ((in[20 + inpos]) << 36)
+ | ((in[21 + inpos]) << 57);
+ out[7 + outpos] = ((in[21 + inpos]) >>> (21 - 14))
+ | ((in[22 + inpos]) << 14)
+ | ((in[23 + inpos]) << 35)
+ | ((in[24 + inpos]) << 56);
+ out[8 + outpos] = ((in[24 + inpos]) >>> (21 - 13))
+ | ((in[25 + inpos]) << 13)
+ | ((in[26 + inpos]) << 34)
+ | ((in[27 + inpos]) << 55);
+ out[9 + outpos] = ((in[27 + inpos]) >>> (21 - 12))
+ | ((in[28 + inpos]) << 12)
+ | ((in[29 + inpos]) << 33)
+ | ((in[30 + inpos]) << 54);
+ out[10 + outpos] = ((in[30 + inpos]) >>> (21 - 11))
+ | ((in[31 + inpos]) << 11)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 53);
+ out[11 + outpos] = ((in[33 + inpos]) >>> (21 - 10))
+ | ((in[34 + inpos]) << 10)
+ | ((in[35 + inpos]) << 31)
+ | ((in[36 + inpos]) << 52);
+ out[12 + outpos] = ((in[36 + inpos]) >>> (21 - 9))
+ | ((in[37 + inpos]) << 9)
+ | ((in[38 + inpos]) << 30)
+ | ((in[39 + inpos]) << 51);
+ out[13 + outpos] = ((in[39 + inpos]) >>> (21 - 8))
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 29)
+ | ((in[42 + inpos]) << 50);
+ out[14 + outpos] = ((in[42 + inpos]) >>> (21 - 7))
+ | ((in[43 + inpos]) << 7)
+ | ((in[44 + inpos]) << 28)
+ | ((in[45 + inpos]) << 49);
+ out[15 + outpos] = ((in[45 + inpos]) >>> (21 - 6))
+ | ((in[46 + inpos]) << 6)
+ | ((in[47 + inpos]) << 27)
+ | ((in[48 + inpos]) << 48);
+ out[16 + outpos] = ((in[48 + inpos]) >>> (21 - 5))
+ | ((in[49 + inpos]) << 5)
+ | ((in[50 + inpos]) << 26)
+ | ((in[51 + inpos]) << 47);
+ out[17 + outpos] = ((in[51 + inpos]) >>> (21 - 4))
+ | ((in[52 + inpos]) << 4)
+ | ((in[53 + inpos]) << 25)
+ | ((in[54 + inpos]) << 46);
+ out[18 + outpos] = ((in[54 + inpos]) >>> (21 - 3))
+ | ((in[55 + inpos]) << 3)
+ | ((in[56 + inpos]) << 24)
+ | ((in[57 + inpos]) << 45);
+ out[19 + outpos] = ((in[57 + inpos]) >>> (21 - 2))
+ | ((in[58 + inpos]) << 2)
+ | ((in[59 + inpos]) << 23)
+ | ((in[60 + inpos]) << 44);
+ out[20 + outpos] = ((in[60 + inpos]) >>> (21 - 1))
+ | ((in[61 + inpos]) << 1)
+ | ((in[62 + inpos]) << 22)
+ | ((in[63 + inpos]) << 43);
+ }
+
+ protected static void fastpackwithoutmask22(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 22)
+ | ((in[2 + inpos]) << 44);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (22 - 2))
+ | ((in[3 + inpos]) << 2)
+ | ((in[4 + inpos]) << 24)
+ | ((in[5 + inpos]) << 46);
+ out[2 + outpos] = ((in[5 + inpos]) >>> (22 - 4))
+ | ((in[6 + inpos]) << 4)
+ | ((in[7 + inpos]) << 26)
+ | ((in[8 + inpos]) << 48);
+ out[3 + outpos] = ((in[8 + inpos]) >>> (22 - 6))
+ | ((in[9 + inpos]) << 6)
+ | ((in[10 + inpos]) << 28)
+ | ((in[11 + inpos]) << 50);
+ out[4 + outpos] = ((in[11 + inpos]) >>> (22 - 8))
+ | ((in[12 + inpos]) << 8)
+ | ((in[13 + inpos]) << 30)
+ | ((in[14 + inpos]) << 52);
+ out[5 + outpos] = ((in[14 + inpos]) >>> (22 - 10))
+ | ((in[15 + inpos]) << 10)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 54);
+ out[6 + outpos] = ((in[17 + inpos]) >>> (22 - 12))
+ | ((in[18 + inpos]) << 12)
+ | ((in[19 + inpos]) << 34)
+ | ((in[20 + inpos]) << 56);
+ out[7 + outpos] = ((in[20 + inpos]) >>> (22 - 14))
+ | ((in[21 + inpos]) << 14)
+ | ((in[22 + inpos]) << 36)
+ | ((in[23 + inpos]) << 58);
+ out[8 + outpos] = ((in[23 + inpos]) >>> (22 - 16))
+ | ((in[24 + inpos]) << 16)
+ | ((in[25 + inpos]) << 38)
+ | ((in[26 + inpos]) << 60);
+ out[9 + outpos] = ((in[26 + inpos]) >>> (22 - 18))
+ | ((in[27 + inpos]) << 18)
+ | ((in[28 + inpos]) << 40)
+ | ((in[29 + inpos]) << 62);
+ out[10 + outpos] = ((in[29 + inpos]) >>> (22 - 20))
+ | ((in[30 + inpos]) << 20)
+ | ((in[31 + inpos]) << 42);
+ out[11 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 22)
+ | ((in[34 + inpos]) << 44);
+ out[12 + outpos] = ((in[34 + inpos]) >>> (22 - 2))
+ | ((in[35 + inpos]) << 2)
+ | ((in[36 + inpos]) << 24)
+ | ((in[37 + inpos]) << 46);
+ out[13 + outpos] = ((in[37 + inpos]) >>> (22 - 4))
+ | ((in[38 + inpos]) << 4)
+ | ((in[39 + inpos]) << 26)
+ | ((in[40 + inpos]) << 48);
+ out[14 + outpos] = ((in[40 + inpos]) >>> (22 - 6))
+ | ((in[41 + inpos]) << 6)
+ | ((in[42 + inpos]) << 28)
+ | ((in[43 + inpos]) << 50);
+ out[15 + outpos] = ((in[43 + inpos]) >>> (22 - 8))
+ | ((in[44 + inpos]) << 8)
+ | ((in[45 + inpos]) << 30)
+ | ((in[46 + inpos]) << 52);
+ out[16 + outpos] = ((in[46 + inpos]) >>> (22 - 10))
+ | ((in[47 + inpos]) << 10)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 54);
+ out[17 + outpos] = ((in[49 + inpos]) >>> (22 - 12))
+ | ((in[50 + inpos]) << 12)
+ | ((in[51 + inpos]) << 34)
+ | ((in[52 + inpos]) << 56);
+ out[18 + outpos] = ((in[52 + inpos]) >>> (22 - 14))
+ | ((in[53 + inpos]) << 14)
+ | ((in[54 + inpos]) << 36)
+ | ((in[55 + inpos]) << 58);
+ out[19 + outpos] = ((in[55 + inpos]) >>> (22 - 16))
+ | ((in[56 + inpos]) << 16)
+ | ((in[57 + inpos]) << 38)
+ | ((in[58 + inpos]) << 60);
+ out[20 + outpos] = ((in[58 + inpos]) >>> (22 - 18))
+ | ((in[59 + inpos]) << 18)
+ | ((in[60 + inpos]) << 40)
+ | ((in[61 + inpos]) << 62);
+ out[21 + outpos] = ((in[61 + inpos]) >>> (22 - 20))
+ | ((in[62 + inpos]) << 20)
+ | ((in[63 + inpos]) << 42);
+ }
+
+ protected static void fastpackwithoutmask23(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 23)
+ | ((in[2 + inpos]) << 46);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (23 - 5))
+ | ((in[3 + inpos]) << 5)
+ | ((in[4 + inpos]) << 28)
+ | ((in[5 + inpos]) << 51);
+ out[2 + outpos] = ((in[5 + inpos]) >>> (23 - 10))
+ | ((in[6 + inpos]) << 10)
+ | ((in[7 + inpos]) << 33)
+ | ((in[8 + inpos]) << 56);
+ out[3 + outpos] = ((in[8 + inpos]) >>> (23 - 15))
+ | ((in[9 + inpos]) << 15)
+ | ((in[10 + inpos]) << 38)
+ | ((in[11 + inpos]) << 61);
+ out[4 + outpos] = ((in[11 + inpos]) >>> (23 - 20))
+ | ((in[12 + inpos]) << 20)
+ | ((in[13 + inpos]) << 43);
+ out[5 + outpos] = ((in[13 + inpos]) >>> (23 - 2))
+ | ((in[14 + inpos]) << 2)
+ | ((in[15 + inpos]) << 25)
+ | ((in[16 + inpos]) << 48);
+ out[6 + outpos] = ((in[16 + inpos]) >>> (23 - 7))
+ | ((in[17 + inpos]) << 7)
+ | ((in[18 + inpos]) << 30)
+ | ((in[19 + inpos]) << 53);
+ out[7 + outpos] = ((in[19 + inpos]) >>> (23 - 12))
+ | ((in[20 + inpos]) << 12)
+ | ((in[21 + inpos]) << 35)
+ | ((in[22 + inpos]) << 58);
+ out[8 + outpos] = ((in[22 + inpos]) >>> (23 - 17))
+ | ((in[23 + inpos]) << 17)
+ | ((in[24 + inpos]) << 40)
+ | ((in[25 + inpos]) << 63);
+ out[9 + outpos] = ((in[25 + inpos]) >>> (23 - 22))
+ | ((in[26 + inpos]) << 22)
+ | ((in[27 + inpos]) << 45);
+ out[10 + outpos] = ((in[27 + inpos]) >>> (23 - 4))
+ | ((in[28 + inpos]) << 4)
+ | ((in[29 + inpos]) << 27)
+ | ((in[30 + inpos]) << 50);
+ out[11 + outpos] = ((in[30 + inpos]) >>> (23 - 9))
+ | ((in[31 + inpos]) << 9)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 55);
+ out[12 + outpos] = ((in[33 + inpos]) >>> (23 - 14))
+ | ((in[34 + inpos]) << 14)
+ | ((in[35 + inpos]) << 37)
+ | ((in[36 + inpos]) << 60);
+ out[13 + outpos] = ((in[36 + inpos]) >>> (23 - 19))
+ | ((in[37 + inpos]) << 19)
+ | ((in[38 + inpos]) << 42);
+ out[14 + outpos] = ((in[38 + inpos]) >>> (23 - 1))
+ | ((in[39 + inpos]) << 1)
+ | ((in[40 + inpos]) << 24)
+ | ((in[41 + inpos]) << 47);
+ out[15 + outpos] = ((in[41 + inpos]) >>> (23 - 6))
+ | ((in[42 + inpos]) << 6)
+ | ((in[43 + inpos]) << 29)
+ | ((in[44 + inpos]) << 52);
+ out[16 + outpos] = ((in[44 + inpos]) >>> (23 - 11))
+ | ((in[45 + inpos]) << 11)
+ | ((in[46 + inpos]) << 34)
+ | ((in[47 + inpos]) << 57);
+ out[17 + outpos] = ((in[47 + inpos]) >>> (23 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 39)
+ | ((in[50 + inpos]) << 62);
+ out[18 + outpos] = ((in[50 + inpos]) >>> (23 - 21))
+ | ((in[51 + inpos]) << 21)
+ | ((in[52 + inpos]) << 44);
+ out[19 + outpos] = ((in[52 + inpos]) >>> (23 - 3))
+ | ((in[53 + inpos]) << 3)
+ | ((in[54 + inpos]) << 26)
+ | ((in[55 + inpos]) << 49);
+ out[20 + outpos] = ((in[55 + inpos]) >>> (23 - 8))
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 31)
+ | ((in[58 + inpos]) << 54);
+ out[21 + outpos] = ((in[58 + inpos]) >>> (23 - 13))
+ | ((in[59 + inpos]) << 13)
+ | ((in[60 + inpos]) << 36)
+ | ((in[61 + inpos]) << 59);
+ out[22 + outpos] = ((in[61 + inpos]) >>> (23 - 18))
+ | ((in[62 + inpos]) << 18)
+ | ((in[63 + inpos]) << 41);
+ }
+
+ protected static void fastpackwithoutmask24(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 24)
+ | ((in[2 + inpos]) << 48);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (24 - 8))
+ | ((in[3 + inpos]) << 8)
+ | ((in[4 + inpos]) << 32)
+ | ((in[5 + inpos]) << 56);
+ out[2 + outpos] = ((in[5 + inpos]) >>> (24 - 16))
+ | ((in[6 + inpos]) << 16)
+ | ((in[7 + inpos]) << 40);
+ out[3 + outpos] = in[8 + inpos]
+ | ((in[9 + inpos]) << 24)
+ | ((in[10 + inpos]) << 48);
+ out[4 + outpos] = ((in[10 + inpos]) >>> (24 - 8))
+ | ((in[11 + inpos]) << 8)
+ | ((in[12 + inpos]) << 32)
+ | ((in[13 + inpos]) << 56);
+ out[5 + outpos] = ((in[13 + inpos]) >>> (24 - 16))
+ | ((in[14 + inpos]) << 16)
+ | ((in[15 + inpos]) << 40);
+ out[6 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 24)
+ | ((in[18 + inpos]) << 48);
+ out[7 + outpos] = ((in[18 + inpos]) >>> (24 - 8))
+ | ((in[19 + inpos]) << 8)
+ | ((in[20 + inpos]) << 32)
+ | ((in[21 + inpos]) << 56);
+ out[8 + outpos] = ((in[21 + inpos]) >>> (24 - 16))
+ | ((in[22 + inpos]) << 16)
+ | ((in[23 + inpos]) << 40);
+ out[9 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 24)
+ | ((in[26 + inpos]) << 48);
+ out[10 + outpos] = ((in[26 + inpos]) >>> (24 - 8))
+ | ((in[27 + inpos]) << 8)
+ | ((in[28 + inpos]) << 32)
+ | ((in[29 + inpos]) << 56);
+ out[11 + outpos] = ((in[29 + inpos]) >>> (24 - 16))
+ | ((in[30 + inpos]) << 16)
+ | ((in[31 + inpos]) << 40);
+ out[12 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 24)
+ | ((in[34 + inpos]) << 48);
+ out[13 + outpos] = ((in[34 + inpos]) >>> (24 - 8))
+ | ((in[35 + inpos]) << 8)
+ | ((in[36 + inpos]) << 32)
+ | ((in[37 + inpos]) << 56);
+ out[14 + outpos] = ((in[37 + inpos]) >>> (24 - 16))
+ | ((in[38 + inpos]) << 16)
+ | ((in[39 + inpos]) << 40);
+ out[15 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 24)
+ | ((in[42 + inpos]) << 48);
+ out[16 + outpos] = ((in[42 + inpos]) >>> (24 - 8))
+ | ((in[43 + inpos]) << 8)
+ | ((in[44 + inpos]) << 32)
+ | ((in[45 + inpos]) << 56);
+ out[17 + outpos] = ((in[45 + inpos]) >>> (24 - 16))
+ | ((in[46 + inpos]) << 16)
+ | ((in[47 + inpos]) << 40);
+ out[18 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 24)
+ | ((in[50 + inpos]) << 48);
+ out[19 + outpos] = ((in[50 + inpos]) >>> (24 - 8))
+ | ((in[51 + inpos]) << 8)
+ | ((in[52 + inpos]) << 32)
+ | ((in[53 + inpos]) << 56);
+ out[20 + outpos] = ((in[53 + inpos]) >>> (24 - 16))
+ | ((in[54 + inpos]) << 16)
+ | ((in[55 + inpos]) << 40);
+ out[21 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 24)
+ | ((in[58 + inpos]) << 48);
+ out[22 + outpos] = ((in[58 + inpos]) >>> (24 - 8))
+ | ((in[59 + inpos]) << 8)
+ | ((in[60 + inpos]) << 32)
+ | ((in[61 + inpos]) << 56);
+ out[23 + outpos] = ((in[61 + inpos]) >>> (24 - 16))
+ | ((in[62 + inpos]) << 16)
+ | ((in[63 + inpos]) << 40);
+ }
+
+ protected static void fastpackwithoutmask25(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 25)
+ | ((in[2 + inpos]) << 50);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (25 - 11))
+ | ((in[3 + inpos]) << 11)
+ | ((in[4 + inpos]) << 36)
+ | ((in[5 + inpos]) << 61);
+ out[2 + outpos] = ((in[5 + inpos]) >>> (25 - 22))
+ | ((in[6 + inpos]) << 22)
+ | ((in[7 + inpos]) << 47);
+ out[3 + outpos] = ((in[7 + inpos]) >>> (25 - 8))
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 33)
+ | ((in[10 + inpos]) << 58);
+ out[4 + outpos] = ((in[10 + inpos]) >>> (25 - 19))
+ | ((in[11 + inpos]) << 19)
+ | ((in[12 + inpos]) << 44);
+ out[5 + outpos] = ((in[12 + inpos]) >>> (25 - 5))
+ | ((in[13 + inpos]) << 5)
+ | ((in[14 + inpos]) << 30)
+ | ((in[15 + inpos]) << 55);
+ out[6 + outpos] = ((in[15 + inpos]) >>> (25 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 41);
+ out[7 + outpos] = ((in[17 + inpos]) >>> (25 - 2))
+ | ((in[18 + inpos]) << 2)
+ | ((in[19 + inpos]) << 27)
+ | ((in[20 + inpos]) << 52);
+ out[8 + outpos] = ((in[20 + inpos]) >>> (25 - 13))
+ | ((in[21 + inpos]) << 13)
+ | ((in[22 + inpos]) << 38)
+ | ((in[23 + inpos]) << 63);
+ out[9 + outpos] = ((in[23 + inpos]) >>> (25 - 24))
+ | ((in[24 + inpos]) << 24)
+ | ((in[25 + inpos]) << 49);
+ out[10 + outpos] = ((in[25 + inpos]) >>> (25 - 10))
+ | ((in[26 + inpos]) << 10)
+ | ((in[27 + inpos]) << 35)
+ | ((in[28 + inpos]) << 60);
+ out[11 + outpos] = ((in[28 + inpos]) >>> (25 - 21))
+ | ((in[29 + inpos]) << 21)
+ | ((in[30 + inpos]) << 46);
+ out[12 + outpos] = ((in[30 + inpos]) >>> (25 - 7))
+ | ((in[31 + inpos]) << 7)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 57);
+ out[13 + outpos] = ((in[33 + inpos]) >>> (25 - 18))
+ | ((in[34 + inpos]) << 18)
+ | ((in[35 + inpos]) << 43);
+ out[14 + outpos] = ((in[35 + inpos]) >>> (25 - 4))
+ | ((in[36 + inpos]) << 4)
+ | ((in[37 + inpos]) << 29)
+ | ((in[38 + inpos]) << 54);
+ out[15 + outpos] = ((in[38 + inpos]) >>> (25 - 15))
+ | ((in[39 + inpos]) << 15)
+ | ((in[40 + inpos]) << 40);
+ out[16 + outpos] = ((in[40 + inpos]) >>> (25 - 1))
+ | ((in[41 + inpos]) << 1)
+ | ((in[42 + inpos]) << 26)
+ | ((in[43 + inpos]) << 51);
+ out[17 + outpos] = ((in[43 + inpos]) >>> (25 - 12))
+ | ((in[44 + inpos]) << 12)
+ | ((in[45 + inpos]) << 37)
+ | ((in[46 + inpos]) << 62);
+ out[18 + outpos] = ((in[46 + inpos]) >>> (25 - 23))
+ | ((in[47 + inpos]) << 23)
+ | ((in[48 + inpos]) << 48);
+ out[19 + outpos] = ((in[48 + inpos]) >>> (25 - 9))
+ | ((in[49 + inpos]) << 9)
+ | ((in[50 + inpos]) << 34)
+ | ((in[51 + inpos]) << 59);
+ out[20 + outpos] = ((in[51 + inpos]) >>> (25 - 20))
+ | ((in[52 + inpos]) << 20)
+ | ((in[53 + inpos]) << 45);
+ out[21 + outpos] = ((in[53 + inpos]) >>> (25 - 6))
+ | ((in[54 + inpos]) << 6)
+ | ((in[55 + inpos]) << 31)
+ | ((in[56 + inpos]) << 56);
+ out[22 + outpos] = ((in[56 + inpos]) >>> (25 - 17))
+ | ((in[57 + inpos]) << 17)
+ | ((in[58 + inpos]) << 42);
+ out[23 + outpos] = ((in[58 + inpos]) >>> (25 - 3))
+ | ((in[59 + inpos]) << 3)
+ | ((in[60 + inpos]) << 28)
+ | ((in[61 + inpos]) << 53);
+ out[24 + outpos] = ((in[61 + inpos]) >>> (25 - 14))
+ | ((in[62 + inpos]) << 14)
+ | ((in[63 + inpos]) << 39);
+ }
+
+ protected static void fastpackwithoutmask26(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 26)
+ | ((in[2 + inpos]) << 52);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (26 - 14))
+ | ((in[3 + inpos]) << 14)
+ | ((in[4 + inpos]) << 40);
+ out[2 + outpos] = ((in[4 + inpos]) >>> (26 - 2))
+ | ((in[5 + inpos]) << 2)
+ | ((in[6 + inpos]) << 28)
+ | ((in[7 + inpos]) << 54);
+ out[3 + outpos] = ((in[7 + inpos]) >>> (26 - 16))
+ | ((in[8 + inpos]) << 16)
+ | ((in[9 + inpos]) << 42);
+ out[4 + outpos] = ((in[9 + inpos]) >>> (26 - 4))
+ | ((in[10 + inpos]) << 4)
+ | ((in[11 + inpos]) << 30)
+ | ((in[12 + inpos]) << 56);
+ out[5 + outpos] = ((in[12 + inpos]) >>> (26 - 18))
+ | ((in[13 + inpos]) << 18)
+ | ((in[14 + inpos]) << 44);
+ out[6 + outpos] = ((in[14 + inpos]) >>> (26 - 6))
+ | ((in[15 + inpos]) << 6)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 58);
+ out[7 + outpos] = ((in[17 + inpos]) >>> (26 - 20))
+ | ((in[18 + inpos]) << 20)
+ | ((in[19 + inpos]) << 46);
+ out[8 + outpos] = ((in[19 + inpos]) >>> (26 - 8))
+ | ((in[20 + inpos]) << 8)
+ | ((in[21 + inpos]) << 34)
+ | ((in[22 + inpos]) << 60);
+ out[9 + outpos] = ((in[22 + inpos]) >>> (26 - 22))
+ | ((in[23 + inpos]) << 22)
+ | ((in[24 + inpos]) << 48);
+ out[10 + outpos] = ((in[24 + inpos]) >>> (26 - 10))
+ | ((in[25 + inpos]) << 10)
+ | ((in[26 + inpos]) << 36)
+ | ((in[27 + inpos]) << 62);
+ out[11 + outpos] = ((in[27 + inpos]) >>> (26 - 24))
+ | ((in[28 + inpos]) << 24)
+ | ((in[29 + inpos]) << 50);
+ out[12 + outpos] = ((in[29 + inpos]) >>> (26 - 12))
+ | ((in[30 + inpos]) << 12)
+ | ((in[31 + inpos]) << 38);
+ out[13 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 26)
+ | ((in[34 + inpos]) << 52);
+ out[14 + outpos] = ((in[34 + inpos]) >>> (26 - 14))
+ | ((in[35 + inpos]) << 14)
+ | ((in[36 + inpos]) << 40);
+ out[15 + outpos] = ((in[36 + inpos]) >>> (26 - 2))
+ | ((in[37 + inpos]) << 2)
+ | ((in[38 + inpos]) << 28)
+ | ((in[39 + inpos]) << 54);
+ out[16 + outpos] = ((in[39 + inpos]) >>> (26 - 16))
+ | ((in[40 + inpos]) << 16)
+ | ((in[41 + inpos]) << 42);
+ out[17 + outpos] = ((in[41 + inpos]) >>> (26 - 4))
+ | ((in[42 + inpos]) << 4)
+ | ((in[43 + inpos]) << 30)
+ | ((in[44 + inpos]) << 56);
+ out[18 + outpos] = ((in[44 + inpos]) >>> (26 - 18))
+ | ((in[45 + inpos]) << 18)
+ | ((in[46 + inpos]) << 44);
+ out[19 + outpos] = ((in[46 + inpos]) >>> (26 - 6))
+ | ((in[47 + inpos]) << 6)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 58);
+ out[20 + outpos] = ((in[49 + inpos]) >>> (26 - 20))
+ | ((in[50 + inpos]) << 20)
+ | ((in[51 + inpos]) << 46);
+ out[21 + outpos] = ((in[51 + inpos]) >>> (26 - 8))
+ | ((in[52 + inpos]) << 8)
+ | ((in[53 + inpos]) << 34)
+ | ((in[54 + inpos]) << 60);
+ out[22 + outpos] = ((in[54 + inpos]) >>> (26 - 22))
+ | ((in[55 + inpos]) << 22)
+ | ((in[56 + inpos]) << 48);
+ out[23 + outpos] = ((in[56 + inpos]) >>> (26 - 10))
+ | ((in[57 + inpos]) << 10)
+ | ((in[58 + inpos]) << 36)
+ | ((in[59 + inpos]) << 62);
+ out[24 + outpos] = ((in[59 + inpos]) >>> (26 - 24))
+ | ((in[60 + inpos]) << 24)
+ | ((in[61 + inpos]) << 50);
+ out[25 + outpos] = ((in[61 + inpos]) >>> (26 - 12))
+ | ((in[62 + inpos]) << 12)
+ | ((in[63 + inpos]) << 38);
+ }
+
+ protected static void fastpackwithoutmask27(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 27)
+ | ((in[2 + inpos]) << 54);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (27 - 17))
+ | ((in[3 + inpos]) << 17)
+ | ((in[4 + inpos]) << 44);
+ out[2 + outpos] = ((in[4 + inpos]) >>> (27 - 7))
+ | ((in[5 + inpos]) << 7)
+ | ((in[6 + inpos]) << 34)
+ | ((in[7 + inpos]) << 61);
+ out[3 + outpos] = ((in[7 + inpos]) >>> (27 - 24))
+ | ((in[8 + inpos]) << 24)
+ | ((in[9 + inpos]) << 51);
+ out[4 + outpos] = ((in[9 + inpos]) >>> (27 - 14))
+ | ((in[10 + inpos]) << 14)
+ | ((in[11 + inpos]) << 41);
+ out[5 + outpos] = ((in[11 + inpos]) >>> (27 - 4))
+ | ((in[12 + inpos]) << 4)
+ | ((in[13 + inpos]) << 31)
+ | ((in[14 + inpos]) << 58);
+ out[6 + outpos] = ((in[14 + inpos]) >>> (27 - 21))
+ | ((in[15 + inpos]) << 21)
+ | ((in[16 + inpos]) << 48);
+ out[7 + outpos] = ((in[16 + inpos]) >>> (27 - 11))
+ | ((in[17 + inpos]) << 11)
+ | ((in[18 + inpos]) << 38);
+ out[8 + outpos] = ((in[18 + inpos]) >>> (27 - 1))
+ | ((in[19 + inpos]) << 1)
+ | ((in[20 + inpos]) << 28)
+ | ((in[21 + inpos]) << 55);
+ out[9 + outpos] = ((in[21 + inpos]) >>> (27 - 18))
+ | ((in[22 + inpos]) << 18)
+ | ((in[23 + inpos]) << 45);
+ out[10 + outpos] = ((in[23 + inpos]) >>> (27 - 8))
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 35)
+ | ((in[26 + inpos]) << 62);
+ out[11 + outpos] = ((in[26 + inpos]) >>> (27 - 25))
+ | ((in[27 + inpos]) << 25)
+ | ((in[28 + inpos]) << 52);
+ out[12 + outpos] = ((in[28 + inpos]) >>> (27 - 15))
+ | ((in[29 + inpos]) << 15)
+ | ((in[30 + inpos]) << 42);
+ out[13 + outpos] = ((in[30 + inpos]) >>> (27 - 5))
+ | ((in[31 + inpos]) << 5)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 59);
+ out[14 + outpos] = ((in[33 + inpos]) >>> (27 - 22))
+ | ((in[34 + inpos]) << 22)
+ | ((in[35 + inpos]) << 49);
+ out[15 + outpos] = ((in[35 + inpos]) >>> (27 - 12))
+ | ((in[36 + inpos]) << 12)
+ | ((in[37 + inpos]) << 39);
+ out[16 + outpos] = ((in[37 + inpos]) >>> (27 - 2))
+ | ((in[38 + inpos]) << 2)
+ | ((in[39 + inpos]) << 29)
+ | ((in[40 + inpos]) << 56);
+ out[17 + outpos] = ((in[40 + inpos]) >>> (27 - 19))
+ | ((in[41 + inpos]) << 19)
+ | ((in[42 + inpos]) << 46);
+ out[18 + outpos] = ((in[42 + inpos]) >>> (27 - 9))
+ | ((in[43 + inpos]) << 9)
+ | ((in[44 + inpos]) << 36)
+ | ((in[45 + inpos]) << 63);
+ out[19 + outpos] = ((in[45 + inpos]) >>> (27 - 26))
+ | ((in[46 + inpos]) << 26)
+ | ((in[47 + inpos]) << 53);
+ out[20 + outpos] = ((in[47 + inpos]) >>> (27 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 43);
+ out[21 + outpos] = ((in[49 + inpos]) >>> (27 - 6))
+ | ((in[50 + inpos]) << 6)
+ | ((in[51 + inpos]) << 33)
+ | ((in[52 + inpos]) << 60);
+ out[22 + outpos] = ((in[52 + inpos]) >>> (27 - 23))
+ | ((in[53 + inpos]) << 23)
+ | ((in[54 + inpos]) << 50);
+ out[23 + outpos] = ((in[54 + inpos]) >>> (27 - 13))
+ | ((in[55 + inpos]) << 13)
+ | ((in[56 + inpos]) << 40);
+ out[24 + outpos] = ((in[56 + inpos]) >>> (27 - 3))
+ | ((in[57 + inpos]) << 3)
+ | ((in[58 + inpos]) << 30)
+ | ((in[59 + inpos]) << 57);
+ out[25 + outpos] = ((in[59 + inpos]) >>> (27 - 20))
+ | ((in[60 + inpos]) << 20)
+ | ((in[61 + inpos]) << 47);
+ out[26 + outpos] = ((in[61 + inpos]) >>> (27 - 10))
+ | ((in[62 + inpos]) << 10)
+ | ((in[63 + inpos]) << 37);
+ }
+
+ protected static void fastpackwithoutmask28(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 28)
+ | ((in[2 + inpos]) << 56);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (28 - 20))
+ | ((in[3 + inpos]) << 20)
+ | ((in[4 + inpos]) << 48);
+ out[2 + outpos] = ((in[4 + inpos]) >>> (28 - 12))
+ | ((in[5 + inpos]) << 12)
+ | ((in[6 + inpos]) << 40);
+ out[3 + outpos] = ((in[6 + inpos]) >>> (28 - 4))
+ | ((in[7 + inpos]) << 4)
+ | ((in[8 + inpos]) << 32)
+ | ((in[9 + inpos]) << 60);
+ out[4 + outpos] = ((in[9 + inpos]) >>> (28 - 24))
+ | ((in[10 + inpos]) << 24)
+ | ((in[11 + inpos]) << 52);
+ out[5 + outpos] = ((in[11 + inpos]) >>> (28 - 16))
+ | ((in[12 + inpos]) << 16)
+ | ((in[13 + inpos]) << 44);
+ out[6 + outpos] = ((in[13 + inpos]) >>> (28 - 8))
+ | ((in[14 + inpos]) << 8)
+ | ((in[15 + inpos]) << 36);
+ out[7 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 28)
+ | ((in[18 + inpos]) << 56);
+ out[8 + outpos] = ((in[18 + inpos]) >>> (28 - 20))
+ | ((in[19 + inpos]) << 20)
+ | ((in[20 + inpos]) << 48);
+ out[9 + outpos] = ((in[20 + inpos]) >>> (28 - 12))
+ | ((in[21 + inpos]) << 12)
+ | ((in[22 + inpos]) << 40);
+ out[10 + outpos] = ((in[22 + inpos]) >>> (28 - 4))
+ | ((in[23 + inpos]) << 4)
+ | ((in[24 + inpos]) << 32)
+ | ((in[25 + inpos]) << 60);
+ out[11 + outpos] = ((in[25 + inpos]) >>> (28 - 24))
+ | ((in[26 + inpos]) << 24)
+ | ((in[27 + inpos]) << 52);
+ out[12 + outpos] = ((in[27 + inpos]) >>> (28 - 16))
+ | ((in[28 + inpos]) << 16)
+ | ((in[29 + inpos]) << 44);
+ out[13 + outpos] = ((in[29 + inpos]) >>> (28 - 8))
+ | ((in[30 + inpos]) << 8)
+ | ((in[31 + inpos]) << 36);
+ out[14 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 28)
+ | ((in[34 + inpos]) << 56);
+ out[15 + outpos] = ((in[34 + inpos]) >>> (28 - 20))
+ | ((in[35 + inpos]) << 20)
+ | ((in[36 + inpos]) << 48);
+ out[16 + outpos] = ((in[36 + inpos]) >>> (28 - 12))
+ | ((in[37 + inpos]) << 12)
+ | ((in[38 + inpos]) << 40);
+ out[17 + outpos] = ((in[38 + inpos]) >>> (28 - 4))
+ | ((in[39 + inpos]) << 4)
+ | ((in[40 + inpos]) << 32)
+ | ((in[41 + inpos]) << 60);
+ out[18 + outpos] = ((in[41 + inpos]) >>> (28 - 24))
+ | ((in[42 + inpos]) << 24)
+ | ((in[43 + inpos]) << 52);
+ out[19 + outpos] = ((in[43 + inpos]) >>> (28 - 16))
+ | ((in[44 + inpos]) << 16)
+ | ((in[45 + inpos]) << 44);
+ out[20 + outpos] = ((in[45 + inpos]) >>> (28 - 8))
+ | ((in[46 + inpos]) << 8)
+ | ((in[47 + inpos]) << 36);
+ out[21 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 28)
+ | ((in[50 + inpos]) << 56);
+ out[22 + outpos] = ((in[50 + inpos]) >>> (28 - 20))
+ | ((in[51 + inpos]) << 20)
+ | ((in[52 + inpos]) << 48);
+ out[23 + outpos] = ((in[52 + inpos]) >>> (28 - 12))
+ | ((in[53 + inpos]) << 12)
+ | ((in[54 + inpos]) << 40);
+ out[24 + outpos] = ((in[54 + inpos]) >>> (28 - 4))
+ | ((in[55 + inpos]) << 4)
+ | ((in[56 + inpos]) << 32)
+ | ((in[57 + inpos]) << 60);
+ out[25 + outpos] = ((in[57 + inpos]) >>> (28 - 24))
+ | ((in[58 + inpos]) << 24)
+ | ((in[59 + inpos]) << 52);
+ out[26 + outpos] = ((in[59 + inpos]) >>> (28 - 16))
+ | ((in[60 + inpos]) << 16)
+ | ((in[61 + inpos]) << 44);
+ out[27 + outpos] = ((in[61 + inpos]) >>> (28 - 8))
+ | ((in[62 + inpos]) << 8)
+ | ((in[63 + inpos]) << 36);
+ }
+
+ protected static void fastpackwithoutmask29(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 29)
+ | ((in[2 + inpos]) << 58);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (29 - 23))
+ | ((in[3 + inpos]) << 23)
+ | ((in[4 + inpos]) << 52);
+ out[2 + outpos] = ((in[4 + inpos]) >>> (29 - 17))
+ | ((in[5 + inpos]) << 17)
+ | ((in[6 + inpos]) << 46);
+ out[3 + outpos] = ((in[6 + inpos]) >>> (29 - 11))
+ | ((in[7 + inpos]) << 11)
+ | ((in[8 + inpos]) << 40);
+ out[4 + outpos] = ((in[8 + inpos]) >>> (29 - 5))
+ | ((in[9 + inpos]) << 5)
+ | ((in[10 + inpos]) << 34)
+ | ((in[11 + inpos]) << 63);
+ out[5 + outpos] = ((in[11 + inpos]) >>> (29 - 28))
+ | ((in[12 + inpos]) << 28)
+ | ((in[13 + inpos]) << 57);
+ out[6 + outpos] = ((in[13 + inpos]) >>> (29 - 22))
+ | ((in[14 + inpos]) << 22)
+ | ((in[15 + inpos]) << 51);
+ out[7 + outpos] = ((in[15 + inpos]) >>> (29 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 45);
+ out[8 + outpos] = ((in[17 + inpos]) >>> (29 - 10))
+ | ((in[18 + inpos]) << 10)
+ | ((in[19 + inpos]) << 39);
+ out[9 + outpos] = ((in[19 + inpos]) >>> (29 - 4))
+ | ((in[20 + inpos]) << 4)
+ | ((in[21 + inpos]) << 33)
+ | ((in[22 + inpos]) << 62);
+ out[10 + outpos] = ((in[22 + inpos]) >>> (29 - 27))
+ | ((in[23 + inpos]) << 27)
+ | ((in[24 + inpos]) << 56);
+ out[11 + outpos] = ((in[24 + inpos]) >>> (29 - 21))
+ | ((in[25 + inpos]) << 21)
+ | ((in[26 + inpos]) << 50);
+ out[12 + outpos] = ((in[26 + inpos]) >>> (29 - 15))
+ | ((in[27 + inpos]) << 15)
+ | ((in[28 + inpos]) << 44);
+ out[13 + outpos] = ((in[28 + inpos]) >>> (29 - 9))
+ | ((in[29 + inpos]) << 9)
+ | ((in[30 + inpos]) << 38);
+ out[14 + outpos] = ((in[30 + inpos]) >>> (29 - 3))
+ | ((in[31 + inpos]) << 3)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 61);
+ out[15 + outpos] = ((in[33 + inpos]) >>> (29 - 26))
+ | ((in[34 + inpos]) << 26)
+ | ((in[35 + inpos]) << 55);
+ out[16 + outpos] = ((in[35 + inpos]) >>> (29 - 20))
+ | ((in[36 + inpos]) << 20)
+ | ((in[37 + inpos]) << 49);
+ out[17 + outpos] = ((in[37 + inpos]) >>> (29 - 14))
+ | ((in[38 + inpos]) << 14)
+ | ((in[39 + inpos]) << 43);
+ out[18 + outpos] = ((in[39 + inpos]) >>> (29 - 8))
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 37);
+ out[19 + outpos] = ((in[41 + inpos]) >>> (29 - 2))
+ | ((in[42 + inpos]) << 2)
+ | ((in[43 + inpos]) << 31)
+ | ((in[44 + inpos]) << 60);
+ out[20 + outpos] = ((in[44 + inpos]) >>> (29 - 25))
+ | ((in[45 + inpos]) << 25)
+ | ((in[46 + inpos]) << 54);
+ out[21 + outpos] = ((in[46 + inpos]) >>> (29 - 19))
+ | ((in[47 + inpos]) << 19)
+ | ((in[48 + inpos]) << 48);
+ out[22 + outpos] = ((in[48 + inpos]) >>> (29 - 13))
+ | ((in[49 + inpos]) << 13)
+ | ((in[50 + inpos]) << 42);
+ out[23 + outpos] = ((in[50 + inpos]) >>> (29 - 7))
+ | ((in[51 + inpos]) << 7)
+ | ((in[52 + inpos]) << 36);
+ out[24 + outpos] = ((in[52 + inpos]) >>> (29 - 1))
+ | ((in[53 + inpos]) << 1)
+ | ((in[54 + inpos]) << 30)
+ | ((in[55 + inpos]) << 59);
+ out[25 + outpos] = ((in[55 + inpos]) >>> (29 - 24))
+ | ((in[56 + inpos]) << 24)
+ | ((in[57 + inpos]) << 53);
+ out[26 + outpos] = ((in[57 + inpos]) >>> (29 - 18))
+ | ((in[58 + inpos]) << 18)
+ | ((in[59 + inpos]) << 47);
+ out[27 + outpos] = ((in[59 + inpos]) >>> (29 - 12))
+ | ((in[60 + inpos]) << 12)
+ | ((in[61 + inpos]) << 41);
+ out[28 + outpos] = ((in[61 + inpos]) >>> (29 - 6))
+ | ((in[62 + inpos]) << 6)
+ | ((in[63 + inpos]) << 35);
+ }
+
+ protected static void fastpackwithoutmask30(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 30)
+ | ((in[2 + inpos]) << 60);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (30 - 26))
+ | ((in[3 + inpos]) << 26)
+ | ((in[4 + inpos]) << 56);
+ out[2 + outpos] = ((in[4 + inpos]) >>> (30 - 22))
+ | ((in[5 + inpos]) << 22)
+ | ((in[6 + inpos]) << 52);
+ out[3 + outpos] = ((in[6 + inpos]) >>> (30 - 18))
+ | ((in[7 + inpos]) << 18)
+ | ((in[8 + inpos]) << 48);
+ out[4 + outpos] = ((in[8 + inpos]) >>> (30 - 14))
+ | ((in[9 + inpos]) << 14)
+ | ((in[10 + inpos]) << 44);
+ out[5 + outpos] = ((in[10 + inpos]) >>> (30 - 10))
+ | ((in[11 + inpos]) << 10)
+ | ((in[12 + inpos]) << 40);
+ out[6 + outpos] = ((in[12 + inpos]) >>> (30 - 6))
+ | ((in[13 + inpos]) << 6)
+ | ((in[14 + inpos]) << 36);
+ out[7 + outpos] = ((in[14 + inpos]) >>> (30 - 2))
+ | ((in[15 + inpos]) << 2)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 62);
+ out[8 + outpos] = ((in[17 + inpos]) >>> (30 - 28))
+ | ((in[18 + inpos]) << 28)
+ | ((in[19 + inpos]) << 58);
+ out[9 + outpos] = ((in[19 + inpos]) >>> (30 - 24))
+ | ((in[20 + inpos]) << 24)
+ | ((in[21 + inpos]) << 54);
+ out[10 + outpos] = ((in[21 + inpos]) >>> (30 - 20))
+ | ((in[22 + inpos]) << 20)
+ | ((in[23 + inpos]) << 50);
+ out[11 + outpos] = ((in[23 + inpos]) >>> (30 - 16))
+ | ((in[24 + inpos]) << 16)
+ | ((in[25 + inpos]) << 46);
+ out[12 + outpos] = ((in[25 + inpos]) >>> (30 - 12))
+ | ((in[26 + inpos]) << 12)
+ | ((in[27 + inpos]) << 42);
+ out[13 + outpos] = ((in[27 + inpos]) >>> (30 - 8))
+ | ((in[28 + inpos]) << 8)
+ | ((in[29 + inpos]) << 38);
+ out[14 + outpos] = ((in[29 + inpos]) >>> (30 - 4))
+ | ((in[30 + inpos]) << 4)
+ | ((in[31 + inpos]) << 34);
+ out[15 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 30)
+ | ((in[34 + inpos]) << 60);
+ out[16 + outpos] = ((in[34 + inpos]) >>> (30 - 26))
+ | ((in[35 + inpos]) << 26)
+ | ((in[36 + inpos]) << 56);
+ out[17 + outpos] = ((in[36 + inpos]) >>> (30 - 22))
+ | ((in[37 + inpos]) << 22)
+ | ((in[38 + inpos]) << 52);
+ out[18 + outpos] = ((in[38 + inpos]) >>> (30 - 18))
+ | ((in[39 + inpos]) << 18)
+ | ((in[40 + inpos]) << 48);
+ out[19 + outpos] = ((in[40 + inpos]) >>> (30 - 14))
+ | ((in[41 + inpos]) << 14)
+ | ((in[42 + inpos]) << 44);
+ out[20 + outpos] = ((in[42 + inpos]) >>> (30 - 10))
+ | ((in[43 + inpos]) << 10)
+ | ((in[44 + inpos]) << 40);
+ out[21 + outpos] = ((in[44 + inpos]) >>> (30 - 6))
+ | ((in[45 + inpos]) << 6)
+ | ((in[46 + inpos]) << 36);
+ out[22 + outpos] = ((in[46 + inpos]) >>> (30 - 2))
+ | ((in[47 + inpos]) << 2)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 62);
+ out[23 + outpos] = ((in[49 + inpos]) >>> (30 - 28))
+ | ((in[50 + inpos]) << 28)
+ | ((in[51 + inpos]) << 58);
+ out[24 + outpos] = ((in[51 + inpos]) >>> (30 - 24))
+ | ((in[52 + inpos]) << 24)
+ | ((in[53 + inpos]) << 54);
+ out[25 + outpos] = ((in[53 + inpos]) >>> (30 - 20))
+ | ((in[54 + inpos]) << 20)
+ | ((in[55 + inpos]) << 50);
+ out[26 + outpos] = ((in[55 + inpos]) >>> (30 - 16))
+ | ((in[56 + inpos]) << 16)
+ | ((in[57 + inpos]) << 46);
+ out[27 + outpos] = ((in[57 + inpos]) >>> (30 - 12))
+ | ((in[58 + inpos]) << 12)
+ | ((in[59 + inpos]) << 42);
+ out[28 + outpos] = ((in[59 + inpos]) >>> (30 - 8))
+ | ((in[60 + inpos]) << 8)
+ | ((in[61 + inpos]) << 38);
+ out[29 + outpos] = ((in[61 + inpos]) >>> (30 - 4))
+ | ((in[62 + inpos]) << 4)
+ | ((in[63 + inpos]) << 34);
+ }
+
+ protected static void fastpackwithoutmask31(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 31)
+ | ((in[2 + inpos]) << 62);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (31 - 29))
+ | ((in[3 + inpos]) << 29)
+ | ((in[4 + inpos]) << 60);
+ out[2 + outpos] = ((in[4 + inpos]) >>> (31 - 27))
+ | ((in[5 + inpos]) << 27)
+ | ((in[6 + inpos]) << 58);
+ out[3 + outpos] = ((in[6 + inpos]) >>> (31 - 25))
+ | ((in[7 + inpos]) << 25)
+ | ((in[8 + inpos]) << 56);
+ out[4 + outpos] = ((in[8 + inpos]) >>> (31 - 23))
+ | ((in[9 + inpos]) << 23)
+ | ((in[10 + inpos]) << 54);
+ out[5 + outpos] = ((in[10 + inpos]) >>> (31 - 21))
+ | ((in[11 + inpos]) << 21)
+ | ((in[12 + inpos]) << 52);
+ out[6 + outpos] = ((in[12 + inpos]) >>> (31 - 19))
+ | ((in[13 + inpos]) << 19)
+ | ((in[14 + inpos]) << 50);
+ out[7 + outpos] = ((in[14 + inpos]) >>> (31 - 17))
+ | ((in[15 + inpos]) << 17)
+ | ((in[16 + inpos]) << 48);
+ out[8 + outpos] = ((in[16 + inpos]) >>> (31 - 15))
+ | ((in[17 + inpos]) << 15)
+ | ((in[18 + inpos]) << 46);
+ out[9 + outpos] = ((in[18 + inpos]) >>> (31 - 13))
+ | ((in[19 + inpos]) << 13)
+ | ((in[20 + inpos]) << 44);
+ out[10 + outpos] = ((in[20 + inpos]) >>> (31 - 11))
+ | ((in[21 + inpos]) << 11)
+ | ((in[22 + inpos]) << 42);
+ out[11 + outpos] = ((in[22 + inpos]) >>> (31 - 9))
+ | ((in[23 + inpos]) << 9)
+ | ((in[24 + inpos]) << 40);
+ out[12 + outpos] = ((in[24 + inpos]) >>> (31 - 7))
+ | ((in[25 + inpos]) << 7)
+ | ((in[26 + inpos]) << 38);
+ out[13 + outpos] = ((in[26 + inpos]) >>> (31 - 5))
+ | ((in[27 + inpos]) << 5)
+ | ((in[28 + inpos]) << 36);
+ out[14 + outpos] = ((in[28 + inpos]) >>> (31 - 3))
+ | ((in[29 + inpos]) << 3)
+ | ((in[30 + inpos]) << 34);
+ out[15 + outpos] = ((in[30 + inpos]) >>> (31 - 1))
+ | ((in[31 + inpos]) << 1)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 63);
+ out[16 + outpos] = ((in[33 + inpos]) >>> (31 - 30))
+ | ((in[34 + inpos]) << 30)
+ | ((in[35 + inpos]) << 61);
+ out[17 + outpos] = ((in[35 + inpos]) >>> (31 - 28))
+ | ((in[36 + inpos]) << 28)
+ | ((in[37 + inpos]) << 59);
+ out[18 + outpos] = ((in[37 + inpos]) >>> (31 - 26))
+ | ((in[38 + inpos]) << 26)
+ | ((in[39 + inpos]) << 57);
+ out[19 + outpos] = ((in[39 + inpos]) >>> (31 - 24))
+ | ((in[40 + inpos]) << 24)
+ | ((in[41 + inpos]) << 55);
+ out[20 + outpos] = ((in[41 + inpos]) >>> (31 - 22))
+ | ((in[42 + inpos]) << 22)
+ | ((in[43 + inpos]) << 53);
+ out[21 + outpos] = ((in[43 + inpos]) >>> (31 - 20))
+ | ((in[44 + inpos]) << 20)
+ | ((in[45 + inpos]) << 51);
+ out[22 + outpos] = ((in[45 + inpos]) >>> (31 - 18))
+ | ((in[46 + inpos]) << 18)
+ | ((in[47 + inpos]) << 49);
+ out[23 + outpos] = ((in[47 + inpos]) >>> (31 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 47);
+ out[24 + outpos] = ((in[49 + inpos]) >>> (31 - 14))
+ | ((in[50 + inpos]) << 14)
+ | ((in[51 + inpos]) << 45);
+ out[25 + outpos] = ((in[51 + inpos]) >>> (31 - 12))
+ | ((in[52 + inpos]) << 12)
+ | ((in[53 + inpos]) << 43);
+ out[26 + outpos] = ((in[53 + inpos]) >>> (31 - 10))
+ | ((in[54 + inpos]) << 10)
+ | ((in[55 + inpos]) << 41);
+ out[27 + outpos] = ((in[55 + inpos]) >>> (31 - 8))
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 39);
+ out[28 + outpos] = ((in[57 + inpos]) >>> (31 - 6))
+ | ((in[58 + inpos]) << 6)
+ | ((in[59 + inpos]) << 37);
+ out[29 + outpos] = ((in[59 + inpos]) >>> (31 - 4))
+ | ((in[60 + inpos]) << 4)
+ | ((in[61 + inpos]) << 35);
+ out[30 + outpos] = ((in[61 + inpos]) >>> (31 - 2))
+ | ((in[62 + inpos]) << 2)
+ | ((in[63 + inpos]) << 33);
+ }
+
+ protected static void fastpackwithoutmask32(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 32);
+ out[1 + outpos] = in[2 + inpos]
+ | ((in[3 + inpos]) << 32);
+ out[2 + outpos] = in[4 + inpos]
+ | ((in[5 + inpos]) << 32);
+ out[3 + outpos] = in[6 + inpos]
+ | ((in[7 + inpos]) << 32);
+ out[4 + outpos] = in[8 + inpos]
+ | ((in[9 + inpos]) << 32);
+ out[5 + outpos] = in[10 + inpos]
+ | ((in[11 + inpos]) << 32);
+ out[6 + outpos] = in[12 + inpos]
+ | ((in[13 + inpos]) << 32);
+ out[7 + outpos] = in[14 + inpos]
+ | ((in[15 + inpos]) << 32);
+ out[8 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 32);
+ out[9 + outpos] = in[18 + inpos]
+ | ((in[19 + inpos]) << 32);
+ out[10 + outpos] = in[20 + inpos]
+ | ((in[21 + inpos]) << 32);
+ out[11 + outpos] = in[22 + inpos]
+ | ((in[23 + inpos]) << 32);
+ out[12 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 32);
+ out[13 + outpos] = in[26 + inpos]
+ | ((in[27 + inpos]) << 32);
+ out[14 + outpos] = in[28 + inpos]
+ | ((in[29 + inpos]) << 32);
+ out[15 + outpos] = in[30 + inpos]
+ | ((in[31 + inpos]) << 32);
+ out[16 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 32);
+ out[17 + outpos] = in[34 + inpos]
+ | ((in[35 + inpos]) << 32);
+ out[18 + outpos] = in[36 + inpos]
+ | ((in[37 + inpos]) << 32);
+ out[19 + outpos] = in[38 + inpos]
+ | ((in[39 + inpos]) << 32);
+ out[20 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 32);
+ out[21 + outpos] = in[42 + inpos]
+ | ((in[43 + inpos]) << 32);
+ out[22 + outpos] = in[44 + inpos]
+ | ((in[45 + inpos]) << 32);
+ out[23 + outpos] = in[46 + inpos]
+ | ((in[47 + inpos]) << 32);
+ out[24 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 32);
+ out[25 + outpos] = in[50 + inpos]
+ | ((in[51 + inpos]) << 32);
+ out[26 + outpos] = in[52 + inpos]
+ | ((in[53 + inpos]) << 32);
+ out[27 + outpos] = in[54 + inpos]
+ | ((in[55 + inpos]) << 32);
+ out[28 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 32);
+ out[29 + outpos] = in[58 + inpos]
+ | ((in[59 + inpos]) << 32);
+ out[30 + outpos] = in[60 + inpos]
+ | ((in[61 + inpos]) << 32);
+ out[31 + outpos] = in[62 + inpos]
+ | ((in[63 + inpos]) << 32);
+ }
+
+ protected static void fastpackwithoutmask33(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 33);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (33 - 2))
+ | ((in[2 + inpos]) << 2)
+ | ((in[3 + inpos]) << 35);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (33 - 4))
+ | ((in[4 + inpos]) << 4)
+ | ((in[5 + inpos]) << 37);
+ out[3 + outpos] = ((in[5 + inpos]) >>> (33 - 6))
+ | ((in[6 + inpos]) << 6)
+ | ((in[7 + inpos]) << 39);
+ out[4 + outpos] = ((in[7 + inpos]) >>> (33 - 8))
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 41);
+ out[5 + outpos] = ((in[9 + inpos]) >>> (33 - 10))
+ | ((in[10 + inpos]) << 10)
+ | ((in[11 + inpos]) << 43);
+ out[6 + outpos] = ((in[11 + inpos]) >>> (33 - 12))
+ | ((in[12 + inpos]) << 12)
+ | ((in[13 + inpos]) << 45);
+ out[7 + outpos] = ((in[13 + inpos]) >>> (33 - 14))
+ | ((in[14 + inpos]) << 14)
+ | ((in[15 + inpos]) << 47);
+ out[8 + outpos] = ((in[15 + inpos]) >>> (33 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 49);
+ out[9 + outpos] = ((in[17 + inpos]) >>> (33 - 18))
+ | ((in[18 + inpos]) << 18)
+ | ((in[19 + inpos]) << 51);
+ out[10 + outpos] = ((in[19 + inpos]) >>> (33 - 20))
+ | ((in[20 + inpos]) << 20)
+ | ((in[21 + inpos]) << 53);
+ out[11 + outpos] = ((in[21 + inpos]) >>> (33 - 22))
+ | ((in[22 + inpos]) << 22)
+ | ((in[23 + inpos]) << 55);
+ out[12 + outpos] = ((in[23 + inpos]) >>> (33 - 24))
+ | ((in[24 + inpos]) << 24)
+ | ((in[25 + inpos]) << 57);
+ out[13 + outpos] = ((in[25 + inpos]) >>> (33 - 26))
+ | ((in[26 + inpos]) << 26)
+ | ((in[27 + inpos]) << 59);
+ out[14 + outpos] = ((in[27 + inpos]) >>> (33 - 28))
+ | ((in[28 + inpos]) << 28)
+ | ((in[29 + inpos]) << 61);
+ out[15 + outpos] = ((in[29 + inpos]) >>> (33 - 30))
+ | ((in[30 + inpos]) << 30)
+ | ((in[31 + inpos]) << 63);
+ out[16 + outpos] = ((in[31 + inpos]) >>> (33 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[17 + outpos] = ((in[32 + inpos]) >>> (33 - 1))
+ | ((in[33 + inpos]) << 1)
+ | ((in[34 + inpos]) << 34);
+ out[18 + outpos] = ((in[34 + inpos]) >>> (33 - 3))
+ | ((in[35 + inpos]) << 3)
+ | ((in[36 + inpos]) << 36);
+ out[19 + outpos] = ((in[36 + inpos]) >>> (33 - 5))
+ | ((in[37 + inpos]) << 5)
+ | ((in[38 + inpos]) << 38);
+ out[20 + outpos] = ((in[38 + inpos]) >>> (33 - 7))
+ | ((in[39 + inpos]) << 7)
+ | ((in[40 + inpos]) << 40);
+ out[21 + outpos] = ((in[40 + inpos]) >>> (33 - 9))
+ | ((in[41 + inpos]) << 9)
+ | ((in[42 + inpos]) << 42);
+ out[22 + outpos] = ((in[42 + inpos]) >>> (33 - 11))
+ | ((in[43 + inpos]) << 11)
+ | ((in[44 + inpos]) << 44);
+ out[23 + outpos] = ((in[44 + inpos]) >>> (33 - 13))
+ | ((in[45 + inpos]) << 13)
+ | ((in[46 + inpos]) << 46);
+ out[24 + outpos] = ((in[46 + inpos]) >>> (33 - 15))
+ | ((in[47 + inpos]) << 15)
+ | ((in[48 + inpos]) << 48);
+ out[25 + outpos] = ((in[48 + inpos]) >>> (33 - 17))
+ | ((in[49 + inpos]) << 17)
+ | ((in[50 + inpos]) << 50);
+ out[26 + outpos] = ((in[50 + inpos]) >>> (33 - 19))
+ | ((in[51 + inpos]) << 19)
+ | ((in[52 + inpos]) << 52);
+ out[27 + outpos] = ((in[52 + inpos]) >>> (33 - 21))
+ | ((in[53 + inpos]) << 21)
+ | ((in[54 + inpos]) << 54);
+ out[28 + outpos] = ((in[54 + inpos]) >>> (33 - 23))
+ | ((in[55 + inpos]) << 23)
+ | ((in[56 + inpos]) << 56);
+ out[29 + outpos] = ((in[56 + inpos]) >>> (33 - 25))
+ | ((in[57 + inpos]) << 25)
+ | ((in[58 + inpos]) << 58);
+ out[30 + outpos] = ((in[58 + inpos]) >>> (33 - 27))
+ | ((in[59 + inpos]) << 27)
+ | ((in[60 + inpos]) << 60);
+ out[31 + outpos] = ((in[60 + inpos]) >>> (33 - 29))
+ | ((in[61 + inpos]) << 29)
+ | ((in[62 + inpos]) << 62);
+ out[32 + outpos] = ((in[62 + inpos]) >>> (33 - 31))
+ | ((in[63 + inpos]) << 31);
+ }
+
+ protected static void fastpackwithoutmask34(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 34);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (34 - 4))
+ | ((in[2 + inpos]) << 4)
+ | ((in[3 + inpos]) << 38);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (34 - 8))
+ | ((in[4 + inpos]) << 8)
+ | ((in[5 + inpos]) << 42);
+ out[3 + outpos] = ((in[5 + inpos]) >>> (34 - 12))
+ | ((in[6 + inpos]) << 12)
+ | ((in[7 + inpos]) << 46);
+ out[4 + outpos] = ((in[7 + inpos]) >>> (34 - 16))
+ | ((in[8 + inpos]) << 16)
+ | ((in[9 + inpos]) << 50);
+ out[5 + outpos] = ((in[9 + inpos]) >>> (34 - 20))
+ | ((in[10 + inpos]) << 20)
+ | ((in[11 + inpos]) << 54);
+ out[6 + outpos] = ((in[11 + inpos]) >>> (34 - 24))
+ | ((in[12 + inpos]) << 24)
+ | ((in[13 + inpos]) << 58);
+ out[7 + outpos] = ((in[13 + inpos]) >>> (34 - 28))
+ | ((in[14 + inpos]) << 28)
+ | ((in[15 + inpos]) << 62);
+ out[8 + outpos] = ((in[15 + inpos]) >>> (34 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[9 + outpos] = ((in[16 + inpos]) >>> (34 - 2))
+ | ((in[17 + inpos]) << 2)
+ | ((in[18 + inpos]) << 36);
+ out[10 + outpos] = ((in[18 + inpos]) >>> (34 - 6))
+ | ((in[19 + inpos]) << 6)
+ | ((in[20 + inpos]) << 40);
+ out[11 + outpos] = ((in[20 + inpos]) >>> (34 - 10))
+ | ((in[21 + inpos]) << 10)
+ | ((in[22 + inpos]) << 44);
+ out[12 + outpos] = ((in[22 + inpos]) >>> (34 - 14))
+ | ((in[23 + inpos]) << 14)
+ | ((in[24 + inpos]) << 48);
+ out[13 + outpos] = ((in[24 + inpos]) >>> (34 - 18))
+ | ((in[25 + inpos]) << 18)
+ | ((in[26 + inpos]) << 52);
+ out[14 + outpos] = ((in[26 + inpos]) >>> (34 - 22))
+ | ((in[27 + inpos]) << 22)
+ | ((in[28 + inpos]) << 56);
+ out[15 + outpos] = ((in[28 + inpos]) >>> (34 - 26))
+ | ((in[29 + inpos]) << 26)
+ | ((in[30 + inpos]) << 60);
+ out[16 + outpos] = ((in[30 + inpos]) >>> (34 - 30))
+ | ((in[31 + inpos]) << 30);
+ out[17 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 34);
+ out[18 + outpos] = ((in[33 + inpos]) >>> (34 - 4))
+ | ((in[34 + inpos]) << 4)
+ | ((in[35 + inpos]) << 38);
+ out[19 + outpos] = ((in[35 + inpos]) >>> (34 - 8))
+ | ((in[36 + inpos]) << 8)
+ | ((in[37 + inpos]) << 42);
+ out[20 + outpos] = ((in[37 + inpos]) >>> (34 - 12))
+ | ((in[38 + inpos]) << 12)
+ | ((in[39 + inpos]) << 46);
+ out[21 + outpos] = ((in[39 + inpos]) >>> (34 - 16))
+ | ((in[40 + inpos]) << 16)
+ | ((in[41 + inpos]) << 50);
+ out[22 + outpos] = ((in[41 + inpos]) >>> (34 - 20))
+ | ((in[42 + inpos]) << 20)
+ | ((in[43 + inpos]) << 54);
+ out[23 + outpos] = ((in[43 + inpos]) >>> (34 - 24))
+ | ((in[44 + inpos]) << 24)
+ | ((in[45 + inpos]) << 58);
+ out[24 + outpos] = ((in[45 + inpos]) >>> (34 - 28))
+ | ((in[46 + inpos]) << 28)
+ | ((in[47 + inpos]) << 62);
+ out[25 + outpos] = ((in[47 + inpos]) >>> (34 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[26 + outpos] = ((in[48 + inpos]) >>> (34 - 2))
+ | ((in[49 + inpos]) << 2)
+ | ((in[50 + inpos]) << 36);
+ out[27 + outpos] = ((in[50 + inpos]) >>> (34 - 6))
+ | ((in[51 + inpos]) << 6)
+ | ((in[52 + inpos]) << 40);
+ out[28 + outpos] = ((in[52 + inpos]) >>> (34 - 10))
+ | ((in[53 + inpos]) << 10)
+ | ((in[54 + inpos]) << 44);
+ out[29 + outpos] = ((in[54 + inpos]) >>> (34 - 14))
+ | ((in[55 + inpos]) << 14)
+ | ((in[56 + inpos]) << 48);
+ out[30 + outpos] = ((in[56 + inpos]) >>> (34 - 18))
+ | ((in[57 + inpos]) << 18)
+ | ((in[58 + inpos]) << 52);
+ out[31 + outpos] = ((in[58 + inpos]) >>> (34 - 22))
+ | ((in[59 + inpos]) << 22)
+ | ((in[60 + inpos]) << 56);
+ out[32 + outpos] = ((in[60 + inpos]) >>> (34 - 26))
+ | ((in[61 + inpos]) << 26)
+ | ((in[62 + inpos]) << 60);
+ out[33 + outpos] = ((in[62 + inpos]) >>> (34 - 30))
+ | ((in[63 + inpos]) << 30);
+ }
+
+ protected static void fastpackwithoutmask35(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 35);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (35 - 6))
+ | ((in[2 + inpos]) << 6)
+ | ((in[3 + inpos]) << 41);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (35 - 12))
+ | ((in[4 + inpos]) << 12)
+ | ((in[5 + inpos]) << 47);
+ out[3 + outpos] = ((in[5 + inpos]) >>> (35 - 18))
+ | ((in[6 + inpos]) << 18)
+ | ((in[7 + inpos]) << 53);
+ out[4 + outpos] = ((in[7 + inpos]) >>> (35 - 24))
+ | ((in[8 + inpos]) << 24)
+ | ((in[9 + inpos]) << 59);
+ out[5 + outpos] = ((in[9 + inpos]) >>> (35 - 30))
+ | ((in[10 + inpos]) << 30);
+ out[6 + outpos] = ((in[10 + inpos]) >>> (35 - 1))
+ | ((in[11 + inpos]) << 1)
+ | ((in[12 + inpos]) << 36);
+ out[7 + outpos] = ((in[12 + inpos]) >>> (35 - 7))
+ | ((in[13 + inpos]) << 7)
+ | ((in[14 + inpos]) << 42);
+ out[8 + outpos] = ((in[14 + inpos]) >>> (35 - 13))
+ | ((in[15 + inpos]) << 13)
+ | ((in[16 + inpos]) << 48);
+ out[9 + outpos] = ((in[16 + inpos]) >>> (35 - 19))
+ | ((in[17 + inpos]) << 19)
+ | ((in[18 + inpos]) << 54);
+ out[10 + outpos] = ((in[18 + inpos]) >>> (35 - 25))
+ | ((in[19 + inpos]) << 25)
+ | ((in[20 + inpos]) << 60);
+ out[11 + outpos] = ((in[20 + inpos]) >>> (35 - 31))
+ | ((in[21 + inpos]) << 31);
+ out[12 + outpos] = ((in[21 + inpos]) >>> (35 - 2))
+ | ((in[22 + inpos]) << 2)
+ | ((in[23 + inpos]) << 37);
+ out[13 + outpos] = ((in[23 + inpos]) >>> (35 - 8))
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 43);
+ out[14 + outpos] = ((in[25 + inpos]) >>> (35 - 14))
+ | ((in[26 + inpos]) << 14)
+ | ((in[27 + inpos]) << 49);
+ out[15 + outpos] = ((in[27 + inpos]) >>> (35 - 20))
+ | ((in[28 + inpos]) << 20)
+ | ((in[29 + inpos]) << 55);
+ out[16 + outpos] = ((in[29 + inpos]) >>> (35 - 26))
+ | ((in[30 + inpos]) << 26)
+ | ((in[31 + inpos]) << 61);
+ out[17 + outpos] = ((in[31 + inpos]) >>> (35 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[18 + outpos] = ((in[32 + inpos]) >>> (35 - 3))
+ | ((in[33 + inpos]) << 3)
+ | ((in[34 + inpos]) << 38);
+ out[19 + outpos] = ((in[34 + inpos]) >>> (35 - 9))
+ | ((in[35 + inpos]) << 9)
+ | ((in[36 + inpos]) << 44);
+ out[20 + outpos] = ((in[36 + inpos]) >>> (35 - 15))
+ | ((in[37 + inpos]) << 15)
+ | ((in[38 + inpos]) << 50);
+ out[21 + outpos] = ((in[38 + inpos]) >>> (35 - 21))
+ | ((in[39 + inpos]) << 21)
+ | ((in[40 + inpos]) << 56);
+ out[22 + outpos] = ((in[40 + inpos]) >>> (35 - 27))
+ | ((in[41 + inpos]) << 27)
+ | ((in[42 + inpos]) << 62);
+ out[23 + outpos] = ((in[42 + inpos]) >>> (35 - 33))
+ | ((in[43 + inpos]) << 33);
+ out[24 + outpos] = ((in[43 + inpos]) >>> (35 - 4))
+ | ((in[44 + inpos]) << 4)
+ | ((in[45 + inpos]) << 39);
+ out[25 + outpos] = ((in[45 + inpos]) >>> (35 - 10))
+ | ((in[46 + inpos]) << 10)
+ | ((in[47 + inpos]) << 45);
+ out[26 + outpos] = ((in[47 + inpos]) >>> (35 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 51);
+ out[27 + outpos] = ((in[49 + inpos]) >>> (35 - 22))
+ | ((in[50 + inpos]) << 22)
+ | ((in[51 + inpos]) << 57);
+ out[28 + outpos] = ((in[51 + inpos]) >>> (35 - 28))
+ | ((in[52 + inpos]) << 28)
+ | ((in[53 + inpos]) << 63);
+ out[29 + outpos] = ((in[53 + inpos]) >>> (35 - 34))
+ | ((in[54 + inpos]) << 34);
+ out[30 + outpos] = ((in[54 + inpos]) >>> (35 - 5))
+ | ((in[55 + inpos]) << 5)
+ | ((in[56 + inpos]) << 40);
+ out[31 + outpos] = ((in[56 + inpos]) >>> (35 - 11))
+ | ((in[57 + inpos]) << 11)
+ | ((in[58 + inpos]) << 46);
+ out[32 + outpos] = ((in[58 + inpos]) >>> (35 - 17))
+ | ((in[59 + inpos]) << 17)
+ | ((in[60 + inpos]) << 52);
+ out[33 + outpos] = ((in[60 + inpos]) >>> (35 - 23))
+ | ((in[61 + inpos]) << 23)
+ | ((in[62 + inpos]) << 58);
+ out[34 + outpos] = ((in[62 + inpos]) >>> (35 - 29))
+ | ((in[63 + inpos]) << 29);
+ }
+
+ protected static void fastpackwithoutmask36(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 36);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (36 - 8))
+ | ((in[2 + inpos]) << 8)
+ | ((in[3 + inpos]) << 44);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (36 - 16))
+ | ((in[4 + inpos]) << 16)
+ | ((in[5 + inpos]) << 52);
+ out[3 + outpos] = ((in[5 + inpos]) >>> (36 - 24))
+ | ((in[6 + inpos]) << 24)
+ | ((in[7 + inpos]) << 60);
+ out[4 + outpos] = ((in[7 + inpos]) >>> (36 - 32))
+ | ((in[8 + inpos]) << 32);
+ out[5 + outpos] = ((in[8 + inpos]) >>> (36 - 4))
+ | ((in[9 + inpos]) << 4)
+ | ((in[10 + inpos]) << 40);
+ out[6 + outpos] = ((in[10 + inpos]) >>> (36 - 12))
+ | ((in[11 + inpos]) << 12)
+ | ((in[12 + inpos]) << 48);
+ out[7 + outpos] = ((in[12 + inpos]) >>> (36 - 20))
+ | ((in[13 + inpos]) << 20)
+ | ((in[14 + inpos]) << 56);
+ out[8 + outpos] = ((in[14 + inpos]) >>> (36 - 28))
+ | ((in[15 + inpos]) << 28);
+ out[9 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 36);
+ out[10 + outpos] = ((in[17 + inpos]) >>> (36 - 8))
+ | ((in[18 + inpos]) << 8)
+ | ((in[19 + inpos]) << 44);
+ out[11 + outpos] = ((in[19 + inpos]) >>> (36 - 16))
+ | ((in[20 + inpos]) << 16)
+ | ((in[21 + inpos]) << 52);
+ out[12 + outpos] = ((in[21 + inpos]) >>> (36 - 24))
+ | ((in[22 + inpos]) << 24)
+ | ((in[23 + inpos]) << 60);
+ out[13 + outpos] = ((in[23 + inpos]) >>> (36 - 32))
+ | ((in[24 + inpos]) << 32);
+ out[14 + outpos] = ((in[24 + inpos]) >>> (36 - 4))
+ | ((in[25 + inpos]) << 4)
+ | ((in[26 + inpos]) << 40);
+ out[15 + outpos] = ((in[26 + inpos]) >>> (36 - 12))
+ | ((in[27 + inpos]) << 12)
+ | ((in[28 + inpos]) << 48);
+ out[16 + outpos] = ((in[28 + inpos]) >>> (36 - 20))
+ | ((in[29 + inpos]) << 20)
+ | ((in[30 + inpos]) << 56);
+ out[17 + outpos] = ((in[30 + inpos]) >>> (36 - 28))
+ | ((in[31 + inpos]) << 28);
+ out[18 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 36);
+ out[19 + outpos] = ((in[33 + inpos]) >>> (36 - 8))
+ | ((in[34 + inpos]) << 8)
+ | ((in[35 + inpos]) << 44);
+ out[20 + outpos] = ((in[35 + inpos]) >>> (36 - 16))
+ | ((in[36 + inpos]) << 16)
+ | ((in[37 + inpos]) << 52);
+ out[21 + outpos] = ((in[37 + inpos]) >>> (36 - 24))
+ | ((in[38 + inpos]) << 24)
+ | ((in[39 + inpos]) << 60);
+ out[22 + outpos] = ((in[39 + inpos]) >>> (36 - 32))
+ | ((in[40 + inpos]) << 32);
+ out[23 + outpos] = ((in[40 + inpos]) >>> (36 - 4))
+ | ((in[41 + inpos]) << 4)
+ | ((in[42 + inpos]) << 40);
+ out[24 + outpos] = ((in[42 + inpos]) >>> (36 - 12))
+ | ((in[43 + inpos]) << 12)
+ | ((in[44 + inpos]) << 48);
+ out[25 + outpos] = ((in[44 + inpos]) >>> (36 - 20))
+ | ((in[45 + inpos]) << 20)
+ | ((in[46 + inpos]) << 56);
+ out[26 + outpos] = ((in[46 + inpos]) >>> (36 - 28))
+ | ((in[47 + inpos]) << 28);
+ out[27 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 36);
+ out[28 + outpos] = ((in[49 + inpos]) >>> (36 - 8))
+ | ((in[50 + inpos]) << 8)
+ | ((in[51 + inpos]) << 44);
+ out[29 + outpos] = ((in[51 + inpos]) >>> (36 - 16))
+ | ((in[52 + inpos]) << 16)
+ | ((in[53 + inpos]) << 52);
+ out[30 + outpos] = ((in[53 + inpos]) >>> (36 - 24))
+ | ((in[54 + inpos]) << 24)
+ | ((in[55 + inpos]) << 60);
+ out[31 + outpos] = ((in[55 + inpos]) >>> (36 - 32))
+ | ((in[56 + inpos]) << 32);
+ out[32 + outpos] = ((in[56 + inpos]) >>> (36 - 4))
+ | ((in[57 + inpos]) << 4)
+ | ((in[58 + inpos]) << 40);
+ out[33 + outpos] = ((in[58 + inpos]) >>> (36 - 12))
+ | ((in[59 + inpos]) << 12)
+ | ((in[60 + inpos]) << 48);
+ out[34 + outpos] = ((in[60 + inpos]) >>> (36 - 20))
+ | ((in[61 + inpos]) << 20)
+ | ((in[62 + inpos]) << 56);
+ out[35 + outpos] = ((in[62 + inpos]) >>> (36 - 28))
+ | ((in[63 + inpos]) << 28);
+ }
+
+ protected static void fastpackwithoutmask37(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 37);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (37 - 10))
+ | ((in[2 + inpos]) << 10)
+ | ((in[3 + inpos]) << 47);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (37 - 20))
+ | ((in[4 + inpos]) << 20)
+ | ((in[5 + inpos]) << 57);
+ out[3 + outpos] = ((in[5 + inpos]) >>> (37 - 30))
+ | ((in[6 + inpos]) << 30);
+ out[4 + outpos] = ((in[6 + inpos]) >>> (37 - 3))
+ | ((in[7 + inpos]) << 3)
+ | ((in[8 + inpos]) << 40);
+ out[5 + outpos] = ((in[8 + inpos]) >>> (37 - 13))
+ | ((in[9 + inpos]) << 13)
+ | ((in[10 + inpos]) << 50);
+ out[6 + outpos] = ((in[10 + inpos]) >>> (37 - 23))
+ | ((in[11 + inpos]) << 23)
+ | ((in[12 + inpos]) << 60);
+ out[7 + outpos] = ((in[12 + inpos]) >>> (37 - 33))
+ | ((in[13 + inpos]) << 33);
+ out[8 + outpos] = ((in[13 + inpos]) >>> (37 - 6))
+ | ((in[14 + inpos]) << 6)
+ | ((in[15 + inpos]) << 43);
+ out[9 + outpos] = ((in[15 + inpos]) >>> (37 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 53);
+ out[10 + outpos] = ((in[17 + inpos]) >>> (37 - 26))
+ | ((in[18 + inpos]) << 26)
+ | ((in[19 + inpos]) << 63);
+ out[11 + outpos] = ((in[19 + inpos]) >>> (37 - 36))
+ | ((in[20 + inpos]) << 36);
+ out[12 + outpos] = ((in[20 + inpos]) >>> (37 - 9))
+ | ((in[21 + inpos]) << 9)
+ | ((in[22 + inpos]) << 46);
+ out[13 + outpos] = ((in[22 + inpos]) >>> (37 - 19))
+ | ((in[23 + inpos]) << 19)
+ | ((in[24 + inpos]) << 56);
+ out[14 + outpos] = ((in[24 + inpos]) >>> (37 - 29))
+ | ((in[25 + inpos]) << 29);
+ out[15 + outpos] = ((in[25 + inpos]) >>> (37 - 2))
+ | ((in[26 + inpos]) << 2)
+ | ((in[27 + inpos]) << 39);
+ out[16 + outpos] = ((in[27 + inpos]) >>> (37 - 12))
+ | ((in[28 + inpos]) << 12)
+ | ((in[29 + inpos]) << 49);
+ out[17 + outpos] = ((in[29 + inpos]) >>> (37 - 22))
+ | ((in[30 + inpos]) << 22)
+ | ((in[31 + inpos]) << 59);
+ out[18 + outpos] = ((in[31 + inpos]) >>> (37 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[19 + outpos] = ((in[32 + inpos]) >>> (37 - 5))
+ | ((in[33 + inpos]) << 5)
+ | ((in[34 + inpos]) << 42);
+ out[20 + outpos] = ((in[34 + inpos]) >>> (37 - 15))
+ | ((in[35 + inpos]) << 15)
+ | ((in[36 + inpos]) << 52);
+ out[21 + outpos] = ((in[36 + inpos]) >>> (37 - 25))
+ | ((in[37 + inpos]) << 25)
+ | ((in[38 + inpos]) << 62);
+ out[22 + outpos] = ((in[38 + inpos]) >>> (37 - 35))
+ | ((in[39 + inpos]) << 35);
+ out[23 + outpos] = ((in[39 + inpos]) >>> (37 - 8))
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 45);
+ out[24 + outpos] = ((in[41 + inpos]) >>> (37 - 18))
+ | ((in[42 + inpos]) << 18)
+ | ((in[43 + inpos]) << 55);
+ out[25 + outpos] = ((in[43 + inpos]) >>> (37 - 28))
+ | ((in[44 + inpos]) << 28);
+ out[26 + outpos] = ((in[44 + inpos]) >>> (37 - 1))
+ | ((in[45 + inpos]) << 1)
+ | ((in[46 + inpos]) << 38);
+ out[27 + outpos] = ((in[46 + inpos]) >>> (37 - 11))
+ | ((in[47 + inpos]) << 11)
+ | ((in[48 + inpos]) << 48);
+ out[28 + outpos] = ((in[48 + inpos]) >>> (37 - 21))
+ | ((in[49 + inpos]) << 21)
+ | ((in[50 + inpos]) << 58);
+ out[29 + outpos] = ((in[50 + inpos]) >>> (37 - 31))
+ | ((in[51 + inpos]) << 31);
+ out[30 + outpos] = ((in[51 + inpos]) >>> (37 - 4))
+ | ((in[52 + inpos]) << 4)
+ | ((in[53 + inpos]) << 41);
+ out[31 + outpos] = ((in[53 + inpos]) >>> (37 - 14))
+ | ((in[54 + inpos]) << 14)
+ | ((in[55 + inpos]) << 51);
+ out[32 + outpos] = ((in[55 + inpos]) >>> (37 - 24))
+ | ((in[56 + inpos]) << 24)
+ | ((in[57 + inpos]) << 61);
+ out[33 + outpos] = ((in[57 + inpos]) >>> (37 - 34))
+ | ((in[58 + inpos]) << 34);
+ out[34 + outpos] = ((in[58 + inpos]) >>> (37 - 7))
+ | ((in[59 + inpos]) << 7)
+ | ((in[60 + inpos]) << 44);
+ out[35 + outpos] = ((in[60 + inpos]) >>> (37 - 17))
+ | ((in[61 + inpos]) << 17)
+ | ((in[62 + inpos]) << 54);
+ out[36 + outpos] = ((in[62 + inpos]) >>> (37 - 27))
+ | ((in[63 + inpos]) << 27);
+ }
+
+ protected static void fastpackwithoutmask38(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 38);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (38 - 12))
+ | ((in[2 + inpos]) << 12)
+ | ((in[3 + inpos]) << 50);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (38 - 24))
+ | ((in[4 + inpos]) << 24)
+ | ((in[5 + inpos]) << 62);
+ out[3 + outpos] = ((in[5 + inpos]) >>> (38 - 36))
+ | ((in[6 + inpos]) << 36);
+ out[4 + outpos] = ((in[6 + inpos]) >>> (38 - 10))
+ | ((in[7 + inpos]) << 10)
+ | ((in[8 + inpos]) << 48);
+ out[5 + outpos] = ((in[8 + inpos]) >>> (38 - 22))
+ | ((in[9 + inpos]) << 22)
+ | ((in[10 + inpos]) << 60);
+ out[6 + outpos] = ((in[10 + inpos]) >>> (38 - 34))
+ | ((in[11 + inpos]) << 34);
+ out[7 + outpos] = ((in[11 + inpos]) >>> (38 - 8))
+ | ((in[12 + inpos]) << 8)
+ | ((in[13 + inpos]) << 46);
+ out[8 + outpos] = ((in[13 + inpos]) >>> (38 - 20))
+ | ((in[14 + inpos]) << 20)
+ | ((in[15 + inpos]) << 58);
+ out[9 + outpos] = ((in[15 + inpos]) >>> (38 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[10 + outpos] = ((in[16 + inpos]) >>> (38 - 6))
+ | ((in[17 + inpos]) << 6)
+ | ((in[18 + inpos]) << 44);
+ out[11 + outpos] = ((in[18 + inpos]) >>> (38 - 18))
+ | ((in[19 + inpos]) << 18)
+ | ((in[20 + inpos]) << 56);
+ out[12 + outpos] = ((in[20 + inpos]) >>> (38 - 30))
+ | ((in[21 + inpos]) << 30);
+ out[13 + outpos] = ((in[21 + inpos]) >>> (38 - 4))
+ | ((in[22 + inpos]) << 4)
+ | ((in[23 + inpos]) << 42);
+ out[14 + outpos] = ((in[23 + inpos]) >>> (38 - 16))
+ | ((in[24 + inpos]) << 16)
+ | ((in[25 + inpos]) << 54);
+ out[15 + outpos] = ((in[25 + inpos]) >>> (38 - 28))
+ | ((in[26 + inpos]) << 28);
+ out[16 + outpos] = ((in[26 + inpos]) >>> (38 - 2))
+ | ((in[27 + inpos]) << 2)
+ | ((in[28 + inpos]) << 40);
+ out[17 + outpos] = ((in[28 + inpos]) >>> (38 - 14))
+ | ((in[29 + inpos]) << 14)
+ | ((in[30 + inpos]) << 52);
+ out[18 + outpos] = ((in[30 + inpos]) >>> (38 - 26))
+ | ((in[31 + inpos]) << 26);
+ out[19 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 38);
+ out[20 + outpos] = ((in[33 + inpos]) >>> (38 - 12))
+ | ((in[34 + inpos]) << 12)
+ | ((in[35 + inpos]) << 50);
+ out[21 + outpos] = ((in[35 + inpos]) >>> (38 - 24))
+ | ((in[36 + inpos]) << 24)
+ | ((in[37 + inpos]) << 62);
+ out[22 + outpos] = ((in[37 + inpos]) >>> (38 - 36))
+ | ((in[38 + inpos]) << 36);
+ out[23 + outpos] = ((in[38 + inpos]) >>> (38 - 10))
+ | ((in[39 + inpos]) << 10)
+ | ((in[40 + inpos]) << 48);
+ out[24 + outpos] = ((in[40 + inpos]) >>> (38 - 22))
+ | ((in[41 + inpos]) << 22)
+ | ((in[42 + inpos]) << 60);
+ out[25 + outpos] = ((in[42 + inpos]) >>> (38 - 34))
+ | ((in[43 + inpos]) << 34);
+ out[26 + outpos] = ((in[43 + inpos]) >>> (38 - 8))
+ | ((in[44 + inpos]) << 8)
+ | ((in[45 + inpos]) << 46);
+ out[27 + outpos] = ((in[45 + inpos]) >>> (38 - 20))
+ | ((in[46 + inpos]) << 20)
+ | ((in[47 + inpos]) << 58);
+ out[28 + outpos] = ((in[47 + inpos]) >>> (38 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[29 + outpos] = ((in[48 + inpos]) >>> (38 - 6))
+ | ((in[49 + inpos]) << 6)
+ | ((in[50 + inpos]) << 44);
+ out[30 + outpos] = ((in[50 + inpos]) >>> (38 - 18))
+ | ((in[51 + inpos]) << 18)
+ | ((in[52 + inpos]) << 56);
+ out[31 + outpos] = ((in[52 + inpos]) >>> (38 - 30))
+ | ((in[53 + inpos]) << 30);
+ out[32 + outpos] = ((in[53 + inpos]) >>> (38 - 4))
+ | ((in[54 + inpos]) << 4)
+ | ((in[55 + inpos]) << 42);
+ out[33 + outpos] = ((in[55 + inpos]) >>> (38 - 16))
+ | ((in[56 + inpos]) << 16)
+ | ((in[57 + inpos]) << 54);
+ out[34 + outpos] = ((in[57 + inpos]) >>> (38 - 28))
+ | ((in[58 + inpos]) << 28);
+ out[35 + outpos] = ((in[58 + inpos]) >>> (38 - 2))
+ | ((in[59 + inpos]) << 2)
+ | ((in[60 + inpos]) << 40);
+ out[36 + outpos] = ((in[60 + inpos]) >>> (38 - 14))
+ | ((in[61 + inpos]) << 14)
+ | ((in[62 + inpos]) << 52);
+ out[37 + outpos] = ((in[62 + inpos]) >>> (38 - 26))
+ | ((in[63 + inpos]) << 26);
+ }
+
+ protected static void fastpackwithoutmask39(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 39);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (39 - 14))
+ | ((in[2 + inpos]) << 14)
+ | ((in[3 + inpos]) << 53);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (39 - 28))
+ | ((in[4 + inpos]) << 28);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (39 - 3))
+ | ((in[5 + inpos]) << 3)
+ | ((in[6 + inpos]) << 42);
+ out[4 + outpos] = ((in[6 + inpos]) >>> (39 - 17))
+ | ((in[7 + inpos]) << 17)
+ | ((in[8 + inpos]) << 56);
+ out[5 + outpos] = ((in[8 + inpos]) >>> (39 - 31))
+ | ((in[9 + inpos]) << 31);
+ out[6 + outpos] = ((in[9 + inpos]) >>> (39 - 6))
+ | ((in[10 + inpos]) << 6)
+ | ((in[11 + inpos]) << 45);
+ out[7 + outpos] = ((in[11 + inpos]) >>> (39 - 20))
+ | ((in[12 + inpos]) << 20)
+ | ((in[13 + inpos]) << 59);
+ out[8 + outpos] = ((in[13 + inpos]) >>> (39 - 34))
+ | ((in[14 + inpos]) << 34);
+ out[9 + outpos] = ((in[14 + inpos]) >>> (39 - 9))
+ | ((in[15 + inpos]) << 9)
+ | ((in[16 + inpos]) << 48);
+ out[10 + outpos] = ((in[16 + inpos]) >>> (39 - 23))
+ | ((in[17 + inpos]) << 23)
+ | ((in[18 + inpos]) << 62);
+ out[11 + outpos] = ((in[18 + inpos]) >>> (39 - 37))
+ | ((in[19 + inpos]) << 37);
+ out[12 + outpos] = ((in[19 + inpos]) >>> (39 - 12))
+ | ((in[20 + inpos]) << 12)
+ | ((in[21 + inpos]) << 51);
+ out[13 + outpos] = ((in[21 + inpos]) >>> (39 - 26))
+ | ((in[22 + inpos]) << 26);
+ out[14 + outpos] = ((in[22 + inpos]) >>> (39 - 1))
+ | ((in[23 + inpos]) << 1)
+ | ((in[24 + inpos]) << 40);
+ out[15 + outpos] = ((in[24 + inpos]) >>> (39 - 15))
+ | ((in[25 + inpos]) << 15)
+ | ((in[26 + inpos]) << 54);
+ out[16 + outpos] = ((in[26 + inpos]) >>> (39 - 29))
+ | ((in[27 + inpos]) << 29);
+ out[17 + outpos] = ((in[27 + inpos]) >>> (39 - 4))
+ | ((in[28 + inpos]) << 4)
+ | ((in[29 + inpos]) << 43);
+ out[18 + outpos] = ((in[29 + inpos]) >>> (39 - 18))
+ | ((in[30 + inpos]) << 18)
+ | ((in[31 + inpos]) << 57);
+ out[19 + outpos] = ((in[31 + inpos]) >>> (39 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[20 + outpos] = ((in[32 + inpos]) >>> (39 - 7))
+ | ((in[33 + inpos]) << 7)
+ | ((in[34 + inpos]) << 46);
+ out[21 + outpos] = ((in[34 + inpos]) >>> (39 - 21))
+ | ((in[35 + inpos]) << 21)
+ | ((in[36 + inpos]) << 60);
+ out[22 + outpos] = ((in[36 + inpos]) >>> (39 - 35))
+ | ((in[37 + inpos]) << 35);
+ out[23 + outpos] = ((in[37 + inpos]) >>> (39 - 10))
+ | ((in[38 + inpos]) << 10)
+ | ((in[39 + inpos]) << 49);
+ out[24 + outpos] = ((in[39 + inpos]) >>> (39 - 24))
+ | ((in[40 + inpos]) << 24)
+ | ((in[41 + inpos]) << 63);
+ out[25 + outpos] = ((in[41 + inpos]) >>> (39 - 38))
+ | ((in[42 + inpos]) << 38);
+ out[26 + outpos] = ((in[42 + inpos]) >>> (39 - 13))
+ | ((in[43 + inpos]) << 13)
+ | ((in[44 + inpos]) << 52);
+ out[27 + outpos] = ((in[44 + inpos]) >>> (39 - 27))
+ | ((in[45 + inpos]) << 27);
+ out[28 + outpos] = ((in[45 + inpos]) >>> (39 - 2))
+ | ((in[46 + inpos]) << 2)
+ | ((in[47 + inpos]) << 41);
+ out[29 + outpos] = ((in[47 + inpos]) >>> (39 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 55);
+ out[30 + outpos] = ((in[49 + inpos]) >>> (39 - 30))
+ | ((in[50 + inpos]) << 30);
+ out[31 + outpos] = ((in[50 + inpos]) >>> (39 - 5))
+ | ((in[51 + inpos]) << 5)
+ | ((in[52 + inpos]) << 44);
+ out[32 + outpos] = ((in[52 + inpos]) >>> (39 - 19))
+ | ((in[53 + inpos]) << 19)
+ | ((in[54 + inpos]) << 58);
+ out[33 + outpos] = ((in[54 + inpos]) >>> (39 - 33))
+ | ((in[55 + inpos]) << 33);
+ out[34 + outpos] = ((in[55 + inpos]) >>> (39 - 8))
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 47);
+ out[35 + outpos] = ((in[57 + inpos]) >>> (39 - 22))
+ | ((in[58 + inpos]) << 22)
+ | ((in[59 + inpos]) << 61);
+ out[36 + outpos] = ((in[59 + inpos]) >>> (39 - 36))
+ | ((in[60 + inpos]) << 36);
+ out[37 + outpos] = ((in[60 + inpos]) >>> (39 - 11))
+ | ((in[61 + inpos]) << 11)
+ | ((in[62 + inpos]) << 50);
+ out[38 + outpos] = ((in[62 + inpos]) >>> (39 - 25))
+ | ((in[63 + inpos]) << 25);
+ }
+
+ protected static void fastpackwithoutmask40(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 40);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (40 - 16))
+ | ((in[2 + inpos]) << 16)
+ | ((in[3 + inpos]) << 56);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (40 - 32))
+ | ((in[4 + inpos]) << 32);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (40 - 8))
+ | ((in[5 + inpos]) << 8)
+ | ((in[6 + inpos]) << 48);
+ out[4 + outpos] = ((in[6 + inpos]) >>> (40 - 24))
+ | ((in[7 + inpos]) << 24);
+ out[5 + outpos] = in[8 + inpos]
+ | ((in[9 + inpos]) << 40);
+ out[6 + outpos] = ((in[9 + inpos]) >>> (40 - 16))
+ | ((in[10 + inpos]) << 16)
+ | ((in[11 + inpos]) << 56);
+ out[7 + outpos] = ((in[11 + inpos]) >>> (40 - 32))
+ | ((in[12 + inpos]) << 32);
+ out[8 + outpos] = ((in[12 + inpos]) >>> (40 - 8))
+ | ((in[13 + inpos]) << 8)
+ | ((in[14 + inpos]) << 48);
+ out[9 + outpos] = ((in[14 + inpos]) >>> (40 - 24))
+ | ((in[15 + inpos]) << 24);
+ out[10 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 40);
+ out[11 + outpos] = ((in[17 + inpos]) >>> (40 - 16))
+ | ((in[18 + inpos]) << 16)
+ | ((in[19 + inpos]) << 56);
+ out[12 + outpos] = ((in[19 + inpos]) >>> (40 - 32))
+ | ((in[20 + inpos]) << 32);
+ out[13 + outpos] = ((in[20 + inpos]) >>> (40 - 8))
+ | ((in[21 + inpos]) << 8)
+ | ((in[22 + inpos]) << 48);
+ out[14 + outpos] = ((in[22 + inpos]) >>> (40 - 24))
+ | ((in[23 + inpos]) << 24);
+ out[15 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 40);
+ out[16 + outpos] = ((in[25 + inpos]) >>> (40 - 16))
+ | ((in[26 + inpos]) << 16)
+ | ((in[27 + inpos]) << 56);
+ out[17 + outpos] = ((in[27 + inpos]) >>> (40 - 32))
+ | ((in[28 + inpos]) << 32);
+ out[18 + outpos] = ((in[28 + inpos]) >>> (40 - 8))
+ | ((in[29 + inpos]) << 8)
+ | ((in[30 + inpos]) << 48);
+ out[19 + outpos] = ((in[30 + inpos]) >>> (40 - 24))
+ | ((in[31 + inpos]) << 24);
+ out[20 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 40);
+ out[21 + outpos] = ((in[33 + inpos]) >>> (40 - 16))
+ | ((in[34 + inpos]) << 16)
+ | ((in[35 + inpos]) << 56);
+ out[22 + outpos] = ((in[35 + inpos]) >>> (40 - 32))
+ | ((in[36 + inpos]) << 32);
+ out[23 + outpos] = ((in[36 + inpos]) >>> (40 - 8))
+ | ((in[37 + inpos]) << 8)
+ | ((in[38 + inpos]) << 48);
+ out[24 + outpos] = ((in[38 + inpos]) >>> (40 - 24))
+ | ((in[39 + inpos]) << 24);
+ out[25 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 40);
+ out[26 + outpos] = ((in[41 + inpos]) >>> (40 - 16))
+ | ((in[42 + inpos]) << 16)
+ | ((in[43 + inpos]) << 56);
+ out[27 + outpos] = ((in[43 + inpos]) >>> (40 - 32))
+ | ((in[44 + inpos]) << 32);
+ out[28 + outpos] = ((in[44 + inpos]) >>> (40 - 8))
+ | ((in[45 + inpos]) << 8)
+ | ((in[46 + inpos]) << 48);
+ out[29 + outpos] = ((in[46 + inpos]) >>> (40 - 24))
+ | ((in[47 + inpos]) << 24);
+ out[30 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 40);
+ out[31 + outpos] = ((in[49 + inpos]) >>> (40 - 16))
+ | ((in[50 + inpos]) << 16)
+ | ((in[51 + inpos]) << 56);
+ out[32 + outpos] = ((in[51 + inpos]) >>> (40 - 32))
+ | ((in[52 + inpos]) << 32);
+ out[33 + outpos] = ((in[52 + inpos]) >>> (40 - 8))
+ | ((in[53 + inpos]) << 8)
+ | ((in[54 + inpos]) << 48);
+ out[34 + outpos] = ((in[54 + inpos]) >>> (40 - 24))
+ | ((in[55 + inpos]) << 24);
+ out[35 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 40);
+ out[36 + outpos] = ((in[57 + inpos]) >>> (40 - 16))
+ | ((in[58 + inpos]) << 16)
+ | ((in[59 + inpos]) << 56);
+ out[37 + outpos] = ((in[59 + inpos]) >>> (40 - 32))
+ | ((in[60 + inpos]) << 32);
+ out[38 + outpos] = ((in[60 + inpos]) >>> (40 - 8))
+ | ((in[61 + inpos]) << 8)
+ | ((in[62 + inpos]) << 48);
+ out[39 + outpos] = ((in[62 + inpos]) >>> (40 - 24))
+ | ((in[63 + inpos]) << 24);
+ }
+
+ protected static void fastpackwithoutmask41(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 41);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (41 - 18))
+ | ((in[2 + inpos]) << 18)
+ | ((in[3 + inpos]) << 59);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (41 - 36))
+ | ((in[4 + inpos]) << 36);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (41 - 13))
+ | ((in[5 + inpos]) << 13)
+ | ((in[6 + inpos]) << 54);
+ out[4 + outpos] = ((in[6 + inpos]) >>> (41 - 31))
+ | ((in[7 + inpos]) << 31);
+ out[5 + outpos] = ((in[7 + inpos]) >>> (41 - 8))
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 49);
+ out[6 + outpos] = ((in[9 + inpos]) >>> (41 - 26))
+ | ((in[10 + inpos]) << 26);
+ out[7 + outpos] = ((in[10 + inpos]) >>> (41 - 3))
+ | ((in[11 + inpos]) << 3)
+ | ((in[12 + inpos]) << 44);
+ out[8 + outpos] = ((in[12 + inpos]) >>> (41 - 21))
+ | ((in[13 + inpos]) << 21)
+ | ((in[14 + inpos]) << 62);
+ out[9 + outpos] = ((in[14 + inpos]) >>> (41 - 39))
+ | ((in[15 + inpos]) << 39);
+ out[10 + outpos] = ((in[15 + inpos]) >>> (41 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 57);
+ out[11 + outpos] = ((in[17 + inpos]) >>> (41 - 34))
+ | ((in[18 + inpos]) << 34);
+ out[12 + outpos] = ((in[18 + inpos]) >>> (41 - 11))
+ | ((in[19 + inpos]) << 11)
+ | ((in[20 + inpos]) << 52);
+ out[13 + outpos] = ((in[20 + inpos]) >>> (41 - 29))
+ | ((in[21 + inpos]) << 29);
+ out[14 + outpos] = ((in[21 + inpos]) >>> (41 - 6))
+ | ((in[22 + inpos]) << 6)
+ | ((in[23 + inpos]) << 47);
+ out[15 + outpos] = ((in[23 + inpos]) >>> (41 - 24))
+ | ((in[24 + inpos]) << 24);
+ out[16 + outpos] = ((in[24 + inpos]) >>> (41 - 1))
+ | ((in[25 + inpos]) << 1)
+ | ((in[26 + inpos]) << 42);
+ out[17 + outpos] = ((in[26 + inpos]) >>> (41 - 19))
+ | ((in[27 + inpos]) << 19)
+ | ((in[28 + inpos]) << 60);
+ out[18 + outpos] = ((in[28 + inpos]) >>> (41 - 37))
+ | ((in[29 + inpos]) << 37);
+ out[19 + outpos] = ((in[29 + inpos]) >>> (41 - 14))
+ | ((in[30 + inpos]) << 14)
+ | ((in[31 + inpos]) << 55);
+ out[20 + outpos] = ((in[31 + inpos]) >>> (41 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[21 + outpos] = ((in[32 + inpos]) >>> (41 - 9))
+ | ((in[33 + inpos]) << 9)
+ | ((in[34 + inpos]) << 50);
+ out[22 + outpos] = ((in[34 + inpos]) >>> (41 - 27))
+ | ((in[35 + inpos]) << 27);
+ out[23 + outpos] = ((in[35 + inpos]) >>> (41 - 4))
+ | ((in[36 + inpos]) << 4)
+ | ((in[37 + inpos]) << 45);
+ out[24 + outpos] = ((in[37 + inpos]) >>> (41 - 22))
+ | ((in[38 + inpos]) << 22)
+ | ((in[39 + inpos]) << 63);
+ out[25 + outpos] = ((in[39 + inpos]) >>> (41 - 40))
+ | ((in[40 + inpos]) << 40);
+ out[26 + outpos] = ((in[40 + inpos]) >>> (41 - 17))
+ | ((in[41 + inpos]) << 17)
+ | ((in[42 + inpos]) << 58);
+ out[27 + outpos] = ((in[42 + inpos]) >>> (41 - 35))
+ | ((in[43 + inpos]) << 35);
+ out[28 + outpos] = ((in[43 + inpos]) >>> (41 - 12))
+ | ((in[44 + inpos]) << 12)
+ | ((in[45 + inpos]) << 53);
+ out[29 + outpos] = ((in[45 + inpos]) >>> (41 - 30))
+ | ((in[46 + inpos]) << 30);
+ out[30 + outpos] = ((in[46 + inpos]) >>> (41 - 7))
+ | ((in[47 + inpos]) << 7)
+ | ((in[48 + inpos]) << 48);
+ out[31 + outpos] = ((in[48 + inpos]) >>> (41 - 25))
+ | ((in[49 + inpos]) << 25);
+ out[32 + outpos] = ((in[49 + inpos]) >>> (41 - 2))
+ | ((in[50 + inpos]) << 2)
+ | ((in[51 + inpos]) << 43);
+ out[33 + outpos] = ((in[51 + inpos]) >>> (41 - 20))
+ | ((in[52 + inpos]) << 20)
+ | ((in[53 + inpos]) << 61);
+ out[34 + outpos] = ((in[53 + inpos]) >>> (41 - 38))
+ | ((in[54 + inpos]) << 38);
+ out[35 + outpos] = ((in[54 + inpos]) >>> (41 - 15))
+ | ((in[55 + inpos]) << 15)
+ | ((in[56 + inpos]) << 56);
+ out[36 + outpos] = ((in[56 + inpos]) >>> (41 - 33))
+ | ((in[57 + inpos]) << 33);
+ out[37 + outpos] = ((in[57 + inpos]) >>> (41 - 10))
+ | ((in[58 + inpos]) << 10)
+ | ((in[59 + inpos]) << 51);
+ out[38 + outpos] = ((in[59 + inpos]) >>> (41 - 28))
+ | ((in[60 + inpos]) << 28);
+ out[39 + outpos] = ((in[60 + inpos]) >>> (41 - 5))
+ | ((in[61 + inpos]) << 5)
+ | ((in[62 + inpos]) << 46);
+ out[40 + outpos] = ((in[62 + inpos]) >>> (41 - 23))
+ | ((in[63 + inpos]) << 23);
+ }
+
+ protected static void fastpackwithoutmask42(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 42);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (42 - 20))
+ | ((in[2 + inpos]) << 20)
+ | ((in[3 + inpos]) << 62);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (42 - 40))
+ | ((in[4 + inpos]) << 40);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (42 - 18))
+ | ((in[5 + inpos]) << 18)
+ | ((in[6 + inpos]) << 60);
+ out[4 + outpos] = ((in[6 + inpos]) >>> (42 - 38))
+ | ((in[7 + inpos]) << 38);
+ out[5 + outpos] = ((in[7 + inpos]) >>> (42 - 16))
+ | ((in[8 + inpos]) << 16)
+ | ((in[9 + inpos]) << 58);
+ out[6 + outpos] = ((in[9 + inpos]) >>> (42 - 36))
+ | ((in[10 + inpos]) << 36);
+ out[7 + outpos] = ((in[10 + inpos]) >>> (42 - 14))
+ | ((in[11 + inpos]) << 14)
+ | ((in[12 + inpos]) << 56);
+ out[8 + outpos] = ((in[12 + inpos]) >>> (42 - 34))
+ | ((in[13 + inpos]) << 34);
+ out[9 + outpos] = ((in[13 + inpos]) >>> (42 - 12))
+ | ((in[14 + inpos]) << 12)
+ | ((in[15 + inpos]) << 54);
+ out[10 + outpos] = ((in[15 + inpos]) >>> (42 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[11 + outpos] = ((in[16 + inpos]) >>> (42 - 10))
+ | ((in[17 + inpos]) << 10)
+ | ((in[18 + inpos]) << 52);
+ out[12 + outpos] = ((in[18 + inpos]) >>> (42 - 30))
+ | ((in[19 + inpos]) << 30);
+ out[13 + outpos] = ((in[19 + inpos]) >>> (42 - 8))
+ | ((in[20 + inpos]) << 8)
+ | ((in[21 + inpos]) << 50);
+ out[14 + outpos] = ((in[21 + inpos]) >>> (42 - 28))
+ | ((in[22 + inpos]) << 28);
+ out[15 + outpos] = ((in[22 + inpos]) >>> (42 - 6))
+ | ((in[23 + inpos]) << 6)
+ | ((in[24 + inpos]) << 48);
+ out[16 + outpos] = ((in[24 + inpos]) >>> (42 - 26))
+ | ((in[25 + inpos]) << 26);
+ out[17 + outpos] = ((in[25 + inpos]) >>> (42 - 4))
+ | ((in[26 + inpos]) << 4)
+ | ((in[27 + inpos]) << 46);
+ out[18 + outpos] = ((in[27 + inpos]) >>> (42 - 24))
+ | ((in[28 + inpos]) << 24);
+ out[19 + outpos] = ((in[28 + inpos]) >>> (42 - 2))
+ | ((in[29 + inpos]) << 2)
+ | ((in[30 + inpos]) << 44);
+ out[20 + outpos] = ((in[30 + inpos]) >>> (42 - 22))
+ | ((in[31 + inpos]) << 22);
+ out[21 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 42);
+ out[22 + outpos] = ((in[33 + inpos]) >>> (42 - 20))
+ | ((in[34 + inpos]) << 20)
+ | ((in[35 + inpos]) << 62);
+ out[23 + outpos] = ((in[35 + inpos]) >>> (42 - 40))
+ | ((in[36 + inpos]) << 40);
+ out[24 + outpos] = ((in[36 + inpos]) >>> (42 - 18))
+ | ((in[37 + inpos]) << 18)
+ | ((in[38 + inpos]) << 60);
+ out[25 + outpos] = ((in[38 + inpos]) >>> (42 - 38))
+ | ((in[39 + inpos]) << 38);
+ out[26 + outpos] = ((in[39 + inpos]) >>> (42 - 16))
+ | ((in[40 + inpos]) << 16)
+ | ((in[41 + inpos]) << 58);
+ out[27 + outpos] = ((in[41 + inpos]) >>> (42 - 36))
+ | ((in[42 + inpos]) << 36);
+ out[28 + outpos] = ((in[42 + inpos]) >>> (42 - 14))
+ | ((in[43 + inpos]) << 14)
+ | ((in[44 + inpos]) << 56);
+ out[29 + outpos] = ((in[44 + inpos]) >>> (42 - 34))
+ | ((in[45 + inpos]) << 34);
+ out[30 + outpos] = ((in[45 + inpos]) >>> (42 - 12))
+ | ((in[46 + inpos]) << 12)
+ | ((in[47 + inpos]) << 54);
+ out[31 + outpos] = ((in[47 + inpos]) >>> (42 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[32 + outpos] = ((in[48 + inpos]) >>> (42 - 10))
+ | ((in[49 + inpos]) << 10)
+ | ((in[50 + inpos]) << 52);
+ out[33 + outpos] = ((in[50 + inpos]) >>> (42 - 30))
+ | ((in[51 + inpos]) << 30);
+ out[34 + outpos] = ((in[51 + inpos]) >>> (42 - 8))
+ | ((in[52 + inpos]) << 8)
+ | ((in[53 + inpos]) << 50);
+ out[35 + outpos] = ((in[53 + inpos]) >>> (42 - 28))
+ | ((in[54 + inpos]) << 28);
+ out[36 + outpos] = ((in[54 + inpos]) >>> (42 - 6))
+ | ((in[55 + inpos]) << 6)
+ | ((in[56 + inpos]) << 48);
+ out[37 + outpos] = ((in[56 + inpos]) >>> (42 - 26))
+ | ((in[57 + inpos]) << 26);
+ out[38 + outpos] = ((in[57 + inpos]) >>> (42 - 4))
+ | ((in[58 + inpos]) << 4)
+ | ((in[59 + inpos]) << 46);
+ out[39 + outpos] = ((in[59 + inpos]) >>> (42 - 24))
+ | ((in[60 + inpos]) << 24);
+ out[40 + outpos] = ((in[60 + inpos]) >>> (42 - 2))
+ | ((in[61 + inpos]) << 2)
+ | ((in[62 + inpos]) << 44);
+ out[41 + outpos] = ((in[62 + inpos]) >>> (42 - 22))
+ | ((in[63 + inpos]) << 22);
+ }
+
+ protected static void fastpackwithoutmask43(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 43);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (43 - 22))
+ | ((in[2 + inpos]) << 22);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (43 - 1))
+ | ((in[3 + inpos]) << 1)
+ | ((in[4 + inpos]) << 44);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (43 - 23))
+ | ((in[5 + inpos]) << 23);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (43 - 2))
+ | ((in[6 + inpos]) << 2)
+ | ((in[7 + inpos]) << 45);
+ out[5 + outpos] = ((in[7 + inpos]) >>> (43 - 24))
+ | ((in[8 + inpos]) << 24);
+ out[6 + outpos] = ((in[8 + inpos]) >>> (43 - 3))
+ | ((in[9 + inpos]) << 3)
+ | ((in[10 + inpos]) << 46);
+ out[7 + outpos] = ((in[10 + inpos]) >>> (43 - 25))
+ | ((in[11 + inpos]) << 25);
+ out[8 + outpos] = ((in[11 + inpos]) >>> (43 - 4))
+ | ((in[12 + inpos]) << 4)
+ | ((in[13 + inpos]) << 47);
+ out[9 + outpos] = ((in[13 + inpos]) >>> (43 - 26))
+ | ((in[14 + inpos]) << 26);
+ out[10 + outpos] = ((in[14 + inpos]) >>> (43 - 5))
+ | ((in[15 + inpos]) << 5)
+ | ((in[16 + inpos]) << 48);
+ out[11 + outpos] = ((in[16 + inpos]) >>> (43 - 27))
+ | ((in[17 + inpos]) << 27);
+ out[12 + outpos] = ((in[17 + inpos]) >>> (43 - 6))
+ | ((in[18 + inpos]) << 6)
+ | ((in[19 + inpos]) << 49);
+ out[13 + outpos] = ((in[19 + inpos]) >>> (43 - 28))
+ | ((in[20 + inpos]) << 28);
+ out[14 + outpos] = ((in[20 + inpos]) >>> (43 - 7))
+ | ((in[21 + inpos]) << 7)
+ | ((in[22 + inpos]) << 50);
+ out[15 + outpos] = ((in[22 + inpos]) >>> (43 - 29))
+ | ((in[23 + inpos]) << 29);
+ out[16 + outpos] = ((in[23 + inpos]) >>> (43 - 8))
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 51);
+ out[17 + outpos] = ((in[25 + inpos]) >>> (43 - 30))
+ | ((in[26 + inpos]) << 30);
+ out[18 + outpos] = ((in[26 + inpos]) >>> (43 - 9))
+ | ((in[27 + inpos]) << 9)
+ | ((in[28 + inpos]) << 52);
+ out[19 + outpos] = ((in[28 + inpos]) >>> (43 - 31))
+ | ((in[29 + inpos]) << 31);
+ out[20 + outpos] = ((in[29 + inpos]) >>> (43 - 10))
+ | ((in[30 + inpos]) << 10)
+ | ((in[31 + inpos]) << 53);
+ out[21 + outpos] = ((in[31 + inpos]) >>> (43 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[22 + outpos] = ((in[32 + inpos]) >>> (43 - 11))
+ | ((in[33 + inpos]) << 11)
+ | ((in[34 + inpos]) << 54);
+ out[23 + outpos] = ((in[34 + inpos]) >>> (43 - 33))
+ | ((in[35 + inpos]) << 33);
+ out[24 + outpos] = ((in[35 + inpos]) >>> (43 - 12))
+ | ((in[36 + inpos]) << 12)
+ | ((in[37 + inpos]) << 55);
+ out[25 + outpos] = ((in[37 + inpos]) >>> (43 - 34))
+ | ((in[38 + inpos]) << 34);
+ out[26 + outpos] = ((in[38 + inpos]) >>> (43 - 13))
+ | ((in[39 + inpos]) << 13)
+ | ((in[40 + inpos]) << 56);
+ out[27 + outpos] = ((in[40 + inpos]) >>> (43 - 35))
+ | ((in[41 + inpos]) << 35);
+ out[28 + outpos] = ((in[41 + inpos]) >>> (43 - 14))
+ | ((in[42 + inpos]) << 14)
+ | ((in[43 + inpos]) << 57);
+ out[29 + outpos] = ((in[43 + inpos]) >>> (43 - 36))
+ | ((in[44 + inpos]) << 36);
+ out[30 + outpos] = ((in[44 + inpos]) >>> (43 - 15))
+ | ((in[45 + inpos]) << 15)
+ | ((in[46 + inpos]) << 58);
+ out[31 + outpos] = ((in[46 + inpos]) >>> (43 - 37))
+ | ((in[47 + inpos]) << 37);
+ out[32 + outpos] = ((in[47 + inpos]) >>> (43 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 59);
+ out[33 + outpos] = ((in[49 + inpos]) >>> (43 - 38))
+ | ((in[50 + inpos]) << 38);
+ out[34 + outpos] = ((in[50 + inpos]) >>> (43 - 17))
+ | ((in[51 + inpos]) << 17)
+ | ((in[52 + inpos]) << 60);
+ out[35 + outpos] = ((in[52 + inpos]) >>> (43 - 39))
+ | ((in[53 + inpos]) << 39);
+ out[36 + outpos] = ((in[53 + inpos]) >>> (43 - 18))
+ | ((in[54 + inpos]) << 18)
+ | ((in[55 + inpos]) << 61);
+ out[37 + outpos] = ((in[55 + inpos]) >>> (43 - 40))
+ | ((in[56 + inpos]) << 40);
+ out[38 + outpos] = ((in[56 + inpos]) >>> (43 - 19))
+ | ((in[57 + inpos]) << 19)
+ | ((in[58 + inpos]) << 62);
+ out[39 + outpos] = ((in[58 + inpos]) >>> (43 - 41))
+ | ((in[59 + inpos]) << 41);
+ out[40 + outpos] = ((in[59 + inpos]) >>> (43 - 20))
+ | ((in[60 + inpos]) << 20)
+ | ((in[61 + inpos]) << 63);
+ out[41 + outpos] = ((in[61 + inpos]) >>> (43 - 42))
+ | ((in[62 + inpos]) << 42);
+ out[42 + outpos] = ((in[62 + inpos]) >>> (43 - 21))
+ | ((in[63 + inpos]) << 21);
+ }
+
+ protected static void fastpackwithoutmask44(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 44);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (44 - 24))
+ | ((in[2 + inpos]) << 24);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (44 - 4))
+ | ((in[3 + inpos]) << 4)
+ | ((in[4 + inpos]) << 48);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (44 - 28))
+ | ((in[5 + inpos]) << 28);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (44 - 8))
+ | ((in[6 + inpos]) << 8)
+ | ((in[7 + inpos]) << 52);
+ out[5 + outpos] = ((in[7 + inpos]) >>> (44 - 32))
+ | ((in[8 + inpos]) << 32);
+ out[6 + outpos] = ((in[8 + inpos]) >>> (44 - 12))
+ | ((in[9 + inpos]) << 12)
+ | ((in[10 + inpos]) << 56);
+ out[7 + outpos] = ((in[10 + inpos]) >>> (44 - 36))
+ | ((in[11 + inpos]) << 36);
+ out[8 + outpos] = ((in[11 + inpos]) >>> (44 - 16))
+ | ((in[12 + inpos]) << 16)
+ | ((in[13 + inpos]) << 60);
+ out[9 + outpos] = ((in[13 + inpos]) >>> (44 - 40))
+ | ((in[14 + inpos]) << 40);
+ out[10 + outpos] = ((in[14 + inpos]) >>> (44 - 20))
+ | ((in[15 + inpos]) << 20);
+ out[11 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 44);
+ out[12 + outpos] = ((in[17 + inpos]) >>> (44 - 24))
+ | ((in[18 + inpos]) << 24);
+ out[13 + outpos] = ((in[18 + inpos]) >>> (44 - 4))
+ | ((in[19 + inpos]) << 4)
+ | ((in[20 + inpos]) << 48);
+ out[14 + outpos] = ((in[20 + inpos]) >>> (44 - 28))
+ | ((in[21 + inpos]) << 28);
+ out[15 + outpos] = ((in[21 + inpos]) >>> (44 - 8))
+ | ((in[22 + inpos]) << 8)
+ | ((in[23 + inpos]) << 52);
+ out[16 + outpos] = ((in[23 + inpos]) >>> (44 - 32))
+ | ((in[24 + inpos]) << 32);
+ out[17 + outpos] = ((in[24 + inpos]) >>> (44 - 12))
+ | ((in[25 + inpos]) << 12)
+ | ((in[26 + inpos]) << 56);
+ out[18 + outpos] = ((in[26 + inpos]) >>> (44 - 36))
+ | ((in[27 + inpos]) << 36);
+ out[19 + outpos] = ((in[27 + inpos]) >>> (44 - 16))
+ | ((in[28 + inpos]) << 16)
+ | ((in[29 + inpos]) << 60);
+ out[20 + outpos] = ((in[29 + inpos]) >>> (44 - 40))
+ | ((in[30 + inpos]) << 40);
+ out[21 + outpos] = ((in[30 + inpos]) >>> (44 - 20))
+ | ((in[31 + inpos]) << 20);
+ out[22 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 44);
+ out[23 + outpos] = ((in[33 + inpos]) >>> (44 - 24))
+ | ((in[34 + inpos]) << 24);
+ out[24 + outpos] = ((in[34 + inpos]) >>> (44 - 4))
+ | ((in[35 + inpos]) << 4)
+ | ((in[36 + inpos]) << 48);
+ out[25 + outpos] = ((in[36 + inpos]) >>> (44 - 28))
+ | ((in[37 + inpos]) << 28);
+ out[26 + outpos] = ((in[37 + inpos]) >>> (44 - 8))
+ | ((in[38 + inpos]) << 8)
+ | ((in[39 + inpos]) << 52);
+ out[27 + outpos] = ((in[39 + inpos]) >>> (44 - 32))
+ | ((in[40 + inpos]) << 32);
+ out[28 + outpos] = ((in[40 + inpos]) >>> (44 - 12))
+ | ((in[41 + inpos]) << 12)
+ | ((in[42 + inpos]) << 56);
+ out[29 + outpos] = ((in[42 + inpos]) >>> (44 - 36))
+ | ((in[43 + inpos]) << 36);
+ out[30 + outpos] = ((in[43 + inpos]) >>> (44 - 16))
+ | ((in[44 + inpos]) << 16)
+ | ((in[45 + inpos]) << 60);
+ out[31 + outpos] = ((in[45 + inpos]) >>> (44 - 40))
+ | ((in[46 + inpos]) << 40);
+ out[32 + outpos] = ((in[46 + inpos]) >>> (44 - 20))
+ | ((in[47 + inpos]) << 20);
+ out[33 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 44);
+ out[34 + outpos] = ((in[49 + inpos]) >>> (44 - 24))
+ | ((in[50 + inpos]) << 24);
+ out[35 + outpos] = ((in[50 + inpos]) >>> (44 - 4))
+ | ((in[51 + inpos]) << 4)
+ | ((in[52 + inpos]) << 48);
+ out[36 + outpos] = ((in[52 + inpos]) >>> (44 - 28))
+ | ((in[53 + inpos]) << 28);
+ out[37 + outpos] = ((in[53 + inpos]) >>> (44 - 8))
+ | ((in[54 + inpos]) << 8)
+ | ((in[55 + inpos]) << 52);
+ out[38 + outpos] = ((in[55 + inpos]) >>> (44 - 32))
+ | ((in[56 + inpos]) << 32);
+ out[39 + outpos] = ((in[56 + inpos]) >>> (44 - 12))
+ | ((in[57 + inpos]) << 12)
+ | ((in[58 + inpos]) << 56);
+ out[40 + outpos] = ((in[58 + inpos]) >>> (44 - 36))
+ | ((in[59 + inpos]) << 36);
+ out[41 + outpos] = ((in[59 + inpos]) >>> (44 - 16))
+ | ((in[60 + inpos]) << 16)
+ | ((in[61 + inpos]) << 60);
+ out[42 + outpos] = ((in[61 + inpos]) >>> (44 - 40))
+ | ((in[62 + inpos]) << 40);
+ out[43 + outpos] = ((in[62 + inpos]) >>> (44 - 20))
+ | ((in[63 + inpos]) << 20);
+ }
+
+ protected static void fastpackwithoutmask45(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 45);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (45 - 26))
+ | ((in[2 + inpos]) << 26);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (45 - 7))
+ | ((in[3 + inpos]) << 7)
+ | ((in[4 + inpos]) << 52);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (45 - 33))
+ | ((in[5 + inpos]) << 33);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (45 - 14))
+ | ((in[6 + inpos]) << 14)
+ | ((in[7 + inpos]) << 59);
+ out[5 + outpos] = ((in[7 + inpos]) >>> (45 - 40))
+ | ((in[8 + inpos]) << 40);
+ out[6 + outpos] = ((in[8 + inpos]) >>> (45 - 21))
+ | ((in[9 + inpos]) << 21);
+ out[7 + outpos] = ((in[9 + inpos]) >>> (45 - 2))
+ | ((in[10 + inpos]) << 2)
+ | ((in[11 + inpos]) << 47);
+ out[8 + outpos] = ((in[11 + inpos]) >>> (45 - 28))
+ | ((in[12 + inpos]) << 28);
+ out[9 + outpos] = ((in[12 + inpos]) >>> (45 - 9))
+ | ((in[13 + inpos]) << 9)
+ | ((in[14 + inpos]) << 54);
+ out[10 + outpos] = ((in[14 + inpos]) >>> (45 - 35))
+ | ((in[15 + inpos]) << 35);
+ out[11 + outpos] = ((in[15 + inpos]) >>> (45 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 61);
+ out[12 + outpos] = ((in[17 + inpos]) >>> (45 - 42))
+ | ((in[18 + inpos]) << 42);
+ out[13 + outpos] = ((in[18 + inpos]) >>> (45 - 23))
+ | ((in[19 + inpos]) << 23);
+ out[14 + outpos] = ((in[19 + inpos]) >>> (45 - 4))
+ | ((in[20 + inpos]) << 4)
+ | ((in[21 + inpos]) << 49);
+ out[15 + outpos] = ((in[21 + inpos]) >>> (45 - 30))
+ | ((in[22 + inpos]) << 30);
+ out[16 + outpos] = ((in[22 + inpos]) >>> (45 - 11))
+ | ((in[23 + inpos]) << 11)
+ | ((in[24 + inpos]) << 56);
+ out[17 + outpos] = ((in[24 + inpos]) >>> (45 - 37))
+ | ((in[25 + inpos]) << 37);
+ out[18 + outpos] = ((in[25 + inpos]) >>> (45 - 18))
+ | ((in[26 + inpos]) << 18)
+ | ((in[27 + inpos]) << 63);
+ out[19 + outpos] = ((in[27 + inpos]) >>> (45 - 44))
+ | ((in[28 + inpos]) << 44);
+ out[20 + outpos] = ((in[28 + inpos]) >>> (45 - 25))
+ | ((in[29 + inpos]) << 25);
+ out[21 + outpos] = ((in[29 + inpos]) >>> (45 - 6))
+ | ((in[30 + inpos]) << 6)
+ | ((in[31 + inpos]) << 51);
+ out[22 + outpos] = ((in[31 + inpos]) >>> (45 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[23 + outpos] = ((in[32 + inpos]) >>> (45 - 13))
+ | ((in[33 + inpos]) << 13)
+ | ((in[34 + inpos]) << 58);
+ out[24 + outpos] = ((in[34 + inpos]) >>> (45 - 39))
+ | ((in[35 + inpos]) << 39);
+ out[25 + outpos] = ((in[35 + inpos]) >>> (45 - 20))
+ | ((in[36 + inpos]) << 20);
+ out[26 + outpos] = ((in[36 + inpos]) >>> (45 - 1))
+ | ((in[37 + inpos]) << 1)
+ | ((in[38 + inpos]) << 46);
+ out[27 + outpos] = ((in[38 + inpos]) >>> (45 - 27))
+ | ((in[39 + inpos]) << 27);
+ out[28 + outpos] = ((in[39 + inpos]) >>> (45 - 8))
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 53);
+ out[29 + outpos] = ((in[41 + inpos]) >>> (45 - 34))
+ | ((in[42 + inpos]) << 34);
+ out[30 + outpos] = ((in[42 + inpos]) >>> (45 - 15))
+ | ((in[43 + inpos]) << 15)
+ | ((in[44 + inpos]) << 60);
+ out[31 + outpos] = ((in[44 + inpos]) >>> (45 - 41))
+ | ((in[45 + inpos]) << 41);
+ out[32 + outpos] = ((in[45 + inpos]) >>> (45 - 22))
+ | ((in[46 + inpos]) << 22);
+ out[33 + outpos] = ((in[46 + inpos]) >>> (45 - 3))
+ | ((in[47 + inpos]) << 3)
+ | ((in[48 + inpos]) << 48);
+ out[34 + outpos] = ((in[48 + inpos]) >>> (45 - 29))
+ | ((in[49 + inpos]) << 29);
+ out[35 + outpos] = ((in[49 + inpos]) >>> (45 - 10))
+ | ((in[50 + inpos]) << 10)
+ | ((in[51 + inpos]) << 55);
+ out[36 + outpos] = ((in[51 + inpos]) >>> (45 - 36))
+ | ((in[52 + inpos]) << 36);
+ out[37 + outpos] = ((in[52 + inpos]) >>> (45 - 17))
+ | ((in[53 + inpos]) << 17)
+ | ((in[54 + inpos]) << 62);
+ out[38 + outpos] = ((in[54 + inpos]) >>> (45 - 43))
+ | ((in[55 + inpos]) << 43);
+ out[39 + outpos] = ((in[55 + inpos]) >>> (45 - 24))
+ | ((in[56 + inpos]) << 24);
+ out[40 + outpos] = ((in[56 + inpos]) >>> (45 - 5))
+ | ((in[57 + inpos]) << 5)
+ | ((in[58 + inpos]) << 50);
+ out[41 + outpos] = ((in[58 + inpos]) >>> (45 - 31))
+ | ((in[59 + inpos]) << 31);
+ out[42 + outpos] = ((in[59 + inpos]) >>> (45 - 12))
+ | ((in[60 + inpos]) << 12)
+ | ((in[61 + inpos]) << 57);
+ out[43 + outpos] = ((in[61 + inpos]) >>> (45 - 38))
+ | ((in[62 + inpos]) << 38);
+ out[44 + outpos] = ((in[62 + inpos]) >>> (45 - 19))
+ | ((in[63 + inpos]) << 19);
+ }
+
+ protected static void fastpackwithoutmask46(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 46);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (46 - 28))
+ | ((in[2 + inpos]) << 28);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (46 - 10))
+ | ((in[3 + inpos]) << 10)
+ | ((in[4 + inpos]) << 56);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (46 - 38))
+ | ((in[5 + inpos]) << 38);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (46 - 20))
+ | ((in[6 + inpos]) << 20);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (46 - 2))
+ | ((in[7 + inpos]) << 2)
+ | ((in[8 + inpos]) << 48);
+ out[6 + outpos] = ((in[8 + inpos]) >>> (46 - 30))
+ | ((in[9 + inpos]) << 30);
+ out[7 + outpos] = ((in[9 + inpos]) >>> (46 - 12))
+ | ((in[10 + inpos]) << 12)
+ | ((in[11 + inpos]) << 58);
+ out[8 + outpos] = ((in[11 + inpos]) >>> (46 - 40))
+ | ((in[12 + inpos]) << 40);
+ out[9 + outpos] = ((in[12 + inpos]) >>> (46 - 22))
+ | ((in[13 + inpos]) << 22);
+ out[10 + outpos] = ((in[13 + inpos]) >>> (46 - 4))
+ | ((in[14 + inpos]) << 4)
+ | ((in[15 + inpos]) << 50);
+ out[11 + outpos] = ((in[15 + inpos]) >>> (46 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[12 + outpos] = ((in[16 + inpos]) >>> (46 - 14))
+ | ((in[17 + inpos]) << 14)
+ | ((in[18 + inpos]) << 60);
+ out[13 + outpos] = ((in[18 + inpos]) >>> (46 - 42))
+ | ((in[19 + inpos]) << 42);
+ out[14 + outpos] = ((in[19 + inpos]) >>> (46 - 24))
+ | ((in[20 + inpos]) << 24);
+ out[15 + outpos] = ((in[20 + inpos]) >>> (46 - 6))
+ | ((in[21 + inpos]) << 6)
+ | ((in[22 + inpos]) << 52);
+ out[16 + outpos] = ((in[22 + inpos]) >>> (46 - 34))
+ | ((in[23 + inpos]) << 34);
+ out[17 + outpos] = ((in[23 + inpos]) >>> (46 - 16))
+ | ((in[24 + inpos]) << 16)
+ | ((in[25 + inpos]) << 62);
+ out[18 + outpos] = ((in[25 + inpos]) >>> (46 - 44))
+ | ((in[26 + inpos]) << 44);
+ out[19 + outpos] = ((in[26 + inpos]) >>> (46 - 26))
+ | ((in[27 + inpos]) << 26);
+ out[20 + outpos] = ((in[27 + inpos]) >>> (46 - 8))
+ | ((in[28 + inpos]) << 8)
+ | ((in[29 + inpos]) << 54);
+ out[21 + outpos] = ((in[29 + inpos]) >>> (46 - 36))
+ | ((in[30 + inpos]) << 36);
+ out[22 + outpos] = ((in[30 + inpos]) >>> (46 - 18))
+ | ((in[31 + inpos]) << 18);
+ out[23 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 46);
+ out[24 + outpos] = ((in[33 + inpos]) >>> (46 - 28))
+ | ((in[34 + inpos]) << 28);
+ out[25 + outpos] = ((in[34 + inpos]) >>> (46 - 10))
+ | ((in[35 + inpos]) << 10)
+ | ((in[36 + inpos]) << 56);
+ out[26 + outpos] = ((in[36 + inpos]) >>> (46 - 38))
+ | ((in[37 + inpos]) << 38);
+ out[27 + outpos] = ((in[37 + inpos]) >>> (46 - 20))
+ | ((in[38 + inpos]) << 20);
+ out[28 + outpos] = ((in[38 + inpos]) >>> (46 - 2))
+ | ((in[39 + inpos]) << 2)
+ | ((in[40 + inpos]) << 48);
+ out[29 + outpos] = ((in[40 + inpos]) >>> (46 - 30))
+ | ((in[41 + inpos]) << 30);
+ out[30 + outpos] = ((in[41 + inpos]) >>> (46 - 12))
+ | ((in[42 + inpos]) << 12)
+ | ((in[43 + inpos]) << 58);
+ out[31 + outpos] = ((in[43 + inpos]) >>> (46 - 40))
+ | ((in[44 + inpos]) << 40);
+ out[32 + outpos] = ((in[44 + inpos]) >>> (46 - 22))
+ | ((in[45 + inpos]) << 22);
+ out[33 + outpos] = ((in[45 + inpos]) >>> (46 - 4))
+ | ((in[46 + inpos]) << 4)
+ | ((in[47 + inpos]) << 50);
+ out[34 + outpos] = ((in[47 + inpos]) >>> (46 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[35 + outpos] = ((in[48 + inpos]) >>> (46 - 14))
+ | ((in[49 + inpos]) << 14)
+ | ((in[50 + inpos]) << 60);
+ out[36 + outpos] = ((in[50 + inpos]) >>> (46 - 42))
+ | ((in[51 + inpos]) << 42);
+ out[37 + outpos] = ((in[51 + inpos]) >>> (46 - 24))
+ | ((in[52 + inpos]) << 24);
+ out[38 + outpos] = ((in[52 + inpos]) >>> (46 - 6))
+ | ((in[53 + inpos]) << 6)
+ | ((in[54 + inpos]) << 52);
+ out[39 + outpos] = ((in[54 + inpos]) >>> (46 - 34))
+ | ((in[55 + inpos]) << 34);
+ out[40 + outpos] = ((in[55 + inpos]) >>> (46 - 16))
+ | ((in[56 + inpos]) << 16)
+ | ((in[57 + inpos]) << 62);
+ out[41 + outpos] = ((in[57 + inpos]) >>> (46 - 44))
+ | ((in[58 + inpos]) << 44);
+ out[42 + outpos] = ((in[58 + inpos]) >>> (46 - 26))
+ | ((in[59 + inpos]) << 26);
+ out[43 + outpos] = ((in[59 + inpos]) >>> (46 - 8))
+ | ((in[60 + inpos]) << 8)
+ | ((in[61 + inpos]) << 54);
+ out[44 + outpos] = ((in[61 + inpos]) >>> (46 - 36))
+ | ((in[62 + inpos]) << 36);
+ out[45 + outpos] = ((in[62 + inpos]) >>> (46 - 18))
+ | ((in[63 + inpos]) << 18);
+ }
+
+ protected static void fastpackwithoutmask47(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 47);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (47 - 30))
+ | ((in[2 + inpos]) << 30);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (47 - 13))
+ | ((in[3 + inpos]) << 13)
+ | ((in[4 + inpos]) << 60);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (47 - 43))
+ | ((in[5 + inpos]) << 43);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (47 - 26))
+ | ((in[6 + inpos]) << 26);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (47 - 9))
+ | ((in[7 + inpos]) << 9)
+ | ((in[8 + inpos]) << 56);
+ out[6 + outpos] = ((in[8 + inpos]) >>> (47 - 39))
+ | ((in[9 + inpos]) << 39);
+ out[7 + outpos] = ((in[9 + inpos]) >>> (47 - 22))
+ | ((in[10 + inpos]) << 22);
+ out[8 + outpos] = ((in[10 + inpos]) >>> (47 - 5))
+ | ((in[11 + inpos]) << 5)
+ | ((in[12 + inpos]) << 52);
+ out[9 + outpos] = ((in[12 + inpos]) >>> (47 - 35))
+ | ((in[13 + inpos]) << 35);
+ out[10 + outpos] = ((in[13 + inpos]) >>> (47 - 18))
+ | ((in[14 + inpos]) << 18);
+ out[11 + outpos] = ((in[14 + inpos]) >>> (47 - 1))
+ | ((in[15 + inpos]) << 1)
+ | ((in[16 + inpos]) << 48);
+ out[12 + outpos] = ((in[16 + inpos]) >>> (47 - 31))
+ | ((in[17 + inpos]) << 31);
+ out[13 + outpos] = ((in[17 + inpos]) >>> (47 - 14))
+ | ((in[18 + inpos]) << 14)
+ | ((in[19 + inpos]) << 61);
+ out[14 + outpos] = ((in[19 + inpos]) >>> (47 - 44))
+ | ((in[20 + inpos]) << 44);
+ out[15 + outpos] = ((in[20 + inpos]) >>> (47 - 27))
+ | ((in[21 + inpos]) << 27);
+ out[16 + outpos] = ((in[21 + inpos]) >>> (47 - 10))
+ | ((in[22 + inpos]) << 10)
+ | ((in[23 + inpos]) << 57);
+ out[17 + outpos] = ((in[23 + inpos]) >>> (47 - 40))
+ | ((in[24 + inpos]) << 40);
+ out[18 + outpos] = ((in[24 + inpos]) >>> (47 - 23))
+ | ((in[25 + inpos]) << 23);
+ out[19 + outpos] = ((in[25 + inpos]) >>> (47 - 6))
+ | ((in[26 + inpos]) << 6)
+ | ((in[27 + inpos]) << 53);
+ out[20 + outpos] = ((in[27 + inpos]) >>> (47 - 36))
+ | ((in[28 + inpos]) << 36);
+ out[21 + outpos] = ((in[28 + inpos]) >>> (47 - 19))
+ | ((in[29 + inpos]) << 19);
+ out[22 + outpos] = ((in[29 + inpos]) >>> (47 - 2))
+ | ((in[30 + inpos]) << 2)
+ | ((in[31 + inpos]) << 49);
+ out[23 + outpos] = ((in[31 + inpos]) >>> (47 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[24 + outpos] = ((in[32 + inpos]) >>> (47 - 15))
+ | ((in[33 + inpos]) << 15)
+ | ((in[34 + inpos]) << 62);
+ out[25 + outpos] = ((in[34 + inpos]) >>> (47 - 45))
+ | ((in[35 + inpos]) << 45);
+ out[26 + outpos] = ((in[35 + inpos]) >>> (47 - 28))
+ | ((in[36 + inpos]) << 28);
+ out[27 + outpos] = ((in[36 + inpos]) >>> (47 - 11))
+ | ((in[37 + inpos]) << 11)
+ | ((in[38 + inpos]) << 58);
+ out[28 + outpos] = ((in[38 + inpos]) >>> (47 - 41))
+ | ((in[39 + inpos]) << 41);
+ out[29 + outpos] = ((in[39 + inpos]) >>> (47 - 24))
+ | ((in[40 + inpos]) << 24);
+ out[30 + outpos] = ((in[40 + inpos]) >>> (47 - 7))
+ | ((in[41 + inpos]) << 7)
+ | ((in[42 + inpos]) << 54);
+ out[31 + outpos] = ((in[42 + inpos]) >>> (47 - 37))
+ | ((in[43 + inpos]) << 37);
+ out[32 + outpos] = ((in[43 + inpos]) >>> (47 - 20))
+ | ((in[44 + inpos]) << 20);
+ out[33 + outpos] = ((in[44 + inpos]) >>> (47 - 3))
+ | ((in[45 + inpos]) << 3)
+ | ((in[46 + inpos]) << 50);
+ out[34 + outpos] = ((in[46 + inpos]) >>> (47 - 33))
+ | ((in[47 + inpos]) << 33);
+ out[35 + outpos] = ((in[47 + inpos]) >>> (47 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 63);
+ out[36 + outpos] = ((in[49 + inpos]) >>> (47 - 46))
+ | ((in[50 + inpos]) << 46);
+ out[37 + outpos] = ((in[50 + inpos]) >>> (47 - 29))
+ | ((in[51 + inpos]) << 29);
+ out[38 + outpos] = ((in[51 + inpos]) >>> (47 - 12))
+ | ((in[52 + inpos]) << 12)
+ | ((in[53 + inpos]) << 59);
+ out[39 + outpos] = ((in[53 + inpos]) >>> (47 - 42))
+ | ((in[54 + inpos]) << 42);
+ out[40 + outpos] = ((in[54 + inpos]) >>> (47 - 25))
+ | ((in[55 + inpos]) << 25);
+ out[41 + outpos] = ((in[55 + inpos]) >>> (47 - 8))
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 55);
+ out[42 + outpos] = ((in[57 + inpos]) >>> (47 - 38))
+ | ((in[58 + inpos]) << 38);
+ out[43 + outpos] = ((in[58 + inpos]) >>> (47 - 21))
+ | ((in[59 + inpos]) << 21);
+ out[44 + outpos] = ((in[59 + inpos]) >>> (47 - 4))
+ | ((in[60 + inpos]) << 4)
+ | ((in[61 + inpos]) << 51);
+ out[45 + outpos] = ((in[61 + inpos]) >>> (47 - 34))
+ | ((in[62 + inpos]) << 34);
+ out[46 + outpos] = ((in[62 + inpos]) >>> (47 - 17))
+ | ((in[63 + inpos]) << 17);
+ }
+
+ protected static void fastpackwithoutmask48(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 48);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (48 - 32))
+ | ((in[2 + inpos]) << 32);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (48 - 16))
+ | ((in[3 + inpos]) << 16);
+ out[3 + outpos] = in[4 + inpos]
+ | ((in[5 + inpos]) << 48);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (48 - 32))
+ | ((in[6 + inpos]) << 32);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (48 - 16))
+ | ((in[7 + inpos]) << 16);
+ out[6 + outpos] = in[8 + inpos]
+ | ((in[9 + inpos]) << 48);
+ out[7 + outpos] = ((in[9 + inpos]) >>> (48 - 32))
+ | ((in[10 + inpos]) << 32);
+ out[8 + outpos] = ((in[10 + inpos]) >>> (48 - 16))
+ | ((in[11 + inpos]) << 16);
+ out[9 + outpos] = in[12 + inpos]
+ | ((in[13 + inpos]) << 48);
+ out[10 + outpos] = ((in[13 + inpos]) >>> (48 - 32))
+ | ((in[14 + inpos]) << 32);
+ out[11 + outpos] = ((in[14 + inpos]) >>> (48 - 16))
+ | ((in[15 + inpos]) << 16);
+ out[12 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 48);
+ out[13 + outpos] = ((in[17 + inpos]) >>> (48 - 32))
+ | ((in[18 + inpos]) << 32);
+ out[14 + outpos] = ((in[18 + inpos]) >>> (48 - 16))
+ | ((in[19 + inpos]) << 16);
+ out[15 + outpos] = in[20 + inpos]
+ | ((in[21 + inpos]) << 48);
+ out[16 + outpos] = ((in[21 + inpos]) >>> (48 - 32))
+ | ((in[22 + inpos]) << 32);
+ out[17 + outpos] = ((in[22 + inpos]) >>> (48 - 16))
+ | ((in[23 + inpos]) << 16);
+ out[18 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 48);
+ out[19 + outpos] = ((in[25 + inpos]) >>> (48 - 32))
+ | ((in[26 + inpos]) << 32);
+ out[20 + outpos] = ((in[26 + inpos]) >>> (48 - 16))
+ | ((in[27 + inpos]) << 16);
+ out[21 + outpos] = in[28 + inpos]
+ | ((in[29 + inpos]) << 48);
+ out[22 + outpos] = ((in[29 + inpos]) >>> (48 - 32))
+ | ((in[30 + inpos]) << 32);
+ out[23 + outpos] = ((in[30 + inpos]) >>> (48 - 16))
+ | ((in[31 + inpos]) << 16);
+ out[24 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 48);
+ out[25 + outpos] = ((in[33 + inpos]) >>> (48 - 32))
+ | ((in[34 + inpos]) << 32);
+ out[26 + outpos] = ((in[34 + inpos]) >>> (48 - 16))
+ | ((in[35 + inpos]) << 16);
+ out[27 + outpos] = in[36 + inpos]
+ | ((in[37 + inpos]) << 48);
+ out[28 + outpos] = ((in[37 + inpos]) >>> (48 - 32))
+ | ((in[38 + inpos]) << 32);
+ out[29 + outpos] = ((in[38 + inpos]) >>> (48 - 16))
+ | ((in[39 + inpos]) << 16);
+ out[30 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 48);
+ out[31 + outpos] = ((in[41 + inpos]) >>> (48 - 32))
+ | ((in[42 + inpos]) << 32);
+ out[32 + outpos] = ((in[42 + inpos]) >>> (48 - 16))
+ | ((in[43 + inpos]) << 16);
+ out[33 + outpos] = in[44 + inpos]
+ | ((in[45 + inpos]) << 48);
+ out[34 + outpos] = ((in[45 + inpos]) >>> (48 - 32))
+ | ((in[46 + inpos]) << 32);
+ out[35 + outpos] = ((in[46 + inpos]) >>> (48 - 16))
+ | ((in[47 + inpos]) << 16);
+ out[36 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 48);
+ out[37 + outpos] = ((in[49 + inpos]) >>> (48 - 32))
+ | ((in[50 + inpos]) << 32);
+ out[38 + outpos] = ((in[50 + inpos]) >>> (48 - 16))
+ | ((in[51 + inpos]) << 16);
+ out[39 + outpos] = in[52 + inpos]
+ | ((in[53 + inpos]) << 48);
+ out[40 + outpos] = ((in[53 + inpos]) >>> (48 - 32))
+ | ((in[54 + inpos]) << 32);
+ out[41 + outpos] = ((in[54 + inpos]) >>> (48 - 16))
+ | ((in[55 + inpos]) << 16);
+ out[42 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 48);
+ out[43 + outpos] = ((in[57 + inpos]) >>> (48 - 32))
+ | ((in[58 + inpos]) << 32);
+ out[44 + outpos] = ((in[58 + inpos]) >>> (48 - 16))
+ | ((in[59 + inpos]) << 16);
+ out[45 + outpos] = in[60 + inpos]
+ | ((in[61 + inpos]) << 48);
+ out[46 + outpos] = ((in[61 + inpos]) >>> (48 - 32))
+ | ((in[62 + inpos]) << 32);
+ out[47 + outpos] = ((in[62 + inpos]) >>> (48 - 16))
+ | ((in[63 + inpos]) << 16);
+ }
+
+ protected static void fastpackwithoutmask49(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 49);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (49 - 34))
+ | ((in[2 + inpos]) << 34);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (49 - 19))
+ | ((in[3 + inpos]) << 19);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (49 - 4))
+ | ((in[4 + inpos]) << 4)
+ | ((in[5 + inpos]) << 53);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (49 - 38))
+ | ((in[6 + inpos]) << 38);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (49 - 23))
+ | ((in[7 + inpos]) << 23);
+ out[6 + outpos] = ((in[7 + inpos]) >>> (49 - 8))
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 57);
+ out[7 + outpos] = ((in[9 + inpos]) >>> (49 - 42))
+ | ((in[10 + inpos]) << 42);
+ out[8 + outpos] = ((in[10 + inpos]) >>> (49 - 27))
+ | ((in[11 + inpos]) << 27);
+ out[9 + outpos] = ((in[11 + inpos]) >>> (49 - 12))
+ | ((in[12 + inpos]) << 12)
+ | ((in[13 + inpos]) << 61);
+ out[10 + outpos] = ((in[13 + inpos]) >>> (49 - 46))
+ | ((in[14 + inpos]) << 46);
+ out[11 + outpos] = ((in[14 + inpos]) >>> (49 - 31))
+ | ((in[15 + inpos]) << 31);
+ out[12 + outpos] = ((in[15 + inpos]) >>> (49 - 16))
+ | ((in[16 + inpos]) << 16);
+ out[13 + outpos] = ((in[16 + inpos]) >>> (49 - 1))
+ | ((in[17 + inpos]) << 1)
+ | ((in[18 + inpos]) << 50);
+ out[14 + outpos] = ((in[18 + inpos]) >>> (49 - 35))
+ | ((in[19 + inpos]) << 35);
+ out[15 + outpos] = ((in[19 + inpos]) >>> (49 - 20))
+ | ((in[20 + inpos]) << 20);
+ out[16 + outpos] = ((in[20 + inpos]) >>> (49 - 5))
+ | ((in[21 + inpos]) << 5)
+ | ((in[22 + inpos]) << 54);
+ out[17 + outpos] = ((in[22 + inpos]) >>> (49 - 39))
+ | ((in[23 + inpos]) << 39);
+ out[18 + outpos] = ((in[23 + inpos]) >>> (49 - 24))
+ | ((in[24 + inpos]) << 24);
+ out[19 + outpos] = ((in[24 + inpos]) >>> (49 - 9))
+ | ((in[25 + inpos]) << 9)
+ | ((in[26 + inpos]) << 58);
+ out[20 + outpos] = ((in[26 + inpos]) >>> (49 - 43))
+ | ((in[27 + inpos]) << 43);
+ out[21 + outpos] = ((in[27 + inpos]) >>> (49 - 28))
+ | ((in[28 + inpos]) << 28);
+ out[22 + outpos] = ((in[28 + inpos]) >>> (49 - 13))
+ | ((in[29 + inpos]) << 13)
+ | ((in[30 + inpos]) << 62);
+ out[23 + outpos] = ((in[30 + inpos]) >>> (49 - 47))
+ | ((in[31 + inpos]) << 47);
+ out[24 + outpos] = ((in[31 + inpos]) >>> (49 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[25 + outpos] = ((in[32 + inpos]) >>> (49 - 17))
+ | ((in[33 + inpos]) << 17);
+ out[26 + outpos] = ((in[33 + inpos]) >>> (49 - 2))
+ | ((in[34 + inpos]) << 2)
+ | ((in[35 + inpos]) << 51);
+ out[27 + outpos] = ((in[35 + inpos]) >>> (49 - 36))
+ | ((in[36 + inpos]) << 36);
+ out[28 + outpos] = ((in[36 + inpos]) >>> (49 - 21))
+ | ((in[37 + inpos]) << 21);
+ out[29 + outpos] = ((in[37 + inpos]) >>> (49 - 6))
+ | ((in[38 + inpos]) << 6)
+ | ((in[39 + inpos]) << 55);
+ out[30 + outpos] = ((in[39 + inpos]) >>> (49 - 40))
+ | ((in[40 + inpos]) << 40);
+ out[31 + outpos] = ((in[40 + inpos]) >>> (49 - 25))
+ | ((in[41 + inpos]) << 25);
+ out[32 + outpos] = ((in[41 + inpos]) >>> (49 - 10))
+ | ((in[42 + inpos]) << 10)
+ | ((in[43 + inpos]) << 59);
+ out[33 + outpos] = ((in[43 + inpos]) >>> (49 - 44))
+ | ((in[44 + inpos]) << 44);
+ out[34 + outpos] = ((in[44 + inpos]) >>> (49 - 29))
+ | ((in[45 + inpos]) << 29);
+ out[35 + outpos] = ((in[45 + inpos]) >>> (49 - 14))
+ | ((in[46 + inpos]) << 14)
+ | ((in[47 + inpos]) << 63);
+ out[36 + outpos] = ((in[47 + inpos]) >>> (49 - 48))
+ | ((in[48 + inpos]) << 48);
+ out[37 + outpos] = ((in[48 + inpos]) >>> (49 - 33))
+ | ((in[49 + inpos]) << 33);
+ out[38 + outpos] = ((in[49 + inpos]) >>> (49 - 18))
+ | ((in[50 + inpos]) << 18);
+ out[39 + outpos] = ((in[50 + inpos]) >>> (49 - 3))
+ | ((in[51 + inpos]) << 3)
+ | ((in[52 + inpos]) << 52);
+ out[40 + outpos] = ((in[52 + inpos]) >>> (49 - 37))
+ | ((in[53 + inpos]) << 37);
+ out[41 + outpos] = ((in[53 + inpos]) >>> (49 - 22))
+ | ((in[54 + inpos]) << 22);
+ out[42 + outpos] = ((in[54 + inpos]) >>> (49 - 7))
+ | ((in[55 + inpos]) << 7)
+ | ((in[56 + inpos]) << 56);
+ out[43 + outpos] = ((in[56 + inpos]) >>> (49 - 41))
+ | ((in[57 + inpos]) << 41);
+ out[44 + outpos] = ((in[57 + inpos]) >>> (49 - 26))
+ | ((in[58 + inpos]) << 26);
+ out[45 + outpos] = ((in[58 + inpos]) >>> (49 - 11))
+ | ((in[59 + inpos]) << 11)
+ | ((in[60 + inpos]) << 60);
+ out[46 + outpos] = ((in[60 + inpos]) >>> (49 - 45))
+ | ((in[61 + inpos]) << 45);
+ out[47 + outpos] = ((in[61 + inpos]) >>> (49 - 30))
+ | ((in[62 + inpos]) << 30);
+ out[48 + outpos] = ((in[62 + inpos]) >>> (49 - 15))
+ | ((in[63 + inpos]) << 15);
+ }
+
+ protected static void fastpackwithoutmask50(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 50);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (50 - 36))
+ | ((in[2 + inpos]) << 36);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (50 - 22))
+ | ((in[3 + inpos]) << 22);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (50 - 8))
+ | ((in[4 + inpos]) << 8)
+ | ((in[5 + inpos]) << 58);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (50 - 44))
+ | ((in[6 + inpos]) << 44);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (50 - 30))
+ | ((in[7 + inpos]) << 30);
+ out[6 + outpos] = ((in[7 + inpos]) >>> (50 - 16))
+ | ((in[8 + inpos]) << 16);
+ out[7 + outpos] = ((in[8 + inpos]) >>> (50 - 2))
+ | ((in[9 + inpos]) << 2)
+ | ((in[10 + inpos]) << 52);
+ out[8 + outpos] = ((in[10 + inpos]) >>> (50 - 38))
+ | ((in[11 + inpos]) << 38);
+ out[9 + outpos] = ((in[11 + inpos]) >>> (50 - 24))
+ | ((in[12 + inpos]) << 24);
+ out[10 + outpos] = ((in[12 + inpos]) >>> (50 - 10))
+ | ((in[13 + inpos]) << 10)
+ | ((in[14 + inpos]) << 60);
+ out[11 + outpos] = ((in[14 + inpos]) >>> (50 - 46))
+ | ((in[15 + inpos]) << 46);
+ out[12 + outpos] = ((in[15 + inpos]) >>> (50 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[13 + outpos] = ((in[16 + inpos]) >>> (50 - 18))
+ | ((in[17 + inpos]) << 18);
+ out[14 + outpos] = ((in[17 + inpos]) >>> (50 - 4))
+ | ((in[18 + inpos]) << 4)
+ | ((in[19 + inpos]) << 54);
+ out[15 + outpos] = ((in[19 + inpos]) >>> (50 - 40))
+ | ((in[20 + inpos]) << 40);
+ out[16 + outpos] = ((in[20 + inpos]) >>> (50 - 26))
+ | ((in[21 + inpos]) << 26);
+ out[17 + outpos] = ((in[21 + inpos]) >>> (50 - 12))
+ | ((in[22 + inpos]) << 12)
+ | ((in[23 + inpos]) << 62);
+ out[18 + outpos] = ((in[23 + inpos]) >>> (50 - 48))
+ | ((in[24 + inpos]) << 48);
+ out[19 + outpos] = ((in[24 + inpos]) >>> (50 - 34))
+ | ((in[25 + inpos]) << 34);
+ out[20 + outpos] = ((in[25 + inpos]) >>> (50 - 20))
+ | ((in[26 + inpos]) << 20);
+ out[21 + outpos] = ((in[26 + inpos]) >>> (50 - 6))
+ | ((in[27 + inpos]) << 6)
+ | ((in[28 + inpos]) << 56);
+ out[22 + outpos] = ((in[28 + inpos]) >>> (50 - 42))
+ | ((in[29 + inpos]) << 42);
+ out[23 + outpos] = ((in[29 + inpos]) >>> (50 - 28))
+ | ((in[30 + inpos]) << 28);
+ out[24 + outpos] = ((in[30 + inpos]) >>> (50 - 14))
+ | ((in[31 + inpos]) << 14);
+ out[25 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 50);
+ out[26 + outpos] = ((in[33 + inpos]) >>> (50 - 36))
+ | ((in[34 + inpos]) << 36);
+ out[27 + outpos] = ((in[34 + inpos]) >>> (50 - 22))
+ | ((in[35 + inpos]) << 22);
+ out[28 + outpos] = ((in[35 + inpos]) >>> (50 - 8))
+ | ((in[36 + inpos]) << 8)
+ | ((in[37 + inpos]) << 58);
+ out[29 + outpos] = ((in[37 + inpos]) >>> (50 - 44))
+ | ((in[38 + inpos]) << 44);
+ out[30 + outpos] = ((in[38 + inpos]) >>> (50 - 30))
+ | ((in[39 + inpos]) << 30);
+ out[31 + outpos] = ((in[39 + inpos]) >>> (50 - 16))
+ | ((in[40 + inpos]) << 16);
+ out[32 + outpos] = ((in[40 + inpos]) >>> (50 - 2))
+ | ((in[41 + inpos]) << 2)
+ | ((in[42 + inpos]) << 52);
+ out[33 + outpos] = ((in[42 + inpos]) >>> (50 - 38))
+ | ((in[43 + inpos]) << 38);
+ out[34 + outpos] = ((in[43 + inpos]) >>> (50 - 24))
+ | ((in[44 + inpos]) << 24);
+ out[35 + outpos] = ((in[44 + inpos]) >>> (50 - 10))
+ | ((in[45 + inpos]) << 10)
+ | ((in[46 + inpos]) << 60);
+ out[36 + outpos] = ((in[46 + inpos]) >>> (50 - 46))
+ | ((in[47 + inpos]) << 46);
+ out[37 + outpos] = ((in[47 + inpos]) >>> (50 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[38 + outpos] = ((in[48 + inpos]) >>> (50 - 18))
+ | ((in[49 + inpos]) << 18);
+ out[39 + outpos] = ((in[49 + inpos]) >>> (50 - 4))
+ | ((in[50 + inpos]) << 4)
+ | ((in[51 + inpos]) << 54);
+ out[40 + outpos] = ((in[51 + inpos]) >>> (50 - 40))
+ | ((in[52 + inpos]) << 40);
+ out[41 + outpos] = ((in[52 + inpos]) >>> (50 - 26))
+ | ((in[53 + inpos]) << 26);
+ out[42 + outpos] = ((in[53 + inpos]) >>> (50 - 12))
+ | ((in[54 + inpos]) << 12)
+ | ((in[55 + inpos]) << 62);
+ out[43 + outpos] = ((in[55 + inpos]) >>> (50 - 48))
+ | ((in[56 + inpos]) << 48);
+ out[44 + outpos] = ((in[56 + inpos]) >>> (50 - 34))
+ | ((in[57 + inpos]) << 34);
+ out[45 + outpos] = ((in[57 + inpos]) >>> (50 - 20))
+ | ((in[58 + inpos]) << 20);
+ out[46 + outpos] = ((in[58 + inpos]) >>> (50 - 6))
+ | ((in[59 + inpos]) << 6)
+ | ((in[60 + inpos]) << 56);
+ out[47 + outpos] = ((in[60 + inpos]) >>> (50 - 42))
+ | ((in[61 + inpos]) << 42);
+ out[48 + outpos] = ((in[61 + inpos]) >>> (50 - 28))
+ | ((in[62 + inpos]) << 28);
+ out[49 + outpos] = ((in[62 + inpos]) >>> (50 - 14))
+ | ((in[63 + inpos]) << 14);
+ }
+
+ protected static void fastpackwithoutmask51(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 51);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (51 - 38))
+ | ((in[2 + inpos]) << 38);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (51 - 25))
+ | ((in[3 + inpos]) << 25);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (51 - 12))
+ | ((in[4 + inpos]) << 12)
+ | ((in[5 + inpos]) << 63);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (51 - 50))
+ | ((in[6 + inpos]) << 50);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (51 - 37))
+ | ((in[7 + inpos]) << 37);
+ out[6 + outpos] = ((in[7 + inpos]) >>> (51 - 24))
+ | ((in[8 + inpos]) << 24);
+ out[7 + outpos] = ((in[8 + inpos]) >>> (51 - 11))
+ | ((in[9 + inpos]) << 11)
+ | ((in[10 + inpos]) << 62);
+ out[8 + outpos] = ((in[10 + inpos]) >>> (51 - 49))
+ | ((in[11 + inpos]) << 49);
+ out[9 + outpos] = ((in[11 + inpos]) >>> (51 - 36))
+ | ((in[12 + inpos]) << 36);
+ out[10 + outpos] = ((in[12 + inpos]) >>> (51 - 23))
+ | ((in[13 + inpos]) << 23);
+ out[11 + outpos] = ((in[13 + inpos]) >>> (51 - 10))
+ | ((in[14 + inpos]) << 10)
+ | ((in[15 + inpos]) << 61);
+ out[12 + outpos] = ((in[15 + inpos]) >>> (51 - 48))
+ | ((in[16 + inpos]) << 48);
+ out[13 + outpos] = ((in[16 + inpos]) >>> (51 - 35))
+ | ((in[17 + inpos]) << 35);
+ out[14 + outpos] = ((in[17 + inpos]) >>> (51 - 22))
+ | ((in[18 + inpos]) << 22);
+ out[15 + outpos] = ((in[18 + inpos]) >>> (51 - 9))
+ | ((in[19 + inpos]) << 9)
+ | ((in[20 + inpos]) << 60);
+ out[16 + outpos] = ((in[20 + inpos]) >>> (51 - 47))
+ | ((in[21 + inpos]) << 47);
+ out[17 + outpos] = ((in[21 + inpos]) >>> (51 - 34))
+ | ((in[22 + inpos]) << 34);
+ out[18 + outpos] = ((in[22 + inpos]) >>> (51 - 21))
+ | ((in[23 + inpos]) << 21);
+ out[19 + outpos] = ((in[23 + inpos]) >>> (51 - 8))
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 59);
+ out[20 + outpos] = ((in[25 + inpos]) >>> (51 - 46))
+ | ((in[26 + inpos]) << 46);
+ out[21 + outpos] = ((in[26 + inpos]) >>> (51 - 33))
+ | ((in[27 + inpos]) << 33);
+ out[22 + outpos] = ((in[27 + inpos]) >>> (51 - 20))
+ | ((in[28 + inpos]) << 20);
+ out[23 + outpos] = ((in[28 + inpos]) >>> (51 - 7))
+ | ((in[29 + inpos]) << 7)
+ | ((in[30 + inpos]) << 58);
+ out[24 + outpos] = ((in[30 + inpos]) >>> (51 - 45))
+ | ((in[31 + inpos]) << 45);
+ out[25 + outpos] = ((in[31 + inpos]) >>> (51 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[26 + outpos] = ((in[32 + inpos]) >>> (51 - 19))
+ | ((in[33 + inpos]) << 19);
+ out[27 + outpos] = ((in[33 + inpos]) >>> (51 - 6))
+ | ((in[34 + inpos]) << 6)
+ | ((in[35 + inpos]) << 57);
+ out[28 + outpos] = ((in[35 + inpos]) >>> (51 - 44))
+ | ((in[36 + inpos]) << 44);
+ out[29 + outpos] = ((in[36 + inpos]) >>> (51 - 31))
+ | ((in[37 + inpos]) << 31);
+ out[30 + outpos] = ((in[37 + inpos]) >>> (51 - 18))
+ | ((in[38 + inpos]) << 18);
+ out[31 + outpos] = ((in[38 + inpos]) >>> (51 - 5))
+ | ((in[39 + inpos]) << 5)
+ | ((in[40 + inpos]) << 56);
+ out[32 + outpos] = ((in[40 + inpos]) >>> (51 - 43))
+ | ((in[41 + inpos]) << 43);
+ out[33 + outpos] = ((in[41 + inpos]) >>> (51 - 30))
+ | ((in[42 + inpos]) << 30);
+ out[34 + outpos] = ((in[42 + inpos]) >>> (51 - 17))
+ | ((in[43 + inpos]) << 17);
+ out[35 + outpos] = ((in[43 + inpos]) >>> (51 - 4))
+ | ((in[44 + inpos]) << 4)
+ | ((in[45 + inpos]) << 55);
+ out[36 + outpos] = ((in[45 + inpos]) >>> (51 - 42))
+ | ((in[46 + inpos]) << 42);
+ out[37 + outpos] = ((in[46 + inpos]) >>> (51 - 29))
+ | ((in[47 + inpos]) << 29);
+ out[38 + outpos] = ((in[47 + inpos]) >>> (51 - 16))
+ | ((in[48 + inpos]) << 16);
+ out[39 + outpos] = ((in[48 + inpos]) >>> (51 - 3))
+ | ((in[49 + inpos]) << 3)
+ | ((in[50 + inpos]) << 54);
+ out[40 + outpos] = ((in[50 + inpos]) >>> (51 - 41))
+ | ((in[51 + inpos]) << 41);
+ out[41 + outpos] = ((in[51 + inpos]) >>> (51 - 28))
+ | ((in[52 + inpos]) << 28);
+ out[42 + outpos] = ((in[52 + inpos]) >>> (51 - 15))
+ | ((in[53 + inpos]) << 15);
+ out[43 + outpos] = ((in[53 + inpos]) >>> (51 - 2))
+ | ((in[54 + inpos]) << 2)
+ | ((in[55 + inpos]) << 53);
+ out[44 + outpos] = ((in[55 + inpos]) >>> (51 - 40))
+ | ((in[56 + inpos]) << 40);
+ out[45 + outpos] = ((in[56 + inpos]) >>> (51 - 27))
+ | ((in[57 + inpos]) << 27);
+ out[46 + outpos] = ((in[57 + inpos]) >>> (51 - 14))
+ | ((in[58 + inpos]) << 14);
+ out[47 + outpos] = ((in[58 + inpos]) >>> (51 - 1))
+ | ((in[59 + inpos]) << 1)
+ | ((in[60 + inpos]) << 52);
+ out[48 + outpos] = ((in[60 + inpos]) >>> (51 - 39))
+ | ((in[61 + inpos]) << 39);
+ out[49 + outpos] = ((in[61 + inpos]) >>> (51 - 26))
+ | ((in[62 + inpos]) << 26);
+ out[50 + outpos] = ((in[62 + inpos]) >>> (51 - 13))
+ | ((in[63 + inpos]) << 13);
+ }
+
+ protected static void fastpackwithoutmask52(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 52);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (52 - 40))
+ | ((in[2 + inpos]) << 40);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (52 - 28))
+ | ((in[3 + inpos]) << 28);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (52 - 16))
+ | ((in[4 + inpos]) << 16);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (52 - 4))
+ | ((in[5 + inpos]) << 4)
+ | ((in[6 + inpos]) << 56);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (52 - 44))
+ | ((in[7 + inpos]) << 44);
+ out[6 + outpos] = ((in[7 + inpos]) >>> (52 - 32))
+ | ((in[8 + inpos]) << 32);
+ out[7 + outpos] = ((in[8 + inpos]) >>> (52 - 20))
+ | ((in[9 + inpos]) << 20);
+ out[8 + outpos] = ((in[9 + inpos]) >>> (52 - 8))
+ | ((in[10 + inpos]) << 8)
+ | ((in[11 + inpos]) << 60);
+ out[9 + outpos] = ((in[11 + inpos]) >>> (52 - 48))
+ | ((in[12 + inpos]) << 48);
+ out[10 + outpos] = ((in[12 + inpos]) >>> (52 - 36))
+ | ((in[13 + inpos]) << 36);
+ out[11 + outpos] = ((in[13 + inpos]) >>> (52 - 24))
+ | ((in[14 + inpos]) << 24);
+ out[12 + outpos] = ((in[14 + inpos]) >>> (52 - 12))
+ | ((in[15 + inpos]) << 12);
+ out[13 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 52);
+ out[14 + outpos] = ((in[17 + inpos]) >>> (52 - 40))
+ | ((in[18 + inpos]) << 40);
+ out[15 + outpos] = ((in[18 + inpos]) >>> (52 - 28))
+ | ((in[19 + inpos]) << 28);
+ out[16 + outpos] = ((in[19 + inpos]) >>> (52 - 16))
+ | ((in[20 + inpos]) << 16);
+ out[17 + outpos] = ((in[20 + inpos]) >>> (52 - 4))
+ | ((in[21 + inpos]) << 4)
+ | ((in[22 + inpos]) << 56);
+ out[18 + outpos] = ((in[22 + inpos]) >>> (52 - 44))
+ | ((in[23 + inpos]) << 44);
+ out[19 + outpos] = ((in[23 + inpos]) >>> (52 - 32))
+ | ((in[24 + inpos]) << 32);
+ out[20 + outpos] = ((in[24 + inpos]) >>> (52 - 20))
+ | ((in[25 + inpos]) << 20);
+ out[21 + outpos] = ((in[25 + inpos]) >>> (52 - 8))
+ | ((in[26 + inpos]) << 8)
+ | ((in[27 + inpos]) << 60);
+ out[22 + outpos] = ((in[27 + inpos]) >>> (52 - 48))
+ | ((in[28 + inpos]) << 48);
+ out[23 + outpos] = ((in[28 + inpos]) >>> (52 - 36))
+ | ((in[29 + inpos]) << 36);
+ out[24 + outpos] = ((in[29 + inpos]) >>> (52 - 24))
+ | ((in[30 + inpos]) << 24);
+ out[25 + outpos] = ((in[30 + inpos]) >>> (52 - 12))
+ | ((in[31 + inpos]) << 12);
+ out[26 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 52);
+ out[27 + outpos] = ((in[33 + inpos]) >>> (52 - 40))
+ | ((in[34 + inpos]) << 40);
+ out[28 + outpos] = ((in[34 + inpos]) >>> (52 - 28))
+ | ((in[35 + inpos]) << 28);
+ out[29 + outpos] = ((in[35 + inpos]) >>> (52 - 16))
+ | ((in[36 + inpos]) << 16);
+ out[30 + outpos] = ((in[36 + inpos]) >>> (52 - 4))
+ | ((in[37 + inpos]) << 4)
+ | ((in[38 + inpos]) << 56);
+ out[31 + outpos] = ((in[38 + inpos]) >>> (52 - 44))
+ | ((in[39 + inpos]) << 44);
+ out[32 + outpos] = ((in[39 + inpos]) >>> (52 - 32))
+ | ((in[40 + inpos]) << 32);
+ out[33 + outpos] = ((in[40 + inpos]) >>> (52 - 20))
+ | ((in[41 + inpos]) << 20);
+ out[34 + outpos] = ((in[41 + inpos]) >>> (52 - 8))
+ | ((in[42 + inpos]) << 8)
+ | ((in[43 + inpos]) << 60);
+ out[35 + outpos] = ((in[43 + inpos]) >>> (52 - 48))
+ | ((in[44 + inpos]) << 48);
+ out[36 + outpos] = ((in[44 + inpos]) >>> (52 - 36))
+ | ((in[45 + inpos]) << 36);
+ out[37 + outpos] = ((in[45 + inpos]) >>> (52 - 24))
+ | ((in[46 + inpos]) << 24);
+ out[38 + outpos] = ((in[46 + inpos]) >>> (52 - 12))
+ | ((in[47 + inpos]) << 12);
+ out[39 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 52);
+ out[40 + outpos] = ((in[49 + inpos]) >>> (52 - 40))
+ | ((in[50 + inpos]) << 40);
+ out[41 + outpos] = ((in[50 + inpos]) >>> (52 - 28))
+ | ((in[51 + inpos]) << 28);
+ out[42 + outpos] = ((in[51 + inpos]) >>> (52 - 16))
+ | ((in[52 + inpos]) << 16);
+ out[43 + outpos] = ((in[52 + inpos]) >>> (52 - 4))
+ | ((in[53 + inpos]) << 4)
+ | ((in[54 + inpos]) << 56);
+ out[44 + outpos] = ((in[54 + inpos]) >>> (52 - 44))
+ | ((in[55 + inpos]) << 44);
+ out[45 + outpos] = ((in[55 + inpos]) >>> (52 - 32))
+ | ((in[56 + inpos]) << 32);
+ out[46 + outpos] = ((in[56 + inpos]) >>> (52 - 20))
+ | ((in[57 + inpos]) << 20);
+ out[47 + outpos] = ((in[57 + inpos]) >>> (52 - 8))
+ | ((in[58 + inpos]) << 8)
+ | ((in[59 + inpos]) << 60);
+ out[48 + outpos] = ((in[59 + inpos]) >>> (52 - 48))
+ | ((in[60 + inpos]) << 48);
+ out[49 + outpos] = ((in[60 + inpos]) >>> (52 - 36))
+ | ((in[61 + inpos]) << 36);
+ out[50 + outpos] = ((in[61 + inpos]) >>> (52 - 24))
+ | ((in[62 + inpos]) << 24);
+ out[51 + outpos] = ((in[62 + inpos]) >>> (52 - 12))
+ | ((in[63 + inpos]) << 12);
+ }
+
+ protected static void fastpackwithoutmask53(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 53);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (53 - 42))
+ | ((in[2 + inpos]) << 42);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (53 - 31))
+ | ((in[3 + inpos]) << 31);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (53 - 20))
+ | ((in[4 + inpos]) << 20);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (53 - 9))
+ | ((in[5 + inpos]) << 9)
+ | ((in[6 + inpos]) << 62);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (53 - 51))
+ | ((in[7 + inpos]) << 51);
+ out[6 + outpos] = ((in[7 + inpos]) >>> (53 - 40))
+ | ((in[8 + inpos]) << 40);
+ out[7 + outpos] = ((in[8 + inpos]) >>> (53 - 29))
+ | ((in[9 + inpos]) << 29);
+ out[8 + outpos] = ((in[9 + inpos]) >>> (53 - 18))
+ | ((in[10 + inpos]) << 18);
+ out[9 + outpos] = ((in[10 + inpos]) >>> (53 - 7))
+ | ((in[11 + inpos]) << 7)
+ | ((in[12 + inpos]) << 60);
+ out[10 + outpos] = ((in[12 + inpos]) >>> (53 - 49))
+ | ((in[13 + inpos]) << 49);
+ out[11 + outpos] = ((in[13 + inpos]) >>> (53 - 38))
+ | ((in[14 + inpos]) << 38);
+ out[12 + outpos] = ((in[14 + inpos]) >>> (53 - 27))
+ | ((in[15 + inpos]) << 27);
+ out[13 + outpos] = ((in[15 + inpos]) >>> (53 - 16))
+ | ((in[16 + inpos]) << 16);
+ out[14 + outpos] = ((in[16 + inpos]) >>> (53 - 5))
+ | ((in[17 + inpos]) << 5)
+ | ((in[18 + inpos]) << 58);
+ out[15 + outpos] = ((in[18 + inpos]) >>> (53 - 47))
+ | ((in[19 + inpos]) << 47);
+ out[16 + outpos] = ((in[19 + inpos]) >>> (53 - 36))
+ | ((in[20 + inpos]) << 36);
+ out[17 + outpos] = ((in[20 + inpos]) >>> (53 - 25))
+ | ((in[21 + inpos]) << 25);
+ out[18 + outpos] = ((in[21 + inpos]) >>> (53 - 14))
+ | ((in[22 + inpos]) << 14);
+ out[19 + outpos] = ((in[22 + inpos]) >>> (53 - 3))
+ | ((in[23 + inpos]) << 3)
+ | ((in[24 + inpos]) << 56);
+ out[20 + outpos] = ((in[24 + inpos]) >>> (53 - 45))
+ | ((in[25 + inpos]) << 45);
+ out[21 + outpos] = ((in[25 + inpos]) >>> (53 - 34))
+ | ((in[26 + inpos]) << 34);
+ out[22 + outpos] = ((in[26 + inpos]) >>> (53 - 23))
+ | ((in[27 + inpos]) << 23);
+ out[23 + outpos] = ((in[27 + inpos]) >>> (53 - 12))
+ | ((in[28 + inpos]) << 12);
+ out[24 + outpos] = ((in[28 + inpos]) >>> (53 - 1))
+ | ((in[29 + inpos]) << 1)
+ | ((in[30 + inpos]) << 54);
+ out[25 + outpos] = ((in[30 + inpos]) >>> (53 - 43))
+ | ((in[31 + inpos]) << 43);
+ out[26 + outpos] = ((in[31 + inpos]) >>> (53 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[27 + outpos] = ((in[32 + inpos]) >>> (53 - 21))
+ | ((in[33 + inpos]) << 21);
+ out[28 + outpos] = ((in[33 + inpos]) >>> (53 - 10))
+ | ((in[34 + inpos]) << 10)
+ | ((in[35 + inpos]) << 63);
+ out[29 + outpos] = ((in[35 + inpos]) >>> (53 - 52))
+ | ((in[36 + inpos]) << 52);
+ out[30 + outpos] = ((in[36 + inpos]) >>> (53 - 41))
+ | ((in[37 + inpos]) << 41);
+ out[31 + outpos] = ((in[37 + inpos]) >>> (53 - 30))
+ | ((in[38 + inpos]) << 30);
+ out[32 + outpos] = ((in[38 + inpos]) >>> (53 - 19))
+ | ((in[39 + inpos]) << 19);
+ out[33 + outpos] = ((in[39 + inpos]) >>> (53 - 8))
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 61);
+ out[34 + outpos] = ((in[41 + inpos]) >>> (53 - 50))
+ | ((in[42 + inpos]) << 50);
+ out[35 + outpos] = ((in[42 + inpos]) >>> (53 - 39))
+ | ((in[43 + inpos]) << 39);
+ out[36 + outpos] = ((in[43 + inpos]) >>> (53 - 28))
+ | ((in[44 + inpos]) << 28);
+ out[37 + outpos] = ((in[44 + inpos]) >>> (53 - 17))
+ | ((in[45 + inpos]) << 17);
+ out[38 + outpos] = ((in[45 + inpos]) >>> (53 - 6))
+ | ((in[46 + inpos]) << 6)
+ | ((in[47 + inpos]) << 59);
+ out[39 + outpos] = ((in[47 + inpos]) >>> (53 - 48))
+ | ((in[48 + inpos]) << 48);
+ out[40 + outpos] = ((in[48 + inpos]) >>> (53 - 37))
+ | ((in[49 + inpos]) << 37);
+ out[41 + outpos] = ((in[49 + inpos]) >>> (53 - 26))
+ | ((in[50 + inpos]) << 26);
+ out[42 + outpos] = ((in[50 + inpos]) >>> (53 - 15))
+ | ((in[51 + inpos]) << 15);
+ out[43 + outpos] = ((in[51 + inpos]) >>> (53 - 4))
+ | ((in[52 + inpos]) << 4)
+ | ((in[53 + inpos]) << 57);
+ out[44 + outpos] = ((in[53 + inpos]) >>> (53 - 46))
+ | ((in[54 + inpos]) << 46);
+ out[45 + outpos] = ((in[54 + inpos]) >>> (53 - 35))
+ | ((in[55 + inpos]) << 35);
+ out[46 + outpos] = ((in[55 + inpos]) >>> (53 - 24))
+ | ((in[56 + inpos]) << 24);
+ out[47 + outpos] = ((in[56 + inpos]) >>> (53 - 13))
+ | ((in[57 + inpos]) << 13);
+ out[48 + outpos] = ((in[57 + inpos]) >>> (53 - 2))
+ | ((in[58 + inpos]) << 2)
+ | ((in[59 + inpos]) << 55);
+ out[49 + outpos] = ((in[59 + inpos]) >>> (53 - 44))
+ | ((in[60 + inpos]) << 44);
+ out[50 + outpos] = ((in[60 + inpos]) >>> (53 - 33))
+ | ((in[61 + inpos]) << 33);
+ out[51 + outpos] = ((in[61 + inpos]) >>> (53 - 22))
+ | ((in[62 + inpos]) << 22);
+ out[52 + outpos] = ((in[62 + inpos]) >>> (53 - 11))
+ | ((in[63 + inpos]) << 11);
+ }
+
+ protected static void fastpackwithoutmask54(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 54);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (54 - 44))
+ | ((in[2 + inpos]) << 44);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (54 - 34))
+ | ((in[3 + inpos]) << 34);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (54 - 24))
+ | ((in[4 + inpos]) << 24);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (54 - 14))
+ | ((in[5 + inpos]) << 14);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (54 - 4))
+ | ((in[6 + inpos]) << 4)
+ | ((in[7 + inpos]) << 58);
+ out[6 + outpos] = ((in[7 + inpos]) >>> (54 - 48))
+ | ((in[8 + inpos]) << 48);
+ out[7 + outpos] = ((in[8 + inpos]) >>> (54 - 38))
+ | ((in[9 + inpos]) << 38);
+ out[8 + outpos] = ((in[9 + inpos]) >>> (54 - 28))
+ | ((in[10 + inpos]) << 28);
+ out[9 + outpos] = ((in[10 + inpos]) >>> (54 - 18))
+ | ((in[11 + inpos]) << 18);
+ out[10 + outpos] = ((in[11 + inpos]) >>> (54 - 8))
+ | ((in[12 + inpos]) << 8)
+ | ((in[13 + inpos]) << 62);
+ out[11 + outpos] = ((in[13 + inpos]) >>> (54 - 52))
+ | ((in[14 + inpos]) << 52);
+ out[12 + outpos] = ((in[14 + inpos]) >>> (54 - 42))
+ | ((in[15 + inpos]) << 42);
+ out[13 + outpos] = ((in[15 + inpos]) >>> (54 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[14 + outpos] = ((in[16 + inpos]) >>> (54 - 22))
+ | ((in[17 + inpos]) << 22);
+ out[15 + outpos] = ((in[17 + inpos]) >>> (54 - 12))
+ | ((in[18 + inpos]) << 12);
+ out[16 + outpos] = ((in[18 + inpos]) >>> (54 - 2))
+ | ((in[19 + inpos]) << 2)
+ | ((in[20 + inpos]) << 56);
+ out[17 + outpos] = ((in[20 + inpos]) >>> (54 - 46))
+ | ((in[21 + inpos]) << 46);
+ out[18 + outpos] = ((in[21 + inpos]) >>> (54 - 36))
+ | ((in[22 + inpos]) << 36);
+ out[19 + outpos] = ((in[22 + inpos]) >>> (54 - 26))
+ | ((in[23 + inpos]) << 26);
+ out[20 + outpos] = ((in[23 + inpos]) >>> (54 - 16))
+ | ((in[24 + inpos]) << 16);
+ out[21 + outpos] = ((in[24 + inpos]) >>> (54 - 6))
+ | ((in[25 + inpos]) << 6)
+ | ((in[26 + inpos]) << 60);
+ out[22 + outpos] = ((in[26 + inpos]) >>> (54 - 50))
+ | ((in[27 + inpos]) << 50);
+ out[23 + outpos] = ((in[27 + inpos]) >>> (54 - 40))
+ | ((in[28 + inpos]) << 40);
+ out[24 + outpos] = ((in[28 + inpos]) >>> (54 - 30))
+ | ((in[29 + inpos]) << 30);
+ out[25 + outpos] = ((in[29 + inpos]) >>> (54 - 20))
+ | ((in[30 + inpos]) << 20);
+ out[26 + outpos] = ((in[30 + inpos]) >>> (54 - 10))
+ | ((in[31 + inpos]) << 10);
+ out[27 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 54);
+ out[28 + outpos] = ((in[33 + inpos]) >>> (54 - 44))
+ | ((in[34 + inpos]) << 44);
+ out[29 + outpos] = ((in[34 + inpos]) >>> (54 - 34))
+ | ((in[35 + inpos]) << 34);
+ out[30 + outpos] = ((in[35 + inpos]) >>> (54 - 24))
+ | ((in[36 + inpos]) << 24);
+ out[31 + outpos] = ((in[36 + inpos]) >>> (54 - 14))
+ | ((in[37 + inpos]) << 14);
+ out[32 + outpos] = ((in[37 + inpos]) >>> (54 - 4))
+ | ((in[38 + inpos]) << 4)
+ | ((in[39 + inpos]) << 58);
+ out[33 + outpos] = ((in[39 + inpos]) >>> (54 - 48))
+ | ((in[40 + inpos]) << 48);
+ out[34 + outpos] = ((in[40 + inpos]) >>> (54 - 38))
+ | ((in[41 + inpos]) << 38);
+ out[35 + outpos] = ((in[41 + inpos]) >>> (54 - 28))
+ | ((in[42 + inpos]) << 28);
+ out[36 + outpos] = ((in[42 + inpos]) >>> (54 - 18))
+ | ((in[43 + inpos]) << 18);
+ out[37 + outpos] = ((in[43 + inpos]) >>> (54 - 8))
+ | ((in[44 + inpos]) << 8)
+ | ((in[45 + inpos]) << 62);
+ out[38 + outpos] = ((in[45 + inpos]) >>> (54 - 52))
+ | ((in[46 + inpos]) << 52);
+ out[39 + outpos] = ((in[46 + inpos]) >>> (54 - 42))
+ | ((in[47 + inpos]) << 42);
+ out[40 + outpos] = ((in[47 + inpos]) >>> (54 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[41 + outpos] = ((in[48 + inpos]) >>> (54 - 22))
+ | ((in[49 + inpos]) << 22);
+ out[42 + outpos] = ((in[49 + inpos]) >>> (54 - 12))
+ | ((in[50 + inpos]) << 12);
+ out[43 + outpos] = ((in[50 + inpos]) >>> (54 - 2))
+ | ((in[51 + inpos]) << 2)
+ | ((in[52 + inpos]) << 56);
+ out[44 + outpos] = ((in[52 + inpos]) >>> (54 - 46))
+ | ((in[53 + inpos]) << 46);
+ out[45 + outpos] = ((in[53 + inpos]) >>> (54 - 36))
+ | ((in[54 + inpos]) << 36);
+ out[46 + outpos] = ((in[54 + inpos]) >>> (54 - 26))
+ | ((in[55 + inpos]) << 26);
+ out[47 + outpos] = ((in[55 + inpos]) >>> (54 - 16))
+ | ((in[56 + inpos]) << 16);
+ out[48 + outpos] = ((in[56 + inpos]) >>> (54 - 6))
+ | ((in[57 + inpos]) << 6)
+ | ((in[58 + inpos]) << 60);
+ out[49 + outpos] = ((in[58 + inpos]) >>> (54 - 50))
+ | ((in[59 + inpos]) << 50);
+ out[50 + outpos] = ((in[59 + inpos]) >>> (54 - 40))
+ | ((in[60 + inpos]) << 40);
+ out[51 + outpos] = ((in[60 + inpos]) >>> (54 - 30))
+ | ((in[61 + inpos]) << 30);
+ out[52 + outpos] = ((in[61 + inpos]) >>> (54 - 20))
+ | ((in[62 + inpos]) << 20);
+ out[53 + outpos] = ((in[62 + inpos]) >>> (54 - 10))
+ | ((in[63 + inpos]) << 10);
+ }
+
+ protected static void fastpackwithoutmask55(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 55);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (55 - 46))
+ | ((in[2 + inpos]) << 46);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (55 - 37))
+ | ((in[3 + inpos]) << 37);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (55 - 28))
+ | ((in[4 + inpos]) << 28);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (55 - 19))
+ | ((in[5 + inpos]) << 19);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (55 - 10))
+ | ((in[6 + inpos]) << 10);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (55 - 1))
+ | ((in[7 + inpos]) << 1)
+ | ((in[8 + inpos]) << 56);
+ out[7 + outpos] = ((in[8 + inpos]) >>> (55 - 47))
+ | ((in[9 + inpos]) << 47);
+ out[8 + outpos] = ((in[9 + inpos]) >>> (55 - 38))
+ | ((in[10 + inpos]) << 38);
+ out[9 + outpos] = ((in[10 + inpos]) >>> (55 - 29))
+ | ((in[11 + inpos]) << 29);
+ out[10 + outpos] = ((in[11 + inpos]) >>> (55 - 20))
+ | ((in[12 + inpos]) << 20);
+ out[11 + outpos] = ((in[12 + inpos]) >>> (55 - 11))
+ | ((in[13 + inpos]) << 11);
+ out[12 + outpos] = ((in[13 + inpos]) >>> (55 - 2))
+ | ((in[14 + inpos]) << 2)
+ | ((in[15 + inpos]) << 57);
+ out[13 + outpos] = ((in[15 + inpos]) >>> (55 - 48))
+ | ((in[16 + inpos]) << 48);
+ out[14 + outpos] = ((in[16 + inpos]) >>> (55 - 39))
+ | ((in[17 + inpos]) << 39);
+ out[15 + outpos] = ((in[17 + inpos]) >>> (55 - 30))
+ | ((in[18 + inpos]) << 30);
+ out[16 + outpos] = ((in[18 + inpos]) >>> (55 - 21))
+ | ((in[19 + inpos]) << 21);
+ out[17 + outpos] = ((in[19 + inpos]) >>> (55 - 12))
+ | ((in[20 + inpos]) << 12);
+ out[18 + outpos] = ((in[20 + inpos]) >>> (55 - 3))
+ | ((in[21 + inpos]) << 3)
+ | ((in[22 + inpos]) << 58);
+ out[19 + outpos] = ((in[22 + inpos]) >>> (55 - 49))
+ | ((in[23 + inpos]) << 49);
+ out[20 + outpos] = ((in[23 + inpos]) >>> (55 - 40))
+ | ((in[24 + inpos]) << 40);
+ out[21 + outpos] = ((in[24 + inpos]) >>> (55 - 31))
+ | ((in[25 + inpos]) << 31);
+ out[22 + outpos] = ((in[25 + inpos]) >>> (55 - 22))
+ | ((in[26 + inpos]) << 22);
+ out[23 + outpos] = ((in[26 + inpos]) >>> (55 - 13))
+ | ((in[27 + inpos]) << 13);
+ out[24 + outpos] = ((in[27 + inpos]) >>> (55 - 4))
+ | ((in[28 + inpos]) << 4)
+ | ((in[29 + inpos]) << 59);
+ out[25 + outpos] = ((in[29 + inpos]) >>> (55 - 50))
+ | ((in[30 + inpos]) << 50);
+ out[26 + outpos] = ((in[30 + inpos]) >>> (55 - 41))
+ | ((in[31 + inpos]) << 41);
+ out[27 + outpos] = ((in[31 + inpos]) >>> (55 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[28 + outpos] = ((in[32 + inpos]) >>> (55 - 23))
+ | ((in[33 + inpos]) << 23);
+ out[29 + outpos] = ((in[33 + inpos]) >>> (55 - 14))
+ | ((in[34 + inpos]) << 14);
+ out[30 + outpos] = ((in[34 + inpos]) >>> (55 - 5))
+ | ((in[35 + inpos]) << 5)
+ | ((in[36 + inpos]) << 60);
+ out[31 + outpos] = ((in[36 + inpos]) >>> (55 - 51))
+ | ((in[37 + inpos]) << 51);
+ out[32 + outpos] = ((in[37 + inpos]) >>> (55 - 42))
+ | ((in[38 + inpos]) << 42);
+ out[33 + outpos] = ((in[38 + inpos]) >>> (55 - 33))
+ | ((in[39 + inpos]) << 33);
+ out[34 + outpos] = ((in[39 + inpos]) >>> (55 - 24))
+ | ((in[40 + inpos]) << 24);
+ out[35 + outpos] = ((in[40 + inpos]) >>> (55 - 15))
+ | ((in[41 + inpos]) << 15);
+ out[36 + outpos] = ((in[41 + inpos]) >>> (55 - 6))
+ | ((in[42 + inpos]) << 6)
+ | ((in[43 + inpos]) << 61);
+ out[37 + outpos] = ((in[43 + inpos]) >>> (55 - 52))
+ | ((in[44 + inpos]) << 52);
+ out[38 + outpos] = ((in[44 + inpos]) >>> (55 - 43))
+ | ((in[45 + inpos]) << 43);
+ out[39 + outpos] = ((in[45 + inpos]) >>> (55 - 34))
+ | ((in[46 + inpos]) << 34);
+ out[40 + outpos] = ((in[46 + inpos]) >>> (55 - 25))
+ | ((in[47 + inpos]) << 25);
+ out[41 + outpos] = ((in[47 + inpos]) >>> (55 - 16))
+ | ((in[48 + inpos]) << 16);
+ out[42 + outpos] = ((in[48 + inpos]) >>> (55 - 7))
+ | ((in[49 + inpos]) << 7)
+ | ((in[50 + inpos]) << 62);
+ out[43 + outpos] = ((in[50 + inpos]) >>> (55 - 53))
+ | ((in[51 + inpos]) << 53);
+ out[44 + outpos] = ((in[51 + inpos]) >>> (55 - 44))
+ | ((in[52 + inpos]) << 44);
+ out[45 + outpos] = ((in[52 + inpos]) >>> (55 - 35))
+ | ((in[53 + inpos]) << 35);
+ out[46 + outpos] = ((in[53 + inpos]) >>> (55 - 26))
+ | ((in[54 + inpos]) << 26);
+ out[47 + outpos] = ((in[54 + inpos]) >>> (55 - 17))
+ | ((in[55 + inpos]) << 17);
+ out[48 + outpos] = ((in[55 + inpos]) >>> (55 - 8))
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 63);
+ out[49 + outpos] = ((in[57 + inpos]) >>> (55 - 54))
+ | ((in[58 + inpos]) << 54);
+ out[50 + outpos] = ((in[58 + inpos]) >>> (55 - 45))
+ | ((in[59 + inpos]) << 45);
+ out[51 + outpos] = ((in[59 + inpos]) >>> (55 - 36))
+ | ((in[60 + inpos]) << 36);
+ out[52 + outpos] = ((in[60 + inpos]) >>> (55 - 27))
+ | ((in[61 + inpos]) << 27);
+ out[53 + outpos] = ((in[61 + inpos]) >>> (55 - 18))
+ | ((in[62 + inpos]) << 18);
+ out[54 + outpos] = ((in[62 + inpos]) >>> (55 - 9))
+ | ((in[63 + inpos]) << 9);
+ }
+
+ protected static void fastpackwithoutmask56(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 56);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (56 - 48))
+ | ((in[2 + inpos]) << 48);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (56 - 40))
+ | ((in[3 + inpos]) << 40);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (56 - 32))
+ | ((in[4 + inpos]) << 32);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (56 - 24))
+ | ((in[5 + inpos]) << 24);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (56 - 16))
+ | ((in[6 + inpos]) << 16);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (56 - 8))
+ | ((in[7 + inpos]) << 8);
+ out[7 + outpos] = in[8 + inpos]
+ | ((in[9 + inpos]) << 56);
+ out[8 + outpos] = ((in[9 + inpos]) >>> (56 - 48))
+ | ((in[10 + inpos]) << 48);
+ out[9 + outpos] = ((in[10 + inpos]) >>> (56 - 40))
+ | ((in[11 + inpos]) << 40);
+ out[10 + outpos] = ((in[11 + inpos]) >>> (56 - 32))
+ | ((in[12 + inpos]) << 32);
+ out[11 + outpos] = ((in[12 + inpos]) >>> (56 - 24))
+ | ((in[13 + inpos]) << 24);
+ out[12 + outpos] = ((in[13 + inpos]) >>> (56 - 16))
+ | ((in[14 + inpos]) << 16);
+ out[13 + outpos] = ((in[14 + inpos]) >>> (56 - 8))
+ | ((in[15 + inpos]) << 8);
+ out[14 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 56);
+ out[15 + outpos] = ((in[17 + inpos]) >>> (56 - 48))
+ | ((in[18 + inpos]) << 48);
+ out[16 + outpos] = ((in[18 + inpos]) >>> (56 - 40))
+ | ((in[19 + inpos]) << 40);
+ out[17 + outpos] = ((in[19 + inpos]) >>> (56 - 32))
+ | ((in[20 + inpos]) << 32);
+ out[18 + outpos] = ((in[20 + inpos]) >>> (56 - 24))
+ | ((in[21 + inpos]) << 24);
+ out[19 + outpos] = ((in[21 + inpos]) >>> (56 - 16))
+ | ((in[22 + inpos]) << 16);
+ out[20 + outpos] = ((in[22 + inpos]) >>> (56 - 8))
+ | ((in[23 + inpos]) << 8);
+ out[21 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 56);
+ out[22 + outpos] = ((in[25 + inpos]) >>> (56 - 48))
+ | ((in[26 + inpos]) << 48);
+ out[23 + outpos] = ((in[26 + inpos]) >>> (56 - 40))
+ | ((in[27 + inpos]) << 40);
+ out[24 + outpos] = ((in[27 + inpos]) >>> (56 - 32))
+ | ((in[28 + inpos]) << 32);
+ out[25 + outpos] = ((in[28 + inpos]) >>> (56 - 24))
+ | ((in[29 + inpos]) << 24);
+ out[26 + outpos] = ((in[29 + inpos]) >>> (56 - 16))
+ | ((in[30 + inpos]) << 16);
+ out[27 + outpos] = ((in[30 + inpos]) >>> (56 - 8))
+ | ((in[31 + inpos]) << 8);
+ out[28 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 56);
+ out[29 + outpos] = ((in[33 + inpos]) >>> (56 - 48))
+ | ((in[34 + inpos]) << 48);
+ out[30 + outpos] = ((in[34 + inpos]) >>> (56 - 40))
+ | ((in[35 + inpos]) << 40);
+ out[31 + outpos] = ((in[35 + inpos]) >>> (56 - 32))
+ | ((in[36 + inpos]) << 32);
+ out[32 + outpos] = ((in[36 + inpos]) >>> (56 - 24))
+ | ((in[37 + inpos]) << 24);
+ out[33 + outpos] = ((in[37 + inpos]) >>> (56 - 16))
+ | ((in[38 + inpos]) << 16);
+ out[34 + outpos] = ((in[38 + inpos]) >>> (56 - 8))
+ | ((in[39 + inpos]) << 8);
+ out[35 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 56);
+ out[36 + outpos] = ((in[41 + inpos]) >>> (56 - 48))
+ | ((in[42 + inpos]) << 48);
+ out[37 + outpos] = ((in[42 + inpos]) >>> (56 - 40))
+ | ((in[43 + inpos]) << 40);
+ out[38 + outpos] = ((in[43 + inpos]) >>> (56 - 32))
+ | ((in[44 + inpos]) << 32);
+ out[39 + outpos] = ((in[44 + inpos]) >>> (56 - 24))
+ | ((in[45 + inpos]) << 24);
+ out[40 + outpos] = ((in[45 + inpos]) >>> (56 - 16))
+ | ((in[46 + inpos]) << 16);
+ out[41 + outpos] = ((in[46 + inpos]) >>> (56 - 8))
+ | ((in[47 + inpos]) << 8);
+ out[42 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 56);
+ out[43 + outpos] = ((in[49 + inpos]) >>> (56 - 48))
+ | ((in[50 + inpos]) << 48);
+ out[44 + outpos] = ((in[50 + inpos]) >>> (56 - 40))
+ | ((in[51 + inpos]) << 40);
+ out[45 + outpos] = ((in[51 + inpos]) >>> (56 - 32))
+ | ((in[52 + inpos]) << 32);
+ out[46 + outpos] = ((in[52 + inpos]) >>> (56 - 24))
+ | ((in[53 + inpos]) << 24);
+ out[47 + outpos] = ((in[53 + inpos]) >>> (56 - 16))
+ | ((in[54 + inpos]) << 16);
+ out[48 + outpos] = ((in[54 + inpos]) >>> (56 - 8))
+ | ((in[55 + inpos]) << 8);
+ out[49 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 56);
+ out[50 + outpos] = ((in[57 + inpos]) >>> (56 - 48))
+ | ((in[58 + inpos]) << 48);
+ out[51 + outpos] = ((in[58 + inpos]) >>> (56 - 40))
+ | ((in[59 + inpos]) << 40);
+ out[52 + outpos] = ((in[59 + inpos]) >>> (56 - 32))
+ | ((in[60 + inpos]) << 32);
+ out[53 + outpos] = ((in[60 + inpos]) >>> (56 - 24))
+ | ((in[61 + inpos]) << 24);
+ out[54 + outpos] = ((in[61 + inpos]) >>> (56 - 16))
+ | ((in[62 + inpos]) << 16);
+ out[55 + outpos] = ((in[62 + inpos]) >>> (56 - 8))
+ | ((in[63 + inpos]) << 8);
+ }
+
+ protected static void fastpackwithoutmask57(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 57);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (57 - 50))
+ | ((in[2 + inpos]) << 50);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (57 - 43))
+ | ((in[3 + inpos]) << 43);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (57 - 36))
+ | ((in[4 + inpos]) << 36);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (57 - 29))
+ | ((in[5 + inpos]) << 29);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (57 - 22))
+ | ((in[6 + inpos]) << 22);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (57 - 15))
+ | ((in[7 + inpos]) << 15);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (57 - 8))
+ | ((in[8 + inpos]) << 8);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (57 - 1))
+ | ((in[9 + inpos]) << 1)
+ | ((in[10 + inpos]) << 58);
+ out[9 + outpos] = ((in[10 + inpos]) >>> (57 - 51))
+ | ((in[11 + inpos]) << 51);
+ out[10 + outpos] = ((in[11 + inpos]) >>> (57 - 44))
+ | ((in[12 + inpos]) << 44);
+ out[11 + outpos] = ((in[12 + inpos]) >>> (57 - 37))
+ | ((in[13 + inpos]) << 37);
+ out[12 + outpos] = ((in[13 + inpos]) >>> (57 - 30))
+ | ((in[14 + inpos]) << 30);
+ out[13 + outpos] = ((in[14 + inpos]) >>> (57 - 23))
+ | ((in[15 + inpos]) << 23);
+ out[14 + outpos] = ((in[15 + inpos]) >>> (57 - 16))
+ | ((in[16 + inpos]) << 16);
+ out[15 + outpos] = ((in[16 + inpos]) >>> (57 - 9))
+ | ((in[17 + inpos]) << 9);
+ out[16 + outpos] = ((in[17 + inpos]) >>> (57 - 2))
+ | ((in[18 + inpos]) << 2)
+ | ((in[19 + inpos]) << 59);
+ out[17 + outpos] = ((in[19 + inpos]) >>> (57 - 52))
+ | ((in[20 + inpos]) << 52);
+ out[18 + outpos] = ((in[20 + inpos]) >>> (57 - 45))
+ | ((in[21 + inpos]) << 45);
+ out[19 + outpos] = ((in[21 + inpos]) >>> (57 - 38))
+ | ((in[22 + inpos]) << 38);
+ out[20 + outpos] = ((in[22 + inpos]) >>> (57 - 31))
+ | ((in[23 + inpos]) << 31);
+ out[21 + outpos] = ((in[23 + inpos]) >>> (57 - 24))
+ | ((in[24 + inpos]) << 24);
+ out[22 + outpos] = ((in[24 + inpos]) >>> (57 - 17))
+ | ((in[25 + inpos]) << 17);
+ out[23 + outpos] = ((in[25 + inpos]) >>> (57 - 10))
+ | ((in[26 + inpos]) << 10);
+ out[24 + outpos] = ((in[26 + inpos]) >>> (57 - 3))
+ | ((in[27 + inpos]) << 3)
+ | ((in[28 + inpos]) << 60);
+ out[25 + outpos] = ((in[28 + inpos]) >>> (57 - 53))
+ | ((in[29 + inpos]) << 53);
+ out[26 + outpos] = ((in[29 + inpos]) >>> (57 - 46))
+ | ((in[30 + inpos]) << 46);
+ out[27 + outpos] = ((in[30 + inpos]) >>> (57 - 39))
+ | ((in[31 + inpos]) << 39);
+ out[28 + outpos] = ((in[31 + inpos]) >>> (57 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[29 + outpos] = ((in[32 + inpos]) >>> (57 - 25))
+ | ((in[33 + inpos]) << 25);
+ out[30 + outpos] = ((in[33 + inpos]) >>> (57 - 18))
+ | ((in[34 + inpos]) << 18);
+ out[31 + outpos] = ((in[34 + inpos]) >>> (57 - 11))
+ | ((in[35 + inpos]) << 11);
+ out[32 + outpos] = ((in[35 + inpos]) >>> (57 - 4))
+ | ((in[36 + inpos]) << 4)
+ | ((in[37 + inpos]) << 61);
+ out[33 + outpos] = ((in[37 + inpos]) >>> (57 - 54))
+ | ((in[38 + inpos]) << 54);
+ out[34 + outpos] = ((in[38 + inpos]) >>> (57 - 47))
+ | ((in[39 + inpos]) << 47);
+ out[35 + outpos] = ((in[39 + inpos]) >>> (57 - 40))
+ | ((in[40 + inpos]) << 40);
+ out[36 + outpos] = ((in[40 + inpos]) >>> (57 - 33))
+ | ((in[41 + inpos]) << 33);
+ out[37 + outpos] = ((in[41 + inpos]) >>> (57 - 26))
+ | ((in[42 + inpos]) << 26);
+ out[38 + outpos] = ((in[42 + inpos]) >>> (57 - 19))
+ | ((in[43 + inpos]) << 19);
+ out[39 + outpos] = ((in[43 + inpos]) >>> (57 - 12))
+ | ((in[44 + inpos]) << 12);
+ out[40 + outpos] = ((in[44 + inpos]) >>> (57 - 5))
+ | ((in[45 + inpos]) << 5)
+ | ((in[46 + inpos]) << 62);
+ out[41 + outpos] = ((in[46 + inpos]) >>> (57 - 55))
+ | ((in[47 + inpos]) << 55);
+ out[42 + outpos] = ((in[47 + inpos]) >>> (57 - 48))
+ | ((in[48 + inpos]) << 48);
+ out[43 + outpos] = ((in[48 + inpos]) >>> (57 - 41))
+ | ((in[49 + inpos]) << 41);
+ out[44 + outpos] = ((in[49 + inpos]) >>> (57 - 34))
+ | ((in[50 + inpos]) << 34);
+ out[45 + outpos] = ((in[50 + inpos]) >>> (57 - 27))
+ | ((in[51 + inpos]) << 27);
+ out[46 + outpos] = ((in[51 + inpos]) >>> (57 - 20))
+ | ((in[52 + inpos]) << 20);
+ out[47 + outpos] = ((in[52 + inpos]) >>> (57 - 13))
+ | ((in[53 + inpos]) << 13);
+ out[48 + outpos] = ((in[53 + inpos]) >>> (57 - 6))
+ | ((in[54 + inpos]) << 6)
+ | ((in[55 + inpos]) << 63);
+ out[49 + outpos] = ((in[55 + inpos]) >>> (57 - 56))
+ | ((in[56 + inpos]) << 56);
+ out[50 + outpos] = ((in[56 + inpos]) >>> (57 - 49))
+ | ((in[57 + inpos]) << 49);
+ out[51 + outpos] = ((in[57 + inpos]) >>> (57 - 42))
+ | ((in[58 + inpos]) << 42);
+ out[52 + outpos] = ((in[58 + inpos]) >>> (57 - 35))
+ | ((in[59 + inpos]) << 35);
+ out[53 + outpos] = ((in[59 + inpos]) >>> (57 - 28))
+ | ((in[60 + inpos]) << 28);
+ out[54 + outpos] = ((in[60 + inpos]) >>> (57 - 21))
+ | ((in[61 + inpos]) << 21);
+ out[55 + outpos] = ((in[61 + inpos]) >>> (57 - 14))
+ | ((in[62 + inpos]) << 14);
+ out[56 + outpos] = ((in[62 + inpos]) >>> (57 - 7))
+ | ((in[63 + inpos]) << 7);
+ }
+
+ protected static void fastpackwithoutmask58(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 58);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (58 - 52))
+ | ((in[2 + inpos]) << 52);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (58 - 46))
+ | ((in[3 + inpos]) << 46);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (58 - 40))
+ | ((in[4 + inpos]) << 40);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (58 - 34))
+ | ((in[5 + inpos]) << 34);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (58 - 28))
+ | ((in[6 + inpos]) << 28);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (58 - 22))
+ | ((in[7 + inpos]) << 22);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (58 - 16))
+ | ((in[8 + inpos]) << 16);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (58 - 10))
+ | ((in[9 + inpos]) << 10);
+ out[9 + outpos] = ((in[9 + inpos]) >>> (58 - 4))
+ | ((in[10 + inpos]) << 4)
+ | ((in[11 + inpos]) << 62);
+ out[10 + outpos] = ((in[11 + inpos]) >>> (58 - 56))
+ | ((in[12 + inpos]) << 56);
+ out[11 + outpos] = ((in[12 + inpos]) >>> (58 - 50))
+ | ((in[13 + inpos]) << 50);
+ out[12 + outpos] = ((in[13 + inpos]) >>> (58 - 44))
+ | ((in[14 + inpos]) << 44);
+ out[13 + outpos] = ((in[14 + inpos]) >>> (58 - 38))
+ | ((in[15 + inpos]) << 38);
+ out[14 + outpos] = ((in[15 + inpos]) >>> (58 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[15 + outpos] = ((in[16 + inpos]) >>> (58 - 26))
+ | ((in[17 + inpos]) << 26);
+ out[16 + outpos] = ((in[17 + inpos]) >>> (58 - 20))
+ | ((in[18 + inpos]) << 20);
+ out[17 + outpos] = ((in[18 + inpos]) >>> (58 - 14))
+ | ((in[19 + inpos]) << 14);
+ out[18 + outpos] = ((in[19 + inpos]) >>> (58 - 8))
+ | ((in[20 + inpos]) << 8);
+ out[19 + outpos] = ((in[20 + inpos]) >>> (58 - 2))
+ | ((in[21 + inpos]) << 2)
+ | ((in[22 + inpos]) << 60);
+ out[20 + outpos] = ((in[22 + inpos]) >>> (58 - 54))
+ | ((in[23 + inpos]) << 54);
+ out[21 + outpos] = ((in[23 + inpos]) >>> (58 - 48))
+ | ((in[24 + inpos]) << 48);
+ out[22 + outpos] = ((in[24 + inpos]) >>> (58 - 42))
+ | ((in[25 + inpos]) << 42);
+ out[23 + outpos] = ((in[25 + inpos]) >>> (58 - 36))
+ | ((in[26 + inpos]) << 36);
+ out[24 + outpos] = ((in[26 + inpos]) >>> (58 - 30))
+ | ((in[27 + inpos]) << 30);
+ out[25 + outpos] = ((in[27 + inpos]) >>> (58 - 24))
+ | ((in[28 + inpos]) << 24);
+ out[26 + outpos] = ((in[28 + inpos]) >>> (58 - 18))
+ | ((in[29 + inpos]) << 18);
+ out[27 + outpos] = ((in[29 + inpos]) >>> (58 - 12))
+ | ((in[30 + inpos]) << 12);
+ out[28 + outpos] = ((in[30 + inpos]) >>> (58 - 6))
+ | ((in[31 + inpos]) << 6);
+ out[29 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 58);
+ out[30 + outpos] = ((in[33 + inpos]) >>> (58 - 52))
+ | ((in[34 + inpos]) << 52);
+ out[31 + outpos] = ((in[34 + inpos]) >>> (58 - 46))
+ | ((in[35 + inpos]) << 46);
+ out[32 + outpos] = ((in[35 + inpos]) >>> (58 - 40))
+ | ((in[36 + inpos]) << 40);
+ out[33 + outpos] = ((in[36 + inpos]) >>> (58 - 34))
+ | ((in[37 + inpos]) << 34);
+ out[34 + outpos] = ((in[37 + inpos]) >>> (58 - 28))
+ | ((in[38 + inpos]) << 28);
+ out[35 + outpos] = ((in[38 + inpos]) >>> (58 - 22))
+ | ((in[39 + inpos]) << 22);
+ out[36 + outpos] = ((in[39 + inpos]) >>> (58 - 16))
+ | ((in[40 + inpos]) << 16);
+ out[37 + outpos] = ((in[40 + inpos]) >>> (58 - 10))
+ | ((in[41 + inpos]) << 10);
+ out[38 + outpos] = ((in[41 + inpos]) >>> (58 - 4))
+ | ((in[42 + inpos]) << 4)
+ | ((in[43 + inpos]) << 62);
+ out[39 + outpos] = ((in[43 + inpos]) >>> (58 - 56))
+ | ((in[44 + inpos]) << 56);
+ out[40 + outpos] = ((in[44 + inpos]) >>> (58 - 50))
+ | ((in[45 + inpos]) << 50);
+ out[41 + outpos] = ((in[45 + inpos]) >>> (58 - 44))
+ | ((in[46 + inpos]) << 44);
+ out[42 + outpos] = ((in[46 + inpos]) >>> (58 - 38))
+ | ((in[47 + inpos]) << 38);
+ out[43 + outpos] = ((in[47 + inpos]) >>> (58 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[44 + outpos] = ((in[48 + inpos]) >>> (58 - 26))
+ | ((in[49 + inpos]) << 26);
+ out[45 + outpos] = ((in[49 + inpos]) >>> (58 - 20))
+ | ((in[50 + inpos]) << 20);
+ out[46 + outpos] = ((in[50 + inpos]) >>> (58 - 14))
+ | ((in[51 + inpos]) << 14);
+ out[47 + outpos] = ((in[51 + inpos]) >>> (58 - 8))
+ | ((in[52 + inpos]) << 8);
+ out[48 + outpos] = ((in[52 + inpos]) >>> (58 - 2))
+ | ((in[53 + inpos]) << 2)
+ | ((in[54 + inpos]) << 60);
+ out[49 + outpos] = ((in[54 + inpos]) >>> (58 - 54))
+ | ((in[55 + inpos]) << 54);
+ out[50 + outpos] = ((in[55 + inpos]) >>> (58 - 48))
+ | ((in[56 + inpos]) << 48);
+ out[51 + outpos] = ((in[56 + inpos]) >>> (58 - 42))
+ | ((in[57 + inpos]) << 42);
+ out[52 + outpos] = ((in[57 + inpos]) >>> (58 - 36))
+ | ((in[58 + inpos]) << 36);
+ out[53 + outpos] = ((in[58 + inpos]) >>> (58 - 30))
+ | ((in[59 + inpos]) << 30);
+ out[54 + outpos] = ((in[59 + inpos]) >>> (58 - 24))
+ | ((in[60 + inpos]) << 24);
+ out[55 + outpos] = ((in[60 + inpos]) >>> (58 - 18))
+ | ((in[61 + inpos]) << 18);
+ out[56 + outpos] = ((in[61 + inpos]) >>> (58 - 12))
+ | ((in[62 + inpos]) << 12);
+ out[57 + outpos] = ((in[62 + inpos]) >>> (58 - 6))
+ | ((in[63 + inpos]) << 6);
+ }
+
+ protected static void fastpackwithoutmask59(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 59);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (59 - 54))
+ | ((in[2 + inpos]) << 54);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (59 - 49))
+ | ((in[3 + inpos]) << 49);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (59 - 44))
+ | ((in[4 + inpos]) << 44);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (59 - 39))
+ | ((in[5 + inpos]) << 39);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (59 - 34))
+ | ((in[6 + inpos]) << 34);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (59 - 29))
+ | ((in[7 + inpos]) << 29);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (59 - 24))
+ | ((in[8 + inpos]) << 24);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (59 - 19))
+ | ((in[9 + inpos]) << 19);
+ out[9 + outpos] = ((in[9 + inpos]) >>> (59 - 14))
+ | ((in[10 + inpos]) << 14);
+ out[10 + outpos] = ((in[10 + inpos]) >>> (59 - 9))
+ | ((in[11 + inpos]) << 9);
+ out[11 + outpos] = ((in[11 + inpos]) >>> (59 - 4))
+ | ((in[12 + inpos]) << 4)
+ | ((in[13 + inpos]) << 63);
+ out[12 + outpos] = ((in[13 + inpos]) >>> (59 - 58))
+ | ((in[14 + inpos]) << 58);
+ out[13 + outpos] = ((in[14 + inpos]) >>> (59 - 53))
+ | ((in[15 + inpos]) << 53);
+ out[14 + outpos] = ((in[15 + inpos]) >>> (59 - 48))
+ | ((in[16 + inpos]) << 48);
+ out[15 + outpos] = ((in[16 + inpos]) >>> (59 - 43))
+ | ((in[17 + inpos]) << 43);
+ out[16 + outpos] = ((in[17 + inpos]) >>> (59 - 38))
+ | ((in[18 + inpos]) << 38);
+ out[17 + outpos] = ((in[18 + inpos]) >>> (59 - 33))
+ | ((in[19 + inpos]) << 33);
+ out[18 + outpos] = ((in[19 + inpos]) >>> (59 - 28))
+ | ((in[20 + inpos]) << 28);
+ out[19 + outpos] = ((in[20 + inpos]) >>> (59 - 23))
+ | ((in[21 + inpos]) << 23);
+ out[20 + outpos] = ((in[21 + inpos]) >>> (59 - 18))
+ | ((in[22 + inpos]) << 18);
+ out[21 + outpos] = ((in[22 + inpos]) >>> (59 - 13))
+ | ((in[23 + inpos]) << 13);
+ out[22 + outpos] = ((in[23 + inpos]) >>> (59 - 8))
+ | ((in[24 + inpos]) << 8);
+ out[23 + outpos] = ((in[24 + inpos]) >>> (59 - 3))
+ | ((in[25 + inpos]) << 3)
+ | ((in[26 + inpos]) << 62);
+ out[24 + outpos] = ((in[26 + inpos]) >>> (59 - 57))
+ | ((in[27 + inpos]) << 57);
+ out[25 + outpos] = ((in[27 + inpos]) >>> (59 - 52))
+ | ((in[28 + inpos]) << 52);
+ out[26 + outpos] = ((in[28 + inpos]) >>> (59 - 47))
+ | ((in[29 + inpos]) << 47);
+ out[27 + outpos] = ((in[29 + inpos]) >>> (59 - 42))
+ | ((in[30 + inpos]) << 42);
+ out[28 + outpos] = ((in[30 + inpos]) >>> (59 - 37))
+ | ((in[31 + inpos]) << 37);
+ out[29 + outpos] = ((in[31 + inpos]) >>> (59 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[30 + outpos] = ((in[32 + inpos]) >>> (59 - 27))
+ | ((in[33 + inpos]) << 27);
+ out[31 + outpos] = ((in[33 + inpos]) >>> (59 - 22))
+ | ((in[34 + inpos]) << 22);
+ out[32 + outpos] = ((in[34 + inpos]) >>> (59 - 17))
+ | ((in[35 + inpos]) << 17);
+ out[33 + outpos] = ((in[35 + inpos]) >>> (59 - 12))
+ | ((in[36 + inpos]) << 12);
+ out[34 + outpos] = ((in[36 + inpos]) >>> (59 - 7))
+ | ((in[37 + inpos]) << 7);
+ out[35 + outpos] = ((in[37 + inpos]) >>> (59 - 2))
+ | ((in[38 + inpos]) << 2)
+ | ((in[39 + inpos]) << 61);
+ out[36 + outpos] = ((in[39 + inpos]) >>> (59 - 56))
+ | ((in[40 + inpos]) << 56);
+ out[37 + outpos] = ((in[40 + inpos]) >>> (59 - 51))
+ | ((in[41 + inpos]) << 51);
+ out[38 + outpos] = ((in[41 + inpos]) >>> (59 - 46))
+ | ((in[42 + inpos]) << 46);
+ out[39 + outpos] = ((in[42 + inpos]) >>> (59 - 41))
+ | ((in[43 + inpos]) << 41);
+ out[40 + outpos] = ((in[43 + inpos]) >>> (59 - 36))
+ | ((in[44 + inpos]) << 36);
+ out[41 + outpos] = ((in[44 + inpos]) >>> (59 - 31))
+ | ((in[45 + inpos]) << 31);
+ out[42 + outpos] = ((in[45 + inpos]) >>> (59 - 26))
+ | ((in[46 + inpos]) << 26);
+ out[43 + outpos] = ((in[46 + inpos]) >>> (59 - 21))
+ | ((in[47 + inpos]) << 21);
+ out[44 + outpos] = ((in[47 + inpos]) >>> (59 - 16))
+ | ((in[48 + inpos]) << 16);
+ out[45 + outpos] = ((in[48 + inpos]) >>> (59 - 11))
+ | ((in[49 + inpos]) << 11);
+ out[46 + outpos] = ((in[49 + inpos]) >>> (59 - 6))
+ | ((in[50 + inpos]) << 6);
+ out[47 + outpos] = ((in[50 + inpos]) >>> (59 - 1))
+ | ((in[51 + inpos]) << 1)
+ | ((in[52 + inpos]) << 60);
+ out[48 + outpos] = ((in[52 + inpos]) >>> (59 - 55))
+ | ((in[53 + inpos]) << 55);
+ out[49 + outpos] = ((in[53 + inpos]) >>> (59 - 50))
+ | ((in[54 + inpos]) << 50);
+ out[50 + outpos] = ((in[54 + inpos]) >>> (59 - 45))
+ | ((in[55 + inpos]) << 45);
+ out[51 + outpos] = ((in[55 + inpos]) >>> (59 - 40))
+ | ((in[56 + inpos]) << 40);
+ out[52 + outpos] = ((in[56 + inpos]) >>> (59 - 35))
+ | ((in[57 + inpos]) << 35);
+ out[53 + outpos] = ((in[57 + inpos]) >>> (59 - 30))
+ | ((in[58 + inpos]) << 30);
+ out[54 + outpos] = ((in[58 + inpos]) >>> (59 - 25))
+ | ((in[59 + inpos]) << 25);
+ out[55 + outpos] = ((in[59 + inpos]) >>> (59 - 20))
+ | ((in[60 + inpos]) << 20);
+ out[56 + outpos] = ((in[60 + inpos]) >>> (59 - 15))
+ | ((in[61 + inpos]) << 15);
+ out[57 + outpos] = ((in[61 + inpos]) >>> (59 - 10))
+ | ((in[62 + inpos]) << 10);
+ out[58 + outpos] = ((in[62 + inpos]) >>> (59 - 5))
+ | ((in[63 + inpos]) << 5);
+ }
+
+ protected static void fastpackwithoutmask60(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 60);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (60 - 56))
+ | ((in[2 + inpos]) << 56);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (60 - 52))
+ | ((in[3 + inpos]) << 52);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (60 - 48))
+ | ((in[4 + inpos]) << 48);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (60 - 44))
+ | ((in[5 + inpos]) << 44);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (60 - 40))
+ | ((in[6 + inpos]) << 40);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (60 - 36))
+ | ((in[7 + inpos]) << 36);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (60 - 32))
+ | ((in[8 + inpos]) << 32);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (60 - 28))
+ | ((in[9 + inpos]) << 28);
+ out[9 + outpos] = ((in[9 + inpos]) >>> (60 - 24))
+ | ((in[10 + inpos]) << 24);
+ out[10 + outpos] = ((in[10 + inpos]) >>> (60 - 20))
+ | ((in[11 + inpos]) << 20);
+ out[11 + outpos] = ((in[11 + inpos]) >>> (60 - 16))
+ | ((in[12 + inpos]) << 16);
+ out[12 + outpos] = ((in[12 + inpos]) >>> (60 - 12))
+ | ((in[13 + inpos]) << 12);
+ out[13 + outpos] = ((in[13 + inpos]) >>> (60 - 8))
+ | ((in[14 + inpos]) << 8);
+ out[14 + outpos] = ((in[14 + inpos]) >>> (60 - 4))
+ | ((in[15 + inpos]) << 4);
+ out[15 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 60);
+ out[16 + outpos] = ((in[17 + inpos]) >>> (60 - 56))
+ | ((in[18 + inpos]) << 56);
+ out[17 + outpos] = ((in[18 + inpos]) >>> (60 - 52))
+ | ((in[19 + inpos]) << 52);
+ out[18 + outpos] = ((in[19 + inpos]) >>> (60 - 48))
+ | ((in[20 + inpos]) << 48);
+ out[19 + outpos] = ((in[20 + inpos]) >>> (60 - 44))
+ | ((in[21 + inpos]) << 44);
+ out[20 + outpos] = ((in[21 + inpos]) >>> (60 - 40))
+ | ((in[22 + inpos]) << 40);
+ out[21 + outpos] = ((in[22 + inpos]) >>> (60 - 36))
+ | ((in[23 + inpos]) << 36);
+ out[22 + outpos] = ((in[23 + inpos]) >>> (60 - 32))
+ | ((in[24 + inpos]) << 32);
+ out[23 + outpos] = ((in[24 + inpos]) >>> (60 - 28))
+ | ((in[25 + inpos]) << 28);
+ out[24 + outpos] = ((in[25 + inpos]) >>> (60 - 24))
+ | ((in[26 + inpos]) << 24);
+ out[25 + outpos] = ((in[26 + inpos]) >>> (60 - 20))
+ | ((in[27 + inpos]) << 20);
+ out[26 + outpos] = ((in[27 + inpos]) >>> (60 - 16))
+ | ((in[28 + inpos]) << 16);
+ out[27 + outpos] = ((in[28 + inpos]) >>> (60 - 12))
+ | ((in[29 + inpos]) << 12);
+ out[28 + outpos] = ((in[29 + inpos]) >>> (60 - 8))
+ | ((in[30 + inpos]) << 8);
+ out[29 + outpos] = ((in[30 + inpos]) >>> (60 - 4))
+ | ((in[31 + inpos]) << 4);
+ out[30 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 60);
+ out[31 + outpos] = ((in[33 + inpos]) >>> (60 - 56))
+ | ((in[34 + inpos]) << 56);
+ out[32 + outpos] = ((in[34 + inpos]) >>> (60 - 52))
+ | ((in[35 + inpos]) << 52);
+ out[33 + outpos] = ((in[35 + inpos]) >>> (60 - 48))
+ | ((in[36 + inpos]) << 48);
+ out[34 + outpos] = ((in[36 + inpos]) >>> (60 - 44))
+ | ((in[37 + inpos]) << 44);
+ out[35 + outpos] = ((in[37 + inpos]) >>> (60 - 40))
+ | ((in[38 + inpos]) << 40);
+ out[36 + outpos] = ((in[38 + inpos]) >>> (60 - 36))
+ | ((in[39 + inpos]) << 36);
+ out[37 + outpos] = ((in[39 + inpos]) >>> (60 - 32))
+ | ((in[40 + inpos]) << 32);
+ out[38 + outpos] = ((in[40 + inpos]) >>> (60 - 28))
+ | ((in[41 + inpos]) << 28);
+ out[39 + outpos] = ((in[41 + inpos]) >>> (60 - 24))
+ | ((in[42 + inpos]) << 24);
+ out[40 + outpos] = ((in[42 + inpos]) >>> (60 - 20))
+ | ((in[43 + inpos]) << 20);
+ out[41 + outpos] = ((in[43 + inpos]) >>> (60 - 16))
+ | ((in[44 + inpos]) << 16);
+ out[42 + outpos] = ((in[44 + inpos]) >>> (60 - 12))
+ | ((in[45 + inpos]) << 12);
+ out[43 + outpos] = ((in[45 + inpos]) >>> (60 - 8))
+ | ((in[46 + inpos]) << 8);
+ out[44 + outpos] = ((in[46 + inpos]) >>> (60 - 4))
+ | ((in[47 + inpos]) << 4);
+ out[45 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 60);
+ out[46 + outpos] = ((in[49 + inpos]) >>> (60 - 56))
+ | ((in[50 + inpos]) << 56);
+ out[47 + outpos] = ((in[50 + inpos]) >>> (60 - 52))
+ | ((in[51 + inpos]) << 52);
+ out[48 + outpos] = ((in[51 + inpos]) >>> (60 - 48))
+ | ((in[52 + inpos]) << 48);
+ out[49 + outpos] = ((in[52 + inpos]) >>> (60 - 44))
+ | ((in[53 + inpos]) << 44);
+ out[50 + outpos] = ((in[53 + inpos]) >>> (60 - 40))
+ | ((in[54 + inpos]) << 40);
+ out[51 + outpos] = ((in[54 + inpos]) >>> (60 - 36))
+ | ((in[55 + inpos]) << 36);
+ out[52 + outpos] = ((in[55 + inpos]) >>> (60 - 32))
+ | ((in[56 + inpos]) << 32);
+ out[53 + outpos] = ((in[56 + inpos]) >>> (60 - 28))
+ | ((in[57 + inpos]) << 28);
+ out[54 + outpos] = ((in[57 + inpos]) >>> (60 - 24))
+ | ((in[58 + inpos]) << 24);
+ out[55 + outpos] = ((in[58 + inpos]) >>> (60 - 20))
+ | ((in[59 + inpos]) << 20);
+ out[56 + outpos] = ((in[59 + inpos]) >>> (60 - 16))
+ | ((in[60 + inpos]) << 16);
+ out[57 + outpos] = ((in[60 + inpos]) >>> (60 - 12))
+ | ((in[61 + inpos]) << 12);
+ out[58 + outpos] = ((in[61 + inpos]) >>> (60 - 8))
+ | ((in[62 + inpos]) << 8);
+ out[59 + outpos] = ((in[62 + inpos]) >>> (60 - 4))
+ | ((in[63 + inpos]) << 4);
+ }
+
+ protected static void fastpackwithoutmask61(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 61);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (61 - 58))
+ | ((in[2 + inpos]) << 58);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (61 - 55))
+ | ((in[3 + inpos]) << 55);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (61 - 52))
+ | ((in[4 + inpos]) << 52);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (61 - 49))
+ | ((in[5 + inpos]) << 49);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (61 - 46))
+ | ((in[6 + inpos]) << 46);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (61 - 43))
+ | ((in[7 + inpos]) << 43);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (61 - 40))
+ | ((in[8 + inpos]) << 40);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (61 - 37))
+ | ((in[9 + inpos]) << 37);
+ out[9 + outpos] = ((in[9 + inpos]) >>> (61 - 34))
+ | ((in[10 + inpos]) << 34);
+ out[10 + outpos] = ((in[10 + inpos]) >>> (61 - 31))
+ | ((in[11 + inpos]) << 31);
+ out[11 + outpos] = ((in[11 + inpos]) >>> (61 - 28))
+ | ((in[12 + inpos]) << 28);
+ out[12 + outpos] = ((in[12 + inpos]) >>> (61 - 25))
+ | ((in[13 + inpos]) << 25);
+ out[13 + outpos] = ((in[13 + inpos]) >>> (61 - 22))
+ | ((in[14 + inpos]) << 22);
+ out[14 + outpos] = ((in[14 + inpos]) >>> (61 - 19))
+ | ((in[15 + inpos]) << 19);
+ out[15 + outpos] = ((in[15 + inpos]) >>> (61 - 16))
+ | ((in[16 + inpos]) << 16);
+ out[16 + outpos] = ((in[16 + inpos]) >>> (61 - 13))
+ | ((in[17 + inpos]) << 13);
+ out[17 + outpos] = ((in[17 + inpos]) >>> (61 - 10))
+ | ((in[18 + inpos]) << 10);
+ out[18 + outpos] = ((in[18 + inpos]) >>> (61 - 7))
+ | ((in[19 + inpos]) << 7);
+ out[19 + outpos] = ((in[19 + inpos]) >>> (61 - 4))
+ | ((in[20 + inpos]) << 4);
+ out[20 + outpos] = ((in[20 + inpos]) >>> (61 - 1))
+ | ((in[21 + inpos]) << 1)
+ | ((in[22 + inpos]) << 62);
+ out[21 + outpos] = ((in[22 + inpos]) >>> (61 - 59))
+ | ((in[23 + inpos]) << 59);
+ out[22 + outpos] = ((in[23 + inpos]) >>> (61 - 56))
+ | ((in[24 + inpos]) << 56);
+ out[23 + outpos] = ((in[24 + inpos]) >>> (61 - 53))
+ | ((in[25 + inpos]) << 53);
+ out[24 + outpos] = ((in[25 + inpos]) >>> (61 - 50))
+ | ((in[26 + inpos]) << 50);
+ out[25 + outpos] = ((in[26 + inpos]) >>> (61 - 47))
+ | ((in[27 + inpos]) << 47);
+ out[26 + outpos] = ((in[27 + inpos]) >>> (61 - 44))
+ | ((in[28 + inpos]) << 44);
+ out[27 + outpos] = ((in[28 + inpos]) >>> (61 - 41))
+ | ((in[29 + inpos]) << 41);
+ out[28 + outpos] = ((in[29 + inpos]) >>> (61 - 38))
+ | ((in[30 + inpos]) << 38);
+ out[29 + outpos] = ((in[30 + inpos]) >>> (61 - 35))
+ | ((in[31 + inpos]) << 35);
+ out[30 + outpos] = ((in[31 + inpos]) >>> (61 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[31 + outpos] = ((in[32 + inpos]) >>> (61 - 29))
+ | ((in[33 + inpos]) << 29);
+ out[32 + outpos] = ((in[33 + inpos]) >>> (61 - 26))
+ | ((in[34 + inpos]) << 26);
+ out[33 + outpos] = ((in[34 + inpos]) >>> (61 - 23))
+ | ((in[35 + inpos]) << 23);
+ out[34 + outpos] = ((in[35 + inpos]) >>> (61 - 20))
+ | ((in[36 + inpos]) << 20);
+ out[35 + outpos] = ((in[36 + inpos]) >>> (61 - 17))
+ | ((in[37 + inpos]) << 17);
+ out[36 + outpos] = ((in[37 + inpos]) >>> (61 - 14))
+ | ((in[38 + inpos]) << 14);
+ out[37 + outpos] = ((in[38 + inpos]) >>> (61 - 11))
+ | ((in[39 + inpos]) << 11);
+ out[38 + outpos] = ((in[39 + inpos]) >>> (61 - 8))
+ | ((in[40 + inpos]) << 8);
+ out[39 + outpos] = ((in[40 + inpos]) >>> (61 - 5))
+ | ((in[41 + inpos]) << 5);
+ out[40 + outpos] = ((in[41 + inpos]) >>> (61 - 2))
+ | ((in[42 + inpos]) << 2)
+ | ((in[43 + inpos]) << 63);
+ out[41 + outpos] = ((in[43 + inpos]) >>> (61 - 60))
+ | ((in[44 + inpos]) << 60);
+ out[42 + outpos] = ((in[44 + inpos]) >>> (61 - 57))
+ | ((in[45 + inpos]) << 57);
+ out[43 + outpos] = ((in[45 + inpos]) >>> (61 - 54))
+ | ((in[46 + inpos]) << 54);
+ out[44 + outpos] = ((in[46 + inpos]) >>> (61 - 51))
+ | ((in[47 + inpos]) << 51);
+ out[45 + outpos] = ((in[47 + inpos]) >>> (61 - 48))
+ | ((in[48 + inpos]) << 48);
+ out[46 + outpos] = ((in[48 + inpos]) >>> (61 - 45))
+ | ((in[49 + inpos]) << 45);
+ out[47 + outpos] = ((in[49 + inpos]) >>> (61 - 42))
+ | ((in[50 + inpos]) << 42);
+ out[48 + outpos] = ((in[50 + inpos]) >>> (61 - 39))
+ | ((in[51 + inpos]) << 39);
+ out[49 + outpos] = ((in[51 + inpos]) >>> (61 - 36))
+ | ((in[52 + inpos]) << 36);
+ out[50 + outpos] = ((in[52 + inpos]) >>> (61 - 33))
+ | ((in[53 + inpos]) << 33);
+ out[51 + outpos] = ((in[53 + inpos]) >>> (61 - 30))
+ | ((in[54 + inpos]) << 30);
+ out[52 + outpos] = ((in[54 + inpos]) >>> (61 - 27))
+ | ((in[55 + inpos]) << 27);
+ out[53 + outpos] = ((in[55 + inpos]) >>> (61 - 24))
+ | ((in[56 + inpos]) << 24);
+ out[54 + outpos] = ((in[56 + inpos]) >>> (61 - 21))
+ | ((in[57 + inpos]) << 21);
+ out[55 + outpos] = ((in[57 + inpos]) >>> (61 - 18))
+ | ((in[58 + inpos]) << 18);
+ out[56 + outpos] = ((in[58 + inpos]) >>> (61 - 15))
+ | ((in[59 + inpos]) << 15);
+ out[57 + outpos] = ((in[59 + inpos]) >>> (61 - 12))
+ | ((in[60 + inpos]) << 12);
+ out[58 + outpos] = ((in[60 + inpos]) >>> (61 - 9))
+ | ((in[61 + inpos]) << 9);
+ out[59 + outpos] = ((in[61 + inpos]) >>> (61 - 6))
+ | ((in[62 + inpos]) << 6);
+ out[60 + outpos] = ((in[62 + inpos]) >>> (61 - 3))
+ | ((in[63 + inpos]) << 3);
+ }
+
+ protected static void fastpackwithoutmask62(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 62);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (62 - 60))
+ | ((in[2 + inpos]) << 60);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (62 - 58))
+ | ((in[3 + inpos]) << 58);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (62 - 56))
+ | ((in[4 + inpos]) << 56);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (62 - 54))
+ | ((in[5 + inpos]) << 54);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (62 - 52))
+ | ((in[6 + inpos]) << 52);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (62 - 50))
+ | ((in[7 + inpos]) << 50);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (62 - 48))
+ | ((in[8 + inpos]) << 48);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (62 - 46))
+ | ((in[9 + inpos]) << 46);
+ out[9 + outpos] = ((in[9 + inpos]) >>> (62 - 44))
+ | ((in[10 + inpos]) << 44);
+ out[10 + outpos] = ((in[10 + inpos]) >>> (62 - 42))
+ | ((in[11 + inpos]) << 42);
+ out[11 + outpos] = ((in[11 + inpos]) >>> (62 - 40))
+ | ((in[12 + inpos]) << 40);
+ out[12 + outpos] = ((in[12 + inpos]) >>> (62 - 38))
+ | ((in[13 + inpos]) << 38);
+ out[13 + outpos] = ((in[13 + inpos]) >>> (62 - 36))
+ | ((in[14 + inpos]) << 36);
+ out[14 + outpos] = ((in[14 + inpos]) >>> (62 - 34))
+ | ((in[15 + inpos]) << 34);
+ out[15 + outpos] = ((in[15 + inpos]) >>> (62 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[16 + outpos] = ((in[16 + inpos]) >>> (62 - 30))
+ | ((in[17 + inpos]) << 30);
+ out[17 + outpos] = ((in[17 + inpos]) >>> (62 - 28))
+ | ((in[18 + inpos]) << 28);
+ out[18 + outpos] = ((in[18 + inpos]) >>> (62 - 26))
+ | ((in[19 + inpos]) << 26);
+ out[19 + outpos] = ((in[19 + inpos]) >>> (62 - 24))
+ | ((in[20 + inpos]) << 24);
+ out[20 + outpos] = ((in[20 + inpos]) >>> (62 - 22))
+ | ((in[21 + inpos]) << 22);
+ out[21 + outpos] = ((in[21 + inpos]) >>> (62 - 20))
+ | ((in[22 + inpos]) << 20);
+ out[22 + outpos] = ((in[22 + inpos]) >>> (62 - 18))
+ | ((in[23 + inpos]) << 18);
+ out[23 + outpos] = ((in[23 + inpos]) >>> (62 - 16))
+ | ((in[24 + inpos]) << 16);
+ out[24 + outpos] = ((in[24 + inpos]) >>> (62 - 14))
+ | ((in[25 + inpos]) << 14);
+ out[25 + outpos] = ((in[25 + inpos]) >>> (62 - 12))
+ | ((in[26 + inpos]) << 12);
+ out[26 + outpos] = ((in[26 + inpos]) >>> (62 - 10))
+ | ((in[27 + inpos]) << 10);
+ out[27 + outpos] = ((in[27 + inpos]) >>> (62 - 8))
+ | ((in[28 + inpos]) << 8);
+ out[28 + outpos] = ((in[28 + inpos]) >>> (62 - 6))
+ | ((in[29 + inpos]) << 6);
+ out[29 + outpos] = ((in[29 + inpos]) >>> (62 - 4))
+ | ((in[30 + inpos]) << 4);
+ out[30 + outpos] = ((in[30 + inpos]) >>> (62 - 2))
+ | ((in[31 + inpos]) << 2);
+ out[31 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 62);
+ out[32 + outpos] = ((in[33 + inpos]) >>> (62 - 60))
+ | ((in[34 + inpos]) << 60);
+ out[33 + outpos] = ((in[34 + inpos]) >>> (62 - 58))
+ | ((in[35 + inpos]) << 58);
+ out[34 + outpos] = ((in[35 + inpos]) >>> (62 - 56))
+ | ((in[36 + inpos]) << 56);
+ out[35 + outpos] = ((in[36 + inpos]) >>> (62 - 54))
+ | ((in[37 + inpos]) << 54);
+ out[36 + outpos] = ((in[37 + inpos]) >>> (62 - 52))
+ | ((in[38 + inpos]) << 52);
+ out[37 + outpos] = ((in[38 + inpos]) >>> (62 - 50))
+ | ((in[39 + inpos]) << 50);
+ out[38 + outpos] = ((in[39 + inpos]) >>> (62 - 48))
+ | ((in[40 + inpos]) << 48);
+ out[39 + outpos] = ((in[40 + inpos]) >>> (62 - 46))
+ | ((in[41 + inpos]) << 46);
+ out[40 + outpos] = ((in[41 + inpos]) >>> (62 - 44))
+ | ((in[42 + inpos]) << 44);
+ out[41 + outpos] = ((in[42 + inpos]) >>> (62 - 42))
+ | ((in[43 + inpos]) << 42);
+ out[42 + outpos] = ((in[43 + inpos]) >>> (62 - 40))
+ | ((in[44 + inpos]) << 40);
+ out[43 + outpos] = ((in[44 + inpos]) >>> (62 - 38))
+ | ((in[45 + inpos]) << 38);
+ out[44 + outpos] = ((in[45 + inpos]) >>> (62 - 36))
+ | ((in[46 + inpos]) << 36);
+ out[45 + outpos] = ((in[46 + inpos]) >>> (62 - 34))
+ | ((in[47 + inpos]) << 34);
+ out[46 + outpos] = ((in[47 + inpos]) >>> (62 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[47 + outpos] = ((in[48 + inpos]) >>> (62 - 30))
+ | ((in[49 + inpos]) << 30);
+ out[48 + outpos] = ((in[49 + inpos]) >>> (62 - 28))
+ | ((in[50 + inpos]) << 28);
+ out[49 + outpos] = ((in[50 + inpos]) >>> (62 - 26))
+ | ((in[51 + inpos]) << 26);
+ out[50 + outpos] = ((in[51 + inpos]) >>> (62 - 24))
+ | ((in[52 + inpos]) << 24);
+ out[51 + outpos] = ((in[52 + inpos]) >>> (62 - 22))
+ | ((in[53 + inpos]) << 22);
+ out[52 + outpos] = ((in[53 + inpos]) >>> (62 - 20))
+ | ((in[54 + inpos]) << 20);
+ out[53 + outpos] = ((in[54 + inpos]) >>> (62 - 18))
+ | ((in[55 + inpos]) << 18);
+ out[54 + outpos] = ((in[55 + inpos]) >>> (62 - 16))
+ | ((in[56 + inpos]) << 16);
+ out[55 + outpos] = ((in[56 + inpos]) >>> (62 - 14))
+ | ((in[57 + inpos]) << 14);
+ out[56 + outpos] = ((in[57 + inpos]) >>> (62 - 12))
+ | ((in[58 + inpos]) << 12);
+ out[57 + outpos] = ((in[58 + inpos]) >>> (62 - 10))
+ | ((in[59 + inpos]) << 10);
+ out[58 + outpos] = ((in[59 + inpos]) >>> (62 - 8))
+ | ((in[60 + inpos]) << 8);
+ out[59 + outpos] = ((in[60 + inpos]) >>> (62 - 6))
+ | ((in[61 + inpos]) << 6);
+ out[60 + outpos] = ((in[61 + inpos]) >>> (62 - 4))
+ | ((in[62 + inpos]) << 4);
+ out[61 + outpos] = ((in[62 + inpos]) >>> (62 - 2))
+ | ((in[63 + inpos]) << 2);
+ }
+
+ protected static void fastpackwithoutmask63(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 63);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (63 - 62))
+ | ((in[2 + inpos]) << 62);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (63 - 61))
+ | ((in[3 + inpos]) << 61);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (63 - 60))
+ | ((in[4 + inpos]) << 60);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (63 - 59))
+ | ((in[5 + inpos]) << 59);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (63 - 58))
+ | ((in[6 + inpos]) << 58);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (63 - 57))
+ | ((in[7 + inpos]) << 57);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (63 - 56))
+ | ((in[8 + inpos]) << 56);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (63 - 55))
+ | ((in[9 + inpos]) << 55);
+ out[9 + outpos] = ((in[9 + inpos]) >>> (63 - 54))
+ | ((in[10 + inpos]) << 54);
+ out[10 + outpos] = ((in[10 + inpos]) >>> (63 - 53))
+ | ((in[11 + inpos]) << 53);
+ out[11 + outpos] = ((in[11 + inpos]) >>> (63 - 52))
+ | ((in[12 + inpos]) << 52);
+ out[12 + outpos] = ((in[12 + inpos]) >>> (63 - 51))
+ | ((in[13 + inpos]) << 51);
+ out[13 + outpos] = ((in[13 + inpos]) >>> (63 - 50))
+ | ((in[14 + inpos]) << 50);
+ out[14 + outpos] = ((in[14 + inpos]) >>> (63 - 49))
+ | ((in[15 + inpos]) << 49);
+ out[15 + outpos] = ((in[15 + inpos]) >>> (63 - 48))
+ | ((in[16 + inpos]) << 48);
+ out[16 + outpos] = ((in[16 + inpos]) >>> (63 - 47))
+ | ((in[17 + inpos]) << 47);
+ out[17 + outpos] = ((in[17 + inpos]) >>> (63 - 46))
+ | ((in[18 + inpos]) << 46);
+ out[18 + outpos] = ((in[18 + inpos]) >>> (63 - 45))
+ | ((in[19 + inpos]) << 45);
+ out[19 + outpos] = ((in[19 + inpos]) >>> (63 - 44))
+ | ((in[20 + inpos]) << 44);
+ out[20 + outpos] = ((in[20 + inpos]) >>> (63 - 43))
+ | ((in[21 + inpos]) << 43);
+ out[21 + outpos] = ((in[21 + inpos]) >>> (63 - 42))
+ | ((in[22 + inpos]) << 42);
+ out[22 + outpos] = ((in[22 + inpos]) >>> (63 - 41))
+ | ((in[23 + inpos]) << 41);
+ out[23 + outpos] = ((in[23 + inpos]) >>> (63 - 40))
+ | ((in[24 + inpos]) << 40);
+ out[24 + outpos] = ((in[24 + inpos]) >>> (63 - 39))
+ | ((in[25 + inpos]) << 39);
+ out[25 + outpos] = ((in[25 + inpos]) >>> (63 - 38))
+ | ((in[26 + inpos]) << 38);
+ out[26 + outpos] = ((in[26 + inpos]) >>> (63 - 37))
+ | ((in[27 + inpos]) << 37);
+ out[27 + outpos] = ((in[27 + inpos]) >>> (63 - 36))
+ | ((in[28 + inpos]) << 36);
+ out[28 + outpos] = ((in[28 + inpos]) >>> (63 - 35))
+ | ((in[29 + inpos]) << 35);
+ out[29 + outpos] = ((in[29 + inpos]) >>> (63 - 34))
+ | ((in[30 + inpos]) << 34);
+ out[30 + outpos] = ((in[30 + inpos]) >>> (63 - 33))
+ | ((in[31 + inpos]) << 33);
+ out[31 + outpos] = ((in[31 + inpos]) >>> (63 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[32 + outpos] = ((in[32 + inpos]) >>> (63 - 31))
+ | ((in[33 + inpos]) << 31);
+ out[33 + outpos] = ((in[33 + inpos]) >>> (63 - 30))
+ | ((in[34 + inpos]) << 30);
+ out[34 + outpos] = ((in[34 + inpos]) >>> (63 - 29))
+ | ((in[35 + inpos]) << 29);
+ out[35 + outpos] = ((in[35 + inpos]) >>> (63 - 28))
+ | ((in[36 + inpos]) << 28);
+ out[36 + outpos] = ((in[36 + inpos]) >>> (63 - 27))
+ | ((in[37 + inpos]) << 27);
+ out[37 + outpos] = ((in[37 + inpos]) >>> (63 - 26))
+ | ((in[38 + inpos]) << 26);
+ out[38 + outpos] = ((in[38 + inpos]) >>> (63 - 25))
+ | ((in[39 + inpos]) << 25);
+ out[39 + outpos] = ((in[39 + inpos]) >>> (63 - 24))
+ | ((in[40 + inpos]) << 24);
+ out[40 + outpos] = ((in[40 + inpos]) >>> (63 - 23))
+ | ((in[41 + inpos]) << 23);
+ out[41 + outpos] = ((in[41 + inpos]) >>> (63 - 22))
+ | ((in[42 + inpos]) << 22);
+ out[42 + outpos] = ((in[42 + inpos]) >>> (63 - 21))
+ | ((in[43 + inpos]) << 21);
+ out[43 + outpos] = ((in[43 + inpos]) >>> (63 - 20))
+ | ((in[44 + inpos]) << 20);
+ out[44 + outpos] = ((in[44 + inpos]) >>> (63 - 19))
+ | ((in[45 + inpos]) << 19);
+ out[45 + outpos] = ((in[45 + inpos]) >>> (63 - 18))
+ | ((in[46 + inpos]) << 18);
+ out[46 + outpos] = ((in[46 + inpos]) >>> (63 - 17))
+ | ((in[47 + inpos]) << 17);
+ out[47 + outpos] = ((in[47 + inpos]) >>> (63 - 16))
+ | ((in[48 + inpos]) << 16);
+ out[48 + outpos] = ((in[48 + inpos]) >>> (63 - 15))
+ | ((in[49 + inpos]) << 15);
+ out[49 + outpos] = ((in[49 + inpos]) >>> (63 - 14))
+ | ((in[50 + inpos]) << 14);
+ out[50 + outpos] = ((in[50 + inpos]) >>> (63 - 13))
+ | ((in[51 + inpos]) << 13);
+ out[51 + outpos] = ((in[51 + inpos]) >>> (63 - 12))
+ | ((in[52 + inpos]) << 12);
+ out[52 + outpos] = ((in[52 + inpos]) >>> (63 - 11))
+ | ((in[53 + inpos]) << 11);
+ out[53 + outpos] = ((in[53 + inpos]) >>> (63 - 10))
+ | ((in[54 + inpos]) << 10);
+ out[54 + outpos] = ((in[54 + inpos]) >>> (63 - 9))
+ | ((in[55 + inpos]) << 9);
+ out[55 + outpos] = ((in[55 + inpos]) >>> (63 - 8))
+ | ((in[56 + inpos]) << 8);
+ out[56 + outpos] = ((in[56 + inpos]) >>> (63 - 7))
+ | ((in[57 + inpos]) << 7);
+ out[57 + outpos] = ((in[57 + inpos]) >>> (63 - 6))
+ | ((in[58 + inpos]) << 6);
+ out[58 + outpos] = ((in[58 + inpos]) >>> (63 - 5))
+ | ((in[59 + inpos]) << 5);
+ out[59 + outpos] = ((in[59 + inpos]) >>> (63 - 4))
+ | ((in[60 + inpos]) << 4);
+ out[60 + outpos] = ((in[60 + inpos]) >>> (63 - 3))
+ | ((in[61 + inpos]) << 3);
+ out[61 + outpos] = ((in[61 + inpos]) >>> (63 - 2))
+ | ((in[62 + inpos]) << 2);
+ out[62 + outpos] = ((in[62 + inpos]) >>> (63 - 1))
+ | ((in[63 + inpos]) << 1);
+ }
+
protected static void fastpackwithoutmask64(final long[] in, int inpos,
final long[] out, int outpos) {
System.arraycopy(in, inpos, out, outpos, 64);
@@ -102,14 +6336,204 @@ protected static void slowpackwithoutmask(final long[] in, int inpos,
*/
public static void fastunpack(final long[] in, final int inpos,
final long[] out, final int outpos, final int bit) {
- if (bit == 0) {
- fastunpack0(in, inpos, out, outpos);
- } else if (bit == 64) {
- fastunpack64(in, inpos, out, outpos);
- } else if (bit > 0 && bit < 64) {
- slowunpack(in, inpos, out, outpos, bit);
- } else {
- throw new IllegalArgumentException("Unsupported bit width: " + bit);
+ switch (bit) {
+ case 0:
+ fastunpack0(in, inpos, out, outpos);
+ break;
+ case 1:
+ fastunpack1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastunpack2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastunpack3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastunpack4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastunpack5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastunpack6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastunpack7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastunpack8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastunpack9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastunpack10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastunpack11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastunpack12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastunpack13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastunpack14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastunpack15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastunpack16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastunpack17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastunpack18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastunpack19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastunpack20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastunpack21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastunpack22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastunpack23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastunpack24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastunpack25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastunpack26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastunpack27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastunpack28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastunpack29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastunpack30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastunpack31(in, inpos, out, outpos);
+ break;
+ case 32:
+ fastunpack32(in, inpos, out, outpos);
+ break;
+ case 33:
+ fastunpack33(in, inpos, out, outpos);
+ break;
+ case 34:
+ fastunpack34(in, inpos, out, outpos);
+ break;
+ case 35:
+ fastunpack35(in, inpos, out, outpos);
+ break;
+ case 36:
+ fastunpack36(in, inpos, out, outpos);
+ break;
+ case 37:
+ fastunpack37(in, inpos, out, outpos);
+ break;
+ case 38:
+ fastunpack38(in, inpos, out, outpos);
+ break;
+ case 39:
+ fastunpack39(in, inpos, out, outpos);
+ break;
+ case 40:
+ fastunpack40(in, inpos, out, outpos);
+ break;
+ case 41:
+ fastunpack41(in, inpos, out, outpos);
+ break;
+ case 42:
+ fastunpack42(in, inpos, out, outpos);
+ break;
+ case 43:
+ fastunpack43(in, inpos, out, outpos);
+ break;
+ case 44:
+ fastunpack44(in, inpos, out, outpos);
+ break;
+ case 45:
+ fastunpack45(in, inpos, out, outpos);
+ break;
+ case 46:
+ fastunpack46(in, inpos, out, outpos);
+ break;
+ case 47:
+ fastunpack47(in, inpos, out, outpos);
+ break;
+ case 48:
+ fastunpack48(in, inpos, out, outpos);
+ break;
+ case 49:
+ fastunpack49(in, inpos, out, outpos);
+ break;
+ case 50:
+ fastunpack50(in, inpos, out, outpos);
+ break;
+ case 51:
+ fastunpack51(in, inpos, out, outpos);
+ break;
+ case 52:
+ fastunpack52(in, inpos, out, outpos);
+ break;
+ case 53:
+ fastunpack53(in, inpos, out, outpos);
+ break;
+ case 54:
+ fastunpack54(in, inpos, out, outpos);
+ break;
+ case 55:
+ fastunpack55(in, inpos, out, outpos);
+ break;
+ case 56:
+ fastunpack56(in, inpos, out, outpos);
+ break;
+ case 57:
+ fastunpack57(in, inpos, out, outpos);
+ break;
+ case 58:
+ fastunpack58(in, inpos, out, outpos);
+ break;
+ case 59:
+ fastunpack59(in, inpos, out, outpos);
+ break;
+ case 60:
+ fastunpack60(in, inpos, out, outpos);
+ break;
+ case 61:
+ fastunpack61(in, inpos, out, outpos);
+ break;
+ case 62:
+ fastunpack62(in, inpos, out, outpos);
+ break;
+ case 63:
+ fastunpack63(in, inpos, out, outpos);
+ break;
+ case 64:
+ fastunpack64(in, inpos, out, outpos);
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported bit width: " + bit);
}
}
@@ -118,6 +6542,6114 @@ protected static void fastunpack0(final long[] in, int inpos,
final long[] out, int outpos) {
Arrays.fill(out, outpos, outpos + 64, 0);
}
+
+ protected static void fastunpack1(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1L);
+ out[1 + outpos] = ((in[inpos] >>> 1) & 1L);
+ out[2 + outpos] = ((in[inpos] >>> 2) & 1L);
+ out[3 + outpos] = ((in[inpos] >>> 3) & 1L);
+ out[4 + outpos] = ((in[inpos] >>> 4) & 1L);
+ out[5 + outpos] = ((in[inpos] >>> 5) & 1L);
+ out[6 + outpos] = ((in[inpos] >>> 6) & 1L);
+ out[7 + outpos] = ((in[inpos] >>> 7) & 1L);
+ out[8 + outpos] = ((in[inpos] >>> 8) & 1L);
+ out[9 + outpos] = ((in[inpos] >>> 9) & 1L);
+ out[10 + outpos] = ((in[inpos] >>> 10) & 1L);
+ out[11 + outpos] = ((in[inpos] >>> 11) & 1L);
+ out[12 + outpos] = ((in[inpos] >>> 12) & 1L);
+ out[13 + outpos] = ((in[inpos] >>> 13) & 1L);
+ out[14 + outpos] = ((in[inpos] >>> 14) & 1L);
+ out[15 + outpos] = ((in[inpos] >>> 15) & 1L);
+ out[16 + outpos] = ((in[inpos] >>> 16) & 1L);
+ out[17 + outpos] = ((in[inpos] >>> 17) & 1L);
+ out[18 + outpos] = ((in[inpos] >>> 18) & 1L);
+ out[19 + outpos] = ((in[inpos] >>> 19) & 1L);
+ out[20 + outpos] = ((in[inpos] >>> 20) & 1L);
+ out[21 + outpos] = ((in[inpos] >>> 21) & 1L);
+ out[22 + outpos] = ((in[inpos] >>> 22) & 1L);
+ out[23 + outpos] = ((in[inpos] >>> 23) & 1L);
+ out[24 + outpos] = ((in[inpos] >>> 24) & 1L);
+ out[25 + outpos] = ((in[inpos] >>> 25) & 1L);
+ out[26 + outpos] = ((in[inpos] >>> 26) & 1L);
+ out[27 + outpos] = ((in[inpos] >>> 27) & 1L);
+ out[28 + outpos] = ((in[inpos] >>> 28) & 1L);
+ out[29 + outpos] = ((in[inpos] >>> 29) & 1L);
+ out[30 + outpos] = ((in[inpos] >>> 30) & 1L);
+ out[31 + outpos] = ((in[inpos] >>> 31) & 1L);
+ out[32 + outpos] = ((in[inpos] >>> 32) & 1L);
+ out[33 + outpos] = ((in[inpos] >>> 33) & 1L);
+ out[34 + outpos] = ((in[inpos] >>> 34) & 1L);
+ out[35 + outpos] = ((in[inpos] >>> 35) & 1L);
+ out[36 + outpos] = ((in[inpos] >>> 36) & 1L);
+ out[37 + outpos] = ((in[inpos] >>> 37) & 1L);
+ out[38 + outpos] = ((in[inpos] >>> 38) & 1L);
+ out[39 + outpos] = ((in[inpos] >>> 39) & 1L);
+ out[40 + outpos] = ((in[inpos] >>> 40) & 1L);
+ out[41 + outpos] = ((in[inpos] >>> 41) & 1L);
+ out[42 + outpos] = ((in[inpos] >>> 42) & 1L);
+ out[43 + outpos] = ((in[inpos] >>> 43) & 1L);
+ out[44 + outpos] = ((in[inpos] >>> 44) & 1L);
+ out[45 + outpos] = ((in[inpos] >>> 45) & 1L);
+ out[46 + outpos] = ((in[inpos] >>> 46) & 1L);
+ out[47 + outpos] = ((in[inpos] >>> 47) & 1L);
+ out[48 + outpos] = ((in[inpos] >>> 48) & 1L);
+ out[49 + outpos] = ((in[inpos] >>> 49) & 1L);
+ out[50 + outpos] = ((in[inpos] >>> 50) & 1L);
+ out[51 + outpos] = ((in[inpos] >>> 51) & 1L);
+ out[52 + outpos] = ((in[inpos] >>> 52) & 1L);
+ out[53 + outpos] = ((in[inpos] >>> 53) & 1L);
+ out[54 + outpos] = ((in[inpos] >>> 54) & 1L);
+ out[55 + outpos] = ((in[inpos] >>> 55) & 1L);
+ out[56 + outpos] = ((in[inpos] >>> 56) & 1L);
+ out[57 + outpos] = ((in[inpos] >>> 57) & 1L);
+ out[58 + outpos] = ((in[inpos] >>> 58) & 1L);
+ out[59 + outpos] = ((in[inpos] >>> 59) & 1L);
+ out[60 + outpos] = ((in[inpos] >>> 60) & 1L);
+ out[61 + outpos] = ((in[inpos] >>> 61) & 1L);
+ out[62 + outpos] = ((in[inpos] >>> 62) & 1L);
+ out[63 + outpos] = (in[inpos] >>> 63);
+ }
+
+ protected static void fastunpack2(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 3L);
+ out[1 + outpos] = ((in[inpos] >>> 2) & 3L);
+ out[2 + outpos] = ((in[inpos] >>> 4) & 3L);
+ out[3 + outpos] = ((in[inpos] >>> 6) & 3L);
+ out[4 + outpos] = ((in[inpos] >>> 8) & 3L);
+ out[5 + outpos] = ((in[inpos] >>> 10) & 3L);
+ out[6 + outpos] = ((in[inpos] >>> 12) & 3L);
+ out[7 + outpos] = ((in[inpos] >>> 14) & 3L);
+ out[8 + outpos] = ((in[inpos] >>> 16) & 3L);
+ out[9 + outpos] = ((in[inpos] >>> 18) & 3L);
+ out[10 + outpos] = ((in[inpos] >>> 20) & 3L);
+ out[11 + outpos] = ((in[inpos] >>> 22) & 3L);
+ out[12 + outpos] = ((in[inpos] >>> 24) & 3L);
+ out[13 + outpos] = ((in[inpos] >>> 26) & 3L);
+ out[14 + outpos] = ((in[inpos] >>> 28) & 3L);
+ out[15 + outpos] = ((in[inpos] >>> 30) & 3L);
+ out[16 + outpos] = ((in[inpos] >>> 32) & 3L);
+ out[17 + outpos] = ((in[inpos] >>> 34) & 3L);
+ out[18 + outpos] = ((in[inpos] >>> 36) & 3L);
+ out[19 + outpos] = ((in[inpos] >>> 38) & 3L);
+ out[20 + outpos] = ((in[inpos] >>> 40) & 3L);
+ out[21 + outpos] = ((in[inpos] >>> 42) & 3L);
+ out[22 + outpos] = ((in[inpos] >>> 44) & 3L);
+ out[23 + outpos] = ((in[inpos] >>> 46) & 3L);
+ out[24 + outpos] = ((in[inpos] >>> 48) & 3L);
+ out[25 + outpos] = ((in[inpos] >>> 50) & 3L);
+ out[26 + outpos] = ((in[inpos] >>> 52) & 3L);
+ out[27 + outpos] = ((in[inpos] >>> 54) & 3L);
+ out[28 + outpos] = ((in[inpos] >>> 56) & 3L);
+ out[29 + outpos] = ((in[inpos] >>> 58) & 3L);
+ out[30 + outpos] = ((in[inpos] >>> 60) & 3L);
+ out[31 + outpos] = (in[inpos] >>> 62);
+ out[32 + outpos] = (in[1 + inpos] & 3L);
+ out[33 + outpos] = ((in[1 + inpos] >>> 2) & 3L);
+ out[34 + outpos] = ((in[1 + inpos] >>> 4) & 3L);
+ out[35 + outpos] = ((in[1 + inpos] >>> 6) & 3L);
+ out[36 + outpos] = ((in[1 + inpos] >>> 8) & 3L);
+ out[37 + outpos] = ((in[1 + inpos] >>> 10) & 3L);
+ out[38 + outpos] = ((in[1 + inpos] >>> 12) & 3L);
+ out[39 + outpos] = ((in[1 + inpos] >>> 14) & 3L);
+ out[40 + outpos] = ((in[1 + inpos] >>> 16) & 3L);
+ out[41 + outpos] = ((in[1 + inpos] >>> 18) & 3L);
+ out[42 + outpos] = ((in[1 + inpos] >>> 20) & 3L);
+ out[43 + outpos] = ((in[1 + inpos] >>> 22) & 3L);
+ out[44 + outpos] = ((in[1 + inpos] >>> 24) & 3L);
+ out[45 + outpos] = ((in[1 + inpos] >>> 26) & 3L);
+ out[46 + outpos] = ((in[1 + inpos] >>> 28) & 3L);
+ out[47 + outpos] = ((in[1 + inpos] >>> 30) & 3L);
+ out[48 + outpos] = ((in[1 + inpos] >>> 32) & 3L);
+ out[49 + outpos] = ((in[1 + inpos] >>> 34) & 3L);
+ out[50 + outpos] = ((in[1 + inpos] >>> 36) & 3L);
+ out[51 + outpos] = ((in[1 + inpos] >>> 38) & 3L);
+ out[52 + outpos] = ((in[1 + inpos] >>> 40) & 3L);
+ out[53 + outpos] = ((in[1 + inpos] >>> 42) & 3L);
+ out[54 + outpos] = ((in[1 + inpos] >>> 44) & 3L);
+ out[55 + outpos] = ((in[1 + inpos] >>> 46) & 3L);
+ out[56 + outpos] = ((in[1 + inpos] >>> 48) & 3L);
+ out[57 + outpos] = ((in[1 + inpos] >>> 50) & 3L);
+ out[58 + outpos] = ((in[1 + inpos] >>> 52) & 3L);
+ out[59 + outpos] = ((in[1 + inpos] >>> 54) & 3L);
+ out[60 + outpos] = ((in[1 + inpos] >>> 56) & 3L);
+ out[61 + outpos] = ((in[1 + inpos] >>> 58) & 3L);
+ out[62 + outpos] = ((in[1 + inpos] >>> 60) & 3L);
+ out[63 + outpos] = (in[1 + inpos] >>> 62);
+ }
+
+ protected static void fastunpack3(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 7L);
+ out[1 + outpos] = ((in[inpos] >>> 3) & 7L);
+ out[2 + outpos] = ((in[inpos] >>> 6) & 7L);
+ out[3 + outpos] = ((in[inpos] >>> 9) & 7L);
+ out[4 + outpos] = ((in[inpos] >>> 12) & 7L);
+ out[5 + outpos] = ((in[inpos] >>> 15) & 7L);
+ out[6 + outpos] = ((in[inpos] >>> 18) & 7L);
+ out[7 + outpos] = ((in[inpos] >>> 21) & 7L);
+ out[8 + outpos] = ((in[inpos] >>> 24) & 7L);
+ out[9 + outpos] = ((in[inpos] >>> 27) & 7L);
+ out[10 + outpos] = ((in[inpos] >>> 30) & 7L);
+ out[11 + outpos] = ((in[inpos] >>> 33) & 7L);
+ out[12 + outpos] = ((in[inpos] >>> 36) & 7L);
+ out[13 + outpos] = ((in[inpos] >>> 39) & 7L);
+ out[14 + outpos] = ((in[inpos] >>> 42) & 7L);
+ out[15 + outpos] = ((in[inpos] >>> 45) & 7L);
+ out[16 + outpos] = ((in[inpos] >>> 48) & 7L);
+ out[17 + outpos] = ((in[inpos] >>> 51) & 7L);
+ out[18 + outpos] = ((in[inpos] >>> 54) & 7L);
+ out[19 + outpos] = ((in[inpos] >>> 57) & 7L);
+ out[20 + outpos] = ((in[inpos] >>> 60) & 7L);
+ out[21 + outpos] = (in[inpos] >>> 63)
+ | ((in[1 + inpos] & 3L) << (3 - 2));
+ out[22 + outpos] = ((in[1 + inpos] >>> 2) & 7L);
+ out[23 + outpos] = ((in[1 + inpos] >>> 5) & 7L);
+ out[24 + outpos] = ((in[1 + inpos] >>> 8) & 7L);
+ out[25 + outpos] = ((in[1 + inpos] >>> 11) & 7L);
+ out[26 + outpos] = ((in[1 + inpos] >>> 14) & 7L);
+ out[27 + outpos] = ((in[1 + inpos] >>> 17) & 7L);
+ out[28 + outpos] = ((in[1 + inpos] >>> 20) & 7L);
+ out[29 + outpos] = ((in[1 + inpos] >>> 23) & 7L);
+ out[30 + outpos] = ((in[1 + inpos] >>> 26) & 7L);
+ out[31 + outpos] = ((in[1 + inpos] >>> 29) & 7L);
+ out[32 + outpos] = ((in[1 + inpos] >>> 32) & 7L);
+ out[33 + outpos] = ((in[1 + inpos] >>> 35) & 7L);
+ out[34 + outpos] = ((in[1 + inpos] >>> 38) & 7L);
+ out[35 + outpos] = ((in[1 + inpos] >>> 41) & 7L);
+ out[36 + outpos] = ((in[1 + inpos] >>> 44) & 7L);
+ out[37 + outpos] = ((in[1 + inpos] >>> 47) & 7L);
+ out[38 + outpos] = ((in[1 + inpos] >>> 50) & 7L);
+ out[39 + outpos] = ((in[1 + inpos] >>> 53) & 7L);
+ out[40 + outpos] = ((in[1 + inpos] >>> 56) & 7L);
+ out[41 + outpos] = ((in[1 + inpos] >>> 59) & 7L);
+ out[42 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 1L) << (3 - 1));
+ out[43 + outpos] = ((in[2 + inpos] >>> 1) & 7L);
+ out[44 + outpos] = ((in[2 + inpos] >>> 4) & 7L);
+ out[45 + outpos] = ((in[2 + inpos] >>> 7) & 7L);
+ out[46 + outpos] = ((in[2 + inpos] >>> 10) & 7L);
+ out[47 + outpos] = ((in[2 + inpos] >>> 13) & 7L);
+ out[48 + outpos] = ((in[2 + inpos] >>> 16) & 7L);
+ out[49 + outpos] = ((in[2 + inpos] >>> 19) & 7L);
+ out[50 + outpos] = ((in[2 + inpos] >>> 22) & 7L);
+ out[51 + outpos] = ((in[2 + inpos] >>> 25) & 7L);
+ out[52 + outpos] = ((in[2 + inpos] >>> 28) & 7L);
+ out[53 + outpos] = ((in[2 + inpos] >>> 31) & 7L);
+ out[54 + outpos] = ((in[2 + inpos] >>> 34) & 7L);
+ out[55 + outpos] = ((in[2 + inpos] >>> 37) & 7L);
+ out[56 + outpos] = ((in[2 + inpos] >>> 40) & 7L);
+ out[57 + outpos] = ((in[2 + inpos] >>> 43) & 7L);
+ out[58 + outpos] = ((in[2 + inpos] >>> 46) & 7L);
+ out[59 + outpos] = ((in[2 + inpos] >>> 49) & 7L);
+ out[60 + outpos] = ((in[2 + inpos] >>> 52) & 7L);
+ out[61 + outpos] = ((in[2 + inpos] >>> 55) & 7L);
+ out[62 + outpos] = ((in[2 + inpos] >>> 58) & 7L);
+ out[63 + outpos] = (in[2 + inpos] >>> 61);
+ }
+
+ protected static void fastunpack4(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 15L);
+ out[1 + outpos] = ((in[inpos] >>> 4) & 15L);
+ out[2 + outpos] = ((in[inpos] >>> 8) & 15L);
+ out[3 + outpos] = ((in[inpos] >>> 12) & 15L);
+ out[4 + outpos] = ((in[inpos] >>> 16) & 15L);
+ out[5 + outpos] = ((in[inpos] >>> 20) & 15L);
+ out[6 + outpos] = ((in[inpos] >>> 24) & 15L);
+ out[7 + outpos] = ((in[inpos] >>> 28) & 15L);
+ out[8 + outpos] = ((in[inpos] >>> 32) & 15L);
+ out[9 + outpos] = ((in[inpos] >>> 36) & 15L);
+ out[10 + outpos] = ((in[inpos] >>> 40) & 15L);
+ out[11 + outpos] = ((in[inpos] >>> 44) & 15L);
+ out[12 + outpos] = ((in[inpos] >>> 48) & 15L);
+ out[13 + outpos] = ((in[inpos] >>> 52) & 15L);
+ out[14 + outpos] = ((in[inpos] >>> 56) & 15L);
+ out[15 + outpos] = (in[inpos] >>> 60);
+ out[16 + outpos] = (in[1 + inpos] & 15L);
+ out[17 + outpos] = ((in[1 + inpos] >>> 4) & 15L);
+ out[18 + outpos] = ((in[1 + inpos] >>> 8) & 15L);
+ out[19 + outpos] = ((in[1 + inpos] >>> 12) & 15L);
+ out[20 + outpos] = ((in[1 + inpos] >>> 16) & 15L);
+ out[21 + outpos] = ((in[1 + inpos] >>> 20) & 15L);
+ out[22 + outpos] = ((in[1 + inpos] >>> 24) & 15L);
+ out[23 + outpos] = ((in[1 + inpos] >>> 28) & 15L);
+ out[24 + outpos] = ((in[1 + inpos] >>> 32) & 15L);
+ out[25 + outpos] = ((in[1 + inpos] >>> 36) & 15L);
+ out[26 + outpos] = ((in[1 + inpos] >>> 40) & 15L);
+ out[27 + outpos] = ((in[1 + inpos] >>> 44) & 15L);
+ out[28 + outpos] = ((in[1 + inpos] >>> 48) & 15L);
+ out[29 + outpos] = ((in[1 + inpos] >>> 52) & 15L);
+ out[30 + outpos] = ((in[1 + inpos] >>> 56) & 15L);
+ out[31 + outpos] = (in[1 + inpos] >>> 60);
+ out[32 + outpos] = (in[2 + inpos] & 15L);
+ out[33 + outpos] = ((in[2 + inpos] >>> 4) & 15L);
+ out[34 + outpos] = ((in[2 + inpos] >>> 8) & 15L);
+ out[35 + outpos] = ((in[2 + inpos] >>> 12) & 15L);
+ out[36 + outpos] = ((in[2 + inpos] >>> 16) & 15L);
+ out[37 + outpos] = ((in[2 + inpos] >>> 20) & 15L);
+ out[38 + outpos] = ((in[2 + inpos] >>> 24) & 15L);
+ out[39 + outpos] = ((in[2 + inpos] >>> 28) & 15L);
+ out[40 + outpos] = ((in[2 + inpos] >>> 32) & 15L);
+ out[41 + outpos] = ((in[2 + inpos] >>> 36) & 15L);
+ out[42 + outpos] = ((in[2 + inpos] >>> 40) & 15L);
+ out[43 + outpos] = ((in[2 + inpos] >>> 44) & 15L);
+ out[44 + outpos] = ((in[2 + inpos] >>> 48) & 15L);
+ out[45 + outpos] = ((in[2 + inpos] >>> 52) & 15L);
+ out[46 + outpos] = ((in[2 + inpos] >>> 56) & 15L);
+ out[47 + outpos] = (in[2 + inpos] >>> 60);
+ out[48 + outpos] = (in[3 + inpos] & 15L);
+ out[49 + outpos] = ((in[3 + inpos] >>> 4) & 15L);
+ out[50 + outpos] = ((in[3 + inpos] >>> 8) & 15L);
+ out[51 + outpos] = ((in[3 + inpos] >>> 12) & 15L);
+ out[52 + outpos] = ((in[3 + inpos] >>> 16) & 15L);
+ out[53 + outpos] = ((in[3 + inpos] >>> 20) & 15L);
+ out[54 + outpos] = ((in[3 + inpos] >>> 24) & 15L);
+ out[55 + outpos] = ((in[3 + inpos] >>> 28) & 15L);
+ out[56 + outpos] = ((in[3 + inpos] >>> 32) & 15L);
+ out[57 + outpos] = ((in[3 + inpos] >>> 36) & 15L);
+ out[58 + outpos] = ((in[3 + inpos] >>> 40) & 15L);
+ out[59 + outpos] = ((in[3 + inpos] >>> 44) & 15L);
+ out[60 + outpos] = ((in[3 + inpos] >>> 48) & 15L);
+ out[61 + outpos] = ((in[3 + inpos] >>> 52) & 15L);
+ out[62 + outpos] = ((in[3 + inpos] >>> 56) & 15L);
+ out[63 + outpos] = (in[3 + inpos] >>> 60);
+ }
+
+ protected static void fastunpack5(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 31L);
+ out[1 + outpos] = ((in[inpos] >>> 5) & 31L);
+ out[2 + outpos] = ((in[inpos] >>> 10) & 31L);
+ out[3 + outpos] = ((in[inpos] >>> 15) & 31L);
+ out[4 + outpos] = ((in[inpos] >>> 20) & 31L);
+ out[5 + outpos] = ((in[inpos] >>> 25) & 31L);
+ out[6 + outpos] = ((in[inpos] >>> 30) & 31L);
+ out[7 + outpos] = ((in[inpos] >>> 35) & 31L);
+ out[8 + outpos] = ((in[inpos] >>> 40) & 31L);
+ out[9 + outpos] = ((in[inpos] >>> 45) & 31L);
+ out[10 + outpos] = ((in[inpos] >>> 50) & 31L);
+ out[11 + outpos] = ((in[inpos] >>> 55) & 31L);
+ out[12 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 1L) << (5 - 1));
+ out[13 + outpos] = ((in[1 + inpos] >>> 1) & 31L);
+ out[14 + outpos] = ((in[1 + inpos] >>> 6) & 31L);
+ out[15 + outpos] = ((in[1 + inpos] >>> 11) & 31L);
+ out[16 + outpos] = ((in[1 + inpos] >>> 16) & 31L);
+ out[17 + outpos] = ((in[1 + inpos] >>> 21) & 31L);
+ out[18 + outpos] = ((in[1 + inpos] >>> 26) & 31L);
+ out[19 + outpos] = ((in[1 + inpos] >>> 31) & 31L);
+ out[20 + outpos] = ((in[1 + inpos] >>> 36) & 31L);
+ out[21 + outpos] = ((in[1 + inpos] >>> 41) & 31L);
+ out[22 + outpos] = ((in[1 + inpos] >>> 46) & 31L);
+ out[23 + outpos] = ((in[1 + inpos] >>> 51) & 31L);
+ out[24 + outpos] = ((in[1 + inpos] >>> 56) & 31L);
+ out[25 + outpos] = (in[1 + inpos] >>> 61)
+ | ((in[2 + inpos] & 3L) << (5 - 2));
+ out[26 + outpos] = ((in[2 + inpos] >>> 2) & 31L);
+ out[27 + outpos] = ((in[2 + inpos] >>> 7) & 31L);
+ out[28 + outpos] = ((in[2 + inpos] >>> 12) & 31L);
+ out[29 + outpos] = ((in[2 + inpos] >>> 17) & 31L);
+ out[30 + outpos] = ((in[2 + inpos] >>> 22) & 31L);
+ out[31 + outpos] = ((in[2 + inpos] >>> 27) & 31L);
+ out[32 + outpos] = ((in[2 + inpos] >>> 32) & 31L);
+ out[33 + outpos] = ((in[2 + inpos] >>> 37) & 31L);
+ out[34 + outpos] = ((in[2 + inpos] >>> 42) & 31L);
+ out[35 + outpos] = ((in[2 + inpos] >>> 47) & 31L);
+ out[36 + outpos] = ((in[2 + inpos] >>> 52) & 31L);
+ out[37 + outpos] = ((in[2 + inpos] >>> 57) & 31L);
+ out[38 + outpos] = (in[2 + inpos] >>> 62)
+ | ((in[3 + inpos] & 7L) << (5 - 3));
+ out[39 + outpos] = ((in[3 + inpos] >>> 3) & 31L);
+ out[40 + outpos] = ((in[3 + inpos] >>> 8) & 31L);
+ out[41 + outpos] = ((in[3 + inpos] >>> 13) & 31L);
+ out[42 + outpos] = ((in[3 + inpos] >>> 18) & 31L);
+ out[43 + outpos] = ((in[3 + inpos] >>> 23) & 31L);
+ out[44 + outpos] = ((in[3 + inpos] >>> 28) & 31L);
+ out[45 + outpos] = ((in[3 + inpos] >>> 33) & 31L);
+ out[46 + outpos] = ((in[3 + inpos] >>> 38) & 31L);
+ out[47 + outpos] = ((in[3 + inpos] >>> 43) & 31L);
+ out[48 + outpos] = ((in[3 + inpos] >>> 48) & 31L);
+ out[49 + outpos] = ((in[3 + inpos] >>> 53) & 31L);
+ out[50 + outpos] = ((in[3 + inpos] >>> 58) & 31L);
+ out[51 + outpos] = (in[3 + inpos] >>> 63)
+ | ((in[4 + inpos] & 15L) << (5 - 4));
+ out[52 + outpos] = ((in[4 + inpos] >>> 4) & 31L);
+ out[53 + outpos] = ((in[4 + inpos] >>> 9) & 31L);
+ out[54 + outpos] = ((in[4 + inpos] >>> 14) & 31L);
+ out[55 + outpos] = ((in[4 + inpos] >>> 19) & 31L);
+ out[56 + outpos] = ((in[4 + inpos] >>> 24) & 31L);
+ out[57 + outpos] = ((in[4 + inpos] >>> 29) & 31L);
+ out[58 + outpos] = ((in[4 + inpos] >>> 34) & 31L);
+ out[59 + outpos] = ((in[4 + inpos] >>> 39) & 31L);
+ out[60 + outpos] = ((in[4 + inpos] >>> 44) & 31L);
+ out[61 + outpos] = ((in[4 + inpos] >>> 49) & 31L);
+ out[62 + outpos] = ((in[4 + inpos] >>> 54) & 31L);
+ out[63 + outpos] = (in[4 + inpos] >>> 59);
+ }
+
+ protected static void fastunpack6(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 63L);
+ out[1 + outpos] = ((in[inpos] >>> 6) & 63L);
+ out[2 + outpos] = ((in[inpos] >>> 12) & 63L);
+ out[3 + outpos] = ((in[inpos] >>> 18) & 63L);
+ out[4 + outpos] = ((in[inpos] >>> 24) & 63L);
+ out[5 + outpos] = ((in[inpos] >>> 30) & 63L);
+ out[6 + outpos] = ((in[inpos] >>> 36) & 63L);
+ out[7 + outpos] = ((in[inpos] >>> 42) & 63L);
+ out[8 + outpos] = ((in[inpos] >>> 48) & 63L);
+ out[9 + outpos] = ((in[inpos] >>> 54) & 63L);
+ out[10 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 3L) << (6 - 2));
+ out[11 + outpos] = ((in[1 + inpos] >>> 2) & 63L);
+ out[12 + outpos] = ((in[1 + inpos] >>> 8) & 63L);
+ out[13 + outpos] = ((in[1 + inpos] >>> 14) & 63L);
+ out[14 + outpos] = ((in[1 + inpos] >>> 20) & 63L);
+ out[15 + outpos] = ((in[1 + inpos] >>> 26) & 63L);
+ out[16 + outpos] = ((in[1 + inpos] >>> 32) & 63L);
+ out[17 + outpos] = ((in[1 + inpos] >>> 38) & 63L);
+ out[18 + outpos] = ((in[1 + inpos] >>> 44) & 63L);
+ out[19 + outpos] = ((in[1 + inpos] >>> 50) & 63L);
+ out[20 + outpos] = ((in[1 + inpos] >>> 56) & 63L);
+ out[21 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 15L) << (6 - 4));
+ out[22 + outpos] = ((in[2 + inpos] >>> 4) & 63L);
+ out[23 + outpos] = ((in[2 + inpos] >>> 10) & 63L);
+ out[24 + outpos] = ((in[2 + inpos] >>> 16) & 63L);
+ out[25 + outpos] = ((in[2 + inpos] >>> 22) & 63L);
+ out[26 + outpos] = ((in[2 + inpos] >>> 28) & 63L);
+ out[27 + outpos] = ((in[2 + inpos] >>> 34) & 63L);
+ out[28 + outpos] = ((in[2 + inpos] >>> 40) & 63L);
+ out[29 + outpos] = ((in[2 + inpos] >>> 46) & 63L);
+ out[30 + outpos] = ((in[2 + inpos] >>> 52) & 63L);
+ out[31 + outpos] = (in[2 + inpos] >>> 58);
+ out[32 + outpos] = (in[3 + inpos] & 63L);
+ out[33 + outpos] = ((in[3 + inpos] >>> 6) & 63L);
+ out[34 + outpos] = ((in[3 + inpos] >>> 12) & 63L);
+ out[35 + outpos] = ((in[3 + inpos] >>> 18) & 63L);
+ out[36 + outpos] = ((in[3 + inpos] >>> 24) & 63L);
+ out[37 + outpos] = ((in[3 + inpos] >>> 30) & 63L);
+ out[38 + outpos] = ((in[3 + inpos] >>> 36) & 63L);
+ out[39 + outpos] = ((in[3 + inpos] >>> 42) & 63L);
+ out[40 + outpos] = ((in[3 + inpos] >>> 48) & 63L);
+ out[41 + outpos] = ((in[3 + inpos] >>> 54) & 63L);
+ out[42 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 3L) << (6 - 2));
+ out[43 + outpos] = ((in[4 + inpos] >>> 2) & 63L);
+ out[44 + outpos] = ((in[4 + inpos] >>> 8) & 63L);
+ out[45 + outpos] = ((in[4 + inpos] >>> 14) & 63L);
+ out[46 + outpos] = ((in[4 + inpos] >>> 20) & 63L);
+ out[47 + outpos] = ((in[4 + inpos] >>> 26) & 63L);
+ out[48 + outpos] = ((in[4 + inpos] >>> 32) & 63L);
+ out[49 + outpos] = ((in[4 + inpos] >>> 38) & 63L);
+ out[50 + outpos] = ((in[4 + inpos] >>> 44) & 63L);
+ out[51 + outpos] = ((in[4 + inpos] >>> 50) & 63L);
+ out[52 + outpos] = ((in[4 + inpos] >>> 56) & 63L);
+ out[53 + outpos] = (in[4 + inpos] >>> 62)
+ | ((in[5 + inpos] & 15L) << (6 - 4));
+ out[54 + outpos] = ((in[5 + inpos] >>> 4) & 63L);
+ out[55 + outpos] = ((in[5 + inpos] >>> 10) & 63L);
+ out[56 + outpos] = ((in[5 + inpos] >>> 16) & 63L);
+ out[57 + outpos] = ((in[5 + inpos] >>> 22) & 63L);
+ out[58 + outpos] = ((in[5 + inpos] >>> 28) & 63L);
+ out[59 + outpos] = ((in[5 + inpos] >>> 34) & 63L);
+ out[60 + outpos] = ((in[5 + inpos] >>> 40) & 63L);
+ out[61 + outpos] = ((in[5 + inpos] >>> 46) & 63L);
+ out[62 + outpos] = ((in[5 + inpos] >>> 52) & 63L);
+ out[63 + outpos] = (in[5 + inpos] >>> 58);
+ }
+
+ protected static void fastunpack7(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 127L);
+ out[1 + outpos] = ((in[inpos] >>> 7) & 127L);
+ out[2 + outpos] = ((in[inpos] >>> 14) & 127L);
+ out[3 + outpos] = ((in[inpos] >>> 21) & 127L);
+ out[4 + outpos] = ((in[inpos] >>> 28) & 127L);
+ out[5 + outpos] = ((in[inpos] >>> 35) & 127L);
+ out[6 + outpos] = ((in[inpos] >>> 42) & 127L);
+ out[7 + outpos] = ((in[inpos] >>> 49) & 127L);
+ out[8 + outpos] = ((in[inpos] >>> 56) & 127L);
+ out[9 + outpos] = (in[inpos] >>> 63)
+ | ((in[1 + inpos] & 63L) << (7 - 6));
+ out[10 + outpos] = ((in[1 + inpos] >>> 6) & 127L);
+ out[11 + outpos] = ((in[1 + inpos] >>> 13) & 127L);
+ out[12 + outpos] = ((in[1 + inpos] >>> 20) & 127L);
+ out[13 + outpos] = ((in[1 + inpos] >>> 27) & 127L);
+ out[14 + outpos] = ((in[1 + inpos] >>> 34) & 127L);
+ out[15 + outpos] = ((in[1 + inpos] >>> 41) & 127L);
+ out[16 + outpos] = ((in[1 + inpos] >>> 48) & 127L);
+ out[17 + outpos] = ((in[1 + inpos] >>> 55) & 127L);
+ out[18 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 31L) << (7 - 5));
+ out[19 + outpos] = ((in[2 + inpos] >>> 5) & 127L);
+ out[20 + outpos] = ((in[2 + inpos] >>> 12) & 127L);
+ out[21 + outpos] = ((in[2 + inpos] >>> 19) & 127L);
+ out[22 + outpos] = ((in[2 + inpos] >>> 26) & 127L);
+ out[23 + outpos] = ((in[2 + inpos] >>> 33) & 127L);
+ out[24 + outpos] = ((in[2 + inpos] >>> 40) & 127L);
+ out[25 + outpos] = ((in[2 + inpos] >>> 47) & 127L);
+ out[26 + outpos] = ((in[2 + inpos] >>> 54) & 127L);
+ out[27 + outpos] = (in[2 + inpos] >>> 61)
+ | ((in[3 + inpos] & 15L) << (7 - 4));
+ out[28 + outpos] = ((in[3 + inpos] >>> 4) & 127L);
+ out[29 + outpos] = ((in[3 + inpos] >>> 11) & 127L);
+ out[30 + outpos] = ((in[3 + inpos] >>> 18) & 127L);
+ out[31 + outpos] = ((in[3 + inpos] >>> 25) & 127L);
+ out[32 + outpos] = ((in[3 + inpos] >>> 32) & 127L);
+ out[33 + outpos] = ((in[3 + inpos] >>> 39) & 127L);
+ out[34 + outpos] = ((in[3 + inpos] >>> 46) & 127L);
+ out[35 + outpos] = ((in[3 + inpos] >>> 53) & 127L);
+ out[36 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 7L) << (7 - 3));
+ out[37 + outpos] = ((in[4 + inpos] >>> 3) & 127L);
+ out[38 + outpos] = ((in[4 + inpos] >>> 10) & 127L);
+ out[39 + outpos] = ((in[4 + inpos] >>> 17) & 127L);
+ out[40 + outpos] = ((in[4 + inpos] >>> 24) & 127L);
+ out[41 + outpos] = ((in[4 + inpos] >>> 31) & 127L);
+ out[42 + outpos] = ((in[4 + inpos] >>> 38) & 127L);
+ out[43 + outpos] = ((in[4 + inpos] >>> 45) & 127L);
+ out[44 + outpos] = ((in[4 + inpos] >>> 52) & 127L);
+ out[45 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 3L) << (7 - 2));
+ out[46 + outpos] = ((in[5 + inpos] >>> 2) & 127L);
+ out[47 + outpos] = ((in[5 + inpos] >>> 9) & 127L);
+ out[48 + outpos] = ((in[5 + inpos] >>> 16) & 127L);
+ out[49 + outpos] = ((in[5 + inpos] >>> 23) & 127L);
+ out[50 + outpos] = ((in[5 + inpos] >>> 30) & 127L);
+ out[51 + outpos] = ((in[5 + inpos] >>> 37) & 127L);
+ out[52 + outpos] = ((in[5 + inpos] >>> 44) & 127L);
+ out[53 + outpos] = ((in[5 + inpos] >>> 51) & 127L);
+ out[54 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 1L) << (7 - 1));
+ out[55 + outpos] = ((in[6 + inpos] >>> 1) & 127L);
+ out[56 + outpos] = ((in[6 + inpos] >>> 8) & 127L);
+ out[57 + outpos] = ((in[6 + inpos] >>> 15) & 127L);
+ out[58 + outpos] = ((in[6 + inpos] >>> 22) & 127L);
+ out[59 + outpos] = ((in[6 + inpos] >>> 29) & 127L);
+ out[60 + outpos] = ((in[6 + inpos] >>> 36) & 127L);
+ out[61 + outpos] = ((in[6 + inpos] >>> 43) & 127L);
+ out[62 + outpos] = ((in[6 + inpos] >>> 50) & 127L);
+ out[63 + outpos] = (in[6 + inpos] >>> 57);
+ }
+
+ protected static void fastunpack8(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 255L);
+ out[1 + outpos] = ((in[inpos] >>> 8) & 255L);
+ out[2 + outpos] = ((in[inpos] >>> 16) & 255L);
+ out[3 + outpos] = ((in[inpos] >>> 24) & 255L);
+ out[4 + outpos] = ((in[inpos] >>> 32) & 255L);
+ out[5 + outpos] = ((in[inpos] >>> 40) & 255L);
+ out[6 + outpos] = ((in[inpos] >>> 48) & 255L);
+ out[7 + outpos] = (in[inpos] >>> 56);
+ out[8 + outpos] = (in[1 + inpos] & 255L);
+ out[9 + outpos] = ((in[1 + inpos] >>> 8) & 255L);
+ out[10 + outpos] = ((in[1 + inpos] >>> 16) & 255L);
+ out[11 + outpos] = ((in[1 + inpos] >>> 24) & 255L);
+ out[12 + outpos] = ((in[1 + inpos] >>> 32) & 255L);
+ out[13 + outpos] = ((in[1 + inpos] >>> 40) & 255L);
+ out[14 + outpos] = ((in[1 + inpos] >>> 48) & 255L);
+ out[15 + outpos] = (in[1 + inpos] >>> 56);
+ out[16 + outpos] = (in[2 + inpos] & 255L);
+ out[17 + outpos] = ((in[2 + inpos] >>> 8) & 255L);
+ out[18 + outpos] = ((in[2 + inpos] >>> 16) & 255L);
+ out[19 + outpos] = ((in[2 + inpos] >>> 24) & 255L);
+ out[20 + outpos] = ((in[2 + inpos] >>> 32) & 255L);
+ out[21 + outpos] = ((in[2 + inpos] >>> 40) & 255L);
+ out[22 + outpos] = ((in[2 + inpos] >>> 48) & 255L);
+ out[23 + outpos] = (in[2 + inpos] >>> 56);
+ out[24 + outpos] = (in[3 + inpos] & 255L);
+ out[25 + outpos] = ((in[3 + inpos] >>> 8) & 255L);
+ out[26 + outpos] = ((in[3 + inpos] >>> 16) & 255L);
+ out[27 + outpos] = ((in[3 + inpos] >>> 24) & 255L);
+ out[28 + outpos] = ((in[3 + inpos] >>> 32) & 255L);
+ out[29 + outpos] = ((in[3 + inpos] >>> 40) & 255L);
+ out[30 + outpos] = ((in[3 + inpos] >>> 48) & 255L);
+ out[31 + outpos] = (in[3 + inpos] >>> 56);
+ out[32 + outpos] = (in[4 + inpos] & 255L);
+ out[33 + outpos] = ((in[4 + inpos] >>> 8) & 255L);
+ out[34 + outpos] = ((in[4 + inpos] >>> 16) & 255L);
+ out[35 + outpos] = ((in[4 + inpos] >>> 24) & 255L);
+ out[36 + outpos] = ((in[4 + inpos] >>> 32) & 255L);
+ out[37 + outpos] = ((in[4 + inpos] >>> 40) & 255L);
+ out[38 + outpos] = ((in[4 + inpos] >>> 48) & 255L);
+ out[39 + outpos] = (in[4 + inpos] >>> 56);
+ out[40 + outpos] = (in[5 + inpos] & 255L);
+ out[41 + outpos] = ((in[5 + inpos] >>> 8) & 255L);
+ out[42 + outpos] = ((in[5 + inpos] >>> 16) & 255L);
+ out[43 + outpos] = ((in[5 + inpos] >>> 24) & 255L);
+ out[44 + outpos] = ((in[5 + inpos] >>> 32) & 255L);
+ out[45 + outpos] = ((in[5 + inpos] >>> 40) & 255L);
+ out[46 + outpos] = ((in[5 + inpos] >>> 48) & 255L);
+ out[47 + outpos] = (in[5 + inpos] >>> 56);
+ out[48 + outpos] = (in[6 + inpos] & 255L);
+ out[49 + outpos] = ((in[6 + inpos] >>> 8) & 255L);
+ out[50 + outpos] = ((in[6 + inpos] >>> 16) & 255L);
+ out[51 + outpos] = ((in[6 + inpos] >>> 24) & 255L);
+ out[52 + outpos] = ((in[6 + inpos] >>> 32) & 255L);
+ out[53 + outpos] = ((in[6 + inpos] >>> 40) & 255L);
+ out[54 + outpos] = ((in[6 + inpos] >>> 48) & 255L);
+ out[55 + outpos] = (in[6 + inpos] >>> 56);
+ out[56 + outpos] = (in[7 + inpos] & 255L);
+ out[57 + outpos] = ((in[7 + inpos] >>> 8) & 255L);
+ out[58 + outpos] = ((in[7 + inpos] >>> 16) & 255L);
+ out[59 + outpos] = ((in[7 + inpos] >>> 24) & 255L);
+ out[60 + outpos] = ((in[7 + inpos] >>> 32) & 255L);
+ out[61 + outpos] = ((in[7 + inpos] >>> 40) & 255L);
+ out[62 + outpos] = ((in[7 + inpos] >>> 48) & 255L);
+ out[63 + outpos] = (in[7 + inpos] >>> 56);
+ }
+
+ protected static void fastunpack9(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 511L);
+ out[1 + outpos] = ((in[inpos] >>> 9) & 511L);
+ out[2 + outpos] = ((in[inpos] >>> 18) & 511L);
+ out[3 + outpos] = ((in[inpos] >>> 27) & 511L);
+ out[4 + outpos] = ((in[inpos] >>> 36) & 511L);
+ out[5 + outpos] = ((in[inpos] >>> 45) & 511L);
+ out[6 + outpos] = ((in[inpos] >>> 54) & 511L);
+ out[7 + outpos] = (in[inpos] >>> 63)
+ | ((in[1 + inpos] & 255L) << (9 - 8));
+ out[8 + outpos] = ((in[1 + inpos] >>> 8) & 511L);
+ out[9 + outpos] = ((in[1 + inpos] >>> 17) & 511L);
+ out[10 + outpos] = ((in[1 + inpos] >>> 26) & 511L);
+ out[11 + outpos] = ((in[1 + inpos] >>> 35) & 511L);
+ out[12 + outpos] = ((in[1 + inpos] >>> 44) & 511L);
+ out[13 + outpos] = ((in[1 + inpos] >>> 53) & 511L);
+ out[14 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 127L) << (9 - 7));
+ out[15 + outpos] = ((in[2 + inpos] >>> 7) & 511L);
+ out[16 + outpos] = ((in[2 + inpos] >>> 16) & 511L);
+ out[17 + outpos] = ((in[2 + inpos] >>> 25) & 511L);
+ out[18 + outpos] = ((in[2 + inpos] >>> 34) & 511L);
+ out[19 + outpos] = ((in[2 + inpos] >>> 43) & 511L);
+ out[20 + outpos] = ((in[2 + inpos] >>> 52) & 511L);
+ out[21 + outpos] = (in[2 + inpos] >>> 61)
+ | ((in[3 + inpos] & 63L) << (9 - 6));
+ out[22 + outpos] = ((in[3 + inpos] >>> 6) & 511L);
+ out[23 + outpos] = ((in[3 + inpos] >>> 15) & 511L);
+ out[24 + outpos] = ((in[3 + inpos] >>> 24) & 511L);
+ out[25 + outpos] = ((in[3 + inpos] >>> 33) & 511L);
+ out[26 + outpos] = ((in[3 + inpos] >>> 42) & 511L);
+ out[27 + outpos] = ((in[3 + inpos] >>> 51) & 511L);
+ out[28 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 31L) << (9 - 5));
+ out[29 + outpos] = ((in[4 + inpos] >>> 5) & 511L);
+ out[30 + outpos] = ((in[4 + inpos] >>> 14) & 511L);
+ out[31 + outpos] = ((in[4 + inpos] >>> 23) & 511L);
+ out[32 + outpos] = ((in[4 + inpos] >>> 32) & 511L);
+ out[33 + outpos] = ((in[4 + inpos] >>> 41) & 511L);
+ out[34 + outpos] = ((in[4 + inpos] >>> 50) & 511L);
+ out[35 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 15L) << (9 - 4));
+ out[36 + outpos] = ((in[5 + inpos] >>> 4) & 511L);
+ out[37 + outpos] = ((in[5 + inpos] >>> 13) & 511L);
+ out[38 + outpos] = ((in[5 + inpos] >>> 22) & 511L);
+ out[39 + outpos] = ((in[5 + inpos] >>> 31) & 511L);
+ out[40 + outpos] = ((in[5 + inpos] >>> 40) & 511L);
+ out[41 + outpos] = ((in[5 + inpos] >>> 49) & 511L);
+ out[42 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 7L) << (9 - 3));
+ out[43 + outpos] = ((in[6 + inpos] >>> 3) & 511L);
+ out[44 + outpos] = ((in[6 + inpos] >>> 12) & 511L);
+ out[45 + outpos] = ((in[6 + inpos] >>> 21) & 511L);
+ out[46 + outpos] = ((in[6 + inpos] >>> 30) & 511L);
+ out[47 + outpos] = ((in[6 + inpos] >>> 39) & 511L);
+ out[48 + outpos] = ((in[6 + inpos] >>> 48) & 511L);
+ out[49 + outpos] = (in[6 + inpos] >>> 57)
+ | ((in[7 + inpos] & 3L) << (9 - 2));
+ out[50 + outpos] = ((in[7 + inpos] >>> 2) & 511L);
+ out[51 + outpos] = ((in[7 + inpos] >>> 11) & 511L);
+ out[52 + outpos] = ((in[7 + inpos] >>> 20) & 511L);
+ out[53 + outpos] = ((in[7 + inpos] >>> 29) & 511L);
+ out[54 + outpos] = ((in[7 + inpos] >>> 38) & 511L);
+ out[55 + outpos] = ((in[7 + inpos] >>> 47) & 511L);
+ out[56 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 1L) << (9 - 1));
+ out[57 + outpos] = ((in[8 + inpos] >>> 1) & 511L);
+ out[58 + outpos] = ((in[8 + inpos] >>> 10) & 511L);
+ out[59 + outpos] = ((in[8 + inpos] >>> 19) & 511L);
+ out[60 + outpos] = ((in[8 + inpos] >>> 28) & 511L);
+ out[61 + outpos] = ((in[8 + inpos] >>> 37) & 511L);
+ out[62 + outpos] = ((in[8 + inpos] >>> 46) & 511L);
+ out[63 + outpos] = (in[8 + inpos] >>> 55);
+ }
+
+ protected static void fastunpack10(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1023L);
+ out[1 + outpos] = ((in[inpos] >>> 10) & 1023L);
+ out[2 + outpos] = ((in[inpos] >>> 20) & 1023L);
+ out[3 + outpos] = ((in[inpos] >>> 30) & 1023L);
+ out[4 + outpos] = ((in[inpos] >>> 40) & 1023L);
+ out[5 + outpos] = ((in[inpos] >>> 50) & 1023L);
+ out[6 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 63L) << (10 - 6));
+ out[7 + outpos] = ((in[1 + inpos] >>> 6) & 1023L);
+ out[8 + outpos] = ((in[1 + inpos] >>> 16) & 1023L);
+ out[9 + outpos] = ((in[1 + inpos] >>> 26) & 1023L);
+ out[10 + outpos] = ((in[1 + inpos] >>> 36) & 1023L);
+ out[11 + outpos] = ((in[1 + inpos] >>> 46) & 1023L);
+ out[12 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 3L) << (10 - 2));
+ out[13 + outpos] = ((in[2 + inpos] >>> 2) & 1023L);
+ out[14 + outpos] = ((in[2 + inpos] >>> 12) & 1023L);
+ out[15 + outpos] = ((in[2 + inpos] >>> 22) & 1023L);
+ out[16 + outpos] = ((in[2 + inpos] >>> 32) & 1023L);
+ out[17 + outpos] = ((in[2 + inpos] >>> 42) & 1023L);
+ out[18 + outpos] = ((in[2 + inpos] >>> 52) & 1023L);
+ out[19 + outpos] = (in[2 + inpos] >>> 62)
+ | ((in[3 + inpos] & 255L) << (10 - 8));
+ out[20 + outpos] = ((in[3 + inpos] >>> 8) & 1023L);
+ out[21 + outpos] = ((in[3 + inpos] >>> 18) & 1023L);
+ out[22 + outpos] = ((in[3 + inpos] >>> 28) & 1023L);
+ out[23 + outpos] = ((in[3 + inpos] >>> 38) & 1023L);
+ out[24 + outpos] = ((in[3 + inpos] >>> 48) & 1023L);
+ out[25 + outpos] = (in[3 + inpos] >>> 58)
+ | ((in[4 + inpos] & 15L) << (10 - 4));
+ out[26 + outpos] = ((in[4 + inpos] >>> 4) & 1023L);
+ out[27 + outpos] = ((in[4 + inpos] >>> 14) & 1023L);
+ out[28 + outpos] = ((in[4 + inpos] >>> 24) & 1023L);
+ out[29 + outpos] = ((in[4 + inpos] >>> 34) & 1023L);
+ out[30 + outpos] = ((in[4 + inpos] >>> 44) & 1023L);
+ out[31 + outpos] = (in[4 + inpos] >>> 54);
+ out[32 + outpos] = (in[5 + inpos] & 1023L);
+ out[33 + outpos] = ((in[5 + inpos] >>> 10) & 1023L);
+ out[34 + outpos] = ((in[5 + inpos] >>> 20) & 1023L);
+ out[35 + outpos] = ((in[5 + inpos] >>> 30) & 1023L);
+ out[36 + outpos] = ((in[5 + inpos] >>> 40) & 1023L);
+ out[37 + outpos] = ((in[5 + inpos] >>> 50) & 1023L);
+ out[38 + outpos] = (in[5 + inpos] >>> 60)
+ | ((in[6 + inpos] & 63L) << (10 - 6));
+ out[39 + outpos] = ((in[6 + inpos] >>> 6) & 1023L);
+ out[40 + outpos] = ((in[6 + inpos] >>> 16) & 1023L);
+ out[41 + outpos] = ((in[6 + inpos] >>> 26) & 1023L);
+ out[42 + outpos] = ((in[6 + inpos] >>> 36) & 1023L);
+ out[43 + outpos] = ((in[6 + inpos] >>> 46) & 1023L);
+ out[44 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 3L) << (10 - 2));
+ out[45 + outpos] = ((in[7 + inpos] >>> 2) & 1023L);
+ out[46 + outpos] = ((in[7 + inpos] >>> 12) & 1023L);
+ out[47 + outpos] = ((in[7 + inpos] >>> 22) & 1023L);
+ out[48 + outpos] = ((in[7 + inpos] >>> 32) & 1023L);
+ out[49 + outpos] = ((in[7 + inpos] >>> 42) & 1023L);
+ out[50 + outpos] = ((in[7 + inpos] >>> 52) & 1023L);
+ out[51 + outpos] = (in[7 + inpos] >>> 62)
+ | ((in[8 + inpos] & 255L) << (10 - 8));
+ out[52 + outpos] = ((in[8 + inpos] >>> 8) & 1023L);
+ out[53 + outpos] = ((in[8 + inpos] >>> 18) & 1023L);
+ out[54 + outpos] = ((in[8 + inpos] >>> 28) & 1023L);
+ out[55 + outpos] = ((in[8 + inpos] >>> 38) & 1023L);
+ out[56 + outpos] = ((in[8 + inpos] >>> 48) & 1023L);
+ out[57 + outpos] = (in[8 + inpos] >>> 58)
+ | ((in[9 + inpos] & 15L) << (10 - 4));
+ out[58 + outpos] = ((in[9 + inpos] >>> 4) & 1023L);
+ out[59 + outpos] = ((in[9 + inpos] >>> 14) & 1023L);
+ out[60 + outpos] = ((in[9 + inpos] >>> 24) & 1023L);
+ out[61 + outpos] = ((in[9 + inpos] >>> 34) & 1023L);
+ out[62 + outpos] = ((in[9 + inpos] >>> 44) & 1023L);
+ out[63 + outpos] = (in[9 + inpos] >>> 54);
+ }
+
+ protected static void fastunpack11(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 2047L);
+ out[1 + outpos] = ((in[inpos] >>> 11) & 2047L);
+ out[2 + outpos] = ((in[inpos] >>> 22) & 2047L);
+ out[3 + outpos] = ((in[inpos] >>> 33) & 2047L);
+ out[4 + outpos] = ((in[inpos] >>> 44) & 2047L);
+ out[5 + outpos] = (in[inpos] >>> 55)
+ | ((in[1 + inpos] & 3L) << (11 - 2));
+ out[6 + outpos] = ((in[1 + inpos] >>> 2) & 2047L);
+ out[7 + outpos] = ((in[1 + inpos] >>> 13) & 2047L);
+ out[8 + outpos] = ((in[1 + inpos] >>> 24) & 2047L);
+ out[9 + outpos] = ((in[1 + inpos] >>> 35) & 2047L);
+ out[10 + outpos] = ((in[1 + inpos] >>> 46) & 2047L);
+ out[11 + outpos] = (in[1 + inpos] >>> 57)
+ | ((in[2 + inpos] & 15L) << (11 - 4));
+ out[12 + outpos] = ((in[2 + inpos] >>> 4) & 2047L);
+ out[13 + outpos] = ((in[2 + inpos] >>> 15) & 2047L);
+ out[14 + outpos] = ((in[2 + inpos] >>> 26) & 2047L);
+ out[15 + outpos] = ((in[2 + inpos] >>> 37) & 2047L);
+ out[16 + outpos] = ((in[2 + inpos] >>> 48) & 2047L);
+ out[17 + outpos] = (in[2 + inpos] >>> 59)
+ | ((in[3 + inpos] & 63L) << (11 - 6));
+ out[18 + outpos] = ((in[3 + inpos] >>> 6) & 2047L);
+ out[19 + outpos] = ((in[3 + inpos] >>> 17) & 2047L);
+ out[20 + outpos] = ((in[3 + inpos] >>> 28) & 2047L);
+ out[21 + outpos] = ((in[3 + inpos] >>> 39) & 2047L);
+ out[22 + outpos] = ((in[3 + inpos] >>> 50) & 2047L);
+ out[23 + outpos] = (in[3 + inpos] >>> 61)
+ | ((in[4 + inpos] & 255L) << (11 - 8));
+ out[24 + outpos] = ((in[4 + inpos] >>> 8) & 2047L);
+ out[25 + outpos] = ((in[4 + inpos] >>> 19) & 2047L);
+ out[26 + outpos] = ((in[4 + inpos] >>> 30) & 2047L);
+ out[27 + outpos] = ((in[4 + inpos] >>> 41) & 2047L);
+ out[28 + outpos] = ((in[4 + inpos] >>> 52) & 2047L);
+ out[29 + outpos] = (in[4 + inpos] >>> 63)
+ | ((in[5 + inpos] & 1023L) << (11 - 10));
+ out[30 + outpos] = ((in[5 + inpos] >>> 10) & 2047L);
+ out[31 + outpos] = ((in[5 + inpos] >>> 21) & 2047L);
+ out[32 + outpos] = ((in[5 + inpos] >>> 32) & 2047L);
+ out[33 + outpos] = ((in[5 + inpos] >>> 43) & 2047L);
+ out[34 + outpos] = (in[5 + inpos] >>> 54)
+ | ((in[6 + inpos] & 1L) << (11 - 1));
+ out[35 + outpos] = ((in[6 + inpos] >>> 1) & 2047L);
+ out[36 + outpos] = ((in[6 + inpos] >>> 12) & 2047L);
+ out[37 + outpos] = ((in[6 + inpos] >>> 23) & 2047L);
+ out[38 + outpos] = ((in[6 + inpos] >>> 34) & 2047L);
+ out[39 + outpos] = ((in[6 + inpos] >>> 45) & 2047L);
+ out[40 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 7L) << (11 - 3));
+ out[41 + outpos] = ((in[7 + inpos] >>> 3) & 2047L);
+ out[42 + outpos] = ((in[7 + inpos] >>> 14) & 2047L);
+ out[43 + outpos] = ((in[7 + inpos] >>> 25) & 2047L);
+ out[44 + outpos] = ((in[7 + inpos] >>> 36) & 2047L);
+ out[45 + outpos] = ((in[7 + inpos] >>> 47) & 2047L);
+ out[46 + outpos] = (in[7 + inpos] >>> 58)
+ | ((in[8 + inpos] & 31L) << (11 - 5));
+ out[47 + outpos] = ((in[8 + inpos] >>> 5) & 2047L);
+ out[48 + outpos] = ((in[8 + inpos] >>> 16) & 2047L);
+ out[49 + outpos] = ((in[8 + inpos] >>> 27) & 2047L);
+ out[50 + outpos] = ((in[8 + inpos] >>> 38) & 2047L);
+ out[51 + outpos] = ((in[8 + inpos] >>> 49) & 2047L);
+ out[52 + outpos] = (in[8 + inpos] >>> 60)
+ | ((in[9 + inpos] & 127L) << (11 - 7));
+ out[53 + outpos] = ((in[9 + inpos] >>> 7) & 2047L);
+ out[54 + outpos] = ((in[9 + inpos] >>> 18) & 2047L);
+ out[55 + outpos] = ((in[9 + inpos] >>> 29) & 2047L);
+ out[56 + outpos] = ((in[9 + inpos] >>> 40) & 2047L);
+ out[57 + outpos] = ((in[9 + inpos] >>> 51) & 2047L);
+ out[58 + outpos] = (in[9 + inpos] >>> 62)
+ | ((in[10 + inpos] & 511L) << (11 - 9));
+ out[59 + outpos] = ((in[10 + inpos] >>> 9) & 2047L);
+ out[60 + outpos] = ((in[10 + inpos] >>> 20) & 2047L);
+ out[61 + outpos] = ((in[10 + inpos] >>> 31) & 2047L);
+ out[62 + outpos] = ((in[10 + inpos] >>> 42) & 2047L);
+ out[63 + outpos] = (in[10 + inpos] >>> 53);
+ }
+
+ protected static void fastunpack12(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 4095L);
+ out[1 + outpos] = ((in[inpos] >>> 12) & 4095L);
+ out[2 + outpos] = ((in[inpos] >>> 24) & 4095L);
+ out[3 + outpos] = ((in[inpos] >>> 36) & 4095L);
+ out[4 + outpos] = ((in[inpos] >>> 48) & 4095L);
+ out[5 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 255L) << (12 - 8));
+ out[6 + outpos] = ((in[1 + inpos] >>> 8) & 4095L);
+ out[7 + outpos] = ((in[1 + inpos] >>> 20) & 4095L);
+ out[8 + outpos] = ((in[1 + inpos] >>> 32) & 4095L);
+ out[9 + outpos] = ((in[1 + inpos] >>> 44) & 4095L);
+ out[10 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 15L) << (12 - 4));
+ out[11 + outpos] = ((in[2 + inpos] >>> 4) & 4095L);
+ out[12 + outpos] = ((in[2 + inpos] >>> 16) & 4095L);
+ out[13 + outpos] = ((in[2 + inpos] >>> 28) & 4095L);
+ out[14 + outpos] = ((in[2 + inpos] >>> 40) & 4095L);
+ out[15 + outpos] = (in[2 + inpos] >>> 52);
+ out[16 + outpos] = (in[3 + inpos] & 4095L);
+ out[17 + outpos] = ((in[3 + inpos] >>> 12) & 4095L);
+ out[18 + outpos] = ((in[3 + inpos] >>> 24) & 4095L);
+ out[19 + outpos] = ((in[3 + inpos] >>> 36) & 4095L);
+ out[20 + outpos] = ((in[3 + inpos] >>> 48) & 4095L);
+ out[21 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 255L) << (12 - 8));
+ out[22 + outpos] = ((in[4 + inpos] >>> 8) & 4095L);
+ out[23 + outpos] = ((in[4 + inpos] >>> 20) & 4095L);
+ out[24 + outpos] = ((in[4 + inpos] >>> 32) & 4095L);
+ out[25 + outpos] = ((in[4 + inpos] >>> 44) & 4095L);
+ out[26 + outpos] = (in[4 + inpos] >>> 56)
+ | ((in[5 + inpos] & 15L) << (12 - 4));
+ out[27 + outpos] = ((in[5 + inpos] >>> 4) & 4095L);
+ out[28 + outpos] = ((in[5 + inpos] >>> 16) & 4095L);
+ out[29 + outpos] = ((in[5 + inpos] >>> 28) & 4095L);
+ out[30 + outpos] = ((in[5 + inpos] >>> 40) & 4095L);
+ out[31 + outpos] = (in[5 + inpos] >>> 52);
+ out[32 + outpos] = (in[6 + inpos] & 4095L);
+ out[33 + outpos] = ((in[6 + inpos] >>> 12) & 4095L);
+ out[34 + outpos] = ((in[6 + inpos] >>> 24) & 4095L);
+ out[35 + outpos] = ((in[6 + inpos] >>> 36) & 4095L);
+ out[36 + outpos] = ((in[6 + inpos] >>> 48) & 4095L);
+ out[37 + outpos] = (in[6 + inpos] >>> 60)
+ | ((in[7 + inpos] & 255L) << (12 - 8));
+ out[38 + outpos] = ((in[7 + inpos] >>> 8) & 4095L);
+ out[39 + outpos] = ((in[7 + inpos] >>> 20) & 4095L);
+ out[40 + outpos] = ((in[7 + inpos] >>> 32) & 4095L);
+ out[41 + outpos] = ((in[7 + inpos] >>> 44) & 4095L);
+ out[42 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 15L) << (12 - 4));
+ out[43 + outpos] = ((in[8 + inpos] >>> 4) & 4095L);
+ out[44 + outpos] = ((in[8 + inpos] >>> 16) & 4095L);
+ out[45 + outpos] = ((in[8 + inpos] >>> 28) & 4095L);
+ out[46 + outpos] = ((in[8 + inpos] >>> 40) & 4095L);
+ out[47 + outpos] = (in[8 + inpos] >>> 52);
+ out[48 + outpos] = (in[9 + inpos] & 4095L);
+ out[49 + outpos] = ((in[9 + inpos] >>> 12) & 4095L);
+ out[50 + outpos] = ((in[9 + inpos] >>> 24) & 4095L);
+ out[51 + outpos] = ((in[9 + inpos] >>> 36) & 4095L);
+ out[52 + outpos] = ((in[9 + inpos] >>> 48) & 4095L);
+ out[53 + outpos] = (in[9 + inpos] >>> 60)
+ | ((in[10 + inpos] & 255L) << (12 - 8));
+ out[54 + outpos] = ((in[10 + inpos] >>> 8) & 4095L);
+ out[55 + outpos] = ((in[10 + inpos] >>> 20) & 4095L);
+ out[56 + outpos] = ((in[10 + inpos] >>> 32) & 4095L);
+ out[57 + outpos] = ((in[10 + inpos] >>> 44) & 4095L);
+ out[58 + outpos] = (in[10 + inpos] >>> 56)
+ | ((in[11 + inpos] & 15L) << (12 - 4));
+ out[59 + outpos] = ((in[11 + inpos] >>> 4) & 4095L);
+ out[60 + outpos] = ((in[11 + inpos] >>> 16) & 4095L);
+ out[61 + outpos] = ((in[11 + inpos] >>> 28) & 4095L);
+ out[62 + outpos] = ((in[11 + inpos] >>> 40) & 4095L);
+ out[63 + outpos] = (in[11 + inpos] >>> 52);
+ }
+
+ protected static void fastunpack13(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 8191L);
+ out[1 + outpos] = ((in[inpos] >>> 13) & 8191L);
+ out[2 + outpos] = ((in[inpos] >>> 26) & 8191L);
+ out[3 + outpos] = ((in[inpos] >>> 39) & 8191L);
+ out[4 + outpos] = (in[inpos] >>> 52)
+ | ((in[1 + inpos] & 1L) << (13 - 1));
+ out[5 + outpos] = ((in[1 + inpos] >>> 1) & 8191L);
+ out[6 + outpos] = ((in[1 + inpos] >>> 14) & 8191L);
+ out[7 + outpos] = ((in[1 + inpos] >>> 27) & 8191L);
+ out[8 + outpos] = ((in[1 + inpos] >>> 40) & 8191L);
+ out[9 + outpos] = (in[1 + inpos] >>> 53)
+ | ((in[2 + inpos] & 3L) << (13 - 2));
+ out[10 + outpos] = ((in[2 + inpos] >>> 2) & 8191L);
+ out[11 + outpos] = ((in[2 + inpos] >>> 15) & 8191L);
+ out[12 + outpos] = ((in[2 + inpos] >>> 28) & 8191L);
+ out[13 + outpos] = ((in[2 + inpos] >>> 41) & 8191L);
+ out[14 + outpos] = (in[2 + inpos] >>> 54)
+ | ((in[3 + inpos] & 7L) << (13 - 3));
+ out[15 + outpos] = ((in[3 + inpos] >>> 3) & 8191L);
+ out[16 + outpos] = ((in[3 + inpos] >>> 16) & 8191L);
+ out[17 + outpos] = ((in[3 + inpos] >>> 29) & 8191L);
+ out[18 + outpos] = ((in[3 + inpos] >>> 42) & 8191L);
+ out[19 + outpos] = (in[3 + inpos] >>> 55)
+ | ((in[4 + inpos] & 15L) << (13 - 4));
+ out[20 + outpos] = ((in[4 + inpos] >>> 4) & 8191L);
+ out[21 + outpos] = ((in[4 + inpos] >>> 17) & 8191L);
+ out[22 + outpos] = ((in[4 + inpos] >>> 30) & 8191L);
+ out[23 + outpos] = ((in[4 + inpos] >>> 43) & 8191L);
+ out[24 + outpos] = (in[4 + inpos] >>> 56)
+ | ((in[5 + inpos] & 31L) << (13 - 5));
+ out[25 + outpos] = ((in[5 + inpos] >>> 5) & 8191L);
+ out[26 + outpos] = ((in[5 + inpos] >>> 18) & 8191L);
+ out[27 + outpos] = ((in[5 + inpos] >>> 31) & 8191L);
+ out[28 + outpos] = ((in[5 + inpos] >>> 44) & 8191L);
+ out[29 + outpos] = (in[5 + inpos] >>> 57)
+ | ((in[6 + inpos] & 63L) << (13 - 6));
+ out[30 + outpos] = ((in[6 + inpos] >>> 6) & 8191L);
+ out[31 + outpos] = ((in[6 + inpos] >>> 19) & 8191L);
+ out[32 + outpos] = ((in[6 + inpos] >>> 32) & 8191L);
+ out[33 + outpos] = ((in[6 + inpos] >>> 45) & 8191L);
+ out[34 + outpos] = (in[6 + inpos] >>> 58)
+ | ((in[7 + inpos] & 127L) << (13 - 7));
+ out[35 + outpos] = ((in[7 + inpos] >>> 7) & 8191L);
+ out[36 + outpos] = ((in[7 + inpos] >>> 20) & 8191L);
+ out[37 + outpos] = ((in[7 + inpos] >>> 33) & 8191L);
+ out[38 + outpos] = ((in[7 + inpos] >>> 46) & 8191L);
+ out[39 + outpos] = (in[7 + inpos] >>> 59)
+ | ((in[8 + inpos] & 255L) << (13 - 8));
+ out[40 + outpos] = ((in[8 + inpos] >>> 8) & 8191L);
+ out[41 + outpos] = ((in[8 + inpos] >>> 21) & 8191L);
+ out[42 + outpos] = ((in[8 + inpos] >>> 34) & 8191L);
+ out[43 + outpos] = ((in[8 + inpos] >>> 47) & 8191L);
+ out[44 + outpos] = (in[8 + inpos] >>> 60)
+ | ((in[9 + inpos] & 511L) << (13 - 9));
+ out[45 + outpos] = ((in[9 + inpos] >>> 9) & 8191L);
+ out[46 + outpos] = ((in[9 + inpos] >>> 22) & 8191L);
+ out[47 + outpos] = ((in[9 + inpos] >>> 35) & 8191L);
+ out[48 + outpos] = ((in[9 + inpos] >>> 48) & 8191L);
+ out[49 + outpos] = (in[9 + inpos] >>> 61)
+ | ((in[10 + inpos] & 1023L) << (13 - 10));
+ out[50 + outpos] = ((in[10 + inpos] >>> 10) & 8191L);
+ out[51 + outpos] = ((in[10 + inpos] >>> 23) & 8191L);
+ out[52 + outpos] = ((in[10 + inpos] >>> 36) & 8191L);
+ out[53 + outpos] = ((in[10 + inpos] >>> 49) & 8191L);
+ out[54 + outpos] = (in[10 + inpos] >>> 62)
+ | ((in[11 + inpos] & 2047L) << (13 - 11));
+ out[55 + outpos] = ((in[11 + inpos] >>> 11) & 8191L);
+ out[56 + outpos] = ((in[11 + inpos] >>> 24) & 8191L);
+ out[57 + outpos] = ((in[11 + inpos] >>> 37) & 8191L);
+ out[58 + outpos] = ((in[11 + inpos] >>> 50) & 8191L);
+ out[59 + outpos] = (in[11 + inpos] >>> 63)
+ | ((in[12 + inpos] & 4095L) << (13 - 12));
+ out[60 + outpos] = ((in[12 + inpos] >>> 12) & 8191L);
+ out[61 + outpos] = ((in[12 + inpos] >>> 25) & 8191L);
+ out[62 + outpos] = ((in[12 + inpos] >>> 38) & 8191L);
+ out[63 + outpos] = (in[12 + inpos] >>> 51);
+ }
+
+ protected static void fastunpack14(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 16383L);
+ out[1 + outpos] = ((in[inpos] >>> 14) & 16383L);
+ out[2 + outpos] = ((in[inpos] >>> 28) & 16383L);
+ out[3 + outpos] = ((in[inpos] >>> 42) & 16383L);
+ out[4 + outpos] = (in[inpos] >>> 56)
+ | ((in[1 + inpos] & 63L) << (14 - 6));
+ out[5 + outpos] = ((in[1 + inpos] >>> 6) & 16383L);
+ out[6 + outpos] = ((in[1 + inpos] >>> 20) & 16383L);
+ out[7 + outpos] = ((in[1 + inpos] >>> 34) & 16383L);
+ out[8 + outpos] = ((in[1 + inpos] >>> 48) & 16383L);
+ out[9 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 4095L) << (14 - 12));
+ out[10 + outpos] = ((in[2 + inpos] >>> 12) & 16383L);
+ out[11 + outpos] = ((in[2 + inpos] >>> 26) & 16383L);
+ out[12 + outpos] = ((in[2 + inpos] >>> 40) & 16383L);
+ out[13 + outpos] = (in[2 + inpos] >>> 54)
+ | ((in[3 + inpos] & 15L) << (14 - 4));
+ out[14 + outpos] = ((in[3 + inpos] >>> 4) & 16383L);
+ out[15 + outpos] = ((in[3 + inpos] >>> 18) & 16383L);
+ out[16 + outpos] = ((in[3 + inpos] >>> 32) & 16383L);
+ out[17 + outpos] = ((in[3 + inpos] >>> 46) & 16383L);
+ out[18 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 1023L) << (14 - 10));
+ out[19 + outpos] = ((in[4 + inpos] >>> 10) & 16383L);
+ out[20 + outpos] = ((in[4 + inpos] >>> 24) & 16383L);
+ out[21 + outpos] = ((in[4 + inpos] >>> 38) & 16383L);
+ out[22 + outpos] = (in[4 + inpos] >>> 52)
+ | ((in[5 + inpos] & 3L) << (14 - 2));
+ out[23 + outpos] = ((in[5 + inpos] >>> 2) & 16383L);
+ out[24 + outpos] = ((in[5 + inpos] >>> 16) & 16383L);
+ out[25 + outpos] = ((in[5 + inpos] >>> 30) & 16383L);
+ out[26 + outpos] = ((in[5 + inpos] >>> 44) & 16383L);
+ out[27 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 255L) << (14 - 8));
+ out[28 + outpos] = ((in[6 + inpos] >>> 8) & 16383L);
+ out[29 + outpos] = ((in[6 + inpos] >>> 22) & 16383L);
+ out[30 + outpos] = ((in[6 + inpos] >>> 36) & 16383L);
+ out[31 + outpos] = (in[6 + inpos] >>> 50);
+ out[32 + outpos] = (in[7 + inpos] & 16383L);
+ out[33 + outpos] = ((in[7 + inpos] >>> 14) & 16383L);
+ out[34 + outpos] = ((in[7 + inpos] >>> 28) & 16383L);
+ out[35 + outpos] = ((in[7 + inpos] >>> 42) & 16383L);
+ out[36 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 63L) << (14 - 6));
+ out[37 + outpos] = ((in[8 + inpos] >>> 6) & 16383L);
+ out[38 + outpos] = ((in[8 + inpos] >>> 20) & 16383L);
+ out[39 + outpos] = ((in[8 + inpos] >>> 34) & 16383L);
+ out[40 + outpos] = ((in[8 + inpos] >>> 48) & 16383L);
+ out[41 + outpos] = (in[8 + inpos] >>> 62)
+ | ((in[9 + inpos] & 4095L) << (14 - 12));
+ out[42 + outpos] = ((in[9 + inpos] >>> 12) & 16383L);
+ out[43 + outpos] = ((in[9 + inpos] >>> 26) & 16383L);
+ out[44 + outpos] = ((in[9 + inpos] >>> 40) & 16383L);
+ out[45 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 15L) << (14 - 4));
+ out[46 + outpos] = ((in[10 + inpos] >>> 4) & 16383L);
+ out[47 + outpos] = ((in[10 + inpos] >>> 18) & 16383L);
+ out[48 + outpos] = ((in[10 + inpos] >>> 32) & 16383L);
+ out[49 + outpos] = ((in[10 + inpos] >>> 46) & 16383L);
+ out[50 + outpos] = (in[10 + inpos] >>> 60)
+ | ((in[11 + inpos] & 1023L) << (14 - 10));
+ out[51 + outpos] = ((in[11 + inpos] >>> 10) & 16383L);
+ out[52 + outpos] = ((in[11 + inpos] >>> 24) & 16383L);
+ out[53 + outpos] = ((in[11 + inpos] >>> 38) & 16383L);
+ out[54 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 3L) << (14 - 2));
+ out[55 + outpos] = ((in[12 + inpos] >>> 2) & 16383L);
+ out[56 + outpos] = ((in[12 + inpos] >>> 16) & 16383L);
+ out[57 + outpos] = ((in[12 + inpos] >>> 30) & 16383L);
+ out[58 + outpos] = ((in[12 + inpos] >>> 44) & 16383L);
+ out[59 + outpos] = (in[12 + inpos] >>> 58)
+ | ((in[13 + inpos] & 255L) << (14 - 8));
+ out[60 + outpos] = ((in[13 + inpos] >>> 8) & 16383L);
+ out[61 + outpos] = ((in[13 + inpos] >>> 22) & 16383L);
+ out[62 + outpos] = ((in[13 + inpos] >>> 36) & 16383L);
+ out[63 + outpos] = (in[13 + inpos] >>> 50);
+ }
+
+ protected static void fastunpack15(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 32767L);
+ out[1 + outpos] = ((in[inpos] >>> 15) & 32767L);
+ out[2 + outpos] = ((in[inpos] >>> 30) & 32767L);
+ out[3 + outpos] = ((in[inpos] >>> 45) & 32767L);
+ out[4 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 2047L) << (15 - 11));
+ out[5 + outpos] = ((in[1 + inpos] >>> 11) & 32767L);
+ out[6 + outpos] = ((in[1 + inpos] >>> 26) & 32767L);
+ out[7 + outpos] = ((in[1 + inpos] >>> 41) & 32767L);
+ out[8 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 127L) << (15 - 7));
+ out[9 + outpos] = ((in[2 + inpos] >>> 7) & 32767L);
+ out[10 + outpos] = ((in[2 + inpos] >>> 22) & 32767L);
+ out[11 + outpos] = ((in[2 + inpos] >>> 37) & 32767L);
+ out[12 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 7L) << (15 - 3));
+ out[13 + outpos] = ((in[3 + inpos] >>> 3) & 32767L);
+ out[14 + outpos] = ((in[3 + inpos] >>> 18) & 32767L);
+ out[15 + outpos] = ((in[3 + inpos] >>> 33) & 32767L);
+ out[16 + outpos] = ((in[3 + inpos] >>> 48) & 32767L);
+ out[17 + outpos] = (in[3 + inpos] >>> 63)
+ | ((in[4 + inpos] & 16383L) << (15 - 14));
+ out[18 + outpos] = ((in[4 + inpos] >>> 14) & 32767L);
+ out[19 + outpos] = ((in[4 + inpos] >>> 29) & 32767L);
+ out[20 + outpos] = ((in[4 + inpos] >>> 44) & 32767L);
+ out[21 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 1023L) << (15 - 10));
+ out[22 + outpos] = ((in[5 + inpos] >>> 10) & 32767L);
+ out[23 + outpos] = ((in[5 + inpos] >>> 25) & 32767L);
+ out[24 + outpos] = ((in[5 + inpos] >>> 40) & 32767L);
+ out[25 + outpos] = (in[5 + inpos] >>> 55)
+ | ((in[6 + inpos] & 63L) << (15 - 6));
+ out[26 + outpos] = ((in[6 + inpos] >>> 6) & 32767L);
+ out[27 + outpos] = ((in[6 + inpos] >>> 21) & 32767L);
+ out[28 + outpos] = ((in[6 + inpos] >>> 36) & 32767L);
+ out[29 + outpos] = (in[6 + inpos] >>> 51)
+ | ((in[7 + inpos] & 3L) << (15 - 2));
+ out[30 + outpos] = ((in[7 + inpos] >>> 2) & 32767L);
+ out[31 + outpos] = ((in[7 + inpos] >>> 17) & 32767L);
+ out[32 + outpos] = ((in[7 + inpos] >>> 32) & 32767L);
+ out[33 + outpos] = ((in[7 + inpos] >>> 47) & 32767L);
+ out[34 + outpos] = (in[7 + inpos] >>> 62)
+ | ((in[8 + inpos] & 8191L) << (15 - 13));
+ out[35 + outpos] = ((in[8 + inpos] >>> 13) & 32767L);
+ out[36 + outpos] = ((in[8 + inpos] >>> 28) & 32767L);
+ out[37 + outpos] = ((in[8 + inpos] >>> 43) & 32767L);
+ out[38 + outpos] = (in[8 + inpos] >>> 58)
+ | ((in[9 + inpos] & 511L) << (15 - 9));
+ out[39 + outpos] = ((in[9 + inpos] >>> 9) & 32767L);
+ out[40 + outpos] = ((in[9 + inpos] >>> 24) & 32767L);
+ out[41 + outpos] = ((in[9 + inpos] >>> 39) & 32767L);
+ out[42 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 31L) << (15 - 5));
+ out[43 + outpos] = ((in[10 + inpos] >>> 5) & 32767L);
+ out[44 + outpos] = ((in[10 + inpos] >>> 20) & 32767L);
+ out[45 + outpos] = ((in[10 + inpos] >>> 35) & 32767L);
+ out[46 + outpos] = (in[10 + inpos] >>> 50)
+ | ((in[11 + inpos] & 1L) << (15 - 1));
+ out[47 + outpos] = ((in[11 + inpos] >>> 1) & 32767L);
+ out[48 + outpos] = ((in[11 + inpos] >>> 16) & 32767L);
+ out[49 + outpos] = ((in[11 + inpos] >>> 31) & 32767L);
+ out[50 + outpos] = ((in[11 + inpos] >>> 46) & 32767L);
+ out[51 + outpos] = (in[11 + inpos] >>> 61)
+ | ((in[12 + inpos] & 4095L) << (15 - 12));
+ out[52 + outpos] = ((in[12 + inpos] >>> 12) & 32767L);
+ out[53 + outpos] = ((in[12 + inpos] >>> 27) & 32767L);
+ out[54 + outpos] = ((in[12 + inpos] >>> 42) & 32767L);
+ out[55 + outpos] = (in[12 + inpos] >>> 57)
+ | ((in[13 + inpos] & 255L) << (15 - 8));
+ out[56 + outpos] = ((in[13 + inpos] >>> 8) & 32767L);
+ out[57 + outpos] = ((in[13 + inpos] >>> 23) & 32767L);
+ out[58 + outpos] = ((in[13 + inpos] >>> 38) & 32767L);
+ out[59 + outpos] = (in[13 + inpos] >>> 53)
+ | ((in[14 + inpos] & 15L) << (15 - 4));
+ out[60 + outpos] = ((in[14 + inpos] >>> 4) & 32767L);
+ out[61 + outpos] = ((in[14 + inpos] >>> 19) & 32767L);
+ out[62 + outpos] = ((in[14 + inpos] >>> 34) & 32767L);
+ out[63 + outpos] = (in[14 + inpos] >>> 49);
+ }
+
+ protected static void fastunpack16(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 65535L);
+ out[1 + outpos] = ((in[inpos] >>> 16) & 65535L);
+ out[2 + outpos] = ((in[inpos] >>> 32) & 65535L);
+ out[3 + outpos] = (in[inpos] >>> 48);
+ out[4 + outpos] = (in[1 + inpos] & 65535L);
+ out[5 + outpos] = ((in[1 + inpos] >>> 16) & 65535L);
+ out[6 + outpos] = ((in[1 + inpos] >>> 32) & 65535L);
+ out[7 + outpos] = (in[1 + inpos] >>> 48);
+ out[8 + outpos] = (in[2 + inpos] & 65535L);
+ out[9 + outpos] = ((in[2 + inpos] >>> 16) & 65535L);
+ out[10 + outpos] = ((in[2 + inpos] >>> 32) & 65535L);
+ out[11 + outpos] = (in[2 + inpos] >>> 48);
+ out[12 + outpos] = (in[3 + inpos] & 65535L);
+ out[13 + outpos] = ((in[3 + inpos] >>> 16) & 65535L);
+ out[14 + outpos] = ((in[3 + inpos] >>> 32) & 65535L);
+ out[15 + outpos] = (in[3 + inpos] >>> 48);
+ out[16 + outpos] = (in[4 + inpos] & 65535L);
+ out[17 + outpos] = ((in[4 + inpos] >>> 16) & 65535L);
+ out[18 + outpos] = ((in[4 + inpos] >>> 32) & 65535L);
+ out[19 + outpos] = (in[4 + inpos] >>> 48);
+ out[20 + outpos] = (in[5 + inpos] & 65535L);
+ out[21 + outpos] = ((in[5 + inpos] >>> 16) & 65535L);
+ out[22 + outpos] = ((in[5 + inpos] >>> 32) & 65535L);
+ out[23 + outpos] = (in[5 + inpos] >>> 48);
+ out[24 + outpos] = (in[6 + inpos] & 65535L);
+ out[25 + outpos] = ((in[6 + inpos] >>> 16) & 65535L);
+ out[26 + outpos] = ((in[6 + inpos] >>> 32) & 65535L);
+ out[27 + outpos] = (in[6 + inpos] >>> 48);
+ out[28 + outpos] = (in[7 + inpos] & 65535L);
+ out[29 + outpos] = ((in[7 + inpos] >>> 16) & 65535L);
+ out[30 + outpos] = ((in[7 + inpos] >>> 32) & 65535L);
+ out[31 + outpos] = (in[7 + inpos] >>> 48);
+ out[32 + outpos] = (in[8 + inpos] & 65535L);
+ out[33 + outpos] = ((in[8 + inpos] >>> 16) & 65535L);
+ out[34 + outpos] = ((in[8 + inpos] >>> 32) & 65535L);
+ out[35 + outpos] = (in[8 + inpos] >>> 48);
+ out[36 + outpos] = (in[9 + inpos] & 65535L);
+ out[37 + outpos] = ((in[9 + inpos] >>> 16) & 65535L);
+ out[38 + outpos] = ((in[9 + inpos] >>> 32) & 65535L);
+ out[39 + outpos] = (in[9 + inpos] >>> 48);
+ out[40 + outpos] = (in[10 + inpos] & 65535L);
+ out[41 + outpos] = ((in[10 + inpos] >>> 16) & 65535L);
+ out[42 + outpos] = ((in[10 + inpos] >>> 32) & 65535L);
+ out[43 + outpos] = (in[10 + inpos] >>> 48);
+ out[44 + outpos] = (in[11 + inpos] & 65535L);
+ out[45 + outpos] = ((in[11 + inpos] >>> 16) & 65535L);
+ out[46 + outpos] = ((in[11 + inpos] >>> 32) & 65535L);
+ out[47 + outpos] = (in[11 + inpos] >>> 48);
+ out[48 + outpos] = (in[12 + inpos] & 65535L);
+ out[49 + outpos] = ((in[12 + inpos] >>> 16) & 65535L);
+ out[50 + outpos] = ((in[12 + inpos] >>> 32) & 65535L);
+ out[51 + outpos] = (in[12 + inpos] >>> 48);
+ out[52 + outpos] = (in[13 + inpos] & 65535L);
+ out[53 + outpos] = ((in[13 + inpos] >>> 16) & 65535L);
+ out[54 + outpos] = ((in[13 + inpos] >>> 32) & 65535L);
+ out[55 + outpos] = (in[13 + inpos] >>> 48);
+ out[56 + outpos] = (in[14 + inpos] & 65535L);
+ out[57 + outpos] = ((in[14 + inpos] >>> 16) & 65535L);
+ out[58 + outpos] = ((in[14 + inpos] >>> 32) & 65535L);
+ out[59 + outpos] = (in[14 + inpos] >>> 48);
+ out[60 + outpos] = (in[15 + inpos] & 65535L);
+ out[61 + outpos] = ((in[15 + inpos] >>> 16) & 65535L);
+ out[62 + outpos] = ((in[15 + inpos] >>> 32) & 65535L);
+ out[63 + outpos] = (in[15 + inpos] >>> 48);
+ }
+
+ protected static void fastunpack17(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 131071L);
+ out[1 + outpos] = ((in[inpos] >>> 17) & 131071L);
+ out[2 + outpos] = ((in[inpos] >>> 34) & 131071L);
+ out[3 + outpos] = (in[inpos] >>> 51)
+ | ((in[1 + inpos] & 15L) << (17 - 4));
+ out[4 + outpos] = ((in[1 + inpos] >>> 4) & 131071L);
+ out[5 + outpos] = ((in[1 + inpos] >>> 21) & 131071L);
+ out[6 + outpos] = ((in[1 + inpos] >>> 38) & 131071L);
+ out[7 + outpos] = (in[1 + inpos] >>> 55)
+ | ((in[2 + inpos] & 255L) << (17 - 8));
+ out[8 + outpos] = ((in[2 + inpos] >>> 8) & 131071L);
+ out[9 + outpos] = ((in[2 + inpos] >>> 25) & 131071L);
+ out[10 + outpos] = ((in[2 + inpos] >>> 42) & 131071L);
+ out[11 + outpos] = (in[2 + inpos] >>> 59)
+ | ((in[3 + inpos] & 4095L) << (17 - 12));
+ out[12 + outpos] = ((in[3 + inpos] >>> 12) & 131071L);
+ out[13 + outpos] = ((in[3 + inpos] >>> 29) & 131071L);
+ out[14 + outpos] = ((in[3 + inpos] >>> 46) & 131071L);
+ out[15 + outpos] = (in[3 + inpos] >>> 63)
+ | ((in[4 + inpos] & 65535L) << (17 - 16));
+ out[16 + outpos] = ((in[4 + inpos] >>> 16) & 131071L);
+ out[17 + outpos] = ((in[4 + inpos] >>> 33) & 131071L);
+ out[18 + outpos] = (in[4 + inpos] >>> 50)
+ | ((in[5 + inpos] & 7L) << (17 - 3));
+ out[19 + outpos] = ((in[5 + inpos] >>> 3) & 131071L);
+ out[20 + outpos] = ((in[5 + inpos] >>> 20) & 131071L);
+ out[21 + outpos] = ((in[5 + inpos] >>> 37) & 131071L);
+ out[22 + outpos] = (in[5 + inpos] >>> 54)
+ | ((in[6 + inpos] & 127L) << (17 - 7));
+ out[23 + outpos] = ((in[6 + inpos] >>> 7) & 131071L);
+ out[24 + outpos] = ((in[6 + inpos] >>> 24) & 131071L);
+ out[25 + outpos] = ((in[6 + inpos] >>> 41) & 131071L);
+ out[26 + outpos] = (in[6 + inpos] >>> 58)
+ | ((in[7 + inpos] & 2047L) << (17 - 11));
+ out[27 + outpos] = ((in[7 + inpos] >>> 11) & 131071L);
+ out[28 + outpos] = ((in[7 + inpos] >>> 28) & 131071L);
+ out[29 + outpos] = ((in[7 + inpos] >>> 45) & 131071L);
+ out[30 + outpos] = (in[7 + inpos] >>> 62)
+ | ((in[8 + inpos] & 32767L) << (17 - 15));
+ out[31 + outpos] = ((in[8 + inpos] >>> 15) & 131071L);
+ out[32 + outpos] = ((in[8 + inpos] >>> 32) & 131071L);
+ out[33 + outpos] = (in[8 + inpos] >>> 49)
+ | ((in[9 + inpos] & 3L) << (17 - 2));
+ out[34 + outpos] = ((in[9 + inpos] >>> 2) & 131071L);
+ out[35 + outpos] = ((in[9 + inpos] >>> 19) & 131071L);
+ out[36 + outpos] = ((in[9 + inpos] >>> 36) & 131071L);
+ out[37 + outpos] = (in[9 + inpos] >>> 53)
+ | ((in[10 + inpos] & 63L) << (17 - 6));
+ out[38 + outpos] = ((in[10 + inpos] >>> 6) & 131071L);
+ out[39 + outpos] = ((in[10 + inpos] >>> 23) & 131071L);
+ out[40 + outpos] = ((in[10 + inpos] >>> 40) & 131071L);
+ out[41 + outpos] = (in[10 + inpos] >>> 57)
+ | ((in[11 + inpos] & 1023L) << (17 - 10));
+ out[42 + outpos] = ((in[11 + inpos] >>> 10) & 131071L);
+ out[43 + outpos] = ((in[11 + inpos] >>> 27) & 131071L);
+ out[44 + outpos] = ((in[11 + inpos] >>> 44) & 131071L);
+ out[45 + outpos] = (in[11 + inpos] >>> 61)
+ | ((in[12 + inpos] & 16383L) << (17 - 14));
+ out[46 + outpos] = ((in[12 + inpos] >>> 14) & 131071L);
+ out[47 + outpos] = ((in[12 + inpos] >>> 31) & 131071L);
+ out[48 + outpos] = (in[12 + inpos] >>> 48)
+ | ((in[13 + inpos] & 1L) << (17 - 1));
+ out[49 + outpos] = ((in[13 + inpos] >>> 1) & 131071L);
+ out[50 + outpos] = ((in[13 + inpos] >>> 18) & 131071L);
+ out[51 + outpos] = ((in[13 + inpos] >>> 35) & 131071L);
+ out[52 + outpos] = (in[13 + inpos] >>> 52)
+ | ((in[14 + inpos] & 31L) << (17 - 5));
+ out[53 + outpos] = ((in[14 + inpos] >>> 5) & 131071L);
+ out[54 + outpos] = ((in[14 + inpos] >>> 22) & 131071L);
+ out[55 + outpos] = ((in[14 + inpos] >>> 39) & 131071L);
+ out[56 + outpos] = (in[14 + inpos] >>> 56)
+ | ((in[15 + inpos] & 511L) << (17 - 9));
+ out[57 + outpos] = ((in[15 + inpos] >>> 9) & 131071L);
+ out[58 + outpos] = ((in[15 + inpos] >>> 26) & 131071L);
+ out[59 + outpos] = ((in[15 + inpos] >>> 43) & 131071L);
+ out[60 + outpos] = (in[15 + inpos] >>> 60)
+ | ((in[16 + inpos] & 8191L) << (17 - 13));
+ out[61 + outpos] = ((in[16 + inpos] >>> 13) & 131071L);
+ out[62 + outpos] = ((in[16 + inpos] >>> 30) & 131071L);
+ out[63 + outpos] = (in[16 + inpos] >>> 47);
+ }
+
+ protected static void fastunpack18(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 262143L);
+ out[1 + outpos] = ((in[inpos] >>> 18) & 262143L);
+ out[2 + outpos] = ((in[inpos] >>> 36) & 262143L);
+ out[3 + outpos] = (in[inpos] >>> 54)
+ | ((in[1 + inpos] & 255L) << (18 - 8));
+ out[4 + outpos] = ((in[1 + inpos] >>> 8) & 262143L);
+ out[5 + outpos] = ((in[1 + inpos] >>> 26) & 262143L);
+ out[6 + outpos] = ((in[1 + inpos] >>> 44) & 262143L);
+ out[7 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 65535L) << (18 - 16));
+ out[8 + outpos] = ((in[2 + inpos] >>> 16) & 262143L);
+ out[9 + outpos] = ((in[2 + inpos] >>> 34) & 262143L);
+ out[10 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 63L) << (18 - 6));
+ out[11 + outpos] = ((in[3 + inpos] >>> 6) & 262143L);
+ out[12 + outpos] = ((in[3 + inpos] >>> 24) & 262143L);
+ out[13 + outpos] = ((in[3 + inpos] >>> 42) & 262143L);
+ out[14 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 16383L) << (18 - 14));
+ out[15 + outpos] = ((in[4 + inpos] >>> 14) & 262143L);
+ out[16 + outpos] = ((in[4 + inpos] >>> 32) & 262143L);
+ out[17 + outpos] = (in[4 + inpos] >>> 50)
+ | ((in[5 + inpos] & 15L) << (18 - 4));
+ out[18 + outpos] = ((in[5 + inpos] >>> 4) & 262143L);
+ out[19 + outpos] = ((in[5 + inpos] >>> 22) & 262143L);
+ out[20 + outpos] = ((in[5 + inpos] >>> 40) & 262143L);
+ out[21 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 4095L) << (18 - 12));
+ out[22 + outpos] = ((in[6 + inpos] >>> 12) & 262143L);
+ out[23 + outpos] = ((in[6 + inpos] >>> 30) & 262143L);
+ out[24 + outpos] = (in[6 + inpos] >>> 48)
+ | ((in[7 + inpos] & 3L) << (18 - 2));
+ out[25 + outpos] = ((in[7 + inpos] >>> 2) & 262143L);
+ out[26 + outpos] = ((in[7 + inpos] >>> 20) & 262143L);
+ out[27 + outpos] = ((in[7 + inpos] >>> 38) & 262143L);
+ out[28 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 1023L) << (18 - 10));
+ out[29 + outpos] = ((in[8 + inpos] >>> 10) & 262143L);
+ out[30 + outpos] = ((in[8 + inpos] >>> 28) & 262143L);
+ out[31 + outpos] = (in[8 + inpos] >>> 46);
+ out[32 + outpos] = (in[9 + inpos] & 262143L);
+ out[33 + outpos] = ((in[9 + inpos] >>> 18) & 262143L);
+ out[34 + outpos] = ((in[9 + inpos] >>> 36) & 262143L);
+ out[35 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 255L) << (18 - 8));
+ out[36 + outpos] = ((in[10 + inpos] >>> 8) & 262143L);
+ out[37 + outpos] = ((in[10 + inpos] >>> 26) & 262143L);
+ out[38 + outpos] = ((in[10 + inpos] >>> 44) & 262143L);
+ out[39 + outpos] = (in[10 + inpos] >>> 62)
+ | ((in[11 + inpos] & 65535L) << (18 - 16));
+ out[40 + outpos] = ((in[11 + inpos] >>> 16) & 262143L);
+ out[41 + outpos] = ((in[11 + inpos] >>> 34) & 262143L);
+ out[42 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 63L) << (18 - 6));
+ out[43 + outpos] = ((in[12 + inpos] >>> 6) & 262143L);
+ out[44 + outpos] = ((in[12 + inpos] >>> 24) & 262143L);
+ out[45 + outpos] = ((in[12 + inpos] >>> 42) & 262143L);
+ out[46 + outpos] = (in[12 + inpos] >>> 60)
+ | ((in[13 + inpos] & 16383L) << (18 - 14));
+ out[47 + outpos] = ((in[13 + inpos] >>> 14) & 262143L);
+ out[48 + outpos] = ((in[13 + inpos] >>> 32) & 262143L);
+ out[49 + outpos] = (in[13 + inpos] >>> 50)
+ | ((in[14 + inpos] & 15L) << (18 - 4));
+ out[50 + outpos] = ((in[14 + inpos] >>> 4) & 262143L);
+ out[51 + outpos] = ((in[14 + inpos] >>> 22) & 262143L);
+ out[52 + outpos] = ((in[14 + inpos] >>> 40) & 262143L);
+ out[53 + outpos] = (in[14 + inpos] >>> 58)
+ | ((in[15 + inpos] & 4095L) << (18 - 12));
+ out[54 + outpos] = ((in[15 + inpos] >>> 12) & 262143L);
+ out[55 + outpos] = ((in[15 + inpos] >>> 30) & 262143L);
+ out[56 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 3L) << (18 - 2));
+ out[57 + outpos] = ((in[16 + inpos] >>> 2) & 262143L);
+ out[58 + outpos] = ((in[16 + inpos] >>> 20) & 262143L);
+ out[59 + outpos] = ((in[16 + inpos] >>> 38) & 262143L);
+ out[60 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 1023L) << (18 - 10));
+ out[61 + outpos] = ((in[17 + inpos] >>> 10) & 262143L);
+ out[62 + outpos] = ((in[17 + inpos] >>> 28) & 262143L);
+ out[63 + outpos] = (in[17 + inpos] >>> 46);
+ }
+
+ protected static void fastunpack19(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 524287L);
+ out[1 + outpos] = ((in[inpos] >>> 19) & 524287L);
+ out[2 + outpos] = ((in[inpos] >>> 38) & 524287L);
+ out[3 + outpos] = (in[inpos] >>> 57)
+ | ((in[1 + inpos] & 4095L) << (19 - 12));
+ out[4 + outpos] = ((in[1 + inpos] >>> 12) & 524287L);
+ out[5 + outpos] = ((in[1 + inpos] >>> 31) & 524287L);
+ out[6 + outpos] = (in[1 + inpos] >>> 50)
+ | ((in[2 + inpos] & 31L) << (19 - 5));
+ out[7 + outpos] = ((in[2 + inpos] >>> 5) & 524287L);
+ out[8 + outpos] = ((in[2 + inpos] >>> 24) & 524287L);
+ out[9 + outpos] = ((in[2 + inpos] >>> 43) & 524287L);
+ out[10 + outpos] = (in[2 + inpos] >>> 62)
+ | ((in[3 + inpos] & 131071L) << (19 - 17));
+ out[11 + outpos] = ((in[3 + inpos] >>> 17) & 524287L);
+ out[12 + outpos] = ((in[3 + inpos] >>> 36) & 524287L);
+ out[13 + outpos] = (in[3 + inpos] >>> 55)
+ | ((in[4 + inpos] & 1023L) << (19 - 10));
+ out[14 + outpos] = ((in[4 + inpos] >>> 10) & 524287L);
+ out[15 + outpos] = ((in[4 + inpos] >>> 29) & 524287L);
+ out[16 + outpos] = (in[4 + inpos] >>> 48)
+ | ((in[5 + inpos] & 7L) << (19 - 3));
+ out[17 + outpos] = ((in[5 + inpos] >>> 3) & 524287L);
+ out[18 + outpos] = ((in[5 + inpos] >>> 22) & 524287L);
+ out[19 + outpos] = ((in[5 + inpos] >>> 41) & 524287L);
+ out[20 + outpos] = (in[5 + inpos] >>> 60)
+ | ((in[6 + inpos] & 32767L) << (19 - 15));
+ out[21 + outpos] = ((in[6 + inpos] >>> 15) & 524287L);
+ out[22 + outpos] = ((in[6 + inpos] >>> 34) & 524287L);
+ out[23 + outpos] = (in[6 + inpos] >>> 53)
+ | ((in[7 + inpos] & 255L) << (19 - 8));
+ out[24 + outpos] = ((in[7 + inpos] >>> 8) & 524287L);
+ out[25 + outpos] = ((in[7 + inpos] >>> 27) & 524287L);
+ out[26 + outpos] = (in[7 + inpos] >>> 46)
+ | ((in[8 + inpos] & 1L) << (19 - 1));
+ out[27 + outpos] = ((in[8 + inpos] >>> 1) & 524287L);
+ out[28 + outpos] = ((in[8 + inpos] >>> 20) & 524287L);
+ out[29 + outpos] = ((in[8 + inpos] >>> 39) & 524287L);
+ out[30 + outpos] = (in[8 + inpos] >>> 58)
+ | ((in[9 + inpos] & 8191L) << (19 - 13));
+ out[31 + outpos] = ((in[9 + inpos] >>> 13) & 524287L);
+ out[32 + outpos] = ((in[9 + inpos] >>> 32) & 524287L);
+ out[33 + outpos] = (in[9 + inpos] >>> 51)
+ | ((in[10 + inpos] & 63L) << (19 - 6));
+ out[34 + outpos] = ((in[10 + inpos] >>> 6) & 524287L);
+ out[35 + outpos] = ((in[10 + inpos] >>> 25) & 524287L);
+ out[36 + outpos] = ((in[10 + inpos] >>> 44) & 524287L);
+ out[37 + outpos] = (in[10 + inpos] >>> 63)
+ | ((in[11 + inpos] & 262143L) << (19 - 18));
+ out[38 + outpos] = ((in[11 + inpos] >>> 18) & 524287L);
+ out[39 + outpos] = ((in[11 + inpos] >>> 37) & 524287L);
+ out[40 + outpos] = (in[11 + inpos] >>> 56)
+ | ((in[12 + inpos] & 2047L) << (19 - 11));
+ out[41 + outpos] = ((in[12 + inpos] >>> 11) & 524287L);
+ out[42 + outpos] = ((in[12 + inpos] >>> 30) & 524287L);
+ out[43 + outpos] = (in[12 + inpos] >>> 49)
+ | ((in[13 + inpos] & 15L) << (19 - 4));
+ out[44 + outpos] = ((in[13 + inpos] >>> 4) & 524287L);
+ out[45 + outpos] = ((in[13 + inpos] >>> 23) & 524287L);
+ out[46 + outpos] = ((in[13 + inpos] >>> 42) & 524287L);
+ out[47 + outpos] = (in[13 + inpos] >>> 61)
+ | ((in[14 + inpos] & 65535L) << (19 - 16));
+ out[48 + outpos] = ((in[14 + inpos] >>> 16) & 524287L);
+ out[49 + outpos] = ((in[14 + inpos] >>> 35) & 524287L);
+ out[50 + outpos] = (in[14 + inpos] >>> 54)
+ | ((in[15 + inpos] & 511L) << (19 - 9));
+ out[51 + outpos] = ((in[15 + inpos] >>> 9) & 524287L);
+ out[52 + outpos] = ((in[15 + inpos] >>> 28) & 524287L);
+ out[53 + outpos] = (in[15 + inpos] >>> 47)
+ | ((in[16 + inpos] & 3L) << (19 - 2));
+ out[54 + outpos] = ((in[16 + inpos] >>> 2) & 524287L);
+ out[55 + outpos] = ((in[16 + inpos] >>> 21) & 524287L);
+ out[56 + outpos] = ((in[16 + inpos] >>> 40) & 524287L);
+ out[57 + outpos] = (in[16 + inpos] >>> 59)
+ | ((in[17 + inpos] & 16383L) << (19 - 14));
+ out[58 + outpos] = ((in[17 + inpos] >>> 14) & 524287L);
+ out[59 + outpos] = ((in[17 + inpos] >>> 33) & 524287L);
+ out[60 + outpos] = (in[17 + inpos] >>> 52)
+ | ((in[18 + inpos] & 127L) << (19 - 7));
+ out[61 + outpos] = ((in[18 + inpos] >>> 7) & 524287L);
+ out[62 + outpos] = ((in[18 + inpos] >>> 26) & 524287L);
+ out[63 + outpos] = (in[18 + inpos] >>> 45);
+ }
+
+ protected static void fastunpack20(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1048575L);
+ out[1 + outpos] = ((in[inpos] >>> 20) & 1048575L);
+ out[2 + outpos] = ((in[inpos] >>> 40) & 1048575L);
+ out[3 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 65535L) << (20 - 16));
+ out[4 + outpos] = ((in[1 + inpos] >>> 16) & 1048575L);
+ out[5 + outpos] = ((in[1 + inpos] >>> 36) & 1048575L);
+ out[6 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 4095L) << (20 - 12));
+ out[7 + outpos] = ((in[2 + inpos] >>> 12) & 1048575L);
+ out[8 + outpos] = ((in[2 + inpos] >>> 32) & 1048575L);
+ out[9 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 255L) << (20 - 8));
+ out[10 + outpos] = ((in[3 + inpos] >>> 8) & 1048575L);
+ out[11 + outpos] = ((in[3 + inpos] >>> 28) & 1048575L);
+ out[12 + outpos] = (in[3 + inpos] >>> 48)
+ | ((in[4 + inpos] & 15L) << (20 - 4));
+ out[13 + outpos] = ((in[4 + inpos] >>> 4) & 1048575L);
+ out[14 + outpos] = ((in[4 + inpos] >>> 24) & 1048575L);
+ out[15 + outpos] = (in[4 + inpos] >>> 44);
+ out[16 + outpos] = (in[5 + inpos] & 1048575L);
+ out[17 + outpos] = ((in[5 + inpos] >>> 20) & 1048575L);
+ out[18 + outpos] = ((in[5 + inpos] >>> 40) & 1048575L);
+ out[19 + outpos] = (in[5 + inpos] >>> 60)
+ | ((in[6 + inpos] & 65535L) << (20 - 16));
+ out[20 + outpos] = ((in[6 + inpos] >>> 16) & 1048575L);
+ out[21 + outpos] = ((in[6 + inpos] >>> 36) & 1048575L);
+ out[22 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 4095L) << (20 - 12));
+ out[23 + outpos] = ((in[7 + inpos] >>> 12) & 1048575L);
+ out[24 + outpos] = ((in[7 + inpos] >>> 32) & 1048575L);
+ out[25 + outpos] = (in[7 + inpos] >>> 52)
+ | ((in[8 + inpos] & 255L) << (20 - 8));
+ out[26 + outpos] = ((in[8 + inpos] >>> 8) & 1048575L);
+ out[27 + outpos] = ((in[8 + inpos] >>> 28) & 1048575L);
+ out[28 + outpos] = (in[8 + inpos] >>> 48)
+ | ((in[9 + inpos] & 15L) << (20 - 4));
+ out[29 + outpos] = ((in[9 + inpos] >>> 4) & 1048575L);
+ out[30 + outpos] = ((in[9 + inpos] >>> 24) & 1048575L);
+ out[31 + outpos] = (in[9 + inpos] >>> 44);
+ out[32 + outpos] = (in[10 + inpos] & 1048575L);
+ out[33 + outpos] = ((in[10 + inpos] >>> 20) & 1048575L);
+ out[34 + outpos] = ((in[10 + inpos] >>> 40) & 1048575L);
+ out[35 + outpos] = (in[10 + inpos] >>> 60)
+ | ((in[11 + inpos] & 65535L) << (20 - 16));
+ out[36 + outpos] = ((in[11 + inpos] >>> 16) & 1048575L);
+ out[37 + outpos] = ((in[11 + inpos] >>> 36) & 1048575L);
+ out[38 + outpos] = (in[11 + inpos] >>> 56)
+ | ((in[12 + inpos] & 4095L) << (20 - 12));
+ out[39 + outpos] = ((in[12 + inpos] >>> 12) & 1048575L);
+ out[40 + outpos] = ((in[12 + inpos] >>> 32) & 1048575L);
+ out[41 + outpos] = (in[12 + inpos] >>> 52)
+ | ((in[13 + inpos] & 255L) << (20 - 8));
+ out[42 + outpos] = ((in[13 + inpos] >>> 8) & 1048575L);
+ out[43 + outpos] = ((in[13 + inpos] >>> 28) & 1048575L);
+ out[44 + outpos] = (in[13 + inpos] >>> 48)
+ | ((in[14 + inpos] & 15L) << (20 - 4));
+ out[45 + outpos] = ((in[14 + inpos] >>> 4) & 1048575L);
+ out[46 + outpos] = ((in[14 + inpos] >>> 24) & 1048575L);
+ out[47 + outpos] = (in[14 + inpos] >>> 44);
+ out[48 + outpos] = (in[15 + inpos] & 1048575L);
+ out[49 + outpos] = ((in[15 + inpos] >>> 20) & 1048575L);
+ out[50 + outpos] = ((in[15 + inpos] >>> 40) & 1048575L);
+ out[51 + outpos] = (in[15 + inpos] >>> 60)
+ | ((in[16 + inpos] & 65535L) << (20 - 16));
+ out[52 + outpos] = ((in[16 + inpos] >>> 16) & 1048575L);
+ out[53 + outpos] = ((in[16 + inpos] >>> 36) & 1048575L);
+ out[54 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 4095L) << (20 - 12));
+ out[55 + outpos] = ((in[17 + inpos] >>> 12) & 1048575L);
+ out[56 + outpos] = ((in[17 + inpos] >>> 32) & 1048575L);
+ out[57 + outpos] = (in[17 + inpos] >>> 52)
+ | ((in[18 + inpos] & 255L) << (20 - 8));
+ out[58 + outpos] = ((in[18 + inpos] >>> 8) & 1048575L);
+ out[59 + outpos] = ((in[18 + inpos] >>> 28) & 1048575L);
+ out[60 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 15L) << (20 - 4));
+ out[61 + outpos] = ((in[19 + inpos] >>> 4) & 1048575L);
+ out[62 + outpos] = ((in[19 + inpos] >>> 24) & 1048575L);
+ out[63 + outpos] = (in[19 + inpos] >>> 44);
+ }
+
+ protected static void fastunpack21(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 2097151L);
+ out[1 + outpos] = ((in[inpos] >>> 21) & 2097151L);
+ out[2 + outpos] = ((in[inpos] >>> 42) & 2097151L);
+ out[3 + outpos] = (in[inpos] >>> 63)
+ | ((in[1 + inpos] & 1048575L) << (21 - 20));
+ out[4 + outpos] = ((in[1 + inpos] >>> 20) & 2097151L);
+ out[5 + outpos] = ((in[1 + inpos] >>> 41) & 2097151L);
+ out[6 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 524287L) << (21 - 19));
+ out[7 + outpos] = ((in[2 + inpos] >>> 19) & 2097151L);
+ out[8 + outpos] = ((in[2 + inpos] >>> 40) & 2097151L);
+ out[9 + outpos] = (in[2 + inpos] >>> 61)
+ | ((in[3 + inpos] & 262143L) << (21 - 18));
+ out[10 + outpos] = ((in[3 + inpos] >>> 18) & 2097151L);
+ out[11 + outpos] = ((in[3 + inpos] >>> 39) & 2097151L);
+ out[12 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 131071L) << (21 - 17));
+ out[13 + outpos] = ((in[4 + inpos] >>> 17) & 2097151L);
+ out[14 + outpos] = ((in[4 + inpos] >>> 38) & 2097151L);
+ out[15 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 65535L) << (21 - 16));
+ out[16 + outpos] = ((in[5 + inpos] >>> 16) & 2097151L);
+ out[17 + outpos] = ((in[5 + inpos] >>> 37) & 2097151L);
+ out[18 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 32767L) << (21 - 15));
+ out[19 + outpos] = ((in[6 + inpos] >>> 15) & 2097151L);
+ out[20 + outpos] = ((in[6 + inpos] >>> 36) & 2097151L);
+ out[21 + outpos] = (in[6 + inpos] >>> 57)
+ | ((in[7 + inpos] & 16383L) << (21 - 14));
+ out[22 + outpos] = ((in[7 + inpos] >>> 14) & 2097151L);
+ out[23 + outpos] = ((in[7 + inpos] >>> 35) & 2097151L);
+ out[24 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 8191L) << (21 - 13));
+ out[25 + outpos] = ((in[8 + inpos] >>> 13) & 2097151L);
+ out[26 + outpos] = ((in[8 + inpos] >>> 34) & 2097151L);
+ out[27 + outpos] = (in[8 + inpos] >>> 55)
+ | ((in[9 + inpos] & 4095L) << (21 - 12));
+ out[28 + outpos] = ((in[9 + inpos] >>> 12) & 2097151L);
+ out[29 + outpos] = ((in[9 + inpos] >>> 33) & 2097151L);
+ out[30 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 2047L) << (21 - 11));
+ out[31 + outpos] = ((in[10 + inpos] >>> 11) & 2097151L);
+ out[32 + outpos] = ((in[10 + inpos] >>> 32) & 2097151L);
+ out[33 + outpos] = (in[10 + inpos] >>> 53)
+ | ((in[11 + inpos] & 1023L) << (21 - 10));
+ out[34 + outpos] = ((in[11 + inpos] >>> 10) & 2097151L);
+ out[35 + outpos] = ((in[11 + inpos] >>> 31) & 2097151L);
+ out[36 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 511L) << (21 - 9));
+ out[37 + outpos] = ((in[12 + inpos] >>> 9) & 2097151L);
+ out[38 + outpos] = ((in[12 + inpos] >>> 30) & 2097151L);
+ out[39 + outpos] = (in[12 + inpos] >>> 51)
+ | ((in[13 + inpos] & 255L) << (21 - 8));
+ out[40 + outpos] = ((in[13 + inpos] >>> 8) & 2097151L);
+ out[41 + outpos] = ((in[13 + inpos] >>> 29) & 2097151L);
+ out[42 + outpos] = (in[13 + inpos] >>> 50)
+ | ((in[14 + inpos] & 127L) << (21 - 7));
+ out[43 + outpos] = ((in[14 + inpos] >>> 7) & 2097151L);
+ out[44 + outpos] = ((in[14 + inpos] >>> 28) & 2097151L);
+ out[45 + outpos] = (in[14 + inpos] >>> 49)
+ | ((in[15 + inpos] & 63L) << (21 - 6));
+ out[46 + outpos] = ((in[15 + inpos] >>> 6) & 2097151L);
+ out[47 + outpos] = ((in[15 + inpos] >>> 27) & 2097151L);
+ out[48 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 31L) << (21 - 5));
+ out[49 + outpos] = ((in[16 + inpos] >>> 5) & 2097151L);
+ out[50 + outpos] = ((in[16 + inpos] >>> 26) & 2097151L);
+ out[51 + outpos] = (in[16 + inpos] >>> 47)
+ | ((in[17 + inpos] & 15L) << (21 - 4));
+ out[52 + outpos] = ((in[17 + inpos] >>> 4) & 2097151L);
+ out[53 + outpos] = ((in[17 + inpos] >>> 25) & 2097151L);
+ out[54 + outpos] = (in[17 + inpos] >>> 46)
+ | ((in[18 + inpos] & 7L) << (21 - 3));
+ out[55 + outpos] = ((in[18 + inpos] >>> 3) & 2097151L);
+ out[56 + outpos] = ((in[18 + inpos] >>> 24) & 2097151L);
+ out[57 + outpos] = (in[18 + inpos] >>> 45)
+ | ((in[19 + inpos] & 3L) << (21 - 2));
+ out[58 + outpos] = ((in[19 + inpos] >>> 2) & 2097151L);
+ out[59 + outpos] = ((in[19 + inpos] >>> 23) & 2097151L);
+ out[60 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 1L) << (21 - 1));
+ out[61 + outpos] = ((in[20 + inpos] >>> 1) & 2097151L);
+ out[62 + outpos] = ((in[20 + inpos] >>> 22) & 2097151L);
+ out[63 + outpos] = (in[20 + inpos] >>> 43);
+ }
+
+ protected static void fastunpack22(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 4194303L);
+ out[1 + outpos] = ((in[inpos] >>> 22) & 4194303L);
+ out[2 + outpos] = (in[inpos] >>> 44)
+ | ((in[1 + inpos] & 3L) << (22 - 2));
+ out[3 + outpos] = ((in[1 + inpos] >>> 2) & 4194303L);
+ out[4 + outpos] = ((in[1 + inpos] >>> 24) & 4194303L);
+ out[5 + outpos] = (in[1 + inpos] >>> 46)
+ | ((in[2 + inpos] & 15L) << (22 - 4));
+ out[6 + outpos] = ((in[2 + inpos] >>> 4) & 4194303L);
+ out[7 + outpos] = ((in[2 + inpos] >>> 26) & 4194303L);
+ out[8 + outpos] = (in[2 + inpos] >>> 48)
+ | ((in[3 + inpos] & 63L) << (22 - 6));
+ out[9 + outpos] = ((in[3 + inpos] >>> 6) & 4194303L);
+ out[10 + outpos] = ((in[3 + inpos] >>> 28) & 4194303L);
+ out[11 + outpos] = (in[3 + inpos] >>> 50)
+ | ((in[4 + inpos] & 255L) << (22 - 8));
+ out[12 + outpos] = ((in[4 + inpos] >>> 8) & 4194303L);
+ out[13 + outpos] = ((in[4 + inpos] >>> 30) & 4194303L);
+ out[14 + outpos] = (in[4 + inpos] >>> 52)
+ | ((in[5 + inpos] & 1023L) << (22 - 10));
+ out[15 + outpos] = ((in[5 + inpos] >>> 10) & 4194303L);
+ out[16 + outpos] = ((in[5 + inpos] >>> 32) & 4194303L);
+ out[17 + outpos] = (in[5 + inpos] >>> 54)
+ | ((in[6 + inpos] & 4095L) << (22 - 12));
+ out[18 + outpos] = ((in[6 + inpos] >>> 12) & 4194303L);
+ out[19 + outpos] = ((in[6 + inpos] >>> 34) & 4194303L);
+ out[20 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 16383L) << (22 - 14));
+ out[21 + outpos] = ((in[7 + inpos] >>> 14) & 4194303L);
+ out[22 + outpos] = ((in[7 + inpos] >>> 36) & 4194303L);
+ out[23 + outpos] = (in[7 + inpos] >>> 58)
+ | ((in[8 + inpos] & 65535L) << (22 - 16));
+ out[24 + outpos] = ((in[8 + inpos] >>> 16) & 4194303L);
+ out[25 + outpos] = ((in[8 + inpos] >>> 38) & 4194303L);
+ out[26 + outpos] = (in[8 + inpos] >>> 60)
+ | ((in[9 + inpos] & 262143L) << (22 - 18));
+ out[27 + outpos] = ((in[9 + inpos] >>> 18) & 4194303L);
+ out[28 + outpos] = ((in[9 + inpos] >>> 40) & 4194303L);
+ out[29 + outpos] = (in[9 + inpos] >>> 62)
+ | ((in[10 + inpos] & 1048575L) << (22 - 20));
+ out[30 + outpos] = ((in[10 + inpos] >>> 20) & 4194303L);
+ out[31 + outpos] = (in[10 + inpos] >>> 42);
+ out[32 + outpos] = (in[11 + inpos] & 4194303L);
+ out[33 + outpos] = ((in[11 + inpos] >>> 22) & 4194303L);
+ out[34 + outpos] = (in[11 + inpos] >>> 44)
+ | ((in[12 + inpos] & 3L) << (22 - 2));
+ out[35 + outpos] = ((in[12 + inpos] >>> 2) & 4194303L);
+ out[36 + outpos] = ((in[12 + inpos] >>> 24) & 4194303L);
+ out[37 + outpos] = (in[12 + inpos] >>> 46)
+ | ((in[13 + inpos] & 15L) << (22 - 4));
+ out[38 + outpos] = ((in[13 + inpos] >>> 4) & 4194303L);
+ out[39 + outpos] = ((in[13 + inpos] >>> 26) & 4194303L);
+ out[40 + outpos] = (in[13 + inpos] >>> 48)
+ | ((in[14 + inpos] & 63L) << (22 - 6));
+ out[41 + outpos] = ((in[14 + inpos] >>> 6) & 4194303L);
+ out[42 + outpos] = ((in[14 + inpos] >>> 28) & 4194303L);
+ out[43 + outpos] = (in[14 + inpos] >>> 50)
+ | ((in[15 + inpos] & 255L) << (22 - 8));
+ out[44 + outpos] = ((in[15 + inpos] >>> 8) & 4194303L);
+ out[45 + outpos] = ((in[15 + inpos] >>> 30) & 4194303L);
+ out[46 + outpos] = (in[15 + inpos] >>> 52)
+ | ((in[16 + inpos] & 1023L) << (22 - 10));
+ out[47 + outpos] = ((in[16 + inpos] >>> 10) & 4194303L);
+ out[48 + outpos] = ((in[16 + inpos] >>> 32) & 4194303L);
+ out[49 + outpos] = (in[16 + inpos] >>> 54)
+ | ((in[17 + inpos] & 4095L) << (22 - 12));
+ out[50 + outpos] = ((in[17 + inpos] >>> 12) & 4194303L);
+ out[51 + outpos] = ((in[17 + inpos] >>> 34) & 4194303L);
+ out[52 + outpos] = (in[17 + inpos] >>> 56)
+ | ((in[18 + inpos] & 16383L) << (22 - 14));
+ out[53 + outpos] = ((in[18 + inpos] >>> 14) & 4194303L);
+ out[54 + outpos] = ((in[18 + inpos] >>> 36) & 4194303L);
+ out[55 + outpos] = (in[18 + inpos] >>> 58)
+ | ((in[19 + inpos] & 65535L) << (22 - 16));
+ out[56 + outpos] = ((in[19 + inpos] >>> 16) & 4194303L);
+ out[57 + outpos] = ((in[19 + inpos] >>> 38) & 4194303L);
+ out[58 + outpos] = (in[19 + inpos] >>> 60)
+ | ((in[20 + inpos] & 262143L) << (22 - 18));
+ out[59 + outpos] = ((in[20 + inpos] >>> 18) & 4194303L);
+ out[60 + outpos] = ((in[20 + inpos] >>> 40) & 4194303L);
+ out[61 + outpos] = (in[20 + inpos] >>> 62)
+ | ((in[21 + inpos] & 1048575L) << (22 - 20));
+ out[62 + outpos] = ((in[21 + inpos] >>> 20) & 4194303L);
+ out[63 + outpos] = (in[21 + inpos] >>> 42);
+ }
+
+ protected static void fastunpack23(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 8388607L);
+ out[1 + outpos] = ((in[inpos] >>> 23) & 8388607L);
+ out[2 + outpos] = (in[inpos] >>> 46)
+ | ((in[1 + inpos] & 31L) << (23 - 5));
+ out[3 + outpos] = ((in[1 + inpos] >>> 5) & 8388607L);
+ out[4 + outpos] = ((in[1 + inpos] >>> 28) & 8388607L);
+ out[5 + outpos] = (in[1 + inpos] >>> 51)
+ | ((in[2 + inpos] & 1023L) << (23 - 10));
+ out[6 + outpos] = ((in[2 + inpos] >>> 10) & 8388607L);
+ out[7 + outpos] = ((in[2 + inpos] >>> 33) & 8388607L);
+ out[8 + outpos] = (in[2 + inpos] >>> 56)
+ | ((in[3 + inpos] & 32767L) << (23 - 15));
+ out[9 + outpos] = ((in[3 + inpos] >>> 15) & 8388607L);
+ out[10 + outpos] = ((in[3 + inpos] >>> 38) & 8388607L);
+ out[11 + outpos] = (in[3 + inpos] >>> 61)
+ | ((in[4 + inpos] & 1048575L) << (23 - 20));
+ out[12 + outpos] = ((in[4 + inpos] >>> 20) & 8388607L);
+ out[13 + outpos] = (in[4 + inpos] >>> 43)
+ | ((in[5 + inpos] & 3L) << (23 - 2));
+ out[14 + outpos] = ((in[5 + inpos] >>> 2) & 8388607L);
+ out[15 + outpos] = ((in[5 + inpos] >>> 25) & 8388607L);
+ out[16 + outpos] = (in[5 + inpos] >>> 48)
+ | ((in[6 + inpos] & 127L) << (23 - 7));
+ out[17 + outpos] = ((in[6 + inpos] >>> 7) & 8388607L);
+ out[18 + outpos] = ((in[6 + inpos] >>> 30) & 8388607L);
+ out[19 + outpos] = (in[6 + inpos] >>> 53)
+ | ((in[7 + inpos] & 4095L) << (23 - 12));
+ out[20 + outpos] = ((in[7 + inpos] >>> 12) & 8388607L);
+ out[21 + outpos] = ((in[7 + inpos] >>> 35) & 8388607L);
+ out[22 + outpos] = (in[7 + inpos] >>> 58)
+ | ((in[8 + inpos] & 131071L) << (23 - 17));
+ out[23 + outpos] = ((in[8 + inpos] >>> 17) & 8388607L);
+ out[24 + outpos] = ((in[8 + inpos] >>> 40) & 8388607L);
+ out[25 + outpos] = (in[8 + inpos] >>> 63)
+ | ((in[9 + inpos] & 4194303L) << (23 - 22));
+ out[26 + outpos] = ((in[9 + inpos] >>> 22) & 8388607L);
+ out[27 + outpos] = (in[9 + inpos] >>> 45)
+ | ((in[10 + inpos] & 15L) << (23 - 4));
+ out[28 + outpos] = ((in[10 + inpos] >>> 4) & 8388607L);
+ out[29 + outpos] = ((in[10 + inpos] >>> 27) & 8388607L);
+ out[30 + outpos] = (in[10 + inpos] >>> 50)
+ | ((in[11 + inpos] & 511L) << (23 - 9));
+ out[31 + outpos] = ((in[11 + inpos] >>> 9) & 8388607L);
+ out[32 + outpos] = ((in[11 + inpos] >>> 32) & 8388607L);
+ out[33 + outpos] = (in[11 + inpos] >>> 55)
+ | ((in[12 + inpos] & 16383L) << (23 - 14));
+ out[34 + outpos] = ((in[12 + inpos] >>> 14) & 8388607L);
+ out[35 + outpos] = ((in[12 + inpos] >>> 37) & 8388607L);
+ out[36 + outpos] = (in[12 + inpos] >>> 60)
+ | ((in[13 + inpos] & 524287L) << (23 - 19));
+ out[37 + outpos] = ((in[13 + inpos] >>> 19) & 8388607L);
+ out[38 + outpos] = (in[13 + inpos] >>> 42)
+ | ((in[14 + inpos] & 1L) << (23 - 1));
+ out[39 + outpos] = ((in[14 + inpos] >>> 1) & 8388607L);
+ out[40 + outpos] = ((in[14 + inpos] >>> 24) & 8388607L);
+ out[41 + outpos] = (in[14 + inpos] >>> 47)
+ | ((in[15 + inpos] & 63L) << (23 - 6));
+ out[42 + outpos] = ((in[15 + inpos] >>> 6) & 8388607L);
+ out[43 + outpos] = ((in[15 + inpos] >>> 29) & 8388607L);
+ out[44 + outpos] = (in[15 + inpos] >>> 52)
+ | ((in[16 + inpos] & 2047L) << (23 - 11));
+ out[45 + outpos] = ((in[16 + inpos] >>> 11) & 8388607L);
+ out[46 + outpos] = ((in[16 + inpos] >>> 34) & 8388607L);
+ out[47 + outpos] = (in[16 + inpos] >>> 57)
+ | ((in[17 + inpos] & 65535L) << (23 - 16));
+ out[48 + outpos] = ((in[17 + inpos] >>> 16) & 8388607L);
+ out[49 + outpos] = ((in[17 + inpos] >>> 39) & 8388607L);
+ out[50 + outpos] = (in[17 + inpos] >>> 62)
+ | ((in[18 + inpos] & 2097151L) << (23 - 21));
+ out[51 + outpos] = ((in[18 + inpos] >>> 21) & 8388607L);
+ out[52 + outpos] = (in[18 + inpos] >>> 44)
+ | ((in[19 + inpos] & 7L) << (23 - 3));
+ out[53 + outpos] = ((in[19 + inpos] >>> 3) & 8388607L);
+ out[54 + outpos] = ((in[19 + inpos] >>> 26) & 8388607L);
+ out[55 + outpos] = (in[19 + inpos] >>> 49)
+ | ((in[20 + inpos] & 255L) << (23 - 8));
+ out[56 + outpos] = ((in[20 + inpos] >>> 8) & 8388607L);
+ out[57 + outpos] = ((in[20 + inpos] >>> 31) & 8388607L);
+ out[58 + outpos] = (in[20 + inpos] >>> 54)
+ | ((in[21 + inpos] & 8191L) << (23 - 13));
+ out[59 + outpos] = ((in[21 + inpos] >>> 13) & 8388607L);
+ out[60 + outpos] = ((in[21 + inpos] >>> 36) & 8388607L);
+ out[61 + outpos] = (in[21 + inpos] >>> 59)
+ | ((in[22 + inpos] & 262143L) << (23 - 18));
+ out[62 + outpos] = ((in[22 + inpos] >>> 18) & 8388607L);
+ out[63 + outpos] = (in[22 + inpos] >>> 41);
+ }
+
+ protected static void fastunpack24(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 16777215L);
+ out[1 + outpos] = ((in[inpos] >>> 24) & 16777215L);
+ out[2 + outpos] = (in[inpos] >>> 48)
+ | ((in[1 + inpos] & 255L) << (24 - 8));
+ out[3 + outpos] = ((in[1 + inpos] >>> 8) & 16777215L);
+ out[4 + outpos] = ((in[1 + inpos] >>> 32) & 16777215L);
+ out[5 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 65535L) << (24 - 16));
+ out[6 + outpos] = ((in[2 + inpos] >>> 16) & 16777215L);
+ out[7 + outpos] = (in[2 + inpos] >>> 40);
+ out[8 + outpos] = (in[3 + inpos] & 16777215L);
+ out[9 + outpos] = ((in[3 + inpos] >>> 24) & 16777215L);
+ out[10 + outpos] = (in[3 + inpos] >>> 48)
+ | ((in[4 + inpos] & 255L) << (24 - 8));
+ out[11 + outpos] = ((in[4 + inpos] >>> 8) & 16777215L);
+ out[12 + outpos] = ((in[4 + inpos] >>> 32) & 16777215L);
+ out[13 + outpos] = (in[4 + inpos] >>> 56)
+ | ((in[5 + inpos] & 65535L) << (24 - 16));
+ out[14 + outpos] = ((in[5 + inpos] >>> 16) & 16777215L);
+ out[15 + outpos] = (in[5 + inpos] >>> 40);
+ out[16 + outpos] = (in[6 + inpos] & 16777215L);
+ out[17 + outpos] = ((in[6 + inpos] >>> 24) & 16777215L);
+ out[18 + outpos] = (in[6 + inpos] >>> 48)
+ | ((in[7 + inpos] & 255L) << (24 - 8));
+ out[19 + outpos] = ((in[7 + inpos] >>> 8) & 16777215L);
+ out[20 + outpos] = ((in[7 + inpos] >>> 32) & 16777215L);
+ out[21 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 65535L) << (24 - 16));
+ out[22 + outpos] = ((in[8 + inpos] >>> 16) & 16777215L);
+ out[23 + outpos] = (in[8 + inpos] >>> 40);
+ out[24 + outpos] = (in[9 + inpos] & 16777215L);
+ out[25 + outpos] = ((in[9 + inpos] >>> 24) & 16777215L);
+ out[26 + outpos] = (in[9 + inpos] >>> 48)
+ | ((in[10 + inpos] & 255L) << (24 - 8));
+ out[27 + outpos] = ((in[10 + inpos] >>> 8) & 16777215L);
+ out[28 + outpos] = ((in[10 + inpos] >>> 32) & 16777215L);
+ out[29 + outpos] = (in[10 + inpos] >>> 56)
+ | ((in[11 + inpos] & 65535L) << (24 - 16));
+ out[30 + outpos] = ((in[11 + inpos] >>> 16) & 16777215L);
+ out[31 + outpos] = (in[11 + inpos] >>> 40);
+ out[32 + outpos] = (in[12 + inpos] & 16777215L);
+ out[33 + outpos] = ((in[12 + inpos] >>> 24) & 16777215L);
+ out[34 + outpos] = (in[12 + inpos] >>> 48)
+ | ((in[13 + inpos] & 255L) << (24 - 8));
+ out[35 + outpos] = ((in[13 + inpos] >>> 8) & 16777215L);
+ out[36 + outpos] = ((in[13 + inpos] >>> 32) & 16777215L);
+ out[37 + outpos] = (in[13 + inpos] >>> 56)
+ | ((in[14 + inpos] & 65535L) << (24 - 16));
+ out[38 + outpos] = ((in[14 + inpos] >>> 16) & 16777215L);
+ out[39 + outpos] = (in[14 + inpos] >>> 40);
+ out[40 + outpos] = (in[15 + inpos] & 16777215L);
+ out[41 + outpos] = ((in[15 + inpos] >>> 24) & 16777215L);
+ out[42 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 255L) << (24 - 8));
+ out[43 + outpos] = ((in[16 + inpos] >>> 8) & 16777215L);
+ out[44 + outpos] = ((in[16 + inpos] >>> 32) & 16777215L);
+ out[45 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 65535L) << (24 - 16));
+ out[46 + outpos] = ((in[17 + inpos] >>> 16) & 16777215L);
+ out[47 + outpos] = (in[17 + inpos] >>> 40);
+ out[48 + outpos] = (in[18 + inpos] & 16777215L);
+ out[49 + outpos] = ((in[18 + inpos] >>> 24) & 16777215L);
+ out[50 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 255L) << (24 - 8));
+ out[51 + outpos] = ((in[19 + inpos] >>> 8) & 16777215L);
+ out[52 + outpos] = ((in[19 + inpos] >>> 32) & 16777215L);
+ out[53 + outpos] = (in[19 + inpos] >>> 56)
+ | ((in[20 + inpos] & 65535L) << (24 - 16));
+ out[54 + outpos] = ((in[20 + inpos] >>> 16) & 16777215L);
+ out[55 + outpos] = (in[20 + inpos] >>> 40);
+ out[56 + outpos] = (in[21 + inpos] & 16777215L);
+ out[57 + outpos] = ((in[21 + inpos] >>> 24) & 16777215L);
+ out[58 + outpos] = (in[21 + inpos] >>> 48)
+ | ((in[22 + inpos] & 255L) << (24 - 8));
+ out[59 + outpos] = ((in[22 + inpos] >>> 8) & 16777215L);
+ out[60 + outpos] = ((in[22 + inpos] >>> 32) & 16777215L);
+ out[61 + outpos] = (in[22 + inpos] >>> 56)
+ | ((in[23 + inpos] & 65535L) << (24 - 16));
+ out[62 + outpos] = ((in[23 + inpos] >>> 16) & 16777215L);
+ out[63 + outpos] = (in[23 + inpos] >>> 40);
+ }
+
+ protected static void fastunpack25(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 33554431L);
+ out[1 + outpos] = ((in[inpos] >>> 25) & 33554431L);
+ out[2 + outpos] = (in[inpos] >>> 50)
+ | ((in[1 + inpos] & 2047L) << (25 - 11));
+ out[3 + outpos] = ((in[1 + inpos] >>> 11) & 33554431L);
+ out[4 + outpos] = ((in[1 + inpos] >>> 36) & 33554431L);
+ out[5 + outpos] = (in[1 + inpos] >>> 61)
+ | ((in[2 + inpos] & 4194303L) << (25 - 22));
+ out[6 + outpos] = ((in[2 + inpos] >>> 22) & 33554431L);
+ out[7 + outpos] = (in[2 + inpos] >>> 47)
+ | ((in[3 + inpos] & 255L) << (25 - 8));
+ out[8 + outpos] = ((in[3 + inpos] >>> 8) & 33554431L);
+ out[9 + outpos] = ((in[3 + inpos] >>> 33) & 33554431L);
+ out[10 + outpos] = (in[3 + inpos] >>> 58)
+ | ((in[4 + inpos] & 524287L) << (25 - 19));
+ out[11 + outpos] = ((in[4 + inpos] >>> 19) & 33554431L);
+ out[12 + outpos] = (in[4 + inpos] >>> 44)
+ | ((in[5 + inpos] & 31L) << (25 - 5));
+ out[13 + outpos] = ((in[5 + inpos] >>> 5) & 33554431L);
+ out[14 + outpos] = ((in[5 + inpos] >>> 30) & 33554431L);
+ out[15 + outpos] = (in[5 + inpos] >>> 55)
+ | ((in[6 + inpos] & 65535L) << (25 - 16));
+ out[16 + outpos] = ((in[6 + inpos] >>> 16) & 33554431L);
+ out[17 + outpos] = (in[6 + inpos] >>> 41)
+ | ((in[7 + inpos] & 3L) << (25 - 2));
+ out[18 + outpos] = ((in[7 + inpos] >>> 2) & 33554431L);
+ out[19 + outpos] = ((in[7 + inpos] >>> 27) & 33554431L);
+ out[20 + outpos] = (in[7 + inpos] >>> 52)
+ | ((in[8 + inpos] & 8191L) << (25 - 13));
+ out[21 + outpos] = ((in[8 + inpos] >>> 13) & 33554431L);
+ out[22 + outpos] = ((in[8 + inpos] >>> 38) & 33554431L);
+ out[23 + outpos] = (in[8 + inpos] >>> 63)
+ | ((in[9 + inpos] & 16777215L) << (25 - 24));
+ out[24 + outpos] = ((in[9 + inpos] >>> 24) & 33554431L);
+ out[25 + outpos] = (in[9 + inpos] >>> 49)
+ | ((in[10 + inpos] & 1023L) << (25 - 10));
+ out[26 + outpos] = ((in[10 + inpos] >>> 10) & 33554431L);
+ out[27 + outpos] = ((in[10 + inpos] >>> 35) & 33554431L);
+ out[28 + outpos] = (in[10 + inpos] >>> 60)
+ | ((in[11 + inpos] & 2097151L) << (25 - 21));
+ out[29 + outpos] = ((in[11 + inpos] >>> 21) & 33554431L);
+ out[30 + outpos] = (in[11 + inpos] >>> 46)
+ | ((in[12 + inpos] & 127L) << (25 - 7));
+ out[31 + outpos] = ((in[12 + inpos] >>> 7) & 33554431L);
+ out[32 + outpos] = ((in[12 + inpos] >>> 32) & 33554431L);
+ out[33 + outpos] = (in[12 + inpos] >>> 57)
+ | ((in[13 + inpos] & 262143L) << (25 - 18));
+ out[34 + outpos] = ((in[13 + inpos] >>> 18) & 33554431L);
+ out[35 + outpos] = (in[13 + inpos] >>> 43)
+ | ((in[14 + inpos] & 15L) << (25 - 4));
+ out[36 + outpos] = ((in[14 + inpos] >>> 4) & 33554431L);
+ out[37 + outpos] = ((in[14 + inpos] >>> 29) & 33554431L);
+ out[38 + outpos] = (in[14 + inpos] >>> 54)
+ | ((in[15 + inpos] & 32767L) << (25 - 15));
+ out[39 + outpos] = ((in[15 + inpos] >>> 15) & 33554431L);
+ out[40 + outpos] = (in[15 + inpos] >>> 40)
+ | ((in[16 + inpos] & 1L) << (25 - 1));
+ out[41 + outpos] = ((in[16 + inpos] >>> 1) & 33554431L);
+ out[42 + outpos] = ((in[16 + inpos] >>> 26) & 33554431L);
+ out[43 + outpos] = (in[16 + inpos] >>> 51)
+ | ((in[17 + inpos] & 4095L) << (25 - 12));
+ out[44 + outpos] = ((in[17 + inpos] >>> 12) & 33554431L);
+ out[45 + outpos] = ((in[17 + inpos] >>> 37) & 33554431L);
+ out[46 + outpos] = (in[17 + inpos] >>> 62)
+ | ((in[18 + inpos] & 8388607L) << (25 - 23));
+ out[47 + outpos] = ((in[18 + inpos] >>> 23) & 33554431L);
+ out[48 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 511L) << (25 - 9));
+ out[49 + outpos] = ((in[19 + inpos] >>> 9) & 33554431L);
+ out[50 + outpos] = ((in[19 + inpos] >>> 34) & 33554431L);
+ out[51 + outpos] = (in[19 + inpos] >>> 59)
+ | ((in[20 + inpos] & 1048575L) << (25 - 20));
+ out[52 + outpos] = ((in[20 + inpos] >>> 20) & 33554431L);
+ out[53 + outpos] = (in[20 + inpos] >>> 45)
+ | ((in[21 + inpos] & 63L) << (25 - 6));
+ out[54 + outpos] = ((in[21 + inpos] >>> 6) & 33554431L);
+ out[55 + outpos] = ((in[21 + inpos] >>> 31) & 33554431L);
+ out[56 + outpos] = (in[21 + inpos] >>> 56)
+ | ((in[22 + inpos] & 131071L) << (25 - 17));
+ out[57 + outpos] = ((in[22 + inpos] >>> 17) & 33554431L);
+ out[58 + outpos] = (in[22 + inpos] >>> 42)
+ | ((in[23 + inpos] & 7L) << (25 - 3));
+ out[59 + outpos] = ((in[23 + inpos] >>> 3) & 33554431L);
+ out[60 + outpos] = ((in[23 + inpos] >>> 28) & 33554431L);
+ out[61 + outpos] = (in[23 + inpos] >>> 53)
+ | ((in[24 + inpos] & 16383L) << (25 - 14));
+ out[62 + outpos] = ((in[24 + inpos] >>> 14) & 33554431L);
+ out[63 + outpos] = (in[24 + inpos] >>> 39);
+ }
+
+ protected static void fastunpack26(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 67108863L);
+ out[1 + outpos] = ((in[inpos] >>> 26) & 67108863L);
+ out[2 + outpos] = (in[inpos] >>> 52)
+ | ((in[1 + inpos] & 16383L) << (26 - 14));
+ out[3 + outpos] = ((in[1 + inpos] >>> 14) & 67108863L);
+ out[4 + outpos] = (in[1 + inpos] >>> 40)
+ | ((in[2 + inpos] & 3L) << (26 - 2));
+ out[5 + outpos] = ((in[2 + inpos] >>> 2) & 67108863L);
+ out[6 + outpos] = ((in[2 + inpos] >>> 28) & 67108863L);
+ out[7 + outpos] = (in[2 + inpos] >>> 54)
+ | ((in[3 + inpos] & 65535L) << (26 - 16));
+ out[8 + outpos] = ((in[3 + inpos] >>> 16) & 67108863L);
+ out[9 + outpos] = (in[3 + inpos] >>> 42)
+ | ((in[4 + inpos] & 15L) << (26 - 4));
+ out[10 + outpos] = ((in[4 + inpos] >>> 4) & 67108863L);
+ out[11 + outpos] = ((in[4 + inpos] >>> 30) & 67108863L);
+ out[12 + outpos] = (in[4 + inpos] >>> 56)
+ | ((in[5 + inpos] & 262143L) << (26 - 18));
+ out[13 + outpos] = ((in[5 + inpos] >>> 18) & 67108863L);
+ out[14 + outpos] = (in[5 + inpos] >>> 44)
+ | ((in[6 + inpos] & 63L) << (26 - 6));
+ out[15 + outpos] = ((in[6 + inpos] >>> 6) & 67108863L);
+ out[16 + outpos] = ((in[6 + inpos] >>> 32) & 67108863L);
+ out[17 + outpos] = (in[6 + inpos] >>> 58)
+ | ((in[7 + inpos] & 1048575L) << (26 - 20));
+ out[18 + outpos] = ((in[7 + inpos] >>> 20) & 67108863L);
+ out[19 + outpos] = (in[7 + inpos] >>> 46)
+ | ((in[8 + inpos] & 255L) << (26 - 8));
+ out[20 + outpos] = ((in[8 + inpos] >>> 8) & 67108863L);
+ out[21 + outpos] = ((in[8 + inpos] >>> 34) & 67108863L);
+ out[22 + outpos] = (in[8 + inpos] >>> 60)
+ | ((in[9 + inpos] & 4194303L) << (26 - 22));
+ out[23 + outpos] = ((in[9 + inpos] >>> 22) & 67108863L);
+ out[24 + outpos] = (in[9 + inpos] >>> 48)
+ | ((in[10 + inpos] & 1023L) << (26 - 10));
+ out[25 + outpos] = ((in[10 + inpos] >>> 10) & 67108863L);
+ out[26 + outpos] = ((in[10 + inpos] >>> 36) & 67108863L);
+ out[27 + outpos] = (in[10 + inpos] >>> 62)
+ | ((in[11 + inpos] & 16777215L) << (26 - 24));
+ out[28 + outpos] = ((in[11 + inpos] >>> 24) & 67108863L);
+ out[29 + outpos] = (in[11 + inpos] >>> 50)
+ | ((in[12 + inpos] & 4095L) << (26 - 12));
+ out[30 + outpos] = ((in[12 + inpos] >>> 12) & 67108863L);
+ out[31 + outpos] = (in[12 + inpos] >>> 38);
+ out[32 + outpos] = (in[13 + inpos] & 67108863L);
+ out[33 + outpos] = ((in[13 + inpos] >>> 26) & 67108863L);
+ out[34 + outpos] = (in[13 + inpos] >>> 52)
+ | ((in[14 + inpos] & 16383L) << (26 - 14));
+ out[35 + outpos] = ((in[14 + inpos] >>> 14) & 67108863L);
+ out[36 + outpos] = (in[14 + inpos] >>> 40)
+ | ((in[15 + inpos] & 3L) << (26 - 2));
+ out[37 + outpos] = ((in[15 + inpos] >>> 2) & 67108863L);
+ out[38 + outpos] = ((in[15 + inpos] >>> 28) & 67108863L);
+ out[39 + outpos] = (in[15 + inpos] >>> 54)
+ | ((in[16 + inpos] & 65535L) << (26 - 16));
+ out[40 + outpos] = ((in[16 + inpos] >>> 16) & 67108863L);
+ out[41 + outpos] = (in[16 + inpos] >>> 42)
+ | ((in[17 + inpos] & 15L) << (26 - 4));
+ out[42 + outpos] = ((in[17 + inpos] >>> 4) & 67108863L);
+ out[43 + outpos] = ((in[17 + inpos] >>> 30) & 67108863L);
+ out[44 + outpos] = (in[17 + inpos] >>> 56)
+ | ((in[18 + inpos] & 262143L) << (26 - 18));
+ out[45 + outpos] = ((in[18 + inpos] >>> 18) & 67108863L);
+ out[46 + outpos] = (in[18 + inpos] >>> 44)
+ | ((in[19 + inpos] & 63L) << (26 - 6));
+ out[47 + outpos] = ((in[19 + inpos] >>> 6) & 67108863L);
+ out[48 + outpos] = ((in[19 + inpos] >>> 32) & 67108863L);
+ out[49 + outpos] = (in[19 + inpos] >>> 58)
+ | ((in[20 + inpos] & 1048575L) << (26 - 20));
+ out[50 + outpos] = ((in[20 + inpos] >>> 20) & 67108863L);
+ out[51 + outpos] = (in[20 + inpos] >>> 46)
+ | ((in[21 + inpos] & 255L) << (26 - 8));
+ out[52 + outpos] = ((in[21 + inpos] >>> 8) & 67108863L);
+ out[53 + outpos] = ((in[21 + inpos] >>> 34) & 67108863L);
+ out[54 + outpos] = (in[21 + inpos] >>> 60)
+ | ((in[22 + inpos] & 4194303L) << (26 - 22));
+ out[55 + outpos] = ((in[22 + inpos] >>> 22) & 67108863L);
+ out[56 + outpos] = (in[22 + inpos] >>> 48)
+ | ((in[23 + inpos] & 1023L) << (26 - 10));
+ out[57 + outpos] = ((in[23 + inpos] >>> 10) & 67108863L);
+ out[58 + outpos] = ((in[23 + inpos] >>> 36) & 67108863L);
+ out[59 + outpos] = (in[23 + inpos] >>> 62)
+ | ((in[24 + inpos] & 16777215L) << (26 - 24));
+ out[60 + outpos] = ((in[24 + inpos] >>> 24) & 67108863L);
+ out[61 + outpos] = (in[24 + inpos] >>> 50)
+ | ((in[25 + inpos] & 4095L) << (26 - 12));
+ out[62 + outpos] = ((in[25 + inpos] >>> 12) & 67108863L);
+ out[63 + outpos] = (in[25 + inpos] >>> 38);
+ }
+
+ protected static void fastunpack27(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 134217727L);
+ out[1 + outpos] = ((in[inpos] >>> 27) & 134217727L);
+ out[2 + outpos] = (in[inpos] >>> 54)
+ | ((in[1 + inpos] & 131071L) << (27 - 17));
+ out[3 + outpos] = ((in[1 + inpos] >>> 17) & 134217727L);
+ out[4 + outpos] = (in[1 + inpos] >>> 44)
+ | ((in[2 + inpos] & 127L) << (27 - 7));
+ out[5 + outpos] = ((in[2 + inpos] >>> 7) & 134217727L);
+ out[6 + outpos] = ((in[2 + inpos] >>> 34) & 134217727L);
+ out[7 + outpos] = (in[2 + inpos] >>> 61)
+ | ((in[3 + inpos] & 16777215L) << (27 - 24));
+ out[8 + outpos] = ((in[3 + inpos] >>> 24) & 134217727L);
+ out[9 + outpos] = (in[3 + inpos] >>> 51)
+ | ((in[4 + inpos] & 16383L) << (27 - 14));
+ out[10 + outpos] = ((in[4 + inpos] >>> 14) & 134217727L);
+ out[11 + outpos] = (in[4 + inpos] >>> 41)
+ | ((in[5 + inpos] & 15L) << (27 - 4));
+ out[12 + outpos] = ((in[5 + inpos] >>> 4) & 134217727L);
+ out[13 + outpos] = ((in[5 + inpos] >>> 31) & 134217727L);
+ out[14 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 2097151L) << (27 - 21));
+ out[15 + outpos] = ((in[6 + inpos] >>> 21) & 134217727L);
+ out[16 + outpos] = (in[6 + inpos] >>> 48)
+ | ((in[7 + inpos] & 2047L) << (27 - 11));
+ out[17 + outpos] = ((in[7 + inpos] >>> 11) & 134217727L);
+ out[18 + outpos] = (in[7 + inpos] >>> 38)
+ | ((in[8 + inpos] & 1L) << (27 - 1));
+ out[19 + outpos] = ((in[8 + inpos] >>> 1) & 134217727L);
+ out[20 + outpos] = ((in[8 + inpos] >>> 28) & 134217727L);
+ out[21 + outpos] = (in[8 + inpos] >>> 55)
+ | ((in[9 + inpos] & 262143L) << (27 - 18));
+ out[22 + outpos] = ((in[9 + inpos] >>> 18) & 134217727L);
+ out[23 + outpos] = (in[9 + inpos] >>> 45)
+ | ((in[10 + inpos] & 255L) << (27 - 8));
+ out[24 + outpos] = ((in[10 + inpos] >>> 8) & 134217727L);
+ out[25 + outpos] = ((in[10 + inpos] >>> 35) & 134217727L);
+ out[26 + outpos] = (in[10 + inpos] >>> 62)
+ | ((in[11 + inpos] & 33554431L) << (27 - 25));
+ out[27 + outpos] = ((in[11 + inpos] >>> 25) & 134217727L);
+ out[28 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 32767L) << (27 - 15));
+ out[29 + outpos] = ((in[12 + inpos] >>> 15) & 134217727L);
+ out[30 + outpos] = (in[12 + inpos] >>> 42)
+ | ((in[13 + inpos] & 31L) << (27 - 5));
+ out[31 + outpos] = ((in[13 + inpos] >>> 5) & 134217727L);
+ out[32 + outpos] = ((in[13 + inpos] >>> 32) & 134217727L);
+ out[33 + outpos] = (in[13 + inpos] >>> 59)
+ | ((in[14 + inpos] & 4194303L) << (27 - 22));
+ out[34 + outpos] = ((in[14 + inpos] >>> 22) & 134217727L);
+ out[35 + outpos] = (in[14 + inpos] >>> 49)
+ | ((in[15 + inpos] & 4095L) << (27 - 12));
+ out[36 + outpos] = ((in[15 + inpos] >>> 12) & 134217727L);
+ out[37 + outpos] = (in[15 + inpos] >>> 39)
+ | ((in[16 + inpos] & 3L) << (27 - 2));
+ out[38 + outpos] = ((in[16 + inpos] >>> 2) & 134217727L);
+ out[39 + outpos] = ((in[16 + inpos] >>> 29) & 134217727L);
+ out[40 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 524287L) << (27 - 19));
+ out[41 + outpos] = ((in[17 + inpos] >>> 19) & 134217727L);
+ out[42 + outpos] = (in[17 + inpos] >>> 46)
+ | ((in[18 + inpos] & 511L) << (27 - 9));
+ out[43 + outpos] = ((in[18 + inpos] >>> 9) & 134217727L);
+ out[44 + outpos] = ((in[18 + inpos] >>> 36) & 134217727L);
+ out[45 + outpos] = (in[18 + inpos] >>> 63)
+ | ((in[19 + inpos] & 67108863L) << (27 - 26));
+ out[46 + outpos] = ((in[19 + inpos] >>> 26) & 134217727L);
+ out[47 + outpos] = (in[19 + inpos] >>> 53)
+ | ((in[20 + inpos] & 65535L) << (27 - 16));
+ out[48 + outpos] = ((in[20 + inpos] >>> 16) & 134217727L);
+ out[49 + outpos] = (in[20 + inpos] >>> 43)
+ | ((in[21 + inpos] & 63L) << (27 - 6));
+ out[50 + outpos] = ((in[21 + inpos] >>> 6) & 134217727L);
+ out[51 + outpos] = ((in[21 + inpos] >>> 33) & 134217727L);
+ out[52 + outpos] = (in[21 + inpos] >>> 60)
+ | ((in[22 + inpos] & 8388607L) << (27 - 23));
+ out[53 + outpos] = ((in[22 + inpos] >>> 23) & 134217727L);
+ out[54 + outpos] = (in[22 + inpos] >>> 50)
+ | ((in[23 + inpos] & 8191L) << (27 - 13));
+ out[55 + outpos] = ((in[23 + inpos] >>> 13) & 134217727L);
+ out[56 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 7L) << (27 - 3));
+ out[57 + outpos] = ((in[24 + inpos] >>> 3) & 134217727L);
+ out[58 + outpos] = ((in[24 + inpos] >>> 30) & 134217727L);
+ out[59 + outpos] = (in[24 + inpos] >>> 57)
+ | ((in[25 + inpos] & 1048575L) << (27 - 20));
+ out[60 + outpos] = ((in[25 + inpos] >>> 20) & 134217727L);
+ out[61 + outpos] = (in[25 + inpos] >>> 47)
+ | ((in[26 + inpos] & 1023L) << (27 - 10));
+ out[62 + outpos] = ((in[26 + inpos] >>> 10) & 134217727L);
+ out[63 + outpos] = (in[26 + inpos] >>> 37);
+ }
+
+ protected static void fastunpack28(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 268435455L);
+ out[1 + outpos] = ((in[inpos] >>> 28) & 268435455L);
+ out[2 + outpos] = (in[inpos] >>> 56)
+ | ((in[1 + inpos] & 1048575L) << (28 - 20));
+ out[3 + outpos] = ((in[1 + inpos] >>> 20) & 268435455L);
+ out[4 + outpos] = (in[1 + inpos] >>> 48)
+ | ((in[2 + inpos] & 4095L) << (28 - 12));
+ out[5 + outpos] = ((in[2 + inpos] >>> 12) & 268435455L);
+ out[6 + outpos] = (in[2 + inpos] >>> 40)
+ | ((in[3 + inpos] & 15L) << (28 - 4));
+ out[7 + outpos] = ((in[3 + inpos] >>> 4) & 268435455L);
+ out[8 + outpos] = ((in[3 + inpos] >>> 32) & 268435455L);
+ out[9 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 16777215L) << (28 - 24));
+ out[10 + outpos] = ((in[4 + inpos] >>> 24) & 268435455L);
+ out[11 + outpos] = (in[4 + inpos] >>> 52)
+ | ((in[5 + inpos] & 65535L) << (28 - 16));
+ out[12 + outpos] = ((in[5 + inpos] >>> 16) & 268435455L);
+ out[13 + outpos] = (in[5 + inpos] >>> 44)
+ | ((in[6 + inpos] & 255L) << (28 - 8));
+ out[14 + outpos] = ((in[6 + inpos] >>> 8) & 268435455L);
+ out[15 + outpos] = (in[6 + inpos] >>> 36);
+ out[16 + outpos] = (in[7 + inpos] & 268435455L);
+ out[17 + outpos] = ((in[7 + inpos] >>> 28) & 268435455L);
+ out[18 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 1048575L) << (28 - 20));
+ out[19 + outpos] = ((in[8 + inpos] >>> 20) & 268435455L);
+ out[20 + outpos] = (in[8 + inpos] >>> 48)
+ | ((in[9 + inpos] & 4095L) << (28 - 12));
+ out[21 + outpos] = ((in[9 + inpos] >>> 12) & 268435455L);
+ out[22 + outpos] = (in[9 + inpos] >>> 40)
+ | ((in[10 + inpos] & 15L) << (28 - 4));
+ out[23 + outpos] = ((in[10 + inpos] >>> 4) & 268435455L);
+ out[24 + outpos] = ((in[10 + inpos] >>> 32) & 268435455L);
+ out[25 + outpos] = (in[10 + inpos] >>> 60)
+ | ((in[11 + inpos] & 16777215L) << (28 - 24));
+ out[26 + outpos] = ((in[11 + inpos] >>> 24) & 268435455L);
+ out[27 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 65535L) << (28 - 16));
+ out[28 + outpos] = ((in[12 + inpos] >>> 16) & 268435455L);
+ out[29 + outpos] = (in[12 + inpos] >>> 44)
+ | ((in[13 + inpos] & 255L) << (28 - 8));
+ out[30 + outpos] = ((in[13 + inpos] >>> 8) & 268435455L);
+ out[31 + outpos] = (in[13 + inpos] >>> 36);
+ out[32 + outpos] = (in[14 + inpos] & 268435455L);
+ out[33 + outpos] = ((in[14 + inpos] >>> 28) & 268435455L);
+ out[34 + outpos] = (in[14 + inpos] >>> 56)
+ | ((in[15 + inpos] & 1048575L) << (28 - 20));
+ out[35 + outpos] = ((in[15 + inpos] >>> 20) & 268435455L);
+ out[36 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 4095L) << (28 - 12));
+ out[37 + outpos] = ((in[16 + inpos] >>> 12) & 268435455L);
+ out[38 + outpos] = (in[16 + inpos] >>> 40)
+ | ((in[17 + inpos] & 15L) << (28 - 4));
+ out[39 + outpos] = ((in[17 + inpos] >>> 4) & 268435455L);
+ out[40 + outpos] = ((in[17 + inpos] >>> 32) & 268435455L);
+ out[41 + outpos] = (in[17 + inpos] >>> 60)
+ | ((in[18 + inpos] & 16777215L) << (28 - 24));
+ out[42 + outpos] = ((in[18 + inpos] >>> 24) & 268435455L);
+ out[43 + outpos] = (in[18 + inpos] >>> 52)
+ | ((in[19 + inpos] & 65535L) << (28 - 16));
+ out[44 + outpos] = ((in[19 + inpos] >>> 16) & 268435455L);
+ out[45 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 255L) << (28 - 8));
+ out[46 + outpos] = ((in[20 + inpos] >>> 8) & 268435455L);
+ out[47 + outpos] = (in[20 + inpos] >>> 36);
+ out[48 + outpos] = (in[21 + inpos] & 268435455L);
+ out[49 + outpos] = ((in[21 + inpos] >>> 28) & 268435455L);
+ out[50 + outpos] = (in[21 + inpos] >>> 56)
+ | ((in[22 + inpos] & 1048575L) << (28 - 20));
+ out[51 + outpos] = ((in[22 + inpos] >>> 20) & 268435455L);
+ out[52 + outpos] = (in[22 + inpos] >>> 48)
+ | ((in[23 + inpos] & 4095L) << (28 - 12));
+ out[53 + outpos] = ((in[23 + inpos] >>> 12) & 268435455L);
+ out[54 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 15L) << (28 - 4));
+ out[55 + outpos] = ((in[24 + inpos] >>> 4) & 268435455L);
+ out[56 + outpos] = ((in[24 + inpos] >>> 32) & 268435455L);
+ out[57 + outpos] = (in[24 + inpos] >>> 60)
+ | ((in[25 + inpos] & 16777215L) << (28 - 24));
+ out[58 + outpos] = ((in[25 + inpos] >>> 24) & 268435455L);
+ out[59 + outpos] = (in[25 + inpos] >>> 52)
+ | ((in[26 + inpos] & 65535L) << (28 - 16));
+ out[60 + outpos] = ((in[26 + inpos] >>> 16) & 268435455L);
+ out[61 + outpos] = (in[26 + inpos] >>> 44)
+ | ((in[27 + inpos] & 255L) << (28 - 8));
+ out[62 + outpos] = ((in[27 + inpos] >>> 8) & 268435455L);
+ out[63 + outpos] = (in[27 + inpos] >>> 36);
+ }
+
+ protected static void fastunpack29(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 536870911L);
+ out[1 + outpos] = ((in[inpos] >>> 29) & 536870911L);
+ out[2 + outpos] = (in[inpos] >>> 58)
+ | ((in[1 + inpos] & 8388607L) << (29 - 23));
+ out[3 + outpos] = ((in[1 + inpos] >>> 23) & 536870911L);
+ out[4 + outpos] = (in[1 + inpos] >>> 52)
+ | ((in[2 + inpos] & 131071L) << (29 - 17));
+ out[5 + outpos] = ((in[2 + inpos] >>> 17) & 536870911L);
+ out[6 + outpos] = (in[2 + inpos] >>> 46)
+ | ((in[3 + inpos] & 2047L) << (29 - 11));
+ out[7 + outpos] = ((in[3 + inpos] >>> 11) & 536870911L);
+ out[8 + outpos] = (in[3 + inpos] >>> 40)
+ | ((in[4 + inpos] & 31L) << (29 - 5));
+ out[9 + outpos] = ((in[4 + inpos] >>> 5) & 536870911L);
+ out[10 + outpos] = ((in[4 + inpos] >>> 34) & 536870911L);
+ out[11 + outpos] = (in[4 + inpos] >>> 63)
+ | ((in[5 + inpos] & 268435455L) << (29 - 28));
+ out[12 + outpos] = ((in[5 + inpos] >>> 28) & 536870911L);
+ out[13 + outpos] = (in[5 + inpos] >>> 57)
+ | ((in[6 + inpos] & 4194303L) << (29 - 22));
+ out[14 + outpos] = ((in[6 + inpos] >>> 22) & 536870911L);
+ out[15 + outpos] = (in[6 + inpos] >>> 51)
+ | ((in[7 + inpos] & 65535L) << (29 - 16));
+ out[16 + outpos] = ((in[7 + inpos] >>> 16) & 536870911L);
+ out[17 + outpos] = (in[7 + inpos] >>> 45)
+ | ((in[8 + inpos] & 1023L) << (29 - 10));
+ out[18 + outpos] = ((in[8 + inpos] >>> 10) & 536870911L);
+ out[19 + outpos] = (in[8 + inpos] >>> 39)
+ | ((in[9 + inpos] & 15L) << (29 - 4));
+ out[20 + outpos] = ((in[9 + inpos] >>> 4) & 536870911L);
+ out[21 + outpos] = ((in[9 + inpos] >>> 33) & 536870911L);
+ out[22 + outpos] = (in[9 + inpos] >>> 62)
+ | ((in[10 + inpos] & 134217727L) << (29 - 27));
+ out[23 + outpos] = ((in[10 + inpos] >>> 27) & 536870911L);
+ out[24 + outpos] = (in[10 + inpos] >>> 56)
+ | ((in[11 + inpos] & 2097151L) << (29 - 21));
+ out[25 + outpos] = ((in[11 + inpos] >>> 21) & 536870911L);
+ out[26 + outpos] = (in[11 + inpos] >>> 50)
+ | ((in[12 + inpos] & 32767L) << (29 - 15));
+ out[27 + outpos] = ((in[12 + inpos] >>> 15) & 536870911L);
+ out[28 + outpos] = (in[12 + inpos] >>> 44)
+ | ((in[13 + inpos] & 511L) << (29 - 9));
+ out[29 + outpos] = ((in[13 + inpos] >>> 9) & 536870911L);
+ out[30 + outpos] = (in[13 + inpos] >>> 38)
+ | ((in[14 + inpos] & 7L) << (29 - 3));
+ out[31 + outpos] = ((in[14 + inpos] >>> 3) & 536870911L);
+ out[32 + outpos] = ((in[14 + inpos] >>> 32) & 536870911L);
+ out[33 + outpos] = (in[14 + inpos] >>> 61)
+ | ((in[15 + inpos] & 67108863L) << (29 - 26));
+ out[34 + outpos] = ((in[15 + inpos] >>> 26) & 536870911L);
+ out[35 + outpos] = (in[15 + inpos] >>> 55)
+ | ((in[16 + inpos] & 1048575L) << (29 - 20));
+ out[36 + outpos] = ((in[16 + inpos] >>> 20) & 536870911L);
+ out[37 + outpos] = (in[16 + inpos] >>> 49)
+ | ((in[17 + inpos] & 16383L) << (29 - 14));
+ out[38 + outpos] = ((in[17 + inpos] >>> 14) & 536870911L);
+ out[39 + outpos] = (in[17 + inpos] >>> 43)
+ | ((in[18 + inpos] & 255L) << (29 - 8));
+ out[40 + outpos] = ((in[18 + inpos] >>> 8) & 536870911L);
+ out[41 + outpos] = (in[18 + inpos] >>> 37)
+ | ((in[19 + inpos] & 3L) << (29 - 2));
+ out[42 + outpos] = ((in[19 + inpos] >>> 2) & 536870911L);
+ out[43 + outpos] = ((in[19 + inpos] >>> 31) & 536870911L);
+ out[44 + outpos] = (in[19 + inpos] >>> 60)
+ | ((in[20 + inpos] & 33554431L) << (29 - 25));
+ out[45 + outpos] = ((in[20 + inpos] >>> 25) & 536870911L);
+ out[46 + outpos] = (in[20 + inpos] >>> 54)
+ | ((in[21 + inpos] & 524287L) << (29 - 19));
+ out[47 + outpos] = ((in[21 + inpos] >>> 19) & 536870911L);
+ out[48 + outpos] = (in[21 + inpos] >>> 48)
+ | ((in[22 + inpos] & 8191L) << (29 - 13));
+ out[49 + outpos] = ((in[22 + inpos] >>> 13) & 536870911L);
+ out[50 + outpos] = (in[22 + inpos] >>> 42)
+ | ((in[23 + inpos] & 127L) << (29 - 7));
+ out[51 + outpos] = ((in[23 + inpos] >>> 7) & 536870911L);
+ out[52 + outpos] = (in[23 + inpos] >>> 36)
+ | ((in[24 + inpos] & 1L) << (29 - 1));
+ out[53 + outpos] = ((in[24 + inpos] >>> 1) & 536870911L);
+ out[54 + outpos] = ((in[24 + inpos] >>> 30) & 536870911L);
+ out[55 + outpos] = (in[24 + inpos] >>> 59)
+ | ((in[25 + inpos] & 16777215L) << (29 - 24));
+ out[56 + outpos] = ((in[25 + inpos] >>> 24) & 536870911L);
+ out[57 + outpos] = (in[25 + inpos] >>> 53)
+ | ((in[26 + inpos] & 262143L) << (29 - 18));
+ out[58 + outpos] = ((in[26 + inpos] >>> 18) & 536870911L);
+ out[59 + outpos] = (in[26 + inpos] >>> 47)
+ | ((in[27 + inpos] & 4095L) << (29 - 12));
+ out[60 + outpos] = ((in[27 + inpos] >>> 12) & 536870911L);
+ out[61 + outpos] = (in[27 + inpos] >>> 41)
+ | ((in[28 + inpos] & 63L) << (29 - 6));
+ out[62 + outpos] = ((in[28 + inpos] >>> 6) & 536870911L);
+ out[63 + outpos] = (in[28 + inpos] >>> 35);
+ }
+
+ protected static void fastunpack30(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1073741823L);
+ out[1 + outpos] = ((in[inpos] >>> 30) & 1073741823L);
+ out[2 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 67108863L) << (30 - 26));
+ out[3 + outpos] = ((in[1 + inpos] >>> 26) & 1073741823L);
+ out[4 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 4194303L) << (30 - 22));
+ out[5 + outpos] = ((in[2 + inpos] >>> 22) & 1073741823L);
+ out[6 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 262143L) << (30 - 18));
+ out[7 + outpos] = ((in[3 + inpos] >>> 18) & 1073741823L);
+ out[8 + outpos] = (in[3 + inpos] >>> 48)
+ | ((in[4 + inpos] & 16383L) << (30 - 14));
+ out[9 + outpos] = ((in[4 + inpos] >>> 14) & 1073741823L);
+ out[10 + outpos] = (in[4 + inpos] >>> 44)
+ | ((in[5 + inpos] & 1023L) << (30 - 10));
+ out[11 + outpos] = ((in[5 + inpos] >>> 10) & 1073741823L);
+ out[12 + outpos] = (in[5 + inpos] >>> 40)
+ | ((in[6 + inpos] & 63L) << (30 - 6));
+ out[13 + outpos] = ((in[6 + inpos] >>> 6) & 1073741823L);
+ out[14 + outpos] = (in[6 + inpos] >>> 36)
+ | ((in[7 + inpos] & 3L) << (30 - 2));
+ out[15 + outpos] = ((in[7 + inpos] >>> 2) & 1073741823L);
+ out[16 + outpos] = ((in[7 + inpos] >>> 32) & 1073741823L);
+ out[17 + outpos] = (in[7 + inpos] >>> 62)
+ | ((in[8 + inpos] & 268435455L) << (30 - 28));
+ out[18 + outpos] = ((in[8 + inpos] >>> 28) & 1073741823L);
+ out[19 + outpos] = (in[8 + inpos] >>> 58)
+ | ((in[9 + inpos] & 16777215L) << (30 - 24));
+ out[20 + outpos] = ((in[9 + inpos] >>> 24) & 1073741823L);
+ out[21 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 1048575L) << (30 - 20));
+ out[22 + outpos] = ((in[10 + inpos] >>> 20) & 1073741823L);
+ out[23 + outpos] = (in[10 + inpos] >>> 50)
+ | ((in[11 + inpos] & 65535L) << (30 - 16));
+ out[24 + outpos] = ((in[11 + inpos] >>> 16) & 1073741823L);
+ out[25 + outpos] = (in[11 + inpos] >>> 46)
+ | ((in[12 + inpos] & 4095L) << (30 - 12));
+ out[26 + outpos] = ((in[12 + inpos] >>> 12) & 1073741823L);
+ out[27 + outpos] = (in[12 + inpos] >>> 42)
+ | ((in[13 + inpos] & 255L) << (30 - 8));
+ out[28 + outpos] = ((in[13 + inpos] >>> 8) & 1073741823L);
+ out[29 + outpos] = (in[13 + inpos] >>> 38)
+ | ((in[14 + inpos] & 15L) << (30 - 4));
+ out[30 + outpos] = ((in[14 + inpos] >>> 4) & 1073741823L);
+ out[31 + outpos] = (in[14 + inpos] >>> 34);
+ out[32 + outpos] = (in[15 + inpos] & 1073741823L);
+ out[33 + outpos] = ((in[15 + inpos] >>> 30) & 1073741823L);
+ out[34 + outpos] = (in[15 + inpos] >>> 60)
+ | ((in[16 + inpos] & 67108863L) << (30 - 26));
+ out[35 + outpos] = ((in[16 + inpos] >>> 26) & 1073741823L);
+ out[36 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 4194303L) << (30 - 22));
+ out[37 + outpos] = ((in[17 + inpos] >>> 22) & 1073741823L);
+ out[38 + outpos] = (in[17 + inpos] >>> 52)
+ | ((in[18 + inpos] & 262143L) << (30 - 18));
+ out[39 + outpos] = ((in[18 + inpos] >>> 18) & 1073741823L);
+ out[40 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 16383L) << (30 - 14));
+ out[41 + outpos] = ((in[19 + inpos] >>> 14) & 1073741823L);
+ out[42 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 1023L) << (30 - 10));
+ out[43 + outpos] = ((in[20 + inpos] >>> 10) & 1073741823L);
+ out[44 + outpos] = (in[20 + inpos] >>> 40)
+ | ((in[21 + inpos] & 63L) << (30 - 6));
+ out[45 + outpos] = ((in[21 + inpos] >>> 6) & 1073741823L);
+ out[46 + outpos] = (in[21 + inpos] >>> 36)
+ | ((in[22 + inpos] & 3L) << (30 - 2));
+ out[47 + outpos] = ((in[22 + inpos] >>> 2) & 1073741823L);
+ out[48 + outpos] = ((in[22 + inpos] >>> 32) & 1073741823L);
+ out[49 + outpos] = (in[22 + inpos] >>> 62)
+ | ((in[23 + inpos] & 268435455L) << (30 - 28));
+ out[50 + outpos] = ((in[23 + inpos] >>> 28) & 1073741823L);
+ out[51 + outpos] = (in[23 + inpos] >>> 58)
+ | ((in[24 + inpos] & 16777215L) << (30 - 24));
+ out[52 + outpos] = ((in[24 + inpos] >>> 24) & 1073741823L);
+ out[53 + outpos] = (in[24 + inpos] >>> 54)
+ | ((in[25 + inpos] & 1048575L) << (30 - 20));
+ out[54 + outpos] = ((in[25 + inpos] >>> 20) & 1073741823L);
+ out[55 + outpos] = (in[25 + inpos] >>> 50)
+ | ((in[26 + inpos] & 65535L) << (30 - 16));
+ out[56 + outpos] = ((in[26 + inpos] >>> 16) & 1073741823L);
+ out[57 + outpos] = (in[26 + inpos] >>> 46)
+ | ((in[27 + inpos] & 4095L) << (30 - 12));
+ out[58 + outpos] = ((in[27 + inpos] >>> 12) & 1073741823L);
+ out[59 + outpos] = (in[27 + inpos] >>> 42)
+ | ((in[28 + inpos] & 255L) << (30 - 8));
+ out[60 + outpos] = ((in[28 + inpos] >>> 8) & 1073741823L);
+ out[61 + outpos] = (in[28 + inpos] >>> 38)
+ | ((in[29 + inpos] & 15L) << (30 - 4));
+ out[62 + outpos] = ((in[29 + inpos] >>> 4) & 1073741823L);
+ out[63 + outpos] = (in[29 + inpos] >>> 34);
+ }
+
+ protected static void fastunpack31(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 2147483647L);
+ out[1 + outpos] = ((in[inpos] >>> 31) & 2147483647L);
+ out[2 + outpos] = (in[inpos] >>> 62)
+ | ((in[1 + inpos] & 536870911L) << (31 - 29));
+ out[3 + outpos] = ((in[1 + inpos] >>> 29) & 2147483647L);
+ out[4 + outpos] = (in[1 + inpos] >>> 60)
+ | ((in[2 + inpos] & 134217727L) << (31 - 27));
+ out[5 + outpos] = ((in[2 + inpos] >>> 27) & 2147483647L);
+ out[6 + outpos] = (in[2 + inpos] >>> 58)
+ | ((in[3 + inpos] & 33554431L) << (31 - 25));
+ out[7 + outpos] = ((in[3 + inpos] >>> 25) & 2147483647L);
+ out[8 + outpos] = (in[3 + inpos] >>> 56)
+ | ((in[4 + inpos] & 8388607L) << (31 - 23));
+ out[9 + outpos] = ((in[4 + inpos] >>> 23) & 2147483647L);
+ out[10 + outpos] = (in[4 + inpos] >>> 54)
+ | ((in[5 + inpos] & 2097151L) << (31 - 21));
+ out[11 + outpos] = ((in[5 + inpos] >>> 21) & 2147483647L);
+ out[12 + outpos] = (in[5 + inpos] >>> 52)
+ | ((in[6 + inpos] & 524287L) << (31 - 19));
+ out[13 + outpos] = ((in[6 + inpos] >>> 19) & 2147483647L);
+ out[14 + outpos] = (in[6 + inpos] >>> 50)
+ | ((in[7 + inpos] & 131071L) << (31 - 17));
+ out[15 + outpos] = ((in[7 + inpos] >>> 17) & 2147483647L);
+ out[16 + outpos] = (in[7 + inpos] >>> 48)
+ | ((in[8 + inpos] & 32767L) << (31 - 15));
+ out[17 + outpos] = ((in[8 + inpos] >>> 15) & 2147483647L);
+ out[18 + outpos] = (in[8 + inpos] >>> 46)
+ | ((in[9 + inpos] & 8191L) << (31 - 13));
+ out[19 + outpos] = ((in[9 + inpos] >>> 13) & 2147483647L);
+ out[20 + outpos] = (in[9 + inpos] >>> 44)
+ | ((in[10 + inpos] & 2047L) << (31 - 11));
+ out[21 + outpos] = ((in[10 + inpos] >>> 11) & 2147483647L);
+ out[22 + outpos] = (in[10 + inpos] >>> 42)
+ | ((in[11 + inpos] & 511L) << (31 - 9));
+ out[23 + outpos] = ((in[11 + inpos] >>> 9) & 2147483647L);
+ out[24 + outpos] = (in[11 + inpos] >>> 40)
+ | ((in[12 + inpos] & 127L) << (31 - 7));
+ out[25 + outpos] = ((in[12 + inpos] >>> 7) & 2147483647L);
+ out[26 + outpos] = (in[12 + inpos] >>> 38)
+ | ((in[13 + inpos] & 31L) << (31 - 5));
+ out[27 + outpos] = ((in[13 + inpos] >>> 5) & 2147483647L);
+ out[28 + outpos] = (in[13 + inpos] >>> 36)
+ | ((in[14 + inpos] & 7L) << (31 - 3));
+ out[29 + outpos] = ((in[14 + inpos] >>> 3) & 2147483647L);
+ out[30 + outpos] = (in[14 + inpos] >>> 34)
+ | ((in[15 + inpos] & 1L) << (31 - 1));
+ out[31 + outpos] = ((in[15 + inpos] >>> 1) & 2147483647L);
+ out[32 + outpos] = ((in[15 + inpos] >>> 32) & 2147483647L);
+ out[33 + outpos] = (in[15 + inpos] >>> 63)
+ | ((in[16 + inpos] & 1073741823L) << (31 - 30));
+ out[34 + outpos] = ((in[16 + inpos] >>> 30) & 2147483647L);
+ out[35 + outpos] = (in[16 + inpos] >>> 61)
+ | ((in[17 + inpos] & 268435455L) << (31 - 28));
+ out[36 + outpos] = ((in[17 + inpos] >>> 28) & 2147483647L);
+ out[37 + outpos] = (in[17 + inpos] >>> 59)
+ | ((in[18 + inpos] & 67108863L) << (31 - 26));
+ out[38 + outpos] = ((in[18 + inpos] >>> 26) & 2147483647L);
+ out[39 + outpos] = (in[18 + inpos] >>> 57)
+ | ((in[19 + inpos] & 16777215L) << (31 - 24));
+ out[40 + outpos] = ((in[19 + inpos] >>> 24) & 2147483647L);
+ out[41 + outpos] = (in[19 + inpos] >>> 55)
+ | ((in[20 + inpos] & 4194303L) << (31 - 22));
+ out[42 + outpos] = ((in[20 + inpos] >>> 22) & 2147483647L);
+ out[43 + outpos] = (in[20 + inpos] >>> 53)
+ | ((in[21 + inpos] & 1048575L) << (31 - 20));
+ out[44 + outpos] = ((in[21 + inpos] >>> 20) & 2147483647L);
+ out[45 + outpos] = (in[21 + inpos] >>> 51)
+ | ((in[22 + inpos] & 262143L) << (31 - 18));
+ out[46 + outpos] = ((in[22 + inpos] >>> 18) & 2147483647L);
+ out[47 + outpos] = (in[22 + inpos] >>> 49)
+ | ((in[23 + inpos] & 65535L) << (31 - 16));
+ out[48 + outpos] = ((in[23 + inpos] >>> 16) & 2147483647L);
+ out[49 + outpos] = (in[23 + inpos] >>> 47)
+ | ((in[24 + inpos] & 16383L) << (31 - 14));
+ out[50 + outpos] = ((in[24 + inpos] >>> 14) & 2147483647L);
+ out[51 + outpos] = (in[24 + inpos] >>> 45)
+ | ((in[25 + inpos] & 4095L) << (31 - 12));
+ out[52 + outpos] = ((in[25 + inpos] >>> 12) & 2147483647L);
+ out[53 + outpos] = (in[25 + inpos] >>> 43)
+ | ((in[26 + inpos] & 1023L) << (31 - 10));
+ out[54 + outpos] = ((in[26 + inpos] >>> 10) & 2147483647L);
+ out[55 + outpos] = (in[26 + inpos] >>> 41)
+ | ((in[27 + inpos] & 255L) << (31 - 8));
+ out[56 + outpos] = ((in[27 + inpos] >>> 8) & 2147483647L);
+ out[57 + outpos] = (in[27 + inpos] >>> 39)
+ | ((in[28 + inpos] & 63L) << (31 - 6));
+ out[58 + outpos] = ((in[28 + inpos] >>> 6) & 2147483647L);
+ out[59 + outpos] = (in[28 + inpos] >>> 37)
+ | ((in[29 + inpos] & 15L) << (31 - 4));
+ out[60 + outpos] = ((in[29 + inpos] >>> 4) & 2147483647L);
+ out[61 + outpos] = (in[29 + inpos] >>> 35)
+ | ((in[30 + inpos] & 3L) << (31 - 2));
+ out[62 + outpos] = ((in[30 + inpos] >>> 2) & 2147483647L);
+ out[63 + outpos] = (in[30 + inpos] >>> 33);
+ }
+
+ protected static void fastunpack32(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 4294967295L);
+ out[1 + outpos] = (in[inpos] >>> 32);
+ out[2 + outpos] = (in[1 + inpos] & 4294967295L);
+ out[3 + outpos] = (in[1 + inpos] >>> 32);
+ out[4 + outpos] = (in[2 + inpos] & 4294967295L);
+ out[5 + outpos] = (in[2 + inpos] >>> 32);
+ out[6 + outpos] = (in[3 + inpos] & 4294967295L);
+ out[7 + outpos] = (in[3 + inpos] >>> 32);
+ out[8 + outpos] = (in[4 + inpos] & 4294967295L);
+ out[9 + outpos] = (in[4 + inpos] >>> 32);
+ out[10 + outpos] = (in[5 + inpos] & 4294967295L);
+ out[11 + outpos] = (in[5 + inpos] >>> 32);
+ out[12 + outpos] = (in[6 + inpos] & 4294967295L);
+ out[13 + outpos] = (in[6 + inpos] >>> 32);
+ out[14 + outpos] = (in[7 + inpos] & 4294967295L);
+ out[15 + outpos] = (in[7 + inpos] >>> 32);
+ out[16 + outpos] = (in[8 + inpos] & 4294967295L);
+ out[17 + outpos] = (in[8 + inpos] >>> 32);
+ out[18 + outpos] = (in[9 + inpos] & 4294967295L);
+ out[19 + outpos] = (in[9 + inpos] >>> 32);
+ out[20 + outpos] = (in[10 + inpos] & 4294967295L);
+ out[21 + outpos] = (in[10 + inpos] >>> 32);
+ out[22 + outpos] = (in[11 + inpos] & 4294967295L);
+ out[23 + outpos] = (in[11 + inpos] >>> 32);
+ out[24 + outpos] = (in[12 + inpos] & 4294967295L);
+ out[25 + outpos] = (in[12 + inpos] >>> 32);
+ out[26 + outpos] = (in[13 + inpos] & 4294967295L);
+ out[27 + outpos] = (in[13 + inpos] >>> 32);
+ out[28 + outpos] = (in[14 + inpos] & 4294967295L);
+ out[29 + outpos] = (in[14 + inpos] >>> 32);
+ out[30 + outpos] = (in[15 + inpos] & 4294967295L);
+ out[31 + outpos] = (in[15 + inpos] >>> 32);
+ out[32 + outpos] = (in[16 + inpos] & 4294967295L);
+ out[33 + outpos] = (in[16 + inpos] >>> 32);
+ out[34 + outpos] = (in[17 + inpos] & 4294967295L);
+ out[35 + outpos] = (in[17 + inpos] >>> 32);
+ out[36 + outpos] = (in[18 + inpos] & 4294967295L);
+ out[37 + outpos] = (in[18 + inpos] >>> 32);
+ out[38 + outpos] = (in[19 + inpos] & 4294967295L);
+ out[39 + outpos] = (in[19 + inpos] >>> 32);
+ out[40 + outpos] = (in[20 + inpos] & 4294967295L);
+ out[41 + outpos] = (in[20 + inpos] >>> 32);
+ out[42 + outpos] = (in[21 + inpos] & 4294967295L);
+ out[43 + outpos] = (in[21 + inpos] >>> 32);
+ out[44 + outpos] = (in[22 + inpos] & 4294967295L);
+ out[45 + outpos] = (in[22 + inpos] >>> 32);
+ out[46 + outpos] = (in[23 + inpos] & 4294967295L);
+ out[47 + outpos] = (in[23 + inpos] >>> 32);
+ out[48 + outpos] = (in[24 + inpos] & 4294967295L);
+ out[49 + outpos] = (in[24 + inpos] >>> 32);
+ out[50 + outpos] = (in[25 + inpos] & 4294967295L);
+ out[51 + outpos] = (in[25 + inpos] >>> 32);
+ out[52 + outpos] = (in[26 + inpos] & 4294967295L);
+ out[53 + outpos] = (in[26 + inpos] >>> 32);
+ out[54 + outpos] = (in[27 + inpos] & 4294967295L);
+ out[55 + outpos] = (in[27 + inpos] >>> 32);
+ out[56 + outpos] = (in[28 + inpos] & 4294967295L);
+ out[57 + outpos] = (in[28 + inpos] >>> 32);
+ out[58 + outpos] = (in[29 + inpos] & 4294967295L);
+ out[59 + outpos] = (in[29 + inpos] >>> 32);
+ out[60 + outpos] = (in[30 + inpos] & 4294967295L);
+ out[61 + outpos] = (in[30 + inpos] >>> 32);
+ out[62 + outpos] = (in[31 + inpos] & 4294967295L);
+ out[63 + outpos] = (in[31 + inpos] >>> 32);
+ }
+
+ protected static void fastunpack33(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 8589934591L);
+ out[1 + outpos] = (in[inpos] >>> 33)
+ | ((in[1 + inpos] & 3L) << (33 - 2));
+ out[2 + outpos] = ((in[1 + inpos] >>> 2) & 8589934591L);
+ out[3 + outpos] = (in[1 + inpos] >>> 35)
+ | ((in[2 + inpos] & 15L) << (33 - 4));
+ out[4 + outpos] = ((in[2 + inpos] >>> 4) & 8589934591L);
+ out[5 + outpos] = (in[2 + inpos] >>> 37)
+ | ((in[3 + inpos] & 63L) << (33 - 6));
+ out[6 + outpos] = ((in[3 + inpos] >>> 6) & 8589934591L);
+ out[7 + outpos] = (in[3 + inpos] >>> 39)
+ | ((in[4 + inpos] & 255L) << (33 - 8));
+ out[8 + outpos] = ((in[4 + inpos] >>> 8) & 8589934591L);
+ out[9 + outpos] = (in[4 + inpos] >>> 41)
+ | ((in[5 + inpos] & 1023L) << (33 - 10));
+ out[10 + outpos] = ((in[5 + inpos] >>> 10) & 8589934591L);
+ out[11 + outpos] = (in[5 + inpos] >>> 43)
+ | ((in[6 + inpos] & 4095L) << (33 - 12));
+ out[12 + outpos] = ((in[6 + inpos] >>> 12) & 8589934591L);
+ out[13 + outpos] = (in[6 + inpos] >>> 45)
+ | ((in[7 + inpos] & 16383L) << (33 - 14));
+ out[14 + outpos] = ((in[7 + inpos] >>> 14) & 8589934591L);
+ out[15 + outpos] = (in[7 + inpos] >>> 47)
+ | ((in[8 + inpos] & 65535L) << (33 - 16));
+ out[16 + outpos] = ((in[8 + inpos] >>> 16) & 8589934591L);
+ out[17 + outpos] = (in[8 + inpos] >>> 49)
+ | ((in[9 + inpos] & 262143L) << (33 - 18));
+ out[18 + outpos] = ((in[9 + inpos] >>> 18) & 8589934591L);
+ out[19 + outpos] = (in[9 + inpos] >>> 51)
+ | ((in[10 + inpos] & 1048575L) << (33 - 20));
+ out[20 + outpos] = ((in[10 + inpos] >>> 20) & 8589934591L);
+ out[21 + outpos] = (in[10 + inpos] >>> 53)
+ | ((in[11 + inpos] & 4194303L) << (33 - 22));
+ out[22 + outpos] = ((in[11 + inpos] >>> 22) & 8589934591L);
+ out[23 + outpos] = (in[11 + inpos] >>> 55)
+ | ((in[12 + inpos] & 16777215L) << (33 - 24));
+ out[24 + outpos] = ((in[12 + inpos] >>> 24) & 8589934591L);
+ out[25 + outpos] = (in[12 + inpos] >>> 57)
+ | ((in[13 + inpos] & 67108863L) << (33 - 26));
+ out[26 + outpos] = ((in[13 + inpos] >>> 26) & 8589934591L);
+ out[27 + outpos] = (in[13 + inpos] >>> 59)
+ | ((in[14 + inpos] & 268435455L) << (33 - 28));
+ out[28 + outpos] = ((in[14 + inpos] >>> 28) & 8589934591L);
+ out[29 + outpos] = (in[14 + inpos] >>> 61)
+ | ((in[15 + inpos] & 1073741823L) << (33 - 30));
+ out[30 + outpos] = ((in[15 + inpos] >>> 30) & 8589934591L);
+ out[31 + outpos] = (in[15 + inpos] >>> 63)
+ | ((in[16 + inpos] & 4294967295L) << (33 - 32));
+ out[32 + outpos] = (in[16 + inpos] >>> 32)
+ | ((in[17 + inpos] & 1L) << (33 - 1));
+ out[33 + outpos] = ((in[17 + inpos] >>> 1) & 8589934591L);
+ out[34 + outpos] = (in[17 + inpos] >>> 34)
+ | ((in[18 + inpos] & 7L) << (33 - 3));
+ out[35 + outpos] = ((in[18 + inpos] >>> 3) & 8589934591L);
+ out[36 + outpos] = (in[18 + inpos] >>> 36)
+ | ((in[19 + inpos] & 31L) << (33 - 5));
+ out[37 + outpos] = ((in[19 + inpos] >>> 5) & 8589934591L);
+ out[38 + outpos] = (in[19 + inpos] >>> 38)
+ | ((in[20 + inpos] & 127L) << (33 - 7));
+ out[39 + outpos] = ((in[20 + inpos] >>> 7) & 8589934591L);
+ out[40 + outpos] = (in[20 + inpos] >>> 40)
+ | ((in[21 + inpos] & 511L) << (33 - 9));
+ out[41 + outpos] = ((in[21 + inpos] >>> 9) & 8589934591L);
+ out[42 + outpos] = (in[21 + inpos] >>> 42)
+ | ((in[22 + inpos] & 2047L) << (33 - 11));
+ out[43 + outpos] = ((in[22 + inpos] >>> 11) & 8589934591L);
+ out[44 + outpos] = (in[22 + inpos] >>> 44)
+ | ((in[23 + inpos] & 8191L) << (33 - 13));
+ out[45 + outpos] = ((in[23 + inpos] >>> 13) & 8589934591L);
+ out[46 + outpos] = (in[23 + inpos] >>> 46)
+ | ((in[24 + inpos] & 32767L) << (33 - 15));
+ out[47 + outpos] = ((in[24 + inpos] >>> 15) & 8589934591L);
+ out[48 + outpos] = (in[24 + inpos] >>> 48)
+ | ((in[25 + inpos] & 131071L) << (33 - 17));
+ out[49 + outpos] = ((in[25 + inpos] >>> 17) & 8589934591L);
+ out[50 + outpos] = (in[25 + inpos] >>> 50)
+ | ((in[26 + inpos] & 524287L) << (33 - 19));
+ out[51 + outpos] = ((in[26 + inpos] >>> 19) & 8589934591L);
+ out[52 + outpos] = (in[26 + inpos] >>> 52)
+ | ((in[27 + inpos] & 2097151L) << (33 - 21));
+ out[53 + outpos] = ((in[27 + inpos] >>> 21) & 8589934591L);
+ out[54 + outpos] = (in[27 + inpos] >>> 54)
+ | ((in[28 + inpos] & 8388607L) << (33 - 23));
+ out[55 + outpos] = ((in[28 + inpos] >>> 23) & 8589934591L);
+ out[56 + outpos] = (in[28 + inpos] >>> 56)
+ | ((in[29 + inpos] & 33554431L) << (33 - 25));
+ out[57 + outpos] = ((in[29 + inpos] >>> 25) & 8589934591L);
+ out[58 + outpos] = (in[29 + inpos] >>> 58)
+ | ((in[30 + inpos] & 134217727L) << (33 - 27));
+ out[59 + outpos] = ((in[30 + inpos] >>> 27) & 8589934591L);
+ out[60 + outpos] = (in[30 + inpos] >>> 60)
+ | ((in[31 + inpos] & 536870911L) << (33 - 29));
+ out[61 + outpos] = ((in[31 + inpos] >>> 29) & 8589934591L);
+ out[62 + outpos] = (in[31 + inpos] >>> 62)
+ | ((in[32 + inpos] & 2147483647L) << (33 - 31));
+ out[63 + outpos] = (in[32 + inpos] >>> 31);
+ }
+
+ protected static void fastunpack34(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 17179869183L);
+ out[1 + outpos] = (in[inpos] >>> 34)
+ | ((in[1 + inpos] & 15L) << (34 - 4));
+ out[2 + outpos] = ((in[1 + inpos] >>> 4) & 17179869183L);
+ out[3 + outpos] = (in[1 + inpos] >>> 38)
+ | ((in[2 + inpos] & 255L) << (34 - 8));
+ out[4 + outpos] = ((in[2 + inpos] >>> 8) & 17179869183L);
+ out[5 + outpos] = (in[2 + inpos] >>> 42)
+ | ((in[3 + inpos] & 4095L) << (34 - 12));
+ out[6 + outpos] = ((in[3 + inpos] >>> 12) & 17179869183L);
+ out[7 + outpos] = (in[3 + inpos] >>> 46)
+ | ((in[4 + inpos] & 65535L) << (34 - 16));
+ out[8 + outpos] = ((in[4 + inpos] >>> 16) & 17179869183L);
+ out[9 + outpos] = (in[4 + inpos] >>> 50)
+ | ((in[5 + inpos] & 1048575L) << (34 - 20));
+ out[10 + outpos] = ((in[5 + inpos] >>> 20) & 17179869183L);
+ out[11 + outpos] = (in[5 + inpos] >>> 54)
+ | ((in[6 + inpos] & 16777215L) << (34 - 24));
+ out[12 + outpos] = ((in[6 + inpos] >>> 24) & 17179869183L);
+ out[13 + outpos] = (in[6 + inpos] >>> 58)
+ | ((in[7 + inpos] & 268435455L) << (34 - 28));
+ out[14 + outpos] = ((in[7 + inpos] >>> 28) & 17179869183L);
+ out[15 + outpos] = (in[7 + inpos] >>> 62)
+ | ((in[8 + inpos] & 4294967295L) << (34 - 32));
+ out[16 + outpos] = (in[8 + inpos] >>> 32)
+ | ((in[9 + inpos] & 3L) << (34 - 2));
+ out[17 + outpos] = ((in[9 + inpos] >>> 2) & 17179869183L);
+ out[18 + outpos] = (in[9 + inpos] >>> 36)
+ | ((in[10 + inpos] & 63L) << (34 - 6));
+ out[19 + outpos] = ((in[10 + inpos] >>> 6) & 17179869183L);
+ out[20 + outpos] = (in[10 + inpos] >>> 40)
+ | ((in[11 + inpos] & 1023L) << (34 - 10));
+ out[21 + outpos] = ((in[11 + inpos] >>> 10) & 17179869183L);
+ out[22 + outpos] = (in[11 + inpos] >>> 44)
+ | ((in[12 + inpos] & 16383L) << (34 - 14));
+ out[23 + outpos] = ((in[12 + inpos] >>> 14) & 17179869183L);
+ out[24 + outpos] = (in[12 + inpos] >>> 48)
+ | ((in[13 + inpos] & 262143L) << (34 - 18));
+ out[25 + outpos] = ((in[13 + inpos] >>> 18) & 17179869183L);
+ out[26 + outpos] = (in[13 + inpos] >>> 52)
+ | ((in[14 + inpos] & 4194303L) << (34 - 22));
+ out[27 + outpos] = ((in[14 + inpos] >>> 22) & 17179869183L);
+ out[28 + outpos] = (in[14 + inpos] >>> 56)
+ | ((in[15 + inpos] & 67108863L) << (34 - 26));
+ out[29 + outpos] = ((in[15 + inpos] >>> 26) & 17179869183L);
+ out[30 + outpos] = (in[15 + inpos] >>> 60)
+ | ((in[16 + inpos] & 1073741823L) << (34 - 30));
+ out[31 + outpos] = (in[16 + inpos] >>> 30);
+ out[32 + outpos] = (in[17 + inpos] & 17179869183L);
+ out[33 + outpos] = (in[17 + inpos] >>> 34)
+ | ((in[18 + inpos] & 15L) << (34 - 4));
+ out[34 + outpos] = ((in[18 + inpos] >>> 4) & 17179869183L);
+ out[35 + outpos] = (in[18 + inpos] >>> 38)
+ | ((in[19 + inpos] & 255L) << (34 - 8));
+ out[36 + outpos] = ((in[19 + inpos] >>> 8) & 17179869183L);
+ out[37 + outpos] = (in[19 + inpos] >>> 42)
+ | ((in[20 + inpos] & 4095L) << (34 - 12));
+ out[38 + outpos] = ((in[20 + inpos] >>> 12) & 17179869183L);
+ out[39 + outpos] = (in[20 + inpos] >>> 46)
+ | ((in[21 + inpos] & 65535L) << (34 - 16));
+ out[40 + outpos] = ((in[21 + inpos] >>> 16) & 17179869183L);
+ out[41 + outpos] = (in[21 + inpos] >>> 50)
+ | ((in[22 + inpos] & 1048575L) << (34 - 20));
+ out[42 + outpos] = ((in[22 + inpos] >>> 20) & 17179869183L);
+ out[43 + outpos] = (in[22 + inpos] >>> 54)
+ | ((in[23 + inpos] & 16777215L) << (34 - 24));
+ out[44 + outpos] = ((in[23 + inpos] >>> 24) & 17179869183L);
+ out[45 + outpos] = (in[23 + inpos] >>> 58)
+ | ((in[24 + inpos] & 268435455L) << (34 - 28));
+ out[46 + outpos] = ((in[24 + inpos] >>> 28) & 17179869183L);
+ out[47 + outpos] = (in[24 + inpos] >>> 62)
+ | ((in[25 + inpos] & 4294967295L) << (34 - 32));
+ out[48 + outpos] = (in[25 + inpos] >>> 32)
+ | ((in[26 + inpos] & 3L) << (34 - 2));
+ out[49 + outpos] = ((in[26 + inpos] >>> 2) & 17179869183L);
+ out[50 + outpos] = (in[26 + inpos] >>> 36)
+ | ((in[27 + inpos] & 63L) << (34 - 6));
+ out[51 + outpos] = ((in[27 + inpos] >>> 6) & 17179869183L);
+ out[52 + outpos] = (in[27 + inpos] >>> 40)
+ | ((in[28 + inpos] & 1023L) << (34 - 10));
+ out[53 + outpos] = ((in[28 + inpos] >>> 10) & 17179869183L);
+ out[54 + outpos] = (in[28 + inpos] >>> 44)
+ | ((in[29 + inpos] & 16383L) << (34 - 14));
+ out[55 + outpos] = ((in[29 + inpos] >>> 14) & 17179869183L);
+ out[56 + outpos] = (in[29 + inpos] >>> 48)
+ | ((in[30 + inpos] & 262143L) << (34 - 18));
+ out[57 + outpos] = ((in[30 + inpos] >>> 18) & 17179869183L);
+ out[58 + outpos] = (in[30 + inpos] >>> 52)
+ | ((in[31 + inpos] & 4194303L) << (34 - 22));
+ out[59 + outpos] = ((in[31 + inpos] >>> 22) & 17179869183L);
+ out[60 + outpos] = (in[31 + inpos] >>> 56)
+ | ((in[32 + inpos] & 67108863L) << (34 - 26));
+ out[61 + outpos] = ((in[32 + inpos] >>> 26) & 17179869183L);
+ out[62 + outpos] = (in[32 + inpos] >>> 60)
+ | ((in[33 + inpos] & 1073741823L) << (34 - 30));
+ out[63 + outpos] = (in[33 + inpos] >>> 30);
+ }
+
+ protected static void fastunpack35(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 34359738367L);
+ out[1 + outpos] = (in[inpos] >>> 35)
+ | ((in[1 + inpos] & 63L) << (35 - 6));
+ out[2 + outpos] = ((in[1 + inpos] >>> 6) & 34359738367L);
+ out[3 + outpos] = (in[1 + inpos] >>> 41)
+ | ((in[2 + inpos] & 4095L) << (35 - 12));
+ out[4 + outpos] = ((in[2 + inpos] >>> 12) & 34359738367L);
+ out[5 + outpos] = (in[2 + inpos] >>> 47)
+ | ((in[3 + inpos] & 262143L) << (35 - 18));
+ out[6 + outpos] = ((in[3 + inpos] >>> 18) & 34359738367L);
+ out[7 + outpos] = (in[3 + inpos] >>> 53)
+ | ((in[4 + inpos] & 16777215L) << (35 - 24));
+ out[8 + outpos] = ((in[4 + inpos] >>> 24) & 34359738367L);
+ out[9 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 1073741823L) << (35 - 30));
+ out[10 + outpos] = (in[5 + inpos] >>> 30)
+ | ((in[6 + inpos] & 1L) << (35 - 1));
+ out[11 + outpos] = ((in[6 + inpos] >>> 1) & 34359738367L);
+ out[12 + outpos] = (in[6 + inpos] >>> 36)
+ | ((in[7 + inpos] & 127L) << (35 - 7));
+ out[13 + outpos] = ((in[7 + inpos] >>> 7) & 34359738367L);
+ out[14 + outpos] = (in[7 + inpos] >>> 42)
+ | ((in[8 + inpos] & 8191L) << (35 - 13));
+ out[15 + outpos] = ((in[8 + inpos] >>> 13) & 34359738367L);
+ out[16 + outpos] = (in[8 + inpos] >>> 48)
+ | ((in[9 + inpos] & 524287L) << (35 - 19));
+ out[17 + outpos] = ((in[9 + inpos] >>> 19) & 34359738367L);
+ out[18 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 33554431L) << (35 - 25));
+ out[19 + outpos] = ((in[10 + inpos] >>> 25) & 34359738367L);
+ out[20 + outpos] = (in[10 + inpos] >>> 60)
+ | ((in[11 + inpos] & 2147483647L) << (35 - 31));
+ out[21 + outpos] = (in[11 + inpos] >>> 31)
+ | ((in[12 + inpos] & 3L) << (35 - 2));
+ out[22 + outpos] = ((in[12 + inpos] >>> 2) & 34359738367L);
+ out[23 + outpos] = (in[12 + inpos] >>> 37)
+ | ((in[13 + inpos] & 255L) << (35 - 8));
+ out[24 + outpos] = ((in[13 + inpos] >>> 8) & 34359738367L);
+ out[25 + outpos] = (in[13 + inpos] >>> 43)
+ | ((in[14 + inpos] & 16383L) << (35 - 14));
+ out[26 + outpos] = ((in[14 + inpos] >>> 14) & 34359738367L);
+ out[27 + outpos] = (in[14 + inpos] >>> 49)
+ | ((in[15 + inpos] & 1048575L) << (35 - 20));
+ out[28 + outpos] = ((in[15 + inpos] >>> 20) & 34359738367L);
+ out[29 + outpos] = (in[15 + inpos] >>> 55)
+ | ((in[16 + inpos] & 67108863L) << (35 - 26));
+ out[30 + outpos] = ((in[16 + inpos] >>> 26) & 34359738367L);
+ out[31 + outpos] = (in[16 + inpos] >>> 61)
+ | ((in[17 + inpos] & 4294967295L) << (35 - 32));
+ out[32 + outpos] = (in[17 + inpos] >>> 32)
+ | ((in[18 + inpos] & 7L) << (35 - 3));
+ out[33 + outpos] = ((in[18 + inpos] >>> 3) & 34359738367L);
+ out[34 + outpos] = (in[18 + inpos] >>> 38)
+ | ((in[19 + inpos] & 511L) << (35 - 9));
+ out[35 + outpos] = ((in[19 + inpos] >>> 9) & 34359738367L);
+ out[36 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 32767L) << (35 - 15));
+ out[37 + outpos] = ((in[20 + inpos] >>> 15) & 34359738367L);
+ out[38 + outpos] = (in[20 + inpos] >>> 50)
+ | ((in[21 + inpos] & 2097151L) << (35 - 21));
+ out[39 + outpos] = ((in[21 + inpos] >>> 21) & 34359738367L);
+ out[40 + outpos] = (in[21 + inpos] >>> 56)
+ | ((in[22 + inpos] & 134217727L) << (35 - 27));
+ out[41 + outpos] = ((in[22 + inpos] >>> 27) & 34359738367L);
+ out[42 + outpos] = (in[22 + inpos] >>> 62)
+ | ((in[23 + inpos] & 8589934591L) << (35 - 33));
+ out[43 + outpos] = (in[23 + inpos] >>> 33)
+ | ((in[24 + inpos] & 15L) << (35 - 4));
+ out[44 + outpos] = ((in[24 + inpos] >>> 4) & 34359738367L);
+ out[45 + outpos] = (in[24 + inpos] >>> 39)
+ | ((in[25 + inpos] & 1023L) << (35 - 10));
+ out[46 + outpos] = ((in[25 + inpos] >>> 10) & 34359738367L);
+ out[47 + outpos] = (in[25 + inpos] >>> 45)
+ | ((in[26 + inpos] & 65535L) << (35 - 16));
+ out[48 + outpos] = ((in[26 + inpos] >>> 16) & 34359738367L);
+ out[49 + outpos] = (in[26 + inpos] >>> 51)
+ | ((in[27 + inpos] & 4194303L) << (35 - 22));
+ out[50 + outpos] = ((in[27 + inpos] >>> 22) & 34359738367L);
+ out[51 + outpos] = (in[27 + inpos] >>> 57)
+ | ((in[28 + inpos] & 268435455L) << (35 - 28));
+ out[52 + outpos] = ((in[28 + inpos] >>> 28) & 34359738367L);
+ out[53 + outpos] = (in[28 + inpos] >>> 63)
+ | ((in[29 + inpos] & 17179869183L) << (35 - 34));
+ out[54 + outpos] = (in[29 + inpos] >>> 34)
+ | ((in[30 + inpos] & 31L) << (35 - 5));
+ out[55 + outpos] = ((in[30 + inpos] >>> 5) & 34359738367L);
+ out[56 + outpos] = (in[30 + inpos] >>> 40)
+ | ((in[31 + inpos] & 2047L) << (35 - 11));
+ out[57 + outpos] = ((in[31 + inpos] >>> 11) & 34359738367L);
+ out[58 + outpos] = (in[31 + inpos] >>> 46)
+ | ((in[32 + inpos] & 131071L) << (35 - 17));
+ out[59 + outpos] = ((in[32 + inpos] >>> 17) & 34359738367L);
+ out[60 + outpos] = (in[32 + inpos] >>> 52)
+ | ((in[33 + inpos] & 8388607L) << (35 - 23));
+ out[61 + outpos] = ((in[33 + inpos] >>> 23) & 34359738367L);
+ out[62 + outpos] = (in[33 + inpos] >>> 58)
+ | ((in[34 + inpos] & 536870911L) << (35 - 29));
+ out[63 + outpos] = (in[34 + inpos] >>> 29);
+ }
+
+ protected static void fastunpack36(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 68719476735L);
+ out[1 + outpos] = (in[inpos] >>> 36)
+ | ((in[1 + inpos] & 255L) << (36 - 8));
+ out[2 + outpos] = ((in[1 + inpos] >>> 8) & 68719476735L);
+ out[3 + outpos] = (in[1 + inpos] >>> 44)
+ | ((in[2 + inpos] & 65535L) << (36 - 16));
+ out[4 + outpos] = ((in[2 + inpos] >>> 16) & 68719476735L);
+ out[5 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 16777215L) << (36 - 24));
+ out[6 + outpos] = ((in[3 + inpos] >>> 24) & 68719476735L);
+ out[7 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 4294967295L) << (36 - 32));
+ out[8 + outpos] = (in[4 + inpos] >>> 32)
+ | ((in[5 + inpos] & 15L) << (36 - 4));
+ out[9 + outpos] = ((in[5 + inpos] >>> 4) & 68719476735L);
+ out[10 + outpos] = (in[5 + inpos] >>> 40)
+ | ((in[6 + inpos] & 4095L) << (36 - 12));
+ out[11 + outpos] = ((in[6 + inpos] >>> 12) & 68719476735L);
+ out[12 + outpos] = (in[6 + inpos] >>> 48)
+ | ((in[7 + inpos] & 1048575L) << (36 - 20));
+ out[13 + outpos] = ((in[7 + inpos] >>> 20) & 68719476735L);
+ out[14 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 268435455L) << (36 - 28));
+ out[15 + outpos] = (in[8 + inpos] >>> 28);
+ out[16 + outpos] = (in[9 + inpos] & 68719476735L);
+ out[17 + outpos] = (in[9 + inpos] >>> 36)
+ | ((in[10 + inpos] & 255L) << (36 - 8));
+ out[18 + outpos] = ((in[10 + inpos] >>> 8) & 68719476735L);
+ out[19 + outpos] = (in[10 + inpos] >>> 44)
+ | ((in[11 + inpos] & 65535L) << (36 - 16));
+ out[20 + outpos] = ((in[11 + inpos] >>> 16) & 68719476735L);
+ out[21 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 16777215L) << (36 - 24));
+ out[22 + outpos] = ((in[12 + inpos] >>> 24) & 68719476735L);
+ out[23 + outpos] = (in[12 + inpos] >>> 60)
+ | ((in[13 + inpos] & 4294967295L) << (36 - 32));
+ out[24 + outpos] = (in[13 + inpos] >>> 32)
+ | ((in[14 + inpos] & 15L) << (36 - 4));
+ out[25 + outpos] = ((in[14 + inpos] >>> 4) & 68719476735L);
+ out[26 + outpos] = (in[14 + inpos] >>> 40)
+ | ((in[15 + inpos] & 4095L) << (36 - 12));
+ out[27 + outpos] = ((in[15 + inpos] >>> 12) & 68719476735L);
+ out[28 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 1048575L) << (36 - 20));
+ out[29 + outpos] = ((in[16 + inpos] >>> 20) & 68719476735L);
+ out[30 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 268435455L) << (36 - 28));
+ out[31 + outpos] = (in[17 + inpos] >>> 28);
+ out[32 + outpos] = (in[18 + inpos] & 68719476735L);
+ out[33 + outpos] = (in[18 + inpos] >>> 36)
+ | ((in[19 + inpos] & 255L) << (36 - 8));
+ out[34 + outpos] = ((in[19 + inpos] >>> 8) & 68719476735L);
+ out[35 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 65535L) << (36 - 16));
+ out[36 + outpos] = ((in[20 + inpos] >>> 16) & 68719476735L);
+ out[37 + outpos] = (in[20 + inpos] >>> 52)
+ | ((in[21 + inpos] & 16777215L) << (36 - 24));
+ out[38 + outpos] = ((in[21 + inpos] >>> 24) & 68719476735L);
+ out[39 + outpos] = (in[21 + inpos] >>> 60)
+ | ((in[22 + inpos] & 4294967295L) << (36 - 32));
+ out[40 + outpos] = (in[22 + inpos] >>> 32)
+ | ((in[23 + inpos] & 15L) << (36 - 4));
+ out[41 + outpos] = ((in[23 + inpos] >>> 4) & 68719476735L);
+ out[42 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 4095L) << (36 - 12));
+ out[43 + outpos] = ((in[24 + inpos] >>> 12) & 68719476735L);
+ out[44 + outpos] = (in[24 + inpos] >>> 48)
+ | ((in[25 + inpos] & 1048575L) << (36 - 20));
+ out[45 + outpos] = ((in[25 + inpos] >>> 20) & 68719476735L);
+ out[46 + outpos] = (in[25 + inpos] >>> 56)
+ | ((in[26 + inpos] & 268435455L) << (36 - 28));
+ out[47 + outpos] = (in[26 + inpos] >>> 28);
+ out[48 + outpos] = (in[27 + inpos] & 68719476735L);
+ out[49 + outpos] = (in[27 + inpos] >>> 36)
+ | ((in[28 + inpos] & 255L) << (36 - 8));
+ out[50 + outpos] = ((in[28 + inpos] >>> 8) & 68719476735L);
+ out[51 + outpos] = (in[28 + inpos] >>> 44)
+ | ((in[29 + inpos] & 65535L) << (36 - 16));
+ out[52 + outpos] = ((in[29 + inpos] >>> 16) & 68719476735L);
+ out[53 + outpos] = (in[29 + inpos] >>> 52)
+ | ((in[30 + inpos] & 16777215L) << (36 - 24));
+ out[54 + outpos] = ((in[30 + inpos] >>> 24) & 68719476735L);
+ out[55 + outpos] = (in[30 + inpos] >>> 60)
+ | ((in[31 + inpos] & 4294967295L) << (36 - 32));
+ out[56 + outpos] = (in[31 + inpos] >>> 32)
+ | ((in[32 + inpos] & 15L) << (36 - 4));
+ out[57 + outpos] = ((in[32 + inpos] >>> 4) & 68719476735L);
+ out[58 + outpos] = (in[32 + inpos] >>> 40)
+ | ((in[33 + inpos] & 4095L) << (36 - 12));
+ out[59 + outpos] = ((in[33 + inpos] >>> 12) & 68719476735L);
+ out[60 + outpos] = (in[33 + inpos] >>> 48)
+ | ((in[34 + inpos] & 1048575L) << (36 - 20));
+ out[61 + outpos] = ((in[34 + inpos] >>> 20) & 68719476735L);
+ out[62 + outpos] = (in[34 + inpos] >>> 56)
+ | ((in[35 + inpos] & 268435455L) << (36 - 28));
+ out[63 + outpos] = (in[35 + inpos] >>> 28);
+ }
+
+ protected static void fastunpack37(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 137438953471L);
+ out[1 + outpos] = (in[inpos] >>> 37)
+ | ((in[1 + inpos] & 1023L) << (37 - 10));
+ out[2 + outpos] = ((in[1 + inpos] >>> 10) & 137438953471L);
+ out[3 + outpos] = (in[1 + inpos] >>> 47)
+ | ((in[2 + inpos] & 1048575L) << (37 - 20));
+ out[4 + outpos] = ((in[2 + inpos] >>> 20) & 137438953471L);
+ out[5 + outpos] = (in[2 + inpos] >>> 57)
+ | ((in[3 + inpos] & 1073741823L) << (37 - 30));
+ out[6 + outpos] = (in[3 + inpos] >>> 30)
+ | ((in[4 + inpos] & 7L) << (37 - 3));
+ out[7 + outpos] = ((in[4 + inpos] >>> 3) & 137438953471L);
+ out[8 + outpos] = (in[4 + inpos] >>> 40)
+ | ((in[5 + inpos] & 8191L) << (37 - 13));
+ out[9 + outpos] = ((in[5 + inpos] >>> 13) & 137438953471L);
+ out[10 + outpos] = (in[5 + inpos] >>> 50)
+ | ((in[6 + inpos] & 8388607L) << (37 - 23));
+ out[11 + outpos] = ((in[6 + inpos] >>> 23) & 137438953471L);
+ out[12 + outpos] = (in[6 + inpos] >>> 60)
+ | ((in[7 + inpos] & 8589934591L) << (37 - 33));
+ out[13 + outpos] = (in[7 + inpos] >>> 33)
+ | ((in[8 + inpos] & 63L) << (37 - 6));
+ out[14 + outpos] = ((in[8 + inpos] >>> 6) & 137438953471L);
+ out[15 + outpos] = (in[8 + inpos] >>> 43)
+ | ((in[9 + inpos] & 65535L) << (37 - 16));
+ out[16 + outpos] = ((in[9 + inpos] >>> 16) & 137438953471L);
+ out[17 + outpos] = (in[9 + inpos] >>> 53)
+ | ((in[10 + inpos] & 67108863L) << (37 - 26));
+ out[18 + outpos] = ((in[10 + inpos] >>> 26) & 137438953471L);
+ out[19 + outpos] = (in[10 + inpos] >>> 63)
+ | ((in[11 + inpos] & 68719476735L) << (37 - 36));
+ out[20 + outpos] = (in[11 + inpos] >>> 36)
+ | ((in[12 + inpos] & 511L) << (37 - 9));
+ out[21 + outpos] = ((in[12 + inpos] >>> 9) & 137438953471L);
+ out[22 + outpos] = (in[12 + inpos] >>> 46)
+ | ((in[13 + inpos] & 524287L) << (37 - 19));
+ out[23 + outpos] = ((in[13 + inpos] >>> 19) & 137438953471L);
+ out[24 + outpos] = (in[13 + inpos] >>> 56)
+ | ((in[14 + inpos] & 536870911L) << (37 - 29));
+ out[25 + outpos] = (in[14 + inpos] >>> 29)
+ | ((in[15 + inpos] & 3L) << (37 - 2));
+ out[26 + outpos] = ((in[15 + inpos] >>> 2) & 137438953471L);
+ out[27 + outpos] = (in[15 + inpos] >>> 39)
+ | ((in[16 + inpos] & 4095L) << (37 - 12));
+ out[28 + outpos] = ((in[16 + inpos] >>> 12) & 137438953471L);
+ out[29 + outpos] = (in[16 + inpos] >>> 49)
+ | ((in[17 + inpos] & 4194303L) << (37 - 22));
+ out[30 + outpos] = ((in[17 + inpos] >>> 22) & 137438953471L);
+ out[31 + outpos] = (in[17 + inpos] >>> 59)
+ | ((in[18 + inpos] & 4294967295L) << (37 - 32));
+ out[32 + outpos] = (in[18 + inpos] >>> 32)
+ | ((in[19 + inpos] & 31L) << (37 - 5));
+ out[33 + outpos] = ((in[19 + inpos] >>> 5) & 137438953471L);
+ out[34 + outpos] = (in[19 + inpos] >>> 42)
+ | ((in[20 + inpos] & 32767L) << (37 - 15));
+ out[35 + outpos] = ((in[20 + inpos] >>> 15) & 137438953471L);
+ out[36 + outpos] = (in[20 + inpos] >>> 52)
+ | ((in[21 + inpos] & 33554431L) << (37 - 25));
+ out[37 + outpos] = ((in[21 + inpos] >>> 25) & 137438953471L);
+ out[38 + outpos] = (in[21 + inpos] >>> 62)
+ | ((in[22 + inpos] & 34359738367L) << (37 - 35));
+ out[39 + outpos] = (in[22 + inpos] >>> 35)
+ | ((in[23 + inpos] & 255L) << (37 - 8));
+ out[40 + outpos] = ((in[23 + inpos] >>> 8) & 137438953471L);
+ out[41 + outpos] = (in[23 + inpos] >>> 45)
+ | ((in[24 + inpos] & 262143L) << (37 - 18));
+ out[42 + outpos] = ((in[24 + inpos] >>> 18) & 137438953471L);
+ out[43 + outpos] = (in[24 + inpos] >>> 55)
+ | ((in[25 + inpos] & 268435455L) << (37 - 28));
+ out[44 + outpos] = (in[25 + inpos] >>> 28)
+ | ((in[26 + inpos] & 1L) << (37 - 1));
+ out[45 + outpos] = ((in[26 + inpos] >>> 1) & 137438953471L);
+ out[46 + outpos] = (in[26 + inpos] >>> 38)
+ | ((in[27 + inpos] & 2047L) << (37 - 11));
+ out[47 + outpos] = ((in[27 + inpos] >>> 11) & 137438953471L);
+ out[48 + outpos] = (in[27 + inpos] >>> 48)
+ | ((in[28 + inpos] & 2097151L) << (37 - 21));
+ out[49 + outpos] = ((in[28 + inpos] >>> 21) & 137438953471L);
+ out[50 + outpos] = (in[28 + inpos] >>> 58)
+ | ((in[29 + inpos] & 2147483647L) << (37 - 31));
+ out[51 + outpos] = (in[29 + inpos] >>> 31)
+ | ((in[30 + inpos] & 15L) << (37 - 4));
+ out[52 + outpos] = ((in[30 + inpos] >>> 4) & 137438953471L);
+ out[53 + outpos] = (in[30 + inpos] >>> 41)
+ | ((in[31 + inpos] & 16383L) << (37 - 14));
+ out[54 + outpos] = ((in[31 + inpos] >>> 14) & 137438953471L);
+ out[55 + outpos] = (in[31 + inpos] >>> 51)
+ | ((in[32 + inpos] & 16777215L) << (37 - 24));
+ out[56 + outpos] = ((in[32 + inpos] >>> 24) & 137438953471L);
+ out[57 + outpos] = (in[32 + inpos] >>> 61)
+ | ((in[33 + inpos] & 17179869183L) << (37 - 34));
+ out[58 + outpos] = (in[33 + inpos] >>> 34)
+ | ((in[34 + inpos] & 127L) << (37 - 7));
+ out[59 + outpos] = ((in[34 + inpos] >>> 7) & 137438953471L);
+ out[60 + outpos] = (in[34 + inpos] >>> 44)
+ | ((in[35 + inpos] & 131071L) << (37 - 17));
+ out[61 + outpos] = ((in[35 + inpos] >>> 17) & 137438953471L);
+ out[62 + outpos] = (in[35 + inpos] >>> 54)
+ | ((in[36 + inpos] & 134217727L) << (37 - 27));
+ out[63 + outpos] = (in[36 + inpos] >>> 27);
+ }
+
+ protected static void fastunpack38(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 274877906943L);
+ out[1 + outpos] = (in[inpos] >>> 38)
+ | ((in[1 + inpos] & 4095L) << (38 - 12));
+ out[2 + outpos] = ((in[1 + inpos] >>> 12) & 274877906943L);
+ out[3 + outpos] = (in[1 + inpos] >>> 50)
+ | ((in[2 + inpos] & 16777215L) << (38 - 24));
+ out[4 + outpos] = ((in[2 + inpos] >>> 24) & 274877906943L);
+ out[5 + outpos] = (in[2 + inpos] >>> 62)
+ | ((in[3 + inpos] & 68719476735L) << (38 - 36));
+ out[6 + outpos] = (in[3 + inpos] >>> 36)
+ | ((in[4 + inpos] & 1023L) << (38 - 10));
+ out[7 + outpos] = ((in[4 + inpos] >>> 10) & 274877906943L);
+ out[8 + outpos] = (in[4 + inpos] >>> 48)
+ | ((in[5 + inpos] & 4194303L) << (38 - 22));
+ out[9 + outpos] = ((in[5 + inpos] >>> 22) & 274877906943L);
+ out[10 + outpos] = (in[5 + inpos] >>> 60)
+ | ((in[6 + inpos] & 17179869183L) << (38 - 34));
+ out[11 + outpos] = (in[6 + inpos] >>> 34)
+ | ((in[7 + inpos] & 255L) << (38 - 8));
+ out[12 + outpos] = ((in[7 + inpos] >>> 8) & 274877906943L);
+ out[13 + outpos] = (in[7 + inpos] >>> 46)
+ | ((in[8 + inpos] & 1048575L) << (38 - 20));
+ out[14 + outpos] = ((in[8 + inpos] >>> 20) & 274877906943L);
+ out[15 + outpos] = (in[8 + inpos] >>> 58)
+ | ((in[9 + inpos] & 4294967295L) << (38 - 32));
+ out[16 + outpos] = (in[9 + inpos] >>> 32)
+ | ((in[10 + inpos] & 63L) << (38 - 6));
+ out[17 + outpos] = ((in[10 + inpos] >>> 6) & 274877906943L);
+ out[18 + outpos] = (in[10 + inpos] >>> 44)
+ | ((in[11 + inpos] & 262143L) << (38 - 18));
+ out[19 + outpos] = ((in[11 + inpos] >>> 18) & 274877906943L);
+ out[20 + outpos] = (in[11 + inpos] >>> 56)
+ | ((in[12 + inpos] & 1073741823L) << (38 - 30));
+ out[21 + outpos] = (in[12 + inpos] >>> 30)
+ | ((in[13 + inpos] & 15L) << (38 - 4));
+ out[22 + outpos] = ((in[13 + inpos] >>> 4) & 274877906943L);
+ out[23 + outpos] = (in[13 + inpos] >>> 42)
+ | ((in[14 + inpos] & 65535L) << (38 - 16));
+ out[24 + outpos] = ((in[14 + inpos] >>> 16) & 274877906943L);
+ out[25 + outpos] = (in[14 + inpos] >>> 54)
+ | ((in[15 + inpos] & 268435455L) << (38 - 28));
+ out[26 + outpos] = (in[15 + inpos] >>> 28)
+ | ((in[16 + inpos] & 3L) << (38 - 2));
+ out[27 + outpos] = ((in[16 + inpos] >>> 2) & 274877906943L);
+ out[28 + outpos] = (in[16 + inpos] >>> 40)
+ | ((in[17 + inpos] & 16383L) << (38 - 14));
+ out[29 + outpos] = ((in[17 + inpos] >>> 14) & 274877906943L);
+ out[30 + outpos] = (in[17 + inpos] >>> 52)
+ | ((in[18 + inpos] & 67108863L) << (38 - 26));
+ out[31 + outpos] = (in[18 + inpos] >>> 26);
+ out[32 + outpos] = (in[19 + inpos] & 274877906943L);
+ out[33 + outpos] = (in[19 + inpos] >>> 38)
+ | ((in[20 + inpos] & 4095L) << (38 - 12));
+ out[34 + outpos] = ((in[20 + inpos] >>> 12) & 274877906943L);
+ out[35 + outpos] = (in[20 + inpos] >>> 50)
+ | ((in[21 + inpos] & 16777215L) << (38 - 24));
+ out[36 + outpos] = ((in[21 + inpos] >>> 24) & 274877906943L);
+ out[37 + outpos] = (in[21 + inpos] >>> 62)
+ | ((in[22 + inpos] & 68719476735L) << (38 - 36));
+ out[38 + outpos] = (in[22 + inpos] >>> 36)
+ | ((in[23 + inpos] & 1023L) << (38 - 10));
+ out[39 + outpos] = ((in[23 + inpos] >>> 10) & 274877906943L);
+ out[40 + outpos] = (in[23 + inpos] >>> 48)
+ | ((in[24 + inpos] & 4194303L) << (38 - 22));
+ out[41 + outpos] = ((in[24 + inpos] >>> 22) & 274877906943L);
+ out[42 + outpos] = (in[24 + inpos] >>> 60)
+ | ((in[25 + inpos] & 17179869183L) << (38 - 34));
+ out[43 + outpos] = (in[25 + inpos] >>> 34)
+ | ((in[26 + inpos] & 255L) << (38 - 8));
+ out[44 + outpos] = ((in[26 + inpos] >>> 8) & 274877906943L);
+ out[45 + outpos] = (in[26 + inpos] >>> 46)
+ | ((in[27 + inpos] & 1048575L) << (38 - 20));
+ out[46 + outpos] = ((in[27 + inpos] >>> 20) & 274877906943L);
+ out[47 + outpos] = (in[27 + inpos] >>> 58)
+ | ((in[28 + inpos] & 4294967295L) << (38 - 32));
+ out[48 + outpos] = (in[28 + inpos] >>> 32)
+ | ((in[29 + inpos] & 63L) << (38 - 6));
+ out[49 + outpos] = ((in[29 + inpos] >>> 6) & 274877906943L);
+ out[50 + outpos] = (in[29 + inpos] >>> 44)
+ | ((in[30 + inpos] & 262143L) << (38 - 18));
+ out[51 + outpos] = ((in[30 + inpos] >>> 18) & 274877906943L);
+ out[52 + outpos] = (in[30 + inpos] >>> 56)
+ | ((in[31 + inpos] & 1073741823L) << (38 - 30));
+ out[53 + outpos] = (in[31 + inpos] >>> 30)
+ | ((in[32 + inpos] & 15L) << (38 - 4));
+ out[54 + outpos] = ((in[32 + inpos] >>> 4) & 274877906943L);
+ out[55 + outpos] = (in[32 + inpos] >>> 42)
+ | ((in[33 + inpos] & 65535L) << (38 - 16));
+ out[56 + outpos] = ((in[33 + inpos] >>> 16) & 274877906943L);
+ out[57 + outpos] = (in[33 + inpos] >>> 54)
+ | ((in[34 + inpos] & 268435455L) << (38 - 28));
+ out[58 + outpos] = (in[34 + inpos] >>> 28)
+ | ((in[35 + inpos] & 3L) << (38 - 2));
+ out[59 + outpos] = ((in[35 + inpos] >>> 2) & 274877906943L);
+ out[60 + outpos] = (in[35 + inpos] >>> 40)
+ | ((in[36 + inpos] & 16383L) << (38 - 14));
+ out[61 + outpos] = ((in[36 + inpos] >>> 14) & 274877906943L);
+ out[62 + outpos] = (in[36 + inpos] >>> 52)
+ | ((in[37 + inpos] & 67108863L) << (38 - 26));
+ out[63 + outpos] = (in[37 + inpos] >>> 26);
+ }
+
+ protected static void fastunpack39(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 549755813887L);
+ out[1 + outpos] = (in[inpos] >>> 39)
+ | ((in[1 + inpos] & 16383L) << (39 - 14));
+ out[2 + outpos] = ((in[1 + inpos] >>> 14) & 549755813887L);
+ out[3 + outpos] = (in[1 + inpos] >>> 53)
+ | ((in[2 + inpos] & 268435455L) << (39 - 28));
+ out[4 + outpos] = (in[2 + inpos] >>> 28)
+ | ((in[3 + inpos] & 7L) << (39 - 3));
+ out[5 + outpos] = ((in[3 + inpos] >>> 3) & 549755813887L);
+ out[6 + outpos] = (in[3 + inpos] >>> 42)
+ | ((in[4 + inpos] & 131071L) << (39 - 17));
+ out[7 + outpos] = ((in[4 + inpos] >>> 17) & 549755813887L);
+ out[8 + outpos] = (in[4 + inpos] >>> 56)
+ | ((in[5 + inpos] & 2147483647L) << (39 - 31));
+ out[9 + outpos] = (in[5 + inpos] >>> 31)
+ | ((in[6 + inpos] & 63L) << (39 - 6));
+ out[10 + outpos] = ((in[6 + inpos] >>> 6) & 549755813887L);
+ out[11 + outpos] = (in[6 + inpos] >>> 45)
+ | ((in[7 + inpos] & 1048575L) << (39 - 20));
+ out[12 + outpos] = ((in[7 + inpos] >>> 20) & 549755813887L);
+ out[13 + outpos] = (in[7 + inpos] >>> 59)
+ | ((in[8 + inpos] & 17179869183L) << (39 - 34));
+ out[14 + outpos] = (in[8 + inpos] >>> 34)
+ | ((in[9 + inpos] & 511L) << (39 - 9));
+ out[15 + outpos] = ((in[9 + inpos] >>> 9) & 549755813887L);
+ out[16 + outpos] = (in[9 + inpos] >>> 48)
+ | ((in[10 + inpos] & 8388607L) << (39 - 23));
+ out[17 + outpos] = ((in[10 + inpos] >>> 23) & 549755813887L);
+ out[18 + outpos] = (in[10 + inpos] >>> 62)
+ | ((in[11 + inpos] & 137438953471L) << (39 - 37));
+ out[19 + outpos] = (in[11 + inpos] >>> 37)
+ | ((in[12 + inpos] & 4095L) << (39 - 12));
+ out[20 + outpos] = ((in[12 + inpos] >>> 12) & 549755813887L);
+ out[21 + outpos] = (in[12 + inpos] >>> 51)
+ | ((in[13 + inpos] & 67108863L) << (39 - 26));
+ out[22 + outpos] = (in[13 + inpos] >>> 26)
+ | ((in[14 + inpos] & 1L) << (39 - 1));
+ out[23 + outpos] = ((in[14 + inpos] >>> 1) & 549755813887L);
+ out[24 + outpos] = (in[14 + inpos] >>> 40)
+ | ((in[15 + inpos] & 32767L) << (39 - 15));
+ out[25 + outpos] = ((in[15 + inpos] >>> 15) & 549755813887L);
+ out[26 + outpos] = (in[15 + inpos] >>> 54)
+ | ((in[16 + inpos] & 536870911L) << (39 - 29));
+ out[27 + outpos] = (in[16 + inpos] >>> 29)
+ | ((in[17 + inpos] & 15L) << (39 - 4));
+ out[28 + outpos] = ((in[17 + inpos] >>> 4) & 549755813887L);
+ out[29 + outpos] = (in[17 + inpos] >>> 43)
+ | ((in[18 + inpos] & 262143L) << (39 - 18));
+ out[30 + outpos] = ((in[18 + inpos] >>> 18) & 549755813887L);
+ out[31 + outpos] = (in[18 + inpos] >>> 57)
+ | ((in[19 + inpos] & 4294967295L) << (39 - 32));
+ out[32 + outpos] = (in[19 + inpos] >>> 32)
+ | ((in[20 + inpos] & 127L) << (39 - 7));
+ out[33 + outpos] = ((in[20 + inpos] >>> 7) & 549755813887L);
+ out[34 + outpos] = (in[20 + inpos] >>> 46)
+ | ((in[21 + inpos] & 2097151L) << (39 - 21));
+ out[35 + outpos] = ((in[21 + inpos] >>> 21) & 549755813887L);
+ out[36 + outpos] = (in[21 + inpos] >>> 60)
+ | ((in[22 + inpos] & 34359738367L) << (39 - 35));
+ out[37 + outpos] = (in[22 + inpos] >>> 35)
+ | ((in[23 + inpos] & 1023L) << (39 - 10));
+ out[38 + outpos] = ((in[23 + inpos] >>> 10) & 549755813887L);
+ out[39 + outpos] = (in[23 + inpos] >>> 49)
+ | ((in[24 + inpos] & 16777215L) << (39 - 24));
+ out[40 + outpos] = ((in[24 + inpos] >>> 24) & 549755813887L);
+ out[41 + outpos] = (in[24 + inpos] >>> 63)
+ | ((in[25 + inpos] & 274877906943L) << (39 - 38));
+ out[42 + outpos] = (in[25 + inpos] >>> 38)
+ | ((in[26 + inpos] & 8191L) << (39 - 13));
+ out[43 + outpos] = ((in[26 + inpos] >>> 13) & 549755813887L);
+ out[44 + outpos] = (in[26 + inpos] >>> 52)
+ | ((in[27 + inpos] & 134217727L) << (39 - 27));
+ out[45 + outpos] = (in[27 + inpos] >>> 27)
+ | ((in[28 + inpos] & 3L) << (39 - 2));
+ out[46 + outpos] = ((in[28 + inpos] >>> 2) & 549755813887L);
+ out[47 + outpos] = (in[28 + inpos] >>> 41)
+ | ((in[29 + inpos] & 65535L) << (39 - 16));
+ out[48 + outpos] = ((in[29 + inpos] >>> 16) & 549755813887L);
+ out[49 + outpos] = (in[29 + inpos] >>> 55)
+ | ((in[30 + inpos] & 1073741823L) << (39 - 30));
+ out[50 + outpos] = (in[30 + inpos] >>> 30)
+ | ((in[31 + inpos] & 31L) << (39 - 5));
+ out[51 + outpos] = ((in[31 + inpos] >>> 5) & 549755813887L);
+ out[52 + outpos] = (in[31 + inpos] >>> 44)
+ | ((in[32 + inpos] & 524287L) << (39 - 19));
+ out[53 + outpos] = ((in[32 + inpos] >>> 19) & 549755813887L);
+ out[54 + outpos] = (in[32 + inpos] >>> 58)
+ | ((in[33 + inpos] & 8589934591L) << (39 - 33));
+ out[55 + outpos] = (in[33 + inpos] >>> 33)
+ | ((in[34 + inpos] & 255L) << (39 - 8));
+ out[56 + outpos] = ((in[34 + inpos] >>> 8) & 549755813887L);
+ out[57 + outpos] = (in[34 + inpos] >>> 47)
+ | ((in[35 + inpos] & 4194303L) << (39 - 22));
+ out[58 + outpos] = ((in[35 + inpos] >>> 22) & 549755813887L);
+ out[59 + outpos] = (in[35 + inpos] >>> 61)
+ | ((in[36 + inpos] & 68719476735L) << (39 - 36));
+ out[60 + outpos] = (in[36 + inpos] >>> 36)
+ | ((in[37 + inpos] & 2047L) << (39 - 11));
+ out[61 + outpos] = ((in[37 + inpos] >>> 11) & 549755813887L);
+ out[62 + outpos] = (in[37 + inpos] >>> 50)
+ | ((in[38 + inpos] & 33554431L) << (39 - 25));
+ out[63 + outpos] = (in[38 + inpos] >>> 25);
+ }
+
+ protected static void fastunpack40(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1099511627775L);
+ out[1 + outpos] = (in[inpos] >>> 40)
+ | ((in[1 + inpos] & 65535L) << (40 - 16));
+ out[2 + outpos] = ((in[1 + inpos] >>> 16) & 1099511627775L);
+ out[3 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 4294967295L) << (40 - 32));
+ out[4 + outpos] = (in[2 + inpos] >>> 32)
+ | ((in[3 + inpos] & 255L) << (40 - 8));
+ out[5 + outpos] = ((in[3 + inpos] >>> 8) & 1099511627775L);
+ out[6 + outpos] = (in[3 + inpos] >>> 48)
+ | ((in[4 + inpos] & 16777215L) << (40 - 24));
+ out[7 + outpos] = (in[4 + inpos] >>> 24);
+ out[8 + outpos] = (in[5 + inpos] & 1099511627775L);
+ out[9 + outpos] = (in[5 + inpos] >>> 40)
+ | ((in[6 + inpos] & 65535L) << (40 - 16));
+ out[10 + outpos] = ((in[6 + inpos] >>> 16) & 1099511627775L);
+ out[11 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 4294967295L) << (40 - 32));
+ out[12 + outpos] = (in[7 + inpos] >>> 32)
+ | ((in[8 + inpos] & 255L) << (40 - 8));
+ out[13 + outpos] = ((in[8 + inpos] >>> 8) & 1099511627775L);
+ out[14 + outpos] = (in[8 + inpos] >>> 48)
+ | ((in[9 + inpos] & 16777215L) << (40 - 24));
+ out[15 + outpos] = (in[9 + inpos] >>> 24);
+ out[16 + outpos] = (in[10 + inpos] & 1099511627775L);
+ out[17 + outpos] = (in[10 + inpos] >>> 40)
+ | ((in[11 + inpos] & 65535L) << (40 - 16));
+ out[18 + outpos] = ((in[11 + inpos] >>> 16) & 1099511627775L);
+ out[19 + outpos] = (in[11 + inpos] >>> 56)
+ | ((in[12 + inpos] & 4294967295L) << (40 - 32));
+ out[20 + outpos] = (in[12 + inpos] >>> 32)
+ | ((in[13 + inpos] & 255L) << (40 - 8));
+ out[21 + outpos] = ((in[13 + inpos] >>> 8) & 1099511627775L);
+ out[22 + outpos] = (in[13 + inpos] >>> 48)
+ | ((in[14 + inpos] & 16777215L) << (40 - 24));
+ out[23 + outpos] = (in[14 + inpos] >>> 24);
+ out[24 + outpos] = (in[15 + inpos] & 1099511627775L);
+ out[25 + outpos] = (in[15 + inpos] >>> 40)
+ | ((in[16 + inpos] & 65535L) << (40 - 16));
+ out[26 + outpos] = ((in[16 + inpos] >>> 16) & 1099511627775L);
+ out[27 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 4294967295L) << (40 - 32));
+ out[28 + outpos] = (in[17 + inpos] >>> 32)
+ | ((in[18 + inpos] & 255L) << (40 - 8));
+ out[29 + outpos] = ((in[18 + inpos] >>> 8) & 1099511627775L);
+ out[30 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 16777215L) << (40 - 24));
+ out[31 + outpos] = (in[19 + inpos] >>> 24);
+ out[32 + outpos] = (in[20 + inpos] & 1099511627775L);
+ out[33 + outpos] = (in[20 + inpos] >>> 40)
+ | ((in[21 + inpos] & 65535L) << (40 - 16));
+ out[34 + outpos] = ((in[21 + inpos] >>> 16) & 1099511627775L);
+ out[35 + outpos] = (in[21 + inpos] >>> 56)
+ | ((in[22 + inpos] & 4294967295L) << (40 - 32));
+ out[36 + outpos] = (in[22 + inpos] >>> 32)
+ | ((in[23 + inpos] & 255L) << (40 - 8));
+ out[37 + outpos] = ((in[23 + inpos] >>> 8) & 1099511627775L);
+ out[38 + outpos] = (in[23 + inpos] >>> 48)
+ | ((in[24 + inpos] & 16777215L) << (40 - 24));
+ out[39 + outpos] = (in[24 + inpos] >>> 24);
+ out[40 + outpos] = (in[25 + inpos] & 1099511627775L);
+ out[41 + outpos] = (in[25 + inpos] >>> 40)
+ | ((in[26 + inpos] & 65535L) << (40 - 16));
+ out[42 + outpos] = ((in[26 + inpos] >>> 16) & 1099511627775L);
+ out[43 + outpos] = (in[26 + inpos] >>> 56)
+ | ((in[27 + inpos] & 4294967295L) << (40 - 32));
+ out[44 + outpos] = (in[27 + inpos] >>> 32)
+ | ((in[28 + inpos] & 255L) << (40 - 8));
+ out[45 + outpos] = ((in[28 + inpos] >>> 8) & 1099511627775L);
+ out[46 + outpos] = (in[28 + inpos] >>> 48)
+ | ((in[29 + inpos] & 16777215L) << (40 - 24));
+ out[47 + outpos] = (in[29 + inpos] >>> 24);
+ out[48 + outpos] = (in[30 + inpos] & 1099511627775L);
+ out[49 + outpos] = (in[30 + inpos] >>> 40)
+ | ((in[31 + inpos] & 65535L) << (40 - 16));
+ out[50 + outpos] = ((in[31 + inpos] >>> 16) & 1099511627775L);
+ out[51 + outpos] = (in[31 + inpos] >>> 56)
+ | ((in[32 + inpos] & 4294967295L) << (40 - 32));
+ out[52 + outpos] = (in[32 + inpos] >>> 32)
+ | ((in[33 + inpos] & 255L) << (40 - 8));
+ out[53 + outpos] = ((in[33 + inpos] >>> 8) & 1099511627775L);
+ out[54 + outpos] = (in[33 + inpos] >>> 48)
+ | ((in[34 + inpos] & 16777215L) << (40 - 24));
+ out[55 + outpos] = (in[34 + inpos] >>> 24);
+ out[56 + outpos] = (in[35 + inpos] & 1099511627775L);
+ out[57 + outpos] = (in[35 + inpos] >>> 40)
+ | ((in[36 + inpos] & 65535L) << (40 - 16));
+ out[58 + outpos] = ((in[36 + inpos] >>> 16) & 1099511627775L);
+ out[59 + outpos] = (in[36 + inpos] >>> 56)
+ | ((in[37 + inpos] & 4294967295L) << (40 - 32));
+ out[60 + outpos] = (in[37 + inpos] >>> 32)
+ | ((in[38 + inpos] & 255L) << (40 - 8));
+ out[61 + outpos] = ((in[38 + inpos] >>> 8) & 1099511627775L);
+ out[62 + outpos] = (in[38 + inpos] >>> 48)
+ | ((in[39 + inpos] & 16777215L) << (40 - 24));
+ out[63 + outpos] = (in[39 + inpos] >>> 24);
+ }
+
+ protected static void fastunpack41(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 2199023255551L);
+ out[1 + outpos] = (in[inpos] >>> 41)
+ | ((in[1 + inpos] & 262143L) << (41 - 18));
+ out[2 + outpos] = ((in[1 + inpos] >>> 18) & 2199023255551L);
+ out[3 + outpos] = (in[1 + inpos] >>> 59)
+ | ((in[2 + inpos] & 68719476735L) << (41 - 36));
+ out[4 + outpos] = (in[2 + inpos] >>> 36)
+ | ((in[3 + inpos] & 8191L) << (41 - 13));
+ out[5 + outpos] = ((in[3 + inpos] >>> 13) & 2199023255551L);
+ out[6 + outpos] = (in[3 + inpos] >>> 54)
+ | ((in[4 + inpos] & 2147483647L) << (41 - 31));
+ out[7 + outpos] = (in[4 + inpos] >>> 31)
+ | ((in[5 + inpos] & 255L) << (41 - 8));
+ out[8 + outpos] = ((in[5 + inpos] >>> 8) & 2199023255551L);
+ out[9 + outpos] = (in[5 + inpos] >>> 49)
+ | ((in[6 + inpos] & 67108863L) << (41 - 26));
+ out[10 + outpos] = (in[6 + inpos] >>> 26)
+ | ((in[7 + inpos] & 7L) << (41 - 3));
+ out[11 + outpos] = ((in[7 + inpos] >>> 3) & 2199023255551L);
+ out[12 + outpos] = (in[7 + inpos] >>> 44)
+ | ((in[8 + inpos] & 2097151L) << (41 - 21));
+ out[13 + outpos] = ((in[8 + inpos] >>> 21) & 2199023255551L);
+ out[14 + outpos] = (in[8 + inpos] >>> 62)
+ | ((in[9 + inpos] & 549755813887L) << (41 - 39));
+ out[15 + outpos] = (in[9 + inpos] >>> 39)
+ | ((in[10 + inpos] & 65535L) << (41 - 16));
+ out[16 + outpos] = ((in[10 + inpos] >>> 16) & 2199023255551L);
+ out[17 + outpos] = (in[10 + inpos] >>> 57)
+ | ((in[11 + inpos] & 17179869183L) << (41 - 34));
+ out[18 + outpos] = (in[11 + inpos] >>> 34)
+ | ((in[12 + inpos] & 2047L) << (41 - 11));
+ out[19 + outpos] = ((in[12 + inpos] >>> 11) & 2199023255551L);
+ out[20 + outpos] = (in[12 + inpos] >>> 52)
+ | ((in[13 + inpos] & 536870911L) << (41 - 29));
+ out[21 + outpos] = (in[13 + inpos] >>> 29)
+ | ((in[14 + inpos] & 63L) << (41 - 6));
+ out[22 + outpos] = ((in[14 + inpos] >>> 6) & 2199023255551L);
+ out[23 + outpos] = (in[14 + inpos] >>> 47)
+ | ((in[15 + inpos] & 16777215L) << (41 - 24));
+ out[24 + outpos] = (in[15 + inpos] >>> 24)
+ | ((in[16 + inpos] & 1L) << (41 - 1));
+ out[25 + outpos] = ((in[16 + inpos] >>> 1) & 2199023255551L);
+ out[26 + outpos] = (in[16 + inpos] >>> 42)
+ | ((in[17 + inpos] & 524287L) << (41 - 19));
+ out[27 + outpos] = ((in[17 + inpos] >>> 19) & 2199023255551L);
+ out[28 + outpos] = (in[17 + inpos] >>> 60)
+ | ((in[18 + inpos] & 137438953471L) << (41 - 37));
+ out[29 + outpos] = (in[18 + inpos] >>> 37)
+ | ((in[19 + inpos] & 16383L) << (41 - 14));
+ out[30 + outpos] = ((in[19 + inpos] >>> 14) & 2199023255551L);
+ out[31 + outpos] = (in[19 + inpos] >>> 55)
+ | ((in[20 + inpos] & 4294967295L) << (41 - 32));
+ out[32 + outpos] = (in[20 + inpos] >>> 32)
+ | ((in[21 + inpos] & 511L) << (41 - 9));
+ out[33 + outpos] = ((in[21 + inpos] >>> 9) & 2199023255551L);
+ out[34 + outpos] = (in[21 + inpos] >>> 50)
+ | ((in[22 + inpos] & 134217727L) << (41 - 27));
+ out[35 + outpos] = (in[22 + inpos] >>> 27)
+ | ((in[23 + inpos] & 15L) << (41 - 4));
+ out[36 + outpos] = ((in[23 + inpos] >>> 4) & 2199023255551L);
+ out[37 + outpos] = (in[23 + inpos] >>> 45)
+ | ((in[24 + inpos] & 4194303L) << (41 - 22));
+ out[38 + outpos] = ((in[24 + inpos] >>> 22) & 2199023255551L);
+ out[39 + outpos] = (in[24 + inpos] >>> 63)
+ | ((in[25 + inpos] & 1099511627775L) << (41 - 40));
+ out[40 + outpos] = (in[25 + inpos] >>> 40)
+ | ((in[26 + inpos] & 131071L) << (41 - 17));
+ out[41 + outpos] = ((in[26 + inpos] >>> 17) & 2199023255551L);
+ out[42 + outpos] = (in[26 + inpos] >>> 58)
+ | ((in[27 + inpos] & 34359738367L) << (41 - 35));
+ out[43 + outpos] = (in[27 + inpos] >>> 35)
+ | ((in[28 + inpos] & 4095L) << (41 - 12));
+ out[44 + outpos] = ((in[28 + inpos] >>> 12) & 2199023255551L);
+ out[45 + outpos] = (in[28 + inpos] >>> 53)
+ | ((in[29 + inpos] & 1073741823L) << (41 - 30));
+ out[46 + outpos] = (in[29 + inpos] >>> 30)
+ | ((in[30 + inpos] & 127L) << (41 - 7));
+ out[47 + outpos] = ((in[30 + inpos] >>> 7) & 2199023255551L);
+ out[48 + outpos] = (in[30 + inpos] >>> 48)
+ | ((in[31 + inpos] & 33554431L) << (41 - 25));
+ out[49 + outpos] = (in[31 + inpos] >>> 25)
+ | ((in[32 + inpos] & 3L) << (41 - 2));
+ out[50 + outpos] = ((in[32 + inpos] >>> 2) & 2199023255551L);
+ out[51 + outpos] = (in[32 + inpos] >>> 43)
+ | ((in[33 + inpos] & 1048575L) << (41 - 20));
+ out[52 + outpos] = ((in[33 + inpos] >>> 20) & 2199023255551L);
+ out[53 + outpos] = (in[33 + inpos] >>> 61)
+ | ((in[34 + inpos] & 274877906943L) << (41 - 38));
+ out[54 + outpos] = (in[34 + inpos] >>> 38)
+ | ((in[35 + inpos] & 32767L) << (41 - 15));
+ out[55 + outpos] = ((in[35 + inpos] >>> 15) & 2199023255551L);
+ out[56 + outpos] = (in[35 + inpos] >>> 56)
+ | ((in[36 + inpos] & 8589934591L) << (41 - 33));
+ out[57 + outpos] = (in[36 + inpos] >>> 33)
+ | ((in[37 + inpos] & 1023L) << (41 - 10));
+ out[58 + outpos] = ((in[37 + inpos] >>> 10) & 2199023255551L);
+ out[59 + outpos] = (in[37 + inpos] >>> 51)
+ | ((in[38 + inpos] & 268435455L) << (41 - 28));
+ out[60 + outpos] = (in[38 + inpos] >>> 28)
+ | ((in[39 + inpos] & 31L) << (41 - 5));
+ out[61 + outpos] = ((in[39 + inpos] >>> 5) & 2199023255551L);
+ out[62 + outpos] = (in[39 + inpos] >>> 46)
+ | ((in[40 + inpos] & 8388607L) << (41 - 23));
+ out[63 + outpos] = (in[40 + inpos] >>> 23);
+ }
+
+ protected static void fastunpack42(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 4398046511103L);
+ out[1 + outpos] = (in[inpos] >>> 42)
+ | ((in[1 + inpos] & 1048575L) << (42 - 20));
+ out[2 + outpos] = ((in[1 + inpos] >>> 20) & 4398046511103L);
+ out[3 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 1099511627775L) << (42 - 40));
+ out[4 + outpos] = (in[2 + inpos] >>> 40)
+ | ((in[3 + inpos] & 262143L) << (42 - 18));
+ out[5 + outpos] = ((in[3 + inpos] >>> 18) & 4398046511103L);
+ out[6 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 274877906943L) << (42 - 38));
+ out[7 + outpos] = (in[4 + inpos] >>> 38)
+ | ((in[5 + inpos] & 65535L) << (42 - 16));
+ out[8 + outpos] = ((in[5 + inpos] >>> 16) & 4398046511103L);
+ out[9 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 68719476735L) << (42 - 36));
+ out[10 + outpos] = (in[6 + inpos] >>> 36)
+ | ((in[7 + inpos] & 16383L) << (42 - 14));
+ out[11 + outpos] = ((in[7 + inpos] >>> 14) & 4398046511103L);
+ out[12 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 17179869183L) << (42 - 34));
+ out[13 + outpos] = (in[8 + inpos] >>> 34)
+ | ((in[9 + inpos] & 4095L) << (42 - 12));
+ out[14 + outpos] = ((in[9 + inpos] >>> 12) & 4398046511103L);
+ out[15 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 4294967295L) << (42 - 32));
+ out[16 + outpos] = (in[10 + inpos] >>> 32)
+ | ((in[11 + inpos] & 1023L) << (42 - 10));
+ out[17 + outpos] = ((in[11 + inpos] >>> 10) & 4398046511103L);
+ out[18 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 1073741823L) << (42 - 30));
+ out[19 + outpos] = (in[12 + inpos] >>> 30)
+ | ((in[13 + inpos] & 255L) << (42 - 8));
+ out[20 + outpos] = ((in[13 + inpos] >>> 8) & 4398046511103L);
+ out[21 + outpos] = (in[13 + inpos] >>> 50)
+ | ((in[14 + inpos] & 268435455L) << (42 - 28));
+ out[22 + outpos] = (in[14 + inpos] >>> 28)
+ | ((in[15 + inpos] & 63L) << (42 - 6));
+ out[23 + outpos] = ((in[15 + inpos] >>> 6) & 4398046511103L);
+ out[24 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 67108863L) << (42 - 26));
+ out[25 + outpos] = (in[16 + inpos] >>> 26)
+ | ((in[17 + inpos] & 15L) << (42 - 4));
+ out[26 + outpos] = ((in[17 + inpos] >>> 4) & 4398046511103L);
+ out[27 + outpos] = (in[17 + inpos] >>> 46)
+ | ((in[18 + inpos] & 16777215L) << (42 - 24));
+ out[28 + outpos] = (in[18 + inpos] >>> 24)
+ | ((in[19 + inpos] & 3L) << (42 - 2));
+ out[29 + outpos] = ((in[19 + inpos] >>> 2) & 4398046511103L);
+ out[30 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 4194303L) << (42 - 22));
+ out[31 + outpos] = (in[20 + inpos] >>> 22);
+ out[32 + outpos] = (in[21 + inpos] & 4398046511103L);
+ out[33 + outpos] = (in[21 + inpos] >>> 42)
+ | ((in[22 + inpos] & 1048575L) << (42 - 20));
+ out[34 + outpos] = ((in[22 + inpos] >>> 20) & 4398046511103L);
+ out[35 + outpos] = (in[22 + inpos] >>> 62)
+ | ((in[23 + inpos] & 1099511627775L) << (42 - 40));
+ out[36 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 262143L) << (42 - 18));
+ out[37 + outpos] = ((in[24 + inpos] >>> 18) & 4398046511103L);
+ out[38 + outpos] = (in[24 + inpos] >>> 60)
+ | ((in[25 + inpos] & 274877906943L) << (42 - 38));
+ out[39 + outpos] = (in[25 + inpos] >>> 38)
+ | ((in[26 + inpos] & 65535L) << (42 - 16));
+ out[40 + outpos] = ((in[26 + inpos] >>> 16) & 4398046511103L);
+ out[41 + outpos] = (in[26 + inpos] >>> 58)
+ | ((in[27 + inpos] & 68719476735L) << (42 - 36));
+ out[42 + outpos] = (in[27 + inpos] >>> 36)
+ | ((in[28 + inpos] & 16383L) << (42 - 14));
+ out[43 + outpos] = ((in[28 + inpos] >>> 14) & 4398046511103L);
+ out[44 + outpos] = (in[28 + inpos] >>> 56)
+ | ((in[29 + inpos] & 17179869183L) << (42 - 34));
+ out[45 + outpos] = (in[29 + inpos] >>> 34)
+ | ((in[30 + inpos] & 4095L) << (42 - 12));
+ out[46 + outpos] = ((in[30 + inpos] >>> 12) & 4398046511103L);
+ out[47 + outpos] = (in[30 + inpos] >>> 54)
+ | ((in[31 + inpos] & 4294967295L) << (42 - 32));
+ out[48 + outpos] = (in[31 + inpos] >>> 32)
+ | ((in[32 + inpos] & 1023L) << (42 - 10));
+ out[49 + outpos] = ((in[32 + inpos] >>> 10) & 4398046511103L);
+ out[50 + outpos] = (in[32 + inpos] >>> 52)
+ | ((in[33 + inpos] & 1073741823L) << (42 - 30));
+ out[51 + outpos] = (in[33 + inpos] >>> 30)
+ | ((in[34 + inpos] & 255L) << (42 - 8));
+ out[52 + outpos] = ((in[34 + inpos] >>> 8) & 4398046511103L);
+ out[53 + outpos] = (in[34 + inpos] >>> 50)
+ | ((in[35 + inpos] & 268435455L) << (42 - 28));
+ out[54 + outpos] = (in[35 + inpos] >>> 28)
+ | ((in[36 + inpos] & 63L) << (42 - 6));
+ out[55 + outpos] = ((in[36 + inpos] >>> 6) & 4398046511103L);
+ out[56 + outpos] = (in[36 + inpos] >>> 48)
+ | ((in[37 + inpos] & 67108863L) << (42 - 26));
+ out[57 + outpos] = (in[37 + inpos] >>> 26)
+ | ((in[38 + inpos] & 15L) << (42 - 4));
+ out[58 + outpos] = ((in[38 + inpos] >>> 4) & 4398046511103L);
+ out[59 + outpos] = (in[38 + inpos] >>> 46)
+ | ((in[39 + inpos] & 16777215L) << (42 - 24));
+ out[60 + outpos] = (in[39 + inpos] >>> 24)
+ | ((in[40 + inpos] & 3L) << (42 - 2));
+ out[61 + outpos] = ((in[40 + inpos] >>> 2) & 4398046511103L);
+ out[62 + outpos] = (in[40 + inpos] >>> 44)
+ | ((in[41 + inpos] & 4194303L) << (42 - 22));
+ out[63 + outpos] = (in[41 + inpos] >>> 22);
+ }
+
+ protected static void fastunpack43(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 8796093022207L);
+ out[1 + outpos] = (in[inpos] >>> 43)
+ | ((in[1 + inpos] & 4194303L) << (43 - 22));
+ out[2 + outpos] = (in[1 + inpos] >>> 22)
+ | ((in[2 + inpos] & 1L) << (43 - 1));
+ out[3 + outpos] = ((in[2 + inpos] >>> 1) & 8796093022207L);
+ out[4 + outpos] = (in[2 + inpos] >>> 44)
+ | ((in[3 + inpos] & 8388607L) << (43 - 23));
+ out[5 + outpos] = (in[3 + inpos] >>> 23)
+ | ((in[4 + inpos] & 3L) << (43 - 2));
+ out[6 + outpos] = ((in[4 + inpos] >>> 2) & 8796093022207L);
+ out[7 + outpos] = (in[4 + inpos] >>> 45)
+ | ((in[5 + inpos] & 16777215L) << (43 - 24));
+ out[8 + outpos] = (in[5 + inpos] >>> 24)
+ | ((in[6 + inpos] & 7L) << (43 - 3));
+ out[9 + outpos] = ((in[6 + inpos] >>> 3) & 8796093022207L);
+ out[10 + outpos] = (in[6 + inpos] >>> 46)
+ | ((in[7 + inpos] & 33554431L) << (43 - 25));
+ out[11 + outpos] = (in[7 + inpos] >>> 25)
+ | ((in[8 + inpos] & 15L) << (43 - 4));
+ out[12 + outpos] = ((in[8 + inpos] >>> 4) & 8796093022207L);
+ out[13 + outpos] = (in[8 + inpos] >>> 47)
+ | ((in[9 + inpos] & 67108863L) << (43 - 26));
+ out[14 + outpos] = (in[9 + inpos] >>> 26)
+ | ((in[10 + inpos] & 31L) << (43 - 5));
+ out[15 + outpos] = ((in[10 + inpos] >>> 5) & 8796093022207L);
+ out[16 + outpos] = (in[10 + inpos] >>> 48)
+ | ((in[11 + inpos] & 134217727L) << (43 - 27));
+ out[17 + outpos] = (in[11 + inpos] >>> 27)
+ | ((in[12 + inpos] & 63L) << (43 - 6));
+ out[18 + outpos] = ((in[12 + inpos] >>> 6) & 8796093022207L);
+ out[19 + outpos] = (in[12 + inpos] >>> 49)
+ | ((in[13 + inpos] & 268435455L) << (43 - 28));
+ out[20 + outpos] = (in[13 + inpos] >>> 28)
+ | ((in[14 + inpos] & 127L) << (43 - 7));
+ out[21 + outpos] = ((in[14 + inpos] >>> 7) & 8796093022207L);
+ out[22 + outpos] = (in[14 + inpos] >>> 50)
+ | ((in[15 + inpos] & 536870911L) << (43 - 29));
+ out[23 + outpos] = (in[15 + inpos] >>> 29)
+ | ((in[16 + inpos] & 255L) << (43 - 8));
+ out[24 + outpos] = ((in[16 + inpos] >>> 8) & 8796093022207L);
+ out[25 + outpos] = (in[16 + inpos] >>> 51)
+ | ((in[17 + inpos] & 1073741823L) << (43 - 30));
+ out[26 + outpos] = (in[17 + inpos] >>> 30)
+ | ((in[18 + inpos] & 511L) << (43 - 9));
+ out[27 + outpos] = ((in[18 + inpos] >>> 9) & 8796093022207L);
+ out[28 + outpos] = (in[18 + inpos] >>> 52)
+ | ((in[19 + inpos] & 2147483647L) << (43 - 31));
+ out[29 + outpos] = (in[19 + inpos] >>> 31)
+ | ((in[20 + inpos] & 1023L) << (43 - 10));
+ out[30 + outpos] = ((in[20 + inpos] >>> 10) & 8796093022207L);
+ out[31 + outpos] = (in[20 + inpos] >>> 53)
+ | ((in[21 + inpos] & 4294967295L) << (43 - 32));
+ out[32 + outpos] = (in[21 + inpos] >>> 32)
+ | ((in[22 + inpos] & 2047L) << (43 - 11));
+ out[33 + outpos] = ((in[22 + inpos] >>> 11) & 8796093022207L);
+ out[34 + outpos] = (in[22 + inpos] >>> 54)
+ | ((in[23 + inpos] & 8589934591L) << (43 - 33));
+ out[35 + outpos] = (in[23 + inpos] >>> 33)
+ | ((in[24 + inpos] & 4095L) << (43 - 12));
+ out[36 + outpos] = ((in[24 + inpos] >>> 12) & 8796093022207L);
+ out[37 + outpos] = (in[24 + inpos] >>> 55)
+ | ((in[25 + inpos] & 17179869183L) << (43 - 34));
+ out[38 + outpos] = (in[25 + inpos] >>> 34)
+ | ((in[26 + inpos] & 8191L) << (43 - 13));
+ out[39 + outpos] = ((in[26 + inpos] >>> 13) & 8796093022207L);
+ out[40 + outpos] = (in[26 + inpos] >>> 56)
+ | ((in[27 + inpos] & 34359738367L) << (43 - 35));
+ out[41 + outpos] = (in[27 + inpos] >>> 35)
+ | ((in[28 + inpos] & 16383L) << (43 - 14));
+ out[42 + outpos] = ((in[28 + inpos] >>> 14) & 8796093022207L);
+ out[43 + outpos] = (in[28 + inpos] >>> 57)
+ | ((in[29 + inpos] & 68719476735L) << (43 - 36));
+ out[44 + outpos] = (in[29 + inpos] >>> 36)
+ | ((in[30 + inpos] & 32767L) << (43 - 15));
+ out[45 + outpos] = ((in[30 + inpos] >>> 15) & 8796093022207L);
+ out[46 + outpos] = (in[30 + inpos] >>> 58)
+ | ((in[31 + inpos] & 137438953471L) << (43 - 37));
+ out[47 + outpos] = (in[31 + inpos] >>> 37)
+ | ((in[32 + inpos] & 65535L) << (43 - 16));
+ out[48 + outpos] = ((in[32 + inpos] >>> 16) & 8796093022207L);
+ out[49 + outpos] = (in[32 + inpos] >>> 59)
+ | ((in[33 + inpos] & 274877906943L) << (43 - 38));
+ out[50 + outpos] = (in[33 + inpos] >>> 38)
+ | ((in[34 + inpos] & 131071L) << (43 - 17));
+ out[51 + outpos] = ((in[34 + inpos] >>> 17) & 8796093022207L);
+ out[52 + outpos] = (in[34 + inpos] >>> 60)
+ | ((in[35 + inpos] & 549755813887L) << (43 - 39));
+ out[53 + outpos] = (in[35 + inpos] >>> 39)
+ | ((in[36 + inpos] & 262143L) << (43 - 18));
+ out[54 + outpos] = ((in[36 + inpos] >>> 18) & 8796093022207L);
+ out[55 + outpos] = (in[36 + inpos] >>> 61)
+ | ((in[37 + inpos] & 1099511627775L) << (43 - 40));
+ out[56 + outpos] = (in[37 + inpos] >>> 40)
+ | ((in[38 + inpos] & 524287L) << (43 - 19));
+ out[57 + outpos] = ((in[38 + inpos] >>> 19) & 8796093022207L);
+ out[58 + outpos] = (in[38 + inpos] >>> 62)
+ | ((in[39 + inpos] & 2199023255551L) << (43 - 41));
+ out[59 + outpos] = (in[39 + inpos] >>> 41)
+ | ((in[40 + inpos] & 1048575L) << (43 - 20));
+ out[60 + outpos] = ((in[40 + inpos] >>> 20) & 8796093022207L);
+ out[61 + outpos] = (in[40 + inpos] >>> 63)
+ | ((in[41 + inpos] & 4398046511103L) << (43 - 42));
+ out[62 + outpos] = (in[41 + inpos] >>> 42)
+ | ((in[42 + inpos] & 2097151L) << (43 - 21));
+ out[63 + outpos] = (in[42 + inpos] >>> 21);
+ }
+
+ protected static void fastunpack44(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 17592186044415L);
+ out[1 + outpos] = (in[inpos] >>> 44)
+ | ((in[1 + inpos] & 16777215L) << (44 - 24));
+ out[2 + outpos] = (in[1 + inpos] >>> 24)
+ | ((in[2 + inpos] & 15L) << (44 - 4));
+ out[3 + outpos] = ((in[2 + inpos] >>> 4) & 17592186044415L);
+ out[4 + outpos] = (in[2 + inpos] >>> 48)
+ | ((in[3 + inpos] & 268435455L) << (44 - 28));
+ out[5 + outpos] = (in[3 + inpos] >>> 28)
+ | ((in[4 + inpos] & 255L) << (44 - 8));
+ out[6 + outpos] = ((in[4 + inpos] >>> 8) & 17592186044415L);
+ out[7 + outpos] = (in[4 + inpos] >>> 52)
+ | ((in[5 + inpos] & 4294967295L) << (44 - 32));
+ out[8 + outpos] = (in[5 + inpos] >>> 32)
+ | ((in[6 + inpos] & 4095L) << (44 - 12));
+ out[9 + outpos] = ((in[6 + inpos] >>> 12) & 17592186044415L);
+ out[10 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 68719476735L) << (44 - 36));
+ out[11 + outpos] = (in[7 + inpos] >>> 36)
+ | ((in[8 + inpos] & 65535L) << (44 - 16));
+ out[12 + outpos] = ((in[8 + inpos] >>> 16) & 17592186044415L);
+ out[13 + outpos] = (in[8 + inpos] >>> 60)
+ | ((in[9 + inpos] & 1099511627775L) << (44 - 40));
+ out[14 + outpos] = (in[9 + inpos] >>> 40)
+ | ((in[10 + inpos] & 1048575L) << (44 - 20));
+ out[15 + outpos] = (in[10 + inpos] >>> 20);
+ out[16 + outpos] = (in[11 + inpos] & 17592186044415L);
+ out[17 + outpos] = (in[11 + inpos] >>> 44)
+ | ((in[12 + inpos] & 16777215L) << (44 - 24));
+ out[18 + outpos] = (in[12 + inpos] >>> 24)
+ | ((in[13 + inpos] & 15L) << (44 - 4));
+ out[19 + outpos] = ((in[13 + inpos] >>> 4) & 17592186044415L);
+ out[20 + outpos] = (in[13 + inpos] >>> 48)
+ | ((in[14 + inpos] & 268435455L) << (44 - 28));
+ out[21 + outpos] = (in[14 + inpos] >>> 28)
+ | ((in[15 + inpos] & 255L) << (44 - 8));
+ out[22 + outpos] = ((in[15 + inpos] >>> 8) & 17592186044415L);
+ out[23 + outpos] = (in[15 + inpos] >>> 52)
+ | ((in[16 + inpos] & 4294967295L) << (44 - 32));
+ out[24 + outpos] = (in[16 + inpos] >>> 32)
+ | ((in[17 + inpos] & 4095L) << (44 - 12));
+ out[25 + outpos] = ((in[17 + inpos] >>> 12) & 17592186044415L);
+ out[26 + outpos] = (in[17 + inpos] >>> 56)
+ | ((in[18 + inpos] & 68719476735L) << (44 - 36));
+ out[27 + outpos] = (in[18 + inpos] >>> 36)
+ | ((in[19 + inpos] & 65535L) << (44 - 16));
+ out[28 + outpos] = ((in[19 + inpos] >>> 16) & 17592186044415L);
+ out[29 + outpos] = (in[19 + inpos] >>> 60)
+ | ((in[20 + inpos] & 1099511627775L) << (44 - 40));
+ out[30 + outpos] = (in[20 + inpos] >>> 40)
+ | ((in[21 + inpos] & 1048575L) << (44 - 20));
+ out[31 + outpos] = (in[21 + inpos] >>> 20);
+ out[32 + outpos] = (in[22 + inpos] & 17592186044415L);
+ out[33 + outpos] = (in[22 + inpos] >>> 44)
+ | ((in[23 + inpos] & 16777215L) << (44 - 24));
+ out[34 + outpos] = (in[23 + inpos] >>> 24)
+ | ((in[24 + inpos] & 15L) << (44 - 4));
+ out[35 + outpos] = ((in[24 + inpos] >>> 4) & 17592186044415L);
+ out[36 + outpos] = (in[24 + inpos] >>> 48)
+ | ((in[25 + inpos] & 268435455L) << (44 - 28));
+ out[37 + outpos] = (in[25 + inpos] >>> 28)
+ | ((in[26 + inpos] & 255L) << (44 - 8));
+ out[38 + outpos] = ((in[26 + inpos] >>> 8) & 17592186044415L);
+ out[39 + outpos] = (in[26 + inpos] >>> 52)
+ | ((in[27 + inpos] & 4294967295L) << (44 - 32));
+ out[40 + outpos] = (in[27 + inpos] >>> 32)
+ | ((in[28 + inpos] & 4095L) << (44 - 12));
+ out[41 + outpos] = ((in[28 + inpos] >>> 12) & 17592186044415L);
+ out[42 + outpos] = (in[28 + inpos] >>> 56)
+ | ((in[29 + inpos] & 68719476735L) << (44 - 36));
+ out[43 + outpos] = (in[29 + inpos] >>> 36)
+ | ((in[30 + inpos] & 65535L) << (44 - 16));
+ out[44 + outpos] = ((in[30 + inpos] >>> 16) & 17592186044415L);
+ out[45 + outpos] = (in[30 + inpos] >>> 60)
+ | ((in[31 + inpos] & 1099511627775L) << (44 - 40));
+ out[46 + outpos] = (in[31 + inpos] >>> 40)
+ | ((in[32 + inpos] & 1048575L) << (44 - 20));
+ out[47 + outpos] = (in[32 + inpos] >>> 20);
+ out[48 + outpos] = (in[33 + inpos] & 17592186044415L);
+ out[49 + outpos] = (in[33 + inpos] >>> 44)
+ | ((in[34 + inpos] & 16777215L) << (44 - 24));
+ out[50 + outpos] = (in[34 + inpos] >>> 24)
+ | ((in[35 + inpos] & 15L) << (44 - 4));
+ out[51 + outpos] = ((in[35 + inpos] >>> 4) & 17592186044415L);
+ out[52 + outpos] = (in[35 + inpos] >>> 48)
+ | ((in[36 + inpos] & 268435455L) << (44 - 28));
+ out[53 + outpos] = (in[36 + inpos] >>> 28)
+ | ((in[37 + inpos] & 255L) << (44 - 8));
+ out[54 + outpos] = ((in[37 + inpos] >>> 8) & 17592186044415L);
+ out[55 + outpos] = (in[37 + inpos] >>> 52)
+ | ((in[38 + inpos] & 4294967295L) << (44 - 32));
+ out[56 + outpos] = (in[38 + inpos] >>> 32)
+ | ((in[39 + inpos] & 4095L) << (44 - 12));
+ out[57 + outpos] = ((in[39 + inpos] >>> 12) & 17592186044415L);
+ out[58 + outpos] = (in[39 + inpos] >>> 56)
+ | ((in[40 + inpos] & 68719476735L) << (44 - 36));
+ out[59 + outpos] = (in[40 + inpos] >>> 36)
+ | ((in[41 + inpos] & 65535L) << (44 - 16));
+ out[60 + outpos] = ((in[41 + inpos] >>> 16) & 17592186044415L);
+ out[61 + outpos] = (in[41 + inpos] >>> 60)
+ | ((in[42 + inpos] & 1099511627775L) << (44 - 40));
+ out[62 + outpos] = (in[42 + inpos] >>> 40)
+ | ((in[43 + inpos] & 1048575L) << (44 - 20));
+ out[63 + outpos] = (in[43 + inpos] >>> 20);
+ }
+
+ protected static void fastunpack45(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 35184372088831L);
+ out[1 + outpos] = (in[inpos] >>> 45)
+ | ((in[1 + inpos] & 67108863L) << (45 - 26));
+ out[2 + outpos] = (in[1 + inpos] >>> 26)
+ | ((in[2 + inpos] & 127L) << (45 - 7));
+ out[3 + outpos] = ((in[2 + inpos] >>> 7) & 35184372088831L);
+ out[4 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 8589934591L) << (45 - 33));
+ out[5 + outpos] = (in[3 + inpos] >>> 33)
+ | ((in[4 + inpos] & 16383L) << (45 - 14));
+ out[6 + outpos] = ((in[4 + inpos] >>> 14) & 35184372088831L);
+ out[7 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 1099511627775L) << (45 - 40));
+ out[8 + outpos] = (in[5 + inpos] >>> 40)
+ | ((in[6 + inpos] & 2097151L) << (45 - 21));
+ out[9 + outpos] = (in[6 + inpos] >>> 21)
+ | ((in[7 + inpos] & 3L) << (45 - 2));
+ out[10 + outpos] = ((in[7 + inpos] >>> 2) & 35184372088831L);
+ out[11 + outpos] = (in[7 + inpos] >>> 47)
+ | ((in[8 + inpos] & 268435455L) << (45 - 28));
+ out[12 + outpos] = (in[8 + inpos] >>> 28)
+ | ((in[9 + inpos] & 511L) << (45 - 9));
+ out[13 + outpos] = ((in[9 + inpos] >>> 9) & 35184372088831L);
+ out[14 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 34359738367L) << (45 - 35));
+ out[15 + outpos] = (in[10 + inpos] >>> 35)
+ | ((in[11 + inpos] & 65535L) << (45 - 16));
+ out[16 + outpos] = ((in[11 + inpos] >>> 16) & 35184372088831L);
+ out[17 + outpos] = (in[11 + inpos] >>> 61)
+ | ((in[12 + inpos] & 4398046511103L) << (45 - 42));
+ out[18 + outpos] = (in[12 + inpos] >>> 42)
+ | ((in[13 + inpos] & 8388607L) << (45 - 23));
+ out[19 + outpos] = (in[13 + inpos] >>> 23)
+ | ((in[14 + inpos] & 15L) << (45 - 4));
+ out[20 + outpos] = ((in[14 + inpos] >>> 4) & 35184372088831L);
+ out[21 + outpos] = (in[14 + inpos] >>> 49)
+ | ((in[15 + inpos] & 1073741823L) << (45 - 30));
+ out[22 + outpos] = (in[15 + inpos] >>> 30)
+ | ((in[16 + inpos] & 2047L) << (45 - 11));
+ out[23 + outpos] = ((in[16 + inpos] >>> 11) & 35184372088831L);
+ out[24 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 137438953471L) << (45 - 37));
+ out[25 + outpos] = (in[17 + inpos] >>> 37)
+ | ((in[18 + inpos] & 262143L) << (45 - 18));
+ out[26 + outpos] = ((in[18 + inpos] >>> 18) & 35184372088831L);
+ out[27 + outpos] = (in[18 + inpos] >>> 63)
+ | ((in[19 + inpos] & 17592186044415L) << (45 - 44));
+ out[28 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 33554431L) << (45 - 25));
+ out[29 + outpos] = (in[20 + inpos] >>> 25)
+ | ((in[21 + inpos] & 63L) << (45 - 6));
+ out[30 + outpos] = ((in[21 + inpos] >>> 6) & 35184372088831L);
+ out[31 + outpos] = (in[21 + inpos] >>> 51)
+ | ((in[22 + inpos] & 4294967295L) << (45 - 32));
+ out[32 + outpos] = (in[22 + inpos] >>> 32)
+ | ((in[23 + inpos] & 8191L) << (45 - 13));
+ out[33 + outpos] = ((in[23 + inpos] >>> 13) & 35184372088831L);
+ out[34 + outpos] = (in[23 + inpos] >>> 58)
+ | ((in[24 + inpos] & 549755813887L) << (45 - 39));
+ out[35 + outpos] = (in[24 + inpos] >>> 39)
+ | ((in[25 + inpos] & 1048575L) << (45 - 20));
+ out[36 + outpos] = (in[25 + inpos] >>> 20)
+ | ((in[26 + inpos] & 1L) << (45 - 1));
+ out[37 + outpos] = ((in[26 + inpos] >>> 1) & 35184372088831L);
+ out[38 + outpos] = (in[26 + inpos] >>> 46)
+ | ((in[27 + inpos] & 134217727L) << (45 - 27));
+ out[39 + outpos] = (in[27 + inpos] >>> 27)
+ | ((in[28 + inpos] & 255L) << (45 - 8));
+ out[40 + outpos] = ((in[28 + inpos] >>> 8) & 35184372088831L);
+ out[41 + outpos] = (in[28 + inpos] >>> 53)
+ | ((in[29 + inpos] & 17179869183L) << (45 - 34));
+ out[42 + outpos] = (in[29 + inpos] >>> 34)
+ | ((in[30 + inpos] & 32767L) << (45 - 15));
+ out[43 + outpos] = ((in[30 + inpos] >>> 15) & 35184372088831L);
+ out[44 + outpos] = (in[30 + inpos] >>> 60)
+ | ((in[31 + inpos] & 2199023255551L) << (45 - 41));
+ out[45 + outpos] = (in[31 + inpos] >>> 41)
+ | ((in[32 + inpos] & 4194303L) << (45 - 22));
+ out[46 + outpos] = (in[32 + inpos] >>> 22)
+ | ((in[33 + inpos] & 7L) << (45 - 3));
+ out[47 + outpos] = ((in[33 + inpos] >>> 3) & 35184372088831L);
+ out[48 + outpos] = (in[33 + inpos] >>> 48)
+ | ((in[34 + inpos] & 536870911L) << (45 - 29));
+ out[49 + outpos] = (in[34 + inpos] >>> 29)
+ | ((in[35 + inpos] & 1023L) << (45 - 10));
+ out[50 + outpos] = ((in[35 + inpos] >>> 10) & 35184372088831L);
+ out[51 + outpos] = (in[35 + inpos] >>> 55)
+ | ((in[36 + inpos] & 68719476735L) << (45 - 36));
+ out[52 + outpos] = (in[36 + inpos] >>> 36)
+ | ((in[37 + inpos] & 131071L) << (45 - 17));
+ out[53 + outpos] = ((in[37 + inpos] >>> 17) & 35184372088831L);
+ out[54 + outpos] = (in[37 + inpos] >>> 62)
+ | ((in[38 + inpos] & 8796093022207L) << (45 - 43));
+ out[55 + outpos] = (in[38 + inpos] >>> 43)
+ | ((in[39 + inpos] & 16777215L) << (45 - 24));
+ out[56 + outpos] = (in[39 + inpos] >>> 24)
+ | ((in[40 + inpos] & 31L) << (45 - 5));
+ out[57 + outpos] = ((in[40 + inpos] >>> 5) & 35184372088831L);
+ out[58 + outpos] = (in[40 + inpos] >>> 50)
+ | ((in[41 + inpos] & 2147483647L) << (45 - 31));
+ out[59 + outpos] = (in[41 + inpos] >>> 31)
+ | ((in[42 + inpos] & 4095L) << (45 - 12));
+ out[60 + outpos] = ((in[42 + inpos] >>> 12) & 35184372088831L);
+ out[61 + outpos] = (in[42 + inpos] >>> 57)
+ | ((in[43 + inpos] & 274877906943L) << (45 - 38));
+ out[62 + outpos] = (in[43 + inpos] >>> 38)
+ | ((in[44 + inpos] & 524287L) << (45 - 19));
+ out[63 + outpos] = (in[44 + inpos] >>> 19);
+ }
+
+ protected static void fastunpack46(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 70368744177663L);
+ out[1 + outpos] = (in[inpos] >>> 46)
+ | ((in[1 + inpos] & 268435455L) << (46 - 28));
+ out[2 + outpos] = (in[1 + inpos] >>> 28)
+ | ((in[2 + inpos] & 1023L) << (46 - 10));
+ out[3 + outpos] = ((in[2 + inpos] >>> 10) & 70368744177663L);
+ out[4 + outpos] = (in[2 + inpos] >>> 56)
+ | ((in[3 + inpos] & 274877906943L) << (46 - 38));
+ out[5 + outpos] = (in[3 + inpos] >>> 38)
+ | ((in[4 + inpos] & 1048575L) << (46 - 20));
+ out[6 + outpos] = (in[4 + inpos] >>> 20)
+ | ((in[5 + inpos] & 3L) << (46 - 2));
+ out[7 + outpos] = ((in[5 + inpos] >>> 2) & 70368744177663L);
+ out[8 + outpos] = (in[5 + inpos] >>> 48)
+ | ((in[6 + inpos] & 1073741823L) << (46 - 30));
+ out[9 + outpos] = (in[6 + inpos] >>> 30)
+ | ((in[7 + inpos] & 4095L) << (46 - 12));
+ out[10 + outpos] = ((in[7 + inpos] >>> 12) & 70368744177663L);
+ out[11 + outpos] = (in[7 + inpos] >>> 58)
+ | ((in[8 + inpos] & 1099511627775L) << (46 - 40));
+ out[12 + outpos] = (in[8 + inpos] >>> 40)
+ | ((in[9 + inpos] & 4194303L) << (46 - 22));
+ out[13 + outpos] = (in[9 + inpos] >>> 22)
+ | ((in[10 + inpos] & 15L) << (46 - 4));
+ out[14 + outpos] = ((in[10 + inpos] >>> 4) & 70368744177663L);
+ out[15 + outpos] = (in[10 + inpos] >>> 50)
+ | ((in[11 + inpos] & 4294967295L) << (46 - 32));
+ out[16 + outpos] = (in[11 + inpos] >>> 32)
+ | ((in[12 + inpos] & 16383L) << (46 - 14));
+ out[17 + outpos] = ((in[12 + inpos] >>> 14) & 70368744177663L);
+ out[18 + outpos] = (in[12 + inpos] >>> 60)
+ | ((in[13 + inpos] & 4398046511103L) << (46 - 42));
+ out[19 + outpos] = (in[13 + inpos] >>> 42)
+ | ((in[14 + inpos] & 16777215L) << (46 - 24));
+ out[20 + outpos] = (in[14 + inpos] >>> 24)
+ | ((in[15 + inpos] & 63L) << (46 - 6));
+ out[21 + outpos] = ((in[15 + inpos] >>> 6) & 70368744177663L);
+ out[22 + outpos] = (in[15 + inpos] >>> 52)
+ | ((in[16 + inpos] & 17179869183L) << (46 - 34));
+ out[23 + outpos] = (in[16 + inpos] >>> 34)
+ | ((in[17 + inpos] & 65535L) << (46 - 16));
+ out[24 + outpos] = ((in[17 + inpos] >>> 16) & 70368744177663L);
+ out[25 + outpos] = (in[17 + inpos] >>> 62)
+ | ((in[18 + inpos] & 17592186044415L) << (46 - 44));
+ out[26 + outpos] = (in[18 + inpos] >>> 44)
+ | ((in[19 + inpos] & 67108863L) << (46 - 26));
+ out[27 + outpos] = (in[19 + inpos] >>> 26)
+ | ((in[20 + inpos] & 255L) << (46 - 8));
+ out[28 + outpos] = ((in[20 + inpos] >>> 8) & 70368744177663L);
+ out[29 + outpos] = (in[20 + inpos] >>> 54)
+ | ((in[21 + inpos] & 68719476735L) << (46 - 36));
+ out[30 + outpos] = (in[21 + inpos] >>> 36)
+ | ((in[22 + inpos] & 262143L) << (46 - 18));
+ out[31 + outpos] = (in[22 + inpos] >>> 18);
+ out[32 + outpos] = (in[23 + inpos] & 70368744177663L);
+ out[33 + outpos] = (in[23 + inpos] >>> 46)
+ | ((in[24 + inpos] & 268435455L) << (46 - 28));
+ out[34 + outpos] = (in[24 + inpos] >>> 28)
+ | ((in[25 + inpos] & 1023L) << (46 - 10));
+ out[35 + outpos] = ((in[25 + inpos] >>> 10) & 70368744177663L);
+ out[36 + outpos] = (in[25 + inpos] >>> 56)
+ | ((in[26 + inpos] & 274877906943L) << (46 - 38));
+ out[37 + outpos] = (in[26 + inpos] >>> 38)
+ | ((in[27 + inpos] & 1048575L) << (46 - 20));
+ out[38 + outpos] = (in[27 + inpos] >>> 20)
+ | ((in[28 + inpos] & 3L) << (46 - 2));
+ out[39 + outpos] = ((in[28 + inpos] >>> 2) & 70368744177663L);
+ out[40 + outpos] = (in[28 + inpos] >>> 48)
+ | ((in[29 + inpos] & 1073741823L) << (46 - 30));
+ out[41 + outpos] = (in[29 + inpos] >>> 30)
+ | ((in[30 + inpos] & 4095L) << (46 - 12));
+ out[42 + outpos] = ((in[30 + inpos] >>> 12) & 70368744177663L);
+ out[43 + outpos] = (in[30 + inpos] >>> 58)
+ | ((in[31 + inpos] & 1099511627775L) << (46 - 40));
+ out[44 + outpos] = (in[31 + inpos] >>> 40)
+ | ((in[32 + inpos] & 4194303L) << (46 - 22));
+ out[45 + outpos] = (in[32 + inpos] >>> 22)
+ | ((in[33 + inpos] & 15L) << (46 - 4));
+ out[46 + outpos] = ((in[33 + inpos] >>> 4) & 70368744177663L);
+ out[47 + outpos] = (in[33 + inpos] >>> 50)
+ | ((in[34 + inpos] & 4294967295L) << (46 - 32));
+ out[48 + outpos] = (in[34 + inpos] >>> 32)
+ | ((in[35 + inpos] & 16383L) << (46 - 14));
+ out[49 + outpos] = ((in[35 + inpos] >>> 14) & 70368744177663L);
+ out[50 + outpos] = (in[35 + inpos] >>> 60)
+ | ((in[36 + inpos] & 4398046511103L) << (46 - 42));
+ out[51 + outpos] = (in[36 + inpos] >>> 42)
+ | ((in[37 + inpos] & 16777215L) << (46 - 24));
+ out[52 + outpos] = (in[37 + inpos] >>> 24)
+ | ((in[38 + inpos] & 63L) << (46 - 6));
+ out[53 + outpos] = ((in[38 + inpos] >>> 6) & 70368744177663L);
+ out[54 + outpos] = (in[38 + inpos] >>> 52)
+ | ((in[39 + inpos] & 17179869183L) << (46 - 34));
+ out[55 + outpos] = (in[39 + inpos] >>> 34)
+ | ((in[40 + inpos] & 65535L) << (46 - 16));
+ out[56 + outpos] = ((in[40 + inpos] >>> 16) & 70368744177663L);
+ out[57 + outpos] = (in[40 + inpos] >>> 62)
+ | ((in[41 + inpos] & 17592186044415L) << (46 - 44));
+ out[58 + outpos] = (in[41 + inpos] >>> 44)
+ | ((in[42 + inpos] & 67108863L) << (46 - 26));
+ out[59 + outpos] = (in[42 + inpos] >>> 26)
+ | ((in[43 + inpos] & 255L) << (46 - 8));
+ out[60 + outpos] = ((in[43 + inpos] >>> 8) & 70368744177663L);
+ out[61 + outpos] = (in[43 + inpos] >>> 54)
+ | ((in[44 + inpos] & 68719476735L) << (46 - 36));
+ out[62 + outpos] = (in[44 + inpos] >>> 36)
+ | ((in[45 + inpos] & 262143L) << (46 - 18));
+ out[63 + outpos] = (in[45 + inpos] >>> 18);
+ }
+
+ protected static void fastunpack47(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 140737488355327L);
+ out[1 + outpos] = (in[inpos] >>> 47)
+ | ((in[1 + inpos] & 1073741823L) << (47 - 30));
+ out[2 + outpos] = (in[1 + inpos] >>> 30)
+ | ((in[2 + inpos] & 8191L) << (47 - 13));
+ out[3 + outpos] = ((in[2 + inpos] >>> 13) & 140737488355327L);
+ out[4 + outpos] = (in[2 + inpos] >>> 60)
+ | ((in[3 + inpos] & 8796093022207L) << (47 - 43));
+ out[5 + outpos] = (in[3 + inpos] >>> 43)
+ | ((in[4 + inpos] & 67108863L) << (47 - 26));
+ out[6 + outpos] = (in[4 + inpos] >>> 26)
+ | ((in[5 + inpos] & 511L) << (47 - 9));
+ out[7 + outpos] = ((in[5 + inpos] >>> 9) & 140737488355327L);
+ out[8 + outpos] = (in[5 + inpos] >>> 56)
+ | ((in[6 + inpos] & 549755813887L) << (47 - 39));
+ out[9 + outpos] = (in[6 + inpos] >>> 39)
+ | ((in[7 + inpos] & 4194303L) << (47 - 22));
+ out[10 + outpos] = (in[7 + inpos] >>> 22)
+ | ((in[8 + inpos] & 31L) << (47 - 5));
+ out[11 + outpos] = ((in[8 + inpos] >>> 5) & 140737488355327L);
+ out[12 + outpos] = (in[8 + inpos] >>> 52)
+ | ((in[9 + inpos] & 34359738367L) << (47 - 35));
+ out[13 + outpos] = (in[9 + inpos] >>> 35)
+ | ((in[10 + inpos] & 262143L) << (47 - 18));
+ out[14 + outpos] = (in[10 + inpos] >>> 18)
+ | ((in[11 + inpos] & 1L) << (47 - 1));
+ out[15 + outpos] = ((in[11 + inpos] >>> 1) & 140737488355327L);
+ out[16 + outpos] = (in[11 + inpos] >>> 48)
+ | ((in[12 + inpos] & 2147483647L) << (47 - 31));
+ out[17 + outpos] = (in[12 + inpos] >>> 31)
+ | ((in[13 + inpos] & 16383L) << (47 - 14));
+ out[18 + outpos] = ((in[13 + inpos] >>> 14) & 140737488355327L);
+ out[19 + outpos] = (in[13 + inpos] >>> 61)
+ | ((in[14 + inpos] & 17592186044415L) << (47 - 44));
+ out[20 + outpos] = (in[14 + inpos] >>> 44)
+ | ((in[15 + inpos] & 134217727L) << (47 - 27));
+ out[21 + outpos] = (in[15 + inpos] >>> 27)
+ | ((in[16 + inpos] & 1023L) << (47 - 10));
+ out[22 + outpos] = ((in[16 + inpos] >>> 10) & 140737488355327L);
+ out[23 + outpos] = (in[16 + inpos] >>> 57)
+ | ((in[17 + inpos] & 1099511627775L) << (47 - 40));
+ out[24 + outpos] = (in[17 + inpos] >>> 40)
+ | ((in[18 + inpos] & 8388607L) << (47 - 23));
+ out[25 + outpos] = (in[18 + inpos] >>> 23)
+ | ((in[19 + inpos] & 63L) << (47 - 6));
+ out[26 + outpos] = ((in[19 + inpos] >>> 6) & 140737488355327L);
+ out[27 + outpos] = (in[19 + inpos] >>> 53)
+ | ((in[20 + inpos] & 68719476735L) << (47 - 36));
+ out[28 + outpos] = (in[20 + inpos] >>> 36)
+ | ((in[21 + inpos] & 524287L) << (47 - 19));
+ out[29 + outpos] = (in[21 + inpos] >>> 19)
+ | ((in[22 + inpos] & 3L) << (47 - 2));
+ out[30 + outpos] = ((in[22 + inpos] >>> 2) & 140737488355327L);
+ out[31 + outpos] = (in[22 + inpos] >>> 49)
+ | ((in[23 + inpos] & 4294967295L) << (47 - 32));
+ out[32 + outpos] = (in[23 + inpos] >>> 32)
+ | ((in[24 + inpos] & 32767L) << (47 - 15));
+ out[33 + outpos] = ((in[24 + inpos] >>> 15) & 140737488355327L);
+ out[34 + outpos] = (in[24 + inpos] >>> 62)
+ | ((in[25 + inpos] & 35184372088831L) << (47 - 45));
+ out[35 + outpos] = (in[25 + inpos] >>> 45)
+ | ((in[26 + inpos] & 268435455L) << (47 - 28));
+ out[36 + outpos] = (in[26 + inpos] >>> 28)
+ | ((in[27 + inpos] & 2047L) << (47 - 11));
+ out[37 + outpos] = ((in[27 + inpos] >>> 11) & 140737488355327L);
+ out[38 + outpos] = (in[27 + inpos] >>> 58)
+ | ((in[28 + inpos] & 2199023255551L) << (47 - 41));
+ out[39 + outpos] = (in[28 + inpos] >>> 41)
+ | ((in[29 + inpos] & 16777215L) << (47 - 24));
+ out[40 + outpos] = (in[29 + inpos] >>> 24)
+ | ((in[30 + inpos] & 127L) << (47 - 7));
+ out[41 + outpos] = ((in[30 + inpos] >>> 7) & 140737488355327L);
+ out[42 + outpos] = (in[30 + inpos] >>> 54)
+ | ((in[31 + inpos] & 137438953471L) << (47 - 37));
+ out[43 + outpos] = (in[31 + inpos] >>> 37)
+ | ((in[32 + inpos] & 1048575L) << (47 - 20));
+ out[44 + outpos] = (in[32 + inpos] >>> 20)
+ | ((in[33 + inpos] & 7L) << (47 - 3));
+ out[45 + outpos] = ((in[33 + inpos] >>> 3) & 140737488355327L);
+ out[46 + outpos] = (in[33 + inpos] >>> 50)
+ | ((in[34 + inpos] & 8589934591L) << (47 - 33));
+ out[47 + outpos] = (in[34 + inpos] >>> 33)
+ | ((in[35 + inpos] & 65535L) << (47 - 16));
+ out[48 + outpos] = ((in[35 + inpos] >>> 16) & 140737488355327L);
+ out[49 + outpos] = (in[35 + inpos] >>> 63)
+ | ((in[36 + inpos] & 70368744177663L) << (47 - 46));
+ out[50 + outpos] = (in[36 + inpos] >>> 46)
+ | ((in[37 + inpos] & 536870911L) << (47 - 29));
+ out[51 + outpos] = (in[37 + inpos] >>> 29)
+ | ((in[38 + inpos] & 4095L) << (47 - 12));
+ out[52 + outpos] = ((in[38 + inpos] >>> 12) & 140737488355327L);
+ out[53 + outpos] = (in[38 + inpos] >>> 59)
+ | ((in[39 + inpos] & 4398046511103L) << (47 - 42));
+ out[54 + outpos] = (in[39 + inpos] >>> 42)
+ | ((in[40 + inpos] & 33554431L) << (47 - 25));
+ out[55 + outpos] = (in[40 + inpos] >>> 25)
+ | ((in[41 + inpos] & 255L) << (47 - 8));
+ out[56 + outpos] = ((in[41 + inpos] >>> 8) & 140737488355327L);
+ out[57 + outpos] = (in[41 + inpos] >>> 55)
+ | ((in[42 + inpos] & 274877906943L) << (47 - 38));
+ out[58 + outpos] = (in[42 + inpos] >>> 38)
+ | ((in[43 + inpos] & 2097151L) << (47 - 21));
+ out[59 + outpos] = (in[43 + inpos] >>> 21)
+ | ((in[44 + inpos] & 15L) << (47 - 4));
+ out[60 + outpos] = ((in[44 + inpos] >>> 4) & 140737488355327L);
+ out[61 + outpos] = (in[44 + inpos] >>> 51)
+ | ((in[45 + inpos] & 17179869183L) << (47 - 34));
+ out[62 + outpos] = (in[45 + inpos] >>> 34)
+ | ((in[46 + inpos] & 131071L) << (47 - 17));
+ out[63 + outpos] = (in[46 + inpos] >>> 17);
+ }
+
+ protected static void fastunpack48(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 281474976710655L);
+ out[1 + outpos] = (in[inpos] >>> 48)
+ | ((in[1 + inpos] & 4294967295L) << (48 - 32));
+ out[2 + outpos] = (in[1 + inpos] >>> 32)
+ | ((in[2 + inpos] & 65535L) << (48 - 16));
+ out[3 + outpos] = (in[2 + inpos] >>> 16);
+ out[4 + outpos] = (in[3 + inpos] & 281474976710655L);
+ out[5 + outpos] = (in[3 + inpos] >>> 48)
+ | ((in[4 + inpos] & 4294967295L) << (48 - 32));
+ out[6 + outpos] = (in[4 + inpos] >>> 32)
+ | ((in[5 + inpos] & 65535L) << (48 - 16));
+ out[7 + outpos] = (in[5 + inpos] >>> 16);
+ out[8 + outpos] = (in[6 + inpos] & 281474976710655L);
+ out[9 + outpos] = (in[6 + inpos] >>> 48)
+ | ((in[7 + inpos] & 4294967295L) << (48 - 32));
+ out[10 + outpos] = (in[7 + inpos] >>> 32)
+ | ((in[8 + inpos] & 65535L) << (48 - 16));
+ out[11 + outpos] = (in[8 + inpos] >>> 16);
+ out[12 + outpos] = (in[9 + inpos] & 281474976710655L);
+ out[13 + outpos] = (in[9 + inpos] >>> 48)
+ | ((in[10 + inpos] & 4294967295L) << (48 - 32));
+ out[14 + outpos] = (in[10 + inpos] >>> 32)
+ | ((in[11 + inpos] & 65535L) << (48 - 16));
+ out[15 + outpos] = (in[11 + inpos] >>> 16);
+ out[16 + outpos] = (in[12 + inpos] & 281474976710655L);
+ out[17 + outpos] = (in[12 + inpos] >>> 48)
+ | ((in[13 + inpos] & 4294967295L) << (48 - 32));
+ out[18 + outpos] = (in[13 + inpos] >>> 32)
+ | ((in[14 + inpos] & 65535L) << (48 - 16));
+ out[19 + outpos] = (in[14 + inpos] >>> 16);
+ out[20 + outpos] = (in[15 + inpos] & 281474976710655L);
+ out[21 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 4294967295L) << (48 - 32));
+ out[22 + outpos] = (in[16 + inpos] >>> 32)
+ | ((in[17 + inpos] & 65535L) << (48 - 16));
+ out[23 + outpos] = (in[17 + inpos] >>> 16);
+ out[24 + outpos] = (in[18 + inpos] & 281474976710655L);
+ out[25 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 4294967295L) << (48 - 32));
+ out[26 + outpos] = (in[19 + inpos] >>> 32)
+ | ((in[20 + inpos] & 65535L) << (48 - 16));
+ out[27 + outpos] = (in[20 + inpos] >>> 16);
+ out[28 + outpos] = (in[21 + inpos] & 281474976710655L);
+ out[29 + outpos] = (in[21 + inpos] >>> 48)
+ | ((in[22 + inpos] & 4294967295L) << (48 - 32));
+ out[30 + outpos] = (in[22 + inpos] >>> 32)
+ | ((in[23 + inpos] & 65535L) << (48 - 16));
+ out[31 + outpos] = (in[23 + inpos] >>> 16);
+ out[32 + outpos] = (in[24 + inpos] & 281474976710655L);
+ out[33 + outpos] = (in[24 + inpos] >>> 48)
+ | ((in[25 + inpos] & 4294967295L) << (48 - 32));
+ out[34 + outpos] = (in[25 + inpos] >>> 32)
+ | ((in[26 + inpos] & 65535L) << (48 - 16));
+ out[35 + outpos] = (in[26 + inpos] >>> 16);
+ out[36 + outpos] = (in[27 + inpos] & 281474976710655L);
+ out[37 + outpos] = (in[27 + inpos] >>> 48)
+ | ((in[28 + inpos] & 4294967295L) << (48 - 32));
+ out[38 + outpos] = (in[28 + inpos] >>> 32)
+ | ((in[29 + inpos] & 65535L) << (48 - 16));
+ out[39 + outpos] = (in[29 + inpos] >>> 16);
+ out[40 + outpos] = (in[30 + inpos] & 281474976710655L);
+ out[41 + outpos] = (in[30 + inpos] >>> 48)
+ | ((in[31 + inpos] & 4294967295L) << (48 - 32));
+ out[42 + outpos] = (in[31 + inpos] >>> 32)
+ | ((in[32 + inpos] & 65535L) << (48 - 16));
+ out[43 + outpos] = (in[32 + inpos] >>> 16);
+ out[44 + outpos] = (in[33 + inpos] & 281474976710655L);
+ out[45 + outpos] = (in[33 + inpos] >>> 48)
+ | ((in[34 + inpos] & 4294967295L) << (48 - 32));
+ out[46 + outpos] = (in[34 + inpos] >>> 32)
+ | ((in[35 + inpos] & 65535L) << (48 - 16));
+ out[47 + outpos] = (in[35 + inpos] >>> 16);
+ out[48 + outpos] = (in[36 + inpos] & 281474976710655L);
+ out[49 + outpos] = (in[36 + inpos] >>> 48)
+ | ((in[37 + inpos] & 4294967295L) << (48 - 32));
+ out[50 + outpos] = (in[37 + inpos] >>> 32)
+ | ((in[38 + inpos] & 65535L) << (48 - 16));
+ out[51 + outpos] = (in[38 + inpos] >>> 16);
+ out[52 + outpos] = (in[39 + inpos] & 281474976710655L);
+ out[53 + outpos] = (in[39 + inpos] >>> 48)
+ | ((in[40 + inpos] & 4294967295L) << (48 - 32));
+ out[54 + outpos] = (in[40 + inpos] >>> 32)
+ | ((in[41 + inpos] & 65535L) << (48 - 16));
+ out[55 + outpos] = (in[41 + inpos] >>> 16);
+ out[56 + outpos] = (in[42 + inpos] & 281474976710655L);
+ out[57 + outpos] = (in[42 + inpos] >>> 48)
+ | ((in[43 + inpos] & 4294967295L) << (48 - 32));
+ out[58 + outpos] = (in[43 + inpos] >>> 32)
+ | ((in[44 + inpos] & 65535L) << (48 - 16));
+ out[59 + outpos] = (in[44 + inpos] >>> 16);
+ out[60 + outpos] = (in[45 + inpos] & 281474976710655L);
+ out[61 + outpos] = (in[45 + inpos] >>> 48)
+ | ((in[46 + inpos] & 4294967295L) << (48 - 32));
+ out[62 + outpos] = (in[46 + inpos] >>> 32)
+ | ((in[47 + inpos] & 65535L) << (48 - 16));
+ out[63 + outpos] = (in[47 + inpos] >>> 16);
+ }
+
+ protected static void fastunpack49(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 562949953421311L);
+ out[1 + outpos] = (in[inpos] >>> 49)
+ | ((in[1 + inpos] & 17179869183L) << (49 - 34));
+ out[2 + outpos] = (in[1 + inpos] >>> 34)
+ | ((in[2 + inpos] & 524287L) << (49 - 19));
+ out[3 + outpos] = (in[2 + inpos] >>> 19)
+ | ((in[3 + inpos] & 15L) << (49 - 4));
+ out[4 + outpos] = ((in[3 + inpos] >>> 4) & 562949953421311L);
+ out[5 + outpos] = (in[3 + inpos] >>> 53)
+ | ((in[4 + inpos] & 274877906943L) << (49 - 38));
+ out[6 + outpos] = (in[4 + inpos] >>> 38)
+ | ((in[5 + inpos] & 8388607L) << (49 - 23));
+ out[7 + outpos] = (in[5 + inpos] >>> 23)
+ | ((in[6 + inpos] & 255L) << (49 - 8));
+ out[8 + outpos] = ((in[6 + inpos] >>> 8) & 562949953421311L);
+ out[9 + outpos] = (in[6 + inpos] >>> 57)
+ | ((in[7 + inpos] & 4398046511103L) << (49 - 42));
+ out[10 + outpos] = (in[7 + inpos] >>> 42)
+ | ((in[8 + inpos] & 134217727L) << (49 - 27));
+ out[11 + outpos] = (in[8 + inpos] >>> 27)
+ | ((in[9 + inpos] & 4095L) << (49 - 12));
+ out[12 + outpos] = ((in[9 + inpos] >>> 12) & 562949953421311L);
+ out[13 + outpos] = (in[9 + inpos] >>> 61)
+ | ((in[10 + inpos] & 70368744177663L) << (49 - 46));
+ out[14 + outpos] = (in[10 + inpos] >>> 46)
+ | ((in[11 + inpos] & 2147483647L) << (49 - 31));
+ out[15 + outpos] = (in[11 + inpos] >>> 31)
+ | ((in[12 + inpos] & 65535L) << (49 - 16));
+ out[16 + outpos] = (in[12 + inpos] >>> 16)
+ | ((in[13 + inpos] & 1L) << (49 - 1));
+ out[17 + outpos] = ((in[13 + inpos] >>> 1) & 562949953421311L);
+ out[18 + outpos] = (in[13 + inpos] >>> 50)
+ | ((in[14 + inpos] & 34359738367L) << (49 - 35));
+ out[19 + outpos] = (in[14 + inpos] >>> 35)
+ | ((in[15 + inpos] & 1048575L) << (49 - 20));
+ out[20 + outpos] = (in[15 + inpos] >>> 20)
+ | ((in[16 + inpos] & 31L) << (49 - 5));
+ out[21 + outpos] = ((in[16 + inpos] >>> 5) & 562949953421311L);
+ out[22 + outpos] = (in[16 + inpos] >>> 54)
+ | ((in[17 + inpos] & 549755813887L) << (49 - 39));
+ out[23 + outpos] = (in[17 + inpos] >>> 39)
+ | ((in[18 + inpos] & 16777215L) << (49 - 24));
+ out[24 + outpos] = (in[18 + inpos] >>> 24)
+ | ((in[19 + inpos] & 511L) << (49 - 9));
+ out[25 + outpos] = ((in[19 + inpos] >>> 9) & 562949953421311L);
+ out[26 + outpos] = (in[19 + inpos] >>> 58)
+ | ((in[20 + inpos] & 8796093022207L) << (49 - 43));
+ out[27 + outpos] = (in[20 + inpos] >>> 43)
+ | ((in[21 + inpos] & 268435455L) << (49 - 28));
+ out[28 + outpos] = (in[21 + inpos] >>> 28)
+ | ((in[22 + inpos] & 8191L) << (49 - 13));
+ out[29 + outpos] = ((in[22 + inpos] >>> 13) & 562949953421311L);
+ out[30 + outpos] = (in[22 + inpos] >>> 62)
+ | ((in[23 + inpos] & 140737488355327L) << (49 - 47));
+ out[31 + outpos] = (in[23 + inpos] >>> 47)
+ | ((in[24 + inpos] & 4294967295L) << (49 - 32));
+ out[32 + outpos] = (in[24 + inpos] >>> 32)
+ | ((in[25 + inpos] & 131071L) << (49 - 17));
+ out[33 + outpos] = (in[25 + inpos] >>> 17)
+ | ((in[26 + inpos] & 3L) << (49 - 2));
+ out[34 + outpos] = ((in[26 + inpos] >>> 2) & 562949953421311L);
+ out[35 + outpos] = (in[26 + inpos] >>> 51)
+ | ((in[27 + inpos] & 68719476735L) << (49 - 36));
+ out[36 + outpos] = (in[27 + inpos] >>> 36)
+ | ((in[28 + inpos] & 2097151L) << (49 - 21));
+ out[37 + outpos] = (in[28 + inpos] >>> 21)
+ | ((in[29 + inpos] & 63L) << (49 - 6));
+ out[38 + outpos] = ((in[29 + inpos] >>> 6) & 562949953421311L);
+ out[39 + outpos] = (in[29 + inpos] >>> 55)
+ | ((in[30 + inpos] & 1099511627775L) << (49 - 40));
+ out[40 + outpos] = (in[30 + inpos] >>> 40)
+ | ((in[31 + inpos] & 33554431L) << (49 - 25));
+ out[41 + outpos] = (in[31 + inpos] >>> 25)
+ | ((in[32 + inpos] & 1023L) << (49 - 10));
+ out[42 + outpos] = ((in[32 + inpos] >>> 10) & 562949953421311L);
+ out[43 + outpos] = (in[32 + inpos] >>> 59)
+ | ((in[33 + inpos] & 17592186044415L) << (49 - 44));
+ out[44 + outpos] = (in[33 + inpos] >>> 44)
+ | ((in[34 + inpos] & 536870911L) << (49 - 29));
+ out[45 + outpos] = (in[34 + inpos] >>> 29)
+ | ((in[35 + inpos] & 16383L) << (49 - 14));
+ out[46 + outpos] = ((in[35 + inpos] >>> 14) & 562949953421311L);
+ out[47 + outpos] = (in[35 + inpos] >>> 63)
+ | ((in[36 + inpos] & 281474976710655L) << (49 - 48));
+ out[48 + outpos] = (in[36 + inpos] >>> 48)
+ | ((in[37 + inpos] & 8589934591L) << (49 - 33));
+ out[49 + outpos] = (in[37 + inpos] >>> 33)
+ | ((in[38 + inpos] & 262143L) << (49 - 18));
+ out[50 + outpos] = (in[38 + inpos] >>> 18)
+ | ((in[39 + inpos] & 7L) << (49 - 3));
+ out[51 + outpos] = ((in[39 + inpos] >>> 3) & 562949953421311L);
+ out[52 + outpos] = (in[39 + inpos] >>> 52)
+ | ((in[40 + inpos] & 137438953471L) << (49 - 37));
+ out[53 + outpos] = (in[40 + inpos] >>> 37)
+ | ((in[41 + inpos] & 4194303L) << (49 - 22));
+ out[54 + outpos] = (in[41 + inpos] >>> 22)
+ | ((in[42 + inpos] & 127L) << (49 - 7));
+ out[55 + outpos] = ((in[42 + inpos] >>> 7) & 562949953421311L);
+ out[56 + outpos] = (in[42 + inpos] >>> 56)
+ | ((in[43 + inpos] & 2199023255551L) << (49 - 41));
+ out[57 + outpos] = (in[43 + inpos] >>> 41)
+ | ((in[44 + inpos] & 67108863L) << (49 - 26));
+ out[58 + outpos] = (in[44 + inpos] >>> 26)
+ | ((in[45 + inpos] & 2047L) << (49 - 11));
+ out[59 + outpos] = ((in[45 + inpos] >>> 11) & 562949953421311L);
+ out[60 + outpos] = (in[45 + inpos] >>> 60)
+ | ((in[46 + inpos] & 35184372088831L) << (49 - 45));
+ out[61 + outpos] = (in[46 + inpos] >>> 45)
+ | ((in[47 + inpos] & 1073741823L) << (49 - 30));
+ out[62 + outpos] = (in[47 + inpos] >>> 30)
+ | ((in[48 + inpos] & 32767L) << (49 - 15));
+ out[63 + outpos] = (in[48 + inpos] >>> 15);
+ }
+
+ protected static void fastunpack50(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1125899906842623L);
+ out[1 + outpos] = (in[inpos] >>> 50)
+ | ((in[1 + inpos] & 68719476735L) << (50 - 36));
+ out[2 + outpos] = (in[1 + inpos] >>> 36)
+ | ((in[2 + inpos] & 4194303L) << (50 - 22));
+ out[3 + outpos] = (in[2 + inpos] >>> 22)
+ | ((in[3 + inpos] & 255L) << (50 - 8));
+ out[4 + outpos] = ((in[3 + inpos] >>> 8) & 1125899906842623L);
+ out[5 + outpos] = (in[3 + inpos] >>> 58)
+ | ((in[4 + inpos] & 17592186044415L) << (50 - 44));
+ out[6 + outpos] = (in[4 + inpos] >>> 44)
+ | ((in[5 + inpos] & 1073741823L) << (50 - 30));
+ out[7 + outpos] = (in[5 + inpos] >>> 30)
+ | ((in[6 + inpos] & 65535L) << (50 - 16));
+ out[8 + outpos] = (in[6 + inpos] >>> 16)
+ | ((in[7 + inpos] & 3L) << (50 - 2));
+ out[9 + outpos] = ((in[7 + inpos] >>> 2) & 1125899906842623L);
+ out[10 + outpos] = (in[7 + inpos] >>> 52)
+ | ((in[8 + inpos] & 274877906943L) << (50 - 38));
+ out[11 + outpos] = (in[8 + inpos] >>> 38)
+ | ((in[9 + inpos] & 16777215L) << (50 - 24));
+ out[12 + outpos] = (in[9 + inpos] >>> 24)
+ | ((in[10 + inpos] & 1023L) << (50 - 10));
+ out[13 + outpos] = ((in[10 + inpos] >>> 10) & 1125899906842623L);
+ out[14 + outpos] = (in[10 + inpos] >>> 60)
+ | ((in[11 + inpos] & 70368744177663L) << (50 - 46));
+ out[15 + outpos] = (in[11 + inpos] >>> 46)
+ | ((in[12 + inpos] & 4294967295L) << (50 - 32));
+ out[16 + outpos] = (in[12 + inpos] >>> 32)
+ | ((in[13 + inpos] & 262143L) << (50 - 18));
+ out[17 + outpos] = (in[13 + inpos] >>> 18)
+ | ((in[14 + inpos] & 15L) << (50 - 4));
+ out[18 + outpos] = ((in[14 + inpos] >>> 4) & 1125899906842623L);
+ out[19 + outpos] = (in[14 + inpos] >>> 54)
+ | ((in[15 + inpos] & 1099511627775L) << (50 - 40));
+ out[20 + outpos] = (in[15 + inpos] >>> 40)
+ | ((in[16 + inpos] & 67108863L) << (50 - 26));
+ out[21 + outpos] = (in[16 + inpos] >>> 26)
+ | ((in[17 + inpos] & 4095L) << (50 - 12));
+ out[22 + outpos] = ((in[17 + inpos] >>> 12) & 1125899906842623L);
+ out[23 + outpos] = (in[17 + inpos] >>> 62)
+ | ((in[18 + inpos] & 281474976710655L) << (50 - 48));
+ out[24 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 17179869183L) << (50 - 34));
+ out[25 + outpos] = (in[19 + inpos] >>> 34)
+ | ((in[20 + inpos] & 1048575L) << (50 - 20));
+ out[26 + outpos] = (in[20 + inpos] >>> 20)
+ | ((in[21 + inpos] & 63L) << (50 - 6));
+ out[27 + outpos] = ((in[21 + inpos] >>> 6) & 1125899906842623L);
+ out[28 + outpos] = (in[21 + inpos] >>> 56)
+ | ((in[22 + inpos] & 4398046511103L) << (50 - 42));
+ out[29 + outpos] = (in[22 + inpos] >>> 42)
+ | ((in[23 + inpos] & 268435455L) << (50 - 28));
+ out[30 + outpos] = (in[23 + inpos] >>> 28)
+ | ((in[24 + inpos] & 16383L) << (50 - 14));
+ out[31 + outpos] = (in[24 + inpos] >>> 14);
+ out[32 + outpos] = (in[25 + inpos] & 1125899906842623L);
+ out[33 + outpos] = (in[25 + inpos] >>> 50)
+ | ((in[26 + inpos] & 68719476735L) << (50 - 36));
+ out[34 + outpos] = (in[26 + inpos] >>> 36)
+ | ((in[27 + inpos] & 4194303L) << (50 - 22));
+ out[35 + outpos] = (in[27 + inpos] >>> 22)
+ | ((in[28 + inpos] & 255L) << (50 - 8));
+ out[36 + outpos] = ((in[28 + inpos] >>> 8) & 1125899906842623L);
+ out[37 + outpos] = (in[28 + inpos] >>> 58)
+ | ((in[29 + inpos] & 17592186044415L) << (50 - 44));
+ out[38 + outpos] = (in[29 + inpos] >>> 44)
+ | ((in[30 + inpos] & 1073741823L) << (50 - 30));
+ out[39 + outpos] = (in[30 + inpos] >>> 30)
+ | ((in[31 + inpos] & 65535L) << (50 - 16));
+ out[40 + outpos] = (in[31 + inpos] >>> 16)
+ | ((in[32 + inpos] & 3L) << (50 - 2));
+ out[41 + outpos] = ((in[32 + inpos] >>> 2) & 1125899906842623L);
+ out[42 + outpos] = (in[32 + inpos] >>> 52)
+ | ((in[33 + inpos] & 274877906943L) << (50 - 38));
+ out[43 + outpos] = (in[33 + inpos] >>> 38)
+ | ((in[34 + inpos] & 16777215L) << (50 - 24));
+ out[44 + outpos] = (in[34 + inpos] >>> 24)
+ | ((in[35 + inpos] & 1023L) << (50 - 10));
+ out[45 + outpos] = ((in[35 + inpos] >>> 10) & 1125899906842623L);
+ out[46 + outpos] = (in[35 + inpos] >>> 60)
+ | ((in[36 + inpos] & 70368744177663L) << (50 - 46));
+ out[47 + outpos] = (in[36 + inpos] >>> 46)
+ | ((in[37 + inpos] & 4294967295L) << (50 - 32));
+ out[48 + outpos] = (in[37 + inpos] >>> 32)
+ | ((in[38 + inpos] & 262143L) << (50 - 18));
+ out[49 + outpos] = (in[38 + inpos] >>> 18)
+ | ((in[39 + inpos] & 15L) << (50 - 4));
+ out[50 + outpos] = ((in[39 + inpos] >>> 4) & 1125899906842623L);
+ out[51 + outpos] = (in[39 + inpos] >>> 54)
+ | ((in[40 + inpos] & 1099511627775L) << (50 - 40));
+ out[52 + outpos] = (in[40 + inpos] >>> 40)
+ | ((in[41 + inpos] & 67108863L) << (50 - 26));
+ out[53 + outpos] = (in[41 + inpos] >>> 26)
+ | ((in[42 + inpos] & 4095L) << (50 - 12));
+ out[54 + outpos] = ((in[42 + inpos] >>> 12) & 1125899906842623L);
+ out[55 + outpos] = (in[42 + inpos] >>> 62)
+ | ((in[43 + inpos] & 281474976710655L) << (50 - 48));
+ out[56 + outpos] = (in[43 + inpos] >>> 48)
+ | ((in[44 + inpos] & 17179869183L) << (50 - 34));
+ out[57 + outpos] = (in[44 + inpos] >>> 34)
+ | ((in[45 + inpos] & 1048575L) << (50 - 20));
+ out[58 + outpos] = (in[45 + inpos] >>> 20)
+ | ((in[46 + inpos] & 63L) << (50 - 6));
+ out[59 + outpos] = ((in[46 + inpos] >>> 6) & 1125899906842623L);
+ out[60 + outpos] = (in[46 + inpos] >>> 56)
+ | ((in[47 + inpos] & 4398046511103L) << (50 - 42));
+ out[61 + outpos] = (in[47 + inpos] >>> 42)
+ | ((in[48 + inpos] & 268435455L) << (50 - 28));
+ out[62 + outpos] = (in[48 + inpos] >>> 28)
+ | ((in[49 + inpos] & 16383L) << (50 - 14));
+ out[63 + outpos] = (in[49 + inpos] >>> 14);
+ }
+
+ protected static void fastunpack51(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 2251799813685247L);
+ out[1 + outpos] = (in[inpos] >>> 51)
+ | ((in[1 + inpos] & 274877906943L) << (51 - 38));
+ out[2 + outpos] = (in[1 + inpos] >>> 38)
+ | ((in[2 + inpos] & 33554431L) << (51 - 25));
+ out[3 + outpos] = (in[2 + inpos] >>> 25)
+ | ((in[3 + inpos] & 4095L) << (51 - 12));
+ out[4 + outpos] = ((in[3 + inpos] >>> 12) & 2251799813685247L);
+ out[5 + outpos] = (in[3 + inpos] >>> 63)
+ | ((in[4 + inpos] & 1125899906842623L) << (51 - 50));
+ out[6 + outpos] = (in[4 + inpos] >>> 50)
+ | ((in[5 + inpos] & 137438953471L) << (51 - 37));
+ out[7 + outpos] = (in[5 + inpos] >>> 37)
+ | ((in[6 + inpos] & 16777215L) << (51 - 24));
+ out[8 + outpos] = (in[6 + inpos] >>> 24)
+ | ((in[7 + inpos] & 2047L) << (51 - 11));
+ out[9 + outpos] = ((in[7 + inpos] >>> 11) & 2251799813685247L);
+ out[10 + outpos] = (in[7 + inpos] >>> 62)
+ | ((in[8 + inpos] & 562949953421311L) << (51 - 49));
+ out[11 + outpos] = (in[8 + inpos] >>> 49)
+ | ((in[9 + inpos] & 68719476735L) << (51 - 36));
+ out[12 + outpos] = (in[9 + inpos] >>> 36)
+ | ((in[10 + inpos] & 8388607L) << (51 - 23));
+ out[13 + outpos] = (in[10 + inpos] >>> 23)
+ | ((in[11 + inpos] & 1023L) << (51 - 10));
+ out[14 + outpos] = ((in[11 + inpos] >>> 10) & 2251799813685247L);
+ out[15 + outpos] = (in[11 + inpos] >>> 61)
+ | ((in[12 + inpos] & 281474976710655L) << (51 - 48));
+ out[16 + outpos] = (in[12 + inpos] >>> 48)
+ | ((in[13 + inpos] & 34359738367L) << (51 - 35));
+ out[17 + outpos] = (in[13 + inpos] >>> 35)
+ | ((in[14 + inpos] & 4194303L) << (51 - 22));
+ out[18 + outpos] = (in[14 + inpos] >>> 22)
+ | ((in[15 + inpos] & 511L) << (51 - 9));
+ out[19 + outpos] = ((in[15 + inpos] >>> 9) & 2251799813685247L);
+ out[20 + outpos] = (in[15 + inpos] >>> 60)
+ | ((in[16 + inpos] & 140737488355327L) << (51 - 47));
+ out[21 + outpos] = (in[16 + inpos] >>> 47)
+ | ((in[17 + inpos] & 17179869183L) << (51 - 34));
+ out[22 + outpos] = (in[17 + inpos] >>> 34)
+ | ((in[18 + inpos] & 2097151L) << (51 - 21));
+ out[23 + outpos] = (in[18 + inpos] >>> 21)
+ | ((in[19 + inpos] & 255L) << (51 - 8));
+ out[24 + outpos] = ((in[19 + inpos] >>> 8) & 2251799813685247L);
+ out[25 + outpos] = (in[19 + inpos] >>> 59)
+ | ((in[20 + inpos] & 70368744177663L) << (51 - 46));
+ out[26 + outpos] = (in[20 + inpos] >>> 46)
+ | ((in[21 + inpos] & 8589934591L) << (51 - 33));
+ out[27 + outpos] = (in[21 + inpos] >>> 33)
+ | ((in[22 + inpos] & 1048575L) << (51 - 20));
+ out[28 + outpos] = (in[22 + inpos] >>> 20)
+ | ((in[23 + inpos] & 127L) << (51 - 7));
+ out[29 + outpos] = ((in[23 + inpos] >>> 7) & 2251799813685247L);
+ out[30 + outpos] = (in[23 + inpos] >>> 58)
+ | ((in[24 + inpos] & 35184372088831L) << (51 - 45));
+ out[31 + outpos] = (in[24 + inpos] >>> 45)
+ | ((in[25 + inpos] & 4294967295L) << (51 - 32));
+ out[32 + outpos] = (in[25 + inpos] >>> 32)
+ | ((in[26 + inpos] & 524287L) << (51 - 19));
+ out[33 + outpos] = (in[26 + inpos] >>> 19)
+ | ((in[27 + inpos] & 63L) << (51 - 6));
+ out[34 + outpos] = ((in[27 + inpos] >>> 6) & 2251799813685247L);
+ out[35 + outpos] = (in[27 + inpos] >>> 57)
+ | ((in[28 + inpos] & 17592186044415L) << (51 - 44));
+ out[36 + outpos] = (in[28 + inpos] >>> 44)
+ | ((in[29 + inpos] & 2147483647L) << (51 - 31));
+ out[37 + outpos] = (in[29 + inpos] >>> 31)
+ | ((in[30 + inpos] & 262143L) << (51 - 18));
+ out[38 + outpos] = (in[30 + inpos] >>> 18)
+ | ((in[31 + inpos] & 31L) << (51 - 5));
+ out[39 + outpos] = ((in[31 + inpos] >>> 5) & 2251799813685247L);
+ out[40 + outpos] = (in[31 + inpos] >>> 56)
+ | ((in[32 + inpos] & 8796093022207L) << (51 - 43));
+ out[41 + outpos] = (in[32 + inpos] >>> 43)
+ | ((in[33 + inpos] & 1073741823L) << (51 - 30));
+ out[42 + outpos] = (in[33 + inpos] >>> 30)
+ | ((in[34 + inpos] & 131071L) << (51 - 17));
+ out[43 + outpos] = (in[34 + inpos] >>> 17)
+ | ((in[35 + inpos] & 15L) << (51 - 4));
+ out[44 + outpos] = ((in[35 + inpos] >>> 4) & 2251799813685247L);
+ out[45 + outpos] = (in[35 + inpos] >>> 55)
+ | ((in[36 + inpos] & 4398046511103L) << (51 - 42));
+ out[46 + outpos] = (in[36 + inpos] >>> 42)
+ | ((in[37 + inpos] & 536870911L) << (51 - 29));
+ out[47 + outpos] = (in[37 + inpos] >>> 29)
+ | ((in[38 + inpos] & 65535L) << (51 - 16));
+ out[48 + outpos] = (in[38 + inpos] >>> 16)
+ | ((in[39 + inpos] & 7L) << (51 - 3));
+ out[49 + outpos] = ((in[39 + inpos] >>> 3) & 2251799813685247L);
+ out[50 + outpos] = (in[39 + inpos] >>> 54)
+ | ((in[40 + inpos] & 2199023255551L) << (51 - 41));
+ out[51 + outpos] = (in[40 + inpos] >>> 41)
+ | ((in[41 + inpos] & 268435455L) << (51 - 28));
+ out[52 + outpos] = (in[41 + inpos] >>> 28)
+ | ((in[42 + inpos] & 32767L) << (51 - 15));
+ out[53 + outpos] = (in[42 + inpos] >>> 15)
+ | ((in[43 + inpos] & 3L) << (51 - 2));
+ out[54 + outpos] = ((in[43 + inpos] >>> 2) & 2251799813685247L);
+ out[55 + outpos] = (in[43 + inpos] >>> 53)
+ | ((in[44 + inpos] & 1099511627775L) << (51 - 40));
+ out[56 + outpos] = (in[44 + inpos] >>> 40)
+ | ((in[45 + inpos] & 134217727L) << (51 - 27));
+ out[57 + outpos] = (in[45 + inpos] >>> 27)
+ | ((in[46 + inpos] & 16383L) << (51 - 14));
+ out[58 + outpos] = (in[46 + inpos] >>> 14)
+ | ((in[47 + inpos] & 1L) << (51 - 1));
+ out[59 + outpos] = ((in[47 + inpos] >>> 1) & 2251799813685247L);
+ out[60 + outpos] = (in[47 + inpos] >>> 52)
+ | ((in[48 + inpos] & 549755813887L) << (51 - 39));
+ out[61 + outpos] = (in[48 + inpos] >>> 39)
+ | ((in[49 + inpos] & 67108863L) << (51 - 26));
+ out[62 + outpos] = (in[49 + inpos] >>> 26)
+ | ((in[50 + inpos] & 8191L) << (51 - 13));
+ out[63 + outpos] = (in[50 + inpos] >>> 13);
+ }
+
+ protected static void fastunpack52(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 4503599627370495L);
+ out[1 + outpos] = (in[inpos] >>> 52)
+ | ((in[1 + inpos] & 1099511627775L) << (52 - 40));
+ out[2 + outpos] = (in[1 + inpos] >>> 40)
+ | ((in[2 + inpos] & 268435455L) << (52 - 28));
+ out[3 + outpos] = (in[2 + inpos] >>> 28)
+ | ((in[3 + inpos] & 65535L) << (52 - 16));
+ out[4 + outpos] = (in[3 + inpos] >>> 16)
+ | ((in[4 + inpos] & 15L) << (52 - 4));
+ out[5 + outpos] = ((in[4 + inpos] >>> 4) & 4503599627370495L);
+ out[6 + outpos] = (in[4 + inpos] >>> 56)
+ | ((in[5 + inpos] & 17592186044415L) << (52 - 44));
+ out[7 + outpos] = (in[5 + inpos] >>> 44)
+ | ((in[6 + inpos] & 4294967295L) << (52 - 32));
+ out[8 + outpos] = (in[6 + inpos] >>> 32)
+ | ((in[7 + inpos] & 1048575L) << (52 - 20));
+ out[9 + outpos] = (in[7 + inpos] >>> 20)
+ | ((in[8 + inpos] & 255L) << (52 - 8));
+ out[10 + outpos] = ((in[8 + inpos] >>> 8) & 4503599627370495L);
+ out[11 + outpos] = (in[8 + inpos] >>> 60)
+ | ((in[9 + inpos] & 281474976710655L) << (52 - 48));
+ out[12 + outpos] = (in[9 + inpos] >>> 48)
+ | ((in[10 + inpos] & 68719476735L) << (52 - 36));
+ out[13 + outpos] = (in[10 + inpos] >>> 36)
+ | ((in[11 + inpos] & 16777215L) << (52 - 24));
+ out[14 + outpos] = (in[11 + inpos] >>> 24)
+ | ((in[12 + inpos] & 4095L) << (52 - 12));
+ out[15 + outpos] = (in[12 + inpos] >>> 12);
+ out[16 + outpos] = (in[13 + inpos] & 4503599627370495L);
+ out[17 + outpos] = (in[13 + inpos] >>> 52)
+ | ((in[14 + inpos] & 1099511627775L) << (52 - 40));
+ out[18 + outpos] = (in[14 + inpos] >>> 40)
+ | ((in[15 + inpos] & 268435455L) << (52 - 28));
+ out[19 + outpos] = (in[15 + inpos] >>> 28)
+ | ((in[16 + inpos] & 65535L) << (52 - 16));
+ out[20 + outpos] = (in[16 + inpos] >>> 16)
+ | ((in[17 + inpos] & 15L) << (52 - 4));
+ out[21 + outpos] = ((in[17 + inpos] >>> 4) & 4503599627370495L);
+ out[22 + outpos] = (in[17 + inpos] >>> 56)
+ | ((in[18 + inpos] & 17592186044415L) << (52 - 44));
+ out[23 + outpos] = (in[18 + inpos] >>> 44)
+ | ((in[19 + inpos] & 4294967295L) << (52 - 32));
+ out[24 + outpos] = (in[19 + inpos] >>> 32)
+ | ((in[20 + inpos] & 1048575L) << (52 - 20));
+ out[25 + outpos] = (in[20 + inpos] >>> 20)
+ | ((in[21 + inpos] & 255L) << (52 - 8));
+ out[26 + outpos] = ((in[21 + inpos] >>> 8) & 4503599627370495L);
+ out[27 + outpos] = (in[21 + inpos] >>> 60)
+ | ((in[22 + inpos] & 281474976710655L) << (52 - 48));
+ out[28 + outpos] = (in[22 + inpos] >>> 48)
+ | ((in[23 + inpos] & 68719476735L) << (52 - 36));
+ out[29 + outpos] = (in[23 + inpos] >>> 36)
+ | ((in[24 + inpos] & 16777215L) << (52 - 24));
+ out[30 + outpos] = (in[24 + inpos] >>> 24)
+ | ((in[25 + inpos] & 4095L) << (52 - 12));
+ out[31 + outpos] = (in[25 + inpos] >>> 12);
+ out[32 + outpos] = (in[26 + inpos] & 4503599627370495L);
+ out[33 + outpos] = (in[26 + inpos] >>> 52)
+ | ((in[27 + inpos] & 1099511627775L) << (52 - 40));
+ out[34 + outpos] = (in[27 + inpos] >>> 40)
+ | ((in[28 + inpos] & 268435455L) << (52 - 28));
+ out[35 + outpos] = (in[28 + inpos] >>> 28)
+ | ((in[29 + inpos] & 65535L) << (52 - 16));
+ out[36 + outpos] = (in[29 + inpos] >>> 16)
+ | ((in[30 + inpos] & 15L) << (52 - 4));
+ out[37 + outpos] = ((in[30 + inpos] >>> 4) & 4503599627370495L);
+ out[38 + outpos] = (in[30 + inpos] >>> 56)
+ | ((in[31 + inpos] & 17592186044415L) << (52 - 44));
+ out[39 + outpos] = (in[31 + inpos] >>> 44)
+ | ((in[32 + inpos] & 4294967295L) << (52 - 32));
+ out[40 + outpos] = (in[32 + inpos] >>> 32)
+ | ((in[33 + inpos] & 1048575L) << (52 - 20));
+ out[41 + outpos] = (in[33 + inpos] >>> 20)
+ | ((in[34 + inpos] & 255L) << (52 - 8));
+ out[42 + outpos] = ((in[34 + inpos] >>> 8) & 4503599627370495L);
+ out[43 + outpos] = (in[34 + inpos] >>> 60)
+ | ((in[35 + inpos] & 281474976710655L) << (52 - 48));
+ out[44 + outpos] = (in[35 + inpos] >>> 48)
+ | ((in[36 + inpos] & 68719476735L) << (52 - 36));
+ out[45 + outpos] = (in[36 + inpos] >>> 36)
+ | ((in[37 + inpos] & 16777215L) << (52 - 24));
+ out[46 + outpos] = (in[37 + inpos] >>> 24)
+ | ((in[38 + inpos] & 4095L) << (52 - 12));
+ out[47 + outpos] = (in[38 + inpos] >>> 12);
+ out[48 + outpos] = (in[39 + inpos] & 4503599627370495L);
+ out[49 + outpos] = (in[39 + inpos] >>> 52)
+ | ((in[40 + inpos] & 1099511627775L) << (52 - 40));
+ out[50 + outpos] = (in[40 + inpos] >>> 40)
+ | ((in[41 + inpos] & 268435455L) << (52 - 28));
+ out[51 + outpos] = (in[41 + inpos] >>> 28)
+ | ((in[42 + inpos] & 65535L) << (52 - 16));
+ out[52 + outpos] = (in[42 + inpos] >>> 16)
+ | ((in[43 + inpos] & 15L) << (52 - 4));
+ out[53 + outpos] = ((in[43 + inpos] >>> 4) & 4503599627370495L);
+ out[54 + outpos] = (in[43 + inpos] >>> 56)
+ | ((in[44 + inpos] & 17592186044415L) << (52 - 44));
+ out[55 + outpos] = (in[44 + inpos] >>> 44)
+ | ((in[45 + inpos] & 4294967295L) << (52 - 32));
+ out[56 + outpos] = (in[45 + inpos] >>> 32)
+ | ((in[46 + inpos] & 1048575L) << (52 - 20));
+ out[57 + outpos] = (in[46 + inpos] >>> 20)
+ | ((in[47 + inpos] & 255L) << (52 - 8));
+ out[58 + outpos] = ((in[47 + inpos] >>> 8) & 4503599627370495L);
+ out[59 + outpos] = (in[47 + inpos] >>> 60)
+ | ((in[48 + inpos] & 281474976710655L) << (52 - 48));
+ out[60 + outpos] = (in[48 + inpos] >>> 48)
+ | ((in[49 + inpos] & 68719476735L) << (52 - 36));
+ out[61 + outpos] = (in[49 + inpos] >>> 36)
+ | ((in[50 + inpos] & 16777215L) << (52 - 24));
+ out[62 + outpos] = (in[50 + inpos] >>> 24)
+ | ((in[51 + inpos] & 4095L) << (52 - 12));
+ out[63 + outpos] = (in[51 + inpos] >>> 12);
+ }
+
+ protected static void fastunpack53(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 9007199254740991L);
+ out[1 + outpos] = (in[inpos] >>> 53)
+ | ((in[1 + inpos] & 4398046511103L) << (53 - 42));
+ out[2 + outpos] = (in[1 + inpos] >>> 42)
+ | ((in[2 + inpos] & 2147483647L) << (53 - 31));
+ out[3 + outpos] = (in[2 + inpos] >>> 31)
+ | ((in[3 + inpos] & 1048575L) << (53 - 20));
+ out[4 + outpos] = (in[3 + inpos] >>> 20)
+ | ((in[4 + inpos] & 511L) << (53 - 9));
+ out[5 + outpos] = ((in[4 + inpos] >>> 9) & 9007199254740991L);
+ out[6 + outpos] = (in[4 + inpos] >>> 62)
+ | ((in[5 + inpos] & 2251799813685247L) << (53 - 51));
+ out[7 + outpos] = (in[5 + inpos] >>> 51)
+ | ((in[6 + inpos] & 1099511627775L) << (53 - 40));
+ out[8 + outpos] = (in[6 + inpos] >>> 40)
+ | ((in[7 + inpos] & 536870911L) << (53 - 29));
+ out[9 + outpos] = (in[7 + inpos] >>> 29)
+ | ((in[8 + inpos] & 262143L) << (53 - 18));
+ out[10 + outpos] = (in[8 + inpos] >>> 18)
+ | ((in[9 + inpos] & 127L) << (53 - 7));
+ out[11 + outpos] = ((in[9 + inpos] >>> 7) & 9007199254740991L);
+ out[12 + outpos] = (in[9 + inpos] >>> 60)
+ | ((in[10 + inpos] & 562949953421311L) << (53 - 49));
+ out[13 + outpos] = (in[10 + inpos] >>> 49)
+ | ((in[11 + inpos] & 274877906943L) << (53 - 38));
+ out[14 + outpos] = (in[11 + inpos] >>> 38)
+ | ((in[12 + inpos] & 134217727L) << (53 - 27));
+ out[15 + outpos] = (in[12 + inpos] >>> 27)
+ | ((in[13 + inpos] & 65535L) << (53 - 16));
+ out[16 + outpos] = (in[13 + inpos] >>> 16)
+ | ((in[14 + inpos] & 31L) << (53 - 5));
+ out[17 + outpos] = ((in[14 + inpos] >>> 5) & 9007199254740991L);
+ out[18 + outpos] = (in[14 + inpos] >>> 58)
+ | ((in[15 + inpos] & 140737488355327L) << (53 - 47));
+ out[19 + outpos] = (in[15 + inpos] >>> 47)
+ | ((in[16 + inpos] & 68719476735L) << (53 - 36));
+ out[20 + outpos] = (in[16 + inpos] >>> 36)
+ | ((in[17 + inpos] & 33554431L) << (53 - 25));
+ out[21 + outpos] = (in[17 + inpos] >>> 25)
+ | ((in[18 + inpos] & 16383L) << (53 - 14));
+ out[22 + outpos] = (in[18 + inpos] >>> 14)
+ | ((in[19 + inpos] & 7L) << (53 - 3));
+ out[23 + outpos] = ((in[19 + inpos] >>> 3) & 9007199254740991L);
+ out[24 + outpos] = (in[19 + inpos] >>> 56)
+ | ((in[20 + inpos] & 35184372088831L) << (53 - 45));
+ out[25 + outpos] = (in[20 + inpos] >>> 45)
+ | ((in[21 + inpos] & 17179869183L) << (53 - 34));
+ out[26 + outpos] = (in[21 + inpos] >>> 34)
+ | ((in[22 + inpos] & 8388607L) << (53 - 23));
+ out[27 + outpos] = (in[22 + inpos] >>> 23)
+ | ((in[23 + inpos] & 4095L) << (53 - 12));
+ out[28 + outpos] = (in[23 + inpos] >>> 12)
+ | ((in[24 + inpos] & 1L) << (53 - 1));
+ out[29 + outpos] = ((in[24 + inpos] >>> 1) & 9007199254740991L);
+ out[30 + outpos] = (in[24 + inpos] >>> 54)
+ | ((in[25 + inpos] & 8796093022207L) << (53 - 43));
+ out[31 + outpos] = (in[25 + inpos] >>> 43)
+ | ((in[26 + inpos] & 4294967295L) << (53 - 32));
+ out[32 + outpos] = (in[26 + inpos] >>> 32)
+ | ((in[27 + inpos] & 2097151L) << (53 - 21));
+ out[33 + outpos] = (in[27 + inpos] >>> 21)
+ | ((in[28 + inpos] & 1023L) << (53 - 10));
+ out[34 + outpos] = ((in[28 + inpos] >>> 10) & 9007199254740991L);
+ out[35 + outpos] = (in[28 + inpos] >>> 63)
+ | ((in[29 + inpos] & 4503599627370495L) << (53 - 52));
+ out[36 + outpos] = (in[29 + inpos] >>> 52)
+ | ((in[30 + inpos] & 2199023255551L) << (53 - 41));
+ out[37 + outpos] = (in[30 + inpos] >>> 41)
+ | ((in[31 + inpos] & 1073741823L) << (53 - 30));
+ out[38 + outpos] = (in[31 + inpos] >>> 30)
+ | ((in[32 + inpos] & 524287L) << (53 - 19));
+ out[39 + outpos] = (in[32 + inpos] >>> 19)
+ | ((in[33 + inpos] & 255L) << (53 - 8));
+ out[40 + outpos] = ((in[33 + inpos] >>> 8) & 9007199254740991L);
+ out[41 + outpos] = (in[33 + inpos] >>> 61)
+ | ((in[34 + inpos] & 1125899906842623L) << (53 - 50));
+ out[42 + outpos] = (in[34 + inpos] >>> 50)
+ | ((in[35 + inpos] & 549755813887L) << (53 - 39));
+ out[43 + outpos] = (in[35 + inpos] >>> 39)
+ | ((in[36 + inpos] & 268435455L) << (53 - 28));
+ out[44 + outpos] = (in[36 + inpos] >>> 28)
+ | ((in[37 + inpos] & 131071L) << (53 - 17));
+ out[45 + outpos] = (in[37 + inpos] >>> 17)
+ | ((in[38 + inpos] & 63L) << (53 - 6));
+ out[46 + outpos] = ((in[38 + inpos] >>> 6) & 9007199254740991L);
+ out[47 + outpos] = (in[38 + inpos] >>> 59)
+ | ((in[39 + inpos] & 281474976710655L) << (53 - 48));
+ out[48 + outpos] = (in[39 + inpos] >>> 48)
+ | ((in[40 + inpos] & 137438953471L) << (53 - 37));
+ out[49 + outpos] = (in[40 + inpos] >>> 37)
+ | ((in[41 + inpos] & 67108863L) << (53 - 26));
+ out[50 + outpos] = (in[41 + inpos] >>> 26)
+ | ((in[42 + inpos] & 32767L) << (53 - 15));
+ out[51 + outpos] = (in[42 + inpos] >>> 15)
+ | ((in[43 + inpos] & 15L) << (53 - 4));
+ out[52 + outpos] = ((in[43 + inpos] >>> 4) & 9007199254740991L);
+ out[53 + outpos] = (in[43 + inpos] >>> 57)
+ | ((in[44 + inpos] & 70368744177663L) << (53 - 46));
+ out[54 + outpos] = (in[44 + inpos] >>> 46)
+ | ((in[45 + inpos] & 34359738367L) << (53 - 35));
+ out[55 + outpos] = (in[45 + inpos] >>> 35)
+ | ((in[46 + inpos] & 16777215L) << (53 - 24));
+ out[56 + outpos] = (in[46 + inpos] >>> 24)
+ | ((in[47 + inpos] & 8191L) << (53 - 13));
+ out[57 + outpos] = (in[47 + inpos] >>> 13)
+ | ((in[48 + inpos] & 3L) << (53 - 2));
+ out[58 + outpos] = ((in[48 + inpos] >>> 2) & 9007199254740991L);
+ out[59 + outpos] = (in[48 + inpos] >>> 55)
+ | ((in[49 + inpos] & 17592186044415L) << (53 - 44));
+ out[60 + outpos] = (in[49 + inpos] >>> 44)
+ | ((in[50 + inpos] & 8589934591L) << (53 - 33));
+ out[61 + outpos] = (in[50 + inpos] >>> 33)
+ | ((in[51 + inpos] & 4194303L) << (53 - 22));
+ out[62 + outpos] = (in[51 + inpos] >>> 22)
+ | ((in[52 + inpos] & 2047L) << (53 - 11));
+ out[63 + outpos] = (in[52 + inpos] >>> 11);
+ }
+
+ protected static void fastunpack54(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 18014398509481983L);
+ out[1 + outpos] = (in[inpos] >>> 54)
+ | ((in[1 + inpos] & 17592186044415L) << (54 - 44));
+ out[2 + outpos] = (in[1 + inpos] >>> 44)
+ | ((in[2 + inpos] & 17179869183L) << (54 - 34));
+ out[3 + outpos] = (in[2 + inpos] >>> 34)
+ | ((in[3 + inpos] & 16777215L) << (54 - 24));
+ out[4 + outpos] = (in[3 + inpos] >>> 24)
+ | ((in[4 + inpos] & 16383L) << (54 - 14));
+ out[5 + outpos] = (in[4 + inpos] >>> 14)
+ | ((in[5 + inpos] & 15L) << (54 - 4));
+ out[6 + outpos] = ((in[5 + inpos] >>> 4) & 18014398509481983L);
+ out[7 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 281474976710655L) << (54 - 48));
+ out[8 + outpos] = (in[6 + inpos] >>> 48)
+ | ((in[7 + inpos] & 274877906943L) << (54 - 38));
+ out[9 + outpos] = (in[7 + inpos] >>> 38)
+ | ((in[8 + inpos] & 268435455L) << (54 - 28));
+ out[10 + outpos] = (in[8 + inpos] >>> 28)
+ | ((in[9 + inpos] & 262143L) << (54 - 18));
+ out[11 + outpos] = (in[9 + inpos] >>> 18)
+ | ((in[10 + inpos] & 255L) << (54 - 8));
+ out[12 + outpos] = ((in[10 + inpos] >>> 8) & 18014398509481983L);
+ out[13 + outpos] = (in[10 + inpos] >>> 62)
+ | ((in[11 + inpos] & 4503599627370495L) << (54 - 52));
+ out[14 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 4398046511103L) << (54 - 42));
+ out[15 + outpos] = (in[12 + inpos] >>> 42)
+ | ((in[13 + inpos] & 4294967295L) << (54 - 32));
+ out[16 + outpos] = (in[13 + inpos] >>> 32)
+ | ((in[14 + inpos] & 4194303L) << (54 - 22));
+ out[17 + outpos] = (in[14 + inpos] >>> 22)
+ | ((in[15 + inpos] & 4095L) << (54 - 12));
+ out[18 + outpos] = (in[15 + inpos] >>> 12)
+ | ((in[16 + inpos] & 3L) << (54 - 2));
+ out[19 + outpos] = ((in[16 + inpos] >>> 2) & 18014398509481983L);
+ out[20 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 70368744177663L) << (54 - 46));
+ out[21 + outpos] = (in[17 + inpos] >>> 46)
+ | ((in[18 + inpos] & 68719476735L) << (54 - 36));
+ out[22 + outpos] = (in[18 + inpos] >>> 36)
+ | ((in[19 + inpos] & 67108863L) << (54 - 26));
+ out[23 + outpos] = (in[19 + inpos] >>> 26)
+ | ((in[20 + inpos] & 65535L) << (54 - 16));
+ out[24 + outpos] = (in[20 + inpos] >>> 16)
+ | ((in[21 + inpos] & 63L) << (54 - 6));
+ out[25 + outpos] = ((in[21 + inpos] >>> 6) & 18014398509481983L);
+ out[26 + outpos] = (in[21 + inpos] >>> 60)
+ | ((in[22 + inpos] & 1125899906842623L) << (54 - 50));
+ out[27 + outpos] = (in[22 + inpos] >>> 50)
+ | ((in[23 + inpos] & 1099511627775L) << (54 - 40));
+ out[28 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 1073741823L) << (54 - 30));
+ out[29 + outpos] = (in[24 + inpos] >>> 30)
+ | ((in[25 + inpos] & 1048575L) << (54 - 20));
+ out[30 + outpos] = (in[25 + inpos] >>> 20)
+ | ((in[26 + inpos] & 1023L) << (54 - 10));
+ out[31 + outpos] = (in[26 + inpos] >>> 10);
+ out[32 + outpos] = (in[27 + inpos] & 18014398509481983L);
+ out[33 + outpos] = (in[27 + inpos] >>> 54)
+ | ((in[28 + inpos] & 17592186044415L) << (54 - 44));
+ out[34 + outpos] = (in[28 + inpos] >>> 44)
+ | ((in[29 + inpos] & 17179869183L) << (54 - 34));
+ out[35 + outpos] = (in[29 + inpos] >>> 34)
+ | ((in[30 + inpos] & 16777215L) << (54 - 24));
+ out[36 + outpos] = (in[30 + inpos] >>> 24)
+ | ((in[31 + inpos] & 16383L) << (54 - 14));
+ out[37 + outpos] = (in[31 + inpos] >>> 14)
+ | ((in[32 + inpos] & 15L) << (54 - 4));
+ out[38 + outpos] = ((in[32 + inpos] >>> 4) & 18014398509481983L);
+ out[39 + outpos] = (in[32 + inpos] >>> 58)
+ | ((in[33 + inpos] & 281474976710655L) << (54 - 48));
+ out[40 + outpos] = (in[33 + inpos] >>> 48)
+ | ((in[34 + inpos] & 274877906943L) << (54 - 38));
+ out[41 + outpos] = (in[34 + inpos] >>> 38)
+ | ((in[35 + inpos] & 268435455L) << (54 - 28));
+ out[42 + outpos] = (in[35 + inpos] >>> 28)
+ | ((in[36 + inpos] & 262143L) << (54 - 18));
+ out[43 + outpos] = (in[36 + inpos] >>> 18)
+ | ((in[37 + inpos] & 255L) << (54 - 8));
+ out[44 + outpos] = ((in[37 + inpos] >>> 8) & 18014398509481983L);
+ out[45 + outpos] = (in[37 + inpos] >>> 62)
+ | ((in[38 + inpos] & 4503599627370495L) << (54 - 52));
+ out[46 + outpos] = (in[38 + inpos] >>> 52)
+ | ((in[39 + inpos] & 4398046511103L) << (54 - 42));
+ out[47 + outpos] = (in[39 + inpos] >>> 42)
+ | ((in[40 + inpos] & 4294967295L) << (54 - 32));
+ out[48 + outpos] = (in[40 + inpos] >>> 32)
+ | ((in[41 + inpos] & 4194303L) << (54 - 22));
+ out[49 + outpos] = (in[41 + inpos] >>> 22)
+ | ((in[42 + inpos] & 4095L) << (54 - 12));
+ out[50 + outpos] = (in[42 + inpos] >>> 12)
+ | ((in[43 + inpos] & 3L) << (54 - 2));
+ out[51 + outpos] = ((in[43 + inpos] >>> 2) & 18014398509481983L);
+ out[52 + outpos] = (in[43 + inpos] >>> 56)
+ | ((in[44 + inpos] & 70368744177663L) << (54 - 46));
+ out[53 + outpos] = (in[44 + inpos] >>> 46)
+ | ((in[45 + inpos] & 68719476735L) << (54 - 36));
+ out[54 + outpos] = (in[45 + inpos] >>> 36)
+ | ((in[46 + inpos] & 67108863L) << (54 - 26));
+ out[55 + outpos] = (in[46 + inpos] >>> 26)
+ | ((in[47 + inpos] & 65535L) << (54 - 16));
+ out[56 + outpos] = (in[47 + inpos] >>> 16)
+ | ((in[48 + inpos] & 63L) << (54 - 6));
+ out[57 + outpos] = ((in[48 + inpos] >>> 6) & 18014398509481983L);
+ out[58 + outpos] = (in[48 + inpos] >>> 60)
+ | ((in[49 + inpos] & 1125899906842623L) << (54 - 50));
+ out[59 + outpos] = (in[49 + inpos] >>> 50)
+ | ((in[50 + inpos] & 1099511627775L) << (54 - 40));
+ out[60 + outpos] = (in[50 + inpos] >>> 40)
+ | ((in[51 + inpos] & 1073741823L) << (54 - 30));
+ out[61 + outpos] = (in[51 + inpos] >>> 30)
+ | ((in[52 + inpos] & 1048575L) << (54 - 20));
+ out[62 + outpos] = (in[52 + inpos] >>> 20)
+ | ((in[53 + inpos] & 1023L) << (54 - 10));
+ out[63 + outpos] = (in[53 + inpos] >>> 10);
+ }
+
+ protected static void fastunpack55(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 36028797018963967L);
+ out[1 + outpos] = (in[inpos] >>> 55)
+ | ((in[1 + inpos] & 70368744177663L) << (55 - 46));
+ out[2 + outpos] = (in[1 + inpos] >>> 46)
+ | ((in[2 + inpos] & 137438953471L) << (55 - 37));
+ out[3 + outpos] = (in[2 + inpos] >>> 37)
+ | ((in[3 + inpos] & 268435455L) << (55 - 28));
+ out[4 + outpos] = (in[3 + inpos] >>> 28)
+ | ((in[4 + inpos] & 524287L) << (55 - 19));
+ out[5 + outpos] = (in[4 + inpos] >>> 19)
+ | ((in[5 + inpos] & 1023L) << (55 - 10));
+ out[6 + outpos] = (in[5 + inpos] >>> 10)
+ | ((in[6 + inpos] & 1L) << (55 - 1));
+ out[7 + outpos] = ((in[6 + inpos] >>> 1) & 36028797018963967L);
+ out[8 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 140737488355327L) << (55 - 47));
+ out[9 + outpos] = (in[7 + inpos] >>> 47)
+ | ((in[8 + inpos] & 274877906943L) << (55 - 38));
+ out[10 + outpos] = (in[8 + inpos] >>> 38)
+ | ((in[9 + inpos] & 536870911L) << (55 - 29));
+ out[11 + outpos] = (in[9 + inpos] >>> 29)
+ | ((in[10 + inpos] & 1048575L) << (55 - 20));
+ out[12 + outpos] = (in[10 + inpos] >>> 20)
+ | ((in[11 + inpos] & 2047L) << (55 - 11));
+ out[13 + outpos] = (in[11 + inpos] >>> 11)
+ | ((in[12 + inpos] & 3L) << (55 - 2));
+ out[14 + outpos] = ((in[12 + inpos] >>> 2) & 36028797018963967L);
+ out[15 + outpos] = (in[12 + inpos] >>> 57)
+ | ((in[13 + inpos] & 281474976710655L) << (55 - 48));
+ out[16 + outpos] = (in[13 + inpos] >>> 48)
+ | ((in[14 + inpos] & 549755813887L) << (55 - 39));
+ out[17 + outpos] = (in[14 + inpos] >>> 39)
+ | ((in[15 + inpos] & 1073741823L) << (55 - 30));
+ out[18 + outpos] = (in[15 + inpos] >>> 30)
+ | ((in[16 + inpos] & 2097151L) << (55 - 21));
+ out[19 + outpos] = (in[16 + inpos] >>> 21)
+ | ((in[17 + inpos] & 4095L) << (55 - 12));
+ out[20 + outpos] = (in[17 + inpos] >>> 12)
+ | ((in[18 + inpos] & 7L) << (55 - 3));
+ out[21 + outpos] = ((in[18 + inpos] >>> 3) & 36028797018963967L);
+ out[22 + outpos] = (in[18 + inpos] >>> 58)
+ | ((in[19 + inpos] & 562949953421311L) << (55 - 49));
+ out[23 + outpos] = (in[19 + inpos] >>> 49)
+ | ((in[20 + inpos] & 1099511627775L) << (55 - 40));
+ out[24 + outpos] = (in[20 + inpos] >>> 40)
+ | ((in[21 + inpos] & 2147483647L) << (55 - 31));
+ out[25 + outpos] = (in[21 + inpos] >>> 31)
+ | ((in[22 + inpos] & 4194303L) << (55 - 22));
+ out[26 + outpos] = (in[22 + inpos] >>> 22)
+ | ((in[23 + inpos] & 8191L) << (55 - 13));
+ out[27 + outpos] = (in[23 + inpos] >>> 13)
+ | ((in[24 + inpos] & 15L) << (55 - 4));
+ out[28 + outpos] = ((in[24 + inpos] >>> 4) & 36028797018963967L);
+ out[29 + outpos] = (in[24 + inpos] >>> 59)
+ | ((in[25 + inpos] & 1125899906842623L) << (55 - 50));
+ out[30 + outpos] = (in[25 + inpos] >>> 50)
+ | ((in[26 + inpos] & 2199023255551L) << (55 - 41));
+ out[31 + outpos] = (in[26 + inpos] >>> 41)
+ | ((in[27 + inpos] & 4294967295L) << (55 - 32));
+ out[32 + outpos] = (in[27 + inpos] >>> 32)
+ | ((in[28 + inpos] & 8388607L) << (55 - 23));
+ out[33 + outpos] = (in[28 + inpos] >>> 23)
+ | ((in[29 + inpos] & 16383L) << (55 - 14));
+ out[34 + outpos] = (in[29 + inpos] >>> 14)
+ | ((in[30 + inpos] & 31L) << (55 - 5));
+ out[35 + outpos] = ((in[30 + inpos] >>> 5) & 36028797018963967L);
+ out[36 + outpos] = (in[30 + inpos] >>> 60)
+ | ((in[31 + inpos] & 2251799813685247L) << (55 - 51));
+ out[37 + outpos] = (in[31 + inpos] >>> 51)
+ | ((in[32 + inpos] & 4398046511103L) << (55 - 42));
+ out[38 + outpos] = (in[32 + inpos] >>> 42)
+ | ((in[33 + inpos] & 8589934591L) << (55 - 33));
+ out[39 + outpos] = (in[33 + inpos] >>> 33)
+ | ((in[34 + inpos] & 16777215L) << (55 - 24));
+ out[40 + outpos] = (in[34 + inpos] >>> 24)
+ | ((in[35 + inpos] & 32767L) << (55 - 15));
+ out[41 + outpos] = (in[35 + inpos] >>> 15)
+ | ((in[36 + inpos] & 63L) << (55 - 6));
+ out[42 + outpos] = ((in[36 + inpos] >>> 6) & 36028797018963967L);
+ out[43 + outpos] = (in[36 + inpos] >>> 61)
+ | ((in[37 + inpos] & 4503599627370495L) << (55 - 52));
+ out[44 + outpos] = (in[37 + inpos] >>> 52)
+ | ((in[38 + inpos] & 8796093022207L) << (55 - 43));
+ out[45 + outpos] = (in[38 + inpos] >>> 43)
+ | ((in[39 + inpos] & 17179869183L) << (55 - 34));
+ out[46 + outpos] = (in[39 + inpos] >>> 34)
+ | ((in[40 + inpos] & 33554431L) << (55 - 25));
+ out[47 + outpos] = (in[40 + inpos] >>> 25)
+ | ((in[41 + inpos] & 65535L) << (55 - 16));
+ out[48 + outpos] = (in[41 + inpos] >>> 16)
+ | ((in[42 + inpos] & 127L) << (55 - 7));
+ out[49 + outpos] = ((in[42 + inpos] >>> 7) & 36028797018963967L);
+ out[50 + outpos] = (in[42 + inpos] >>> 62)
+ | ((in[43 + inpos] & 9007199254740991L) << (55 - 53));
+ out[51 + outpos] = (in[43 + inpos] >>> 53)
+ | ((in[44 + inpos] & 17592186044415L) << (55 - 44));
+ out[52 + outpos] = (in[44 + inpos] >>> 44)
+ | ((in[45 + inpos] & 34359738367L) << (55 - 35));
+ out[53 + outpos] = (in[45 + inpos] >>> 35)
+ | ((in[46 + inpos] & 67108863L) << (55 - 26));
+ out[54 + outpos] = (in[46 + inpos] >>> 26)
+ | ((in[47 + inpos] & 131071L) << (55 - 17));
+ out[55 + outpos] = (in[47 + inpos] >>> 17)
+ | ((in[48 + inpos] & 255L) << (55 - 8));
+ out[56 + outpos] = ((in[48 + inpos] >>> 8) & 36028797018963967L);
+ out[57 + outpos] = (in[48 + inpos] >>> 63)
+ | ((in[49 + inpos] & 18014398509481983L) << (55 - 54));
+ out[58 + outpos] = (in[49 + inpos] >>> 54)
+ | ((in[50 + inpos] & 35184372088831L) << (55 - 45));
+ out[59 + outpos] = (in[50 + inpos] >>> 45)
+ | ((in[51 + inpos] & 68719476735L) << (55 - 36));
+ out[60 + outpos] = (in[51 + inpos] >>> 36)
+ | ((in[52 + inpos] & 134217727L) << (55 - 27));
+ out[61 + outpos] = (in[52 + inpos] >>> 27)
+ | ((in[53 + inpos] & 262143L) << (55 - 18));
+ out[62 + outpos] = (in[53 + inpos] >>> 18)
+ | ((in[54 + inpos] & 511L) << (55 - 9));
+ out[63 + outpos] = (in[54 + inpos] >>> 9);
+ }
+
+ protected static void fastunpack56(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 72057594037927935L);
+ out[1 + outpos] = (in[inpos] >>> 56)
+ | ((in[1 + inpos] & 281474976710655L) << (56 - 48));
+ out[2 + outpos] = (in[1 + inpos] >>> 48)
+ | ((in[2 + inpos] & 1099511627775L) << (56 - 40));
+ out[3 + outpos] = (in[2 + inpos] >>> 40)
+ | ((in[3 + inpos] & 4294967295L) << (56 - 32));
+ out[4 + outpos] = (in[3 + inpos] >>> 32)
+ | ((in[4 + inpos] & 16777215L) << (56 - 24));
+ out[5 + outpos] = (in[4 + inpos] >>> 24)
+ | ((in[5 + inpos] & 65535L) << (56 - 16));
+ out[6 + outpos] = (in[5 + inpos] >>> 16)
+ | ((in[6 + inpos] & 255L) << (56 - 8));
+ out[7 + outpos] = (in[6 + inpos] >>> 8);
+ out[8 + outpos] = (in[7 + inpos] & 72057594037927935L);
+ out[9 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 281474976710655L) << (56 - 48));
+ out[10 + outpos] = (in[8 + inpos] >>> 48)
+ | ((in[9 + inpos] & 1099511627775L) << (56 - 40));
+ out[11 + outpos] = (in[9 + inpos] >>> 40)
+ | ((in[10 + inpos] & 4294967295L) << (56 - 32));
+ out[12 + outpos] = (in[10 + inpos] >>> 32)
+ | ((in[11 + inpos] & 16777215L) << (56 - 24));
+ out[13 + outpos] = (in[11 + inpos] >>> 24)
+ | ((in[12 + inpos] & 65535L) << (56 - 16));
+ out[14 + outpos] = (in[12 + inpos] >>> 16)
+ | ((in[13 + inpos] & 255L) << (56 - 8));
+ out[15 + outpos] = (in[13 + inpos] >>> 8);
+ out[16 + outpos] = (in[14 + inpos] & 72057594037927935L);
+ out[17 + outpos] = (in[14 + inpos] >>> 56)
+ | ((in[15 + inpos] & 281474976710655L) << (56 - 48));
+ out[18 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 1099511627775L) << (56 - 40));
+ out[19 + outpos] = (in[16 + inpos] >>> 40)
+ | ((in[17 + inpos] & 4294967295L) << (56 - 32));
+ out[20 + outpos] = (in[17 + inpos] >>> 32)
+ | ((in[18 + inpos] & 16777215L) << (56 - 24));
+ out[21 + outpos] = (in[18 + inpos] >>> 24)
+ | ((in[19 + inpos] & 65535L) << (56 - 16));
+ out[22 + outpos] = (in[19 + inpos] >>> 16)
+ | ((in[20 + inpos] & 255L) << (56 - 8));
+ out[23 + outpos] = (in[20 + inpos] >>> 8);
+ out[24 + outpos] = (in[21 + inpos] & 72057594037927935L);
+ out[25 + outpos] = (in[21 + inpos] >>> 56)
+ | ((in[22 + inpos] & 281474976710655L) << (56 - 48));
+ out[26 + outpos] = (in[22 + inpos] >>> 48)
+ | ((in[23 + inpos] & 1099511627775L) << (56 - 40));
+ out[27 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 4294967295L) << (56 - 32));
+ out[28 + outpos] = (in[24 + inpos] >>> 32)
+ | ((in[25 + inpos] & 16777215L) << (56 - 24));
+ out[29 + outpos] = (in[25 + inpos] >>> 24)
+ | ((in[26 + inpos] & 65535L) << (56 - 16));
+ out[30 + outpos] = (in[26 + inpos] >>> 16)
+ | ((in[27 + inpos] & 255L) << (56 - 8));
+ out[31 + outpos] = (in[27 + inpos] >>> 8);
+ out[32 + outpos] = (in[28 + inpos] & 72057594037927935L);
+ out[33 + outpos] = (in[28 + inpos] >>> 56)
+ | ((in[29 + inpos] & 281474976710655L) << (56 - 48));
+ out[34 + outpos] = (in[29 + inpos] >>> 48)
+ | ((in[30 + inpos] & 1099511627775L) << (56 - 40));
+ out[35 + outpos] = (in[30 + inpos] >>> 40)
+ | ((in[31 + inpos] & 4294967295L) << (56 - 32));
+ out[36 + outpos] = (in[31 + inpos] >>> 32)
+ | ((in[32 + inpos] & 16777215L) << (56 - 24));
+ out[37 + outpos] = (in[32 + inpos] >>> 24)
+ | ((in[33 + inpos] & 65535L) << (56 - 16));
+ out[38 + outpos] = (in[33 + inpos] >>> 16)
+ | ((in[34 + inpos] & 255L) << (56 - 8));
+ out[39 + outpos] = (in[34 + inpos] >>> 8);
+ out[40 + outpos] = (in[35 + inpos] & 72057594037927935L);
+ out[41 + outpos] = (in[35 + inpos] >>> 56)
+ | ((in[36 + inpos] & 281474976710655L) << (56 - 48));
+ out[42 + outpos] = (in[36 + inpos] >>> 48)
+ | ((in[37 + inpos] & 1099511627775L) << (56 - 40));
+ out[43 + outpos] = (in[37 + inpos] >>> 40)
+ | ((in[38 + inpos] & 4294967295L) << (56 - 32));
+ out[44 + outpos] = (in[38 + inpos] >>> 32)
+ | ((in[39 + inpos] & 16777215L) << (56 - 24));
+ out[45 + outpos] = (in[39 + inpos] >>> 24)
+ | ((in[40 + inpos] & 65535L) << (56 - 16));
+ out[46 + outpos] = (in[40 + inpos] >>> 16)
+ | ((in[41 + inpos] & 255L) << (56 - 8));
+ out[47 + outpos] = (in[41 + inpos] >>> 8);
+ out[48 + outpos] = (in[42 + inpos] & 72057594037927935L);
+ out[49 + outpos] = (in[42 + inpos] >>> 56)
+ | ((in[43 + inpos] & 281474976710655L) << (56 - 48));
+ out[50 + outpos] = (in[43 + inpos] >>> 48)
+ | ((in[44 + inpos] & 1099511627775L) << (56 - 40));
+ out[51 + outpos] = (in[44 + inpos] >>> 40)
+ | ((in[45 + inpos] & 4294967295L) << (56 - 32));
+ out[52 + outpos] = (in[45 + inpos] >>> 32)
+ | ((in[46 + inpos] & 16777215L) << (56 - 24));
+ out[53 + outpos] = (in[46 + inpos] >>> 24)
+ | ((in[47 + inpos] & 65535L) << (56 - 16));
+ out[54 + outpos] = (in[47 + inpos] >>> 16)
+ | ((in[48 + inpos] & 255L) << (56 - 8));
+ out[55 + outpos] = (in[48 + inpos] >>> 8);
+ out[56 + outpos] = (in[49 + inpos] & 72057594037927935L);
+ out[57 + outpos] = (in[49 + inpos] >>> 56)
+ | ((in[50 + inpos] & 281474976710655L) << (56 - 48));
+ out[58 + outpos] = (in[50 + inpos] >>> 48)
+ | ((in[51 + inpos] & 1099511627775L) << (56 - 40));
+ out[59 + outpos] = (in[51 + inpos] >>> 40)
+ | ((in[52 + inpos] & 4294967295L) << (56 - 32));
+ out[60 + outpos] = (in[52 + inpos] >>> 32)
+ | ((in[53 + inpos] & 16777215L) << (56 - 24));
+ out[61 + outpos] = (in[53 + inpos] >>> 24)
+ | ((in[54 + inpos] & 65535L) << (56 - 16));
+ out[62 + outpos] = (in[54 + inpos] >>> 16)
+ | ((in[55 + inpos] & 255L) << (56 - 8));
+ out[63 + outpos] = (in[55 + inpos] >>> 8);
+ }
+
+ protected static void fastunpack57(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 144115188075855871L);
+ out[1 + outpos] = (in[inpos] >>> 57)
+ | ((in[1 + inpos] & 1125899906842623L) << (57 - 50));
+ out[2 + outpos] = (in[1 + inpos] >>> 50)
+ | ((in[2 + inpos] & 8796093022207L) << (57 - 43));
+ out[3 + outpos] = (in[2 + inpos] >>> 43)
+ | ((in[3 + inpos] & 68719476735L) << (57 - 36));
+ out[4 + outpos] = (in[3 + inpos] >>> 36)
+ | ((in[4 + inpos] & 536870911L) << (57 - 29));
+ out[5 + outpos] = (in[4 + inpos] >>> 29)
+ | ((in[5 + inpos] & 4194303L) << (57 - 22));
+ out[6 + outpos] = (in[5 + inpos] >>> 22)
+ | ((in[6 + inpos] & 32767L) << (57 - 15));
+ out[7 + outpos] = (in[6 + inpos] >>> 15)
+ | ((in[7 + inpos] & 255L) << (57 - 8));
+ out[8 + outpos] = (in[7 + inpos] >>> 8)
+ | ((in[8 + inpos] & 1L) << (57 - 1));
+ out[9 + outpos] = ((in[8 + inpos] >>> 1) & 144115188075855871L);
+ out[10 + outpos] = (in[8 + inpos] >>> 58)
+ | ((in[9 + inpos] & 2251799813685247L) << (57 - 51));
+ out[11 + outpos] = (in[9 + inpos] >>> 51)
+ | ((in[10 + inpos] & 17592186044415L) << (57 - 44));
+ out[12 + outpos] = (in[10 + inpos] >>> 44)
+ | ((in[11 + inpos] & 137438953471L) << (57 - 37));
+ out[13 + outpos] = (in[11 + inpos] >>> 37)
+ | ((in[12 + inpos] & 1073741823L) << (57 - 30));
+ out[14 + outpos] = (in[12 + inpos] >>> 30)
+ | ((in[13 + inpos] & 8388607L) << (57 - 23));
+ out[15 + outpos] = (in[13 + inpos] >>> 23)
+ | ((in[14 + inpos] & 65535L) << (57 - 16));
+ out[16 + outpos] = (in[14 + inpos] >>> 16)
+ | ((in[15 + inpos] & 511L) << (57 - 9));
+ out[17 + outpos] = (in[15 + inpos] >>> 9)
+ | ((in[16 + inpos] & 3L) << (57 - 2));
+ out[18 + outpos] = ((in[16 + inpos] >>> 2) & 144115188075855871L);
+ out[19 + outpos] = (in[16 + inpos] >>> 59)
+ | ((in[17 + inpos] & 4503599627370495L) << (57 - 52));
+ out[20 + outpos] = (in[17 + inpos] >>> 52)
+ | ((in[18 + inpos] & 35184372088831L) << (57 - 45));
+ out[21 + outpos] = (in[18 + inpos] >>> 45)
+ | ((in[19 + inpos] & 274877906943L) << (57 - 38));
+ out[22 + outpos] = (in[19 + inpos] >>> 38)
+ | ((in[20 + inpos] & 2147483647L) << (57 - 31));
+ out[23 + outpos] = (in[20 + inpos] >>> 31)
+ | ((in[21 + inpos] & 16777215L) << (57 - 24));
+ out[24 + outpos] = (in[21 + inpos] >>> 24)
+ | ((in[22 + inpos] & 131071L) << (57 - 17));
+ out[25 + outpos] = (in[22 + inpos] >>> 17)
+ | ((in[23 + inpos] & 1023L) << (57 - 10));
+ out[26 + outpos] = (in[23 + inpos] >>> 10)
+ | ((in[24 + inpos] & 7L) << (57 - 3));
+ out[27 + outpos] = ((in[24 + inpos] >>> 3) & 144115188075855871L);
+ out[28 + outpos] = (in[24 + inpos] >>> 60)
+ | ((in[25 + inpos] & 9007199254740991L) << (57 - 53));
+ out[29 + outpos] = (in[25 + inpos] >>> 53)
+ | ((in[26 + inpos] & 70368744177663L) << (57 - 46));
+ out[30 + outpos] = (in[26 + inpos] >>> 46)
+ | ((in[27 + inpos] & 549755813887L) << (57 - 39));
+ out[31 + outpos] = (in[27 + inpos] >>> 39)
+ | ((in[28 + inpos] & 4294967295L) << (57 - 32));
+ out[32 + outpos] = (in[28 + inpos] >>> 32)
+ | ((in[29 + inpos] & 33554431L) << (57 - 25));
+ out[33 + outpos] = (in[29 + inpos] >>> 25)
+ | ((in[30 + inpos] & 262143L) << (57 - 18));
+ out[34 + outpos] = (in[30 + inpos] >>> 18)
+ | ((in[31 + inpos] & 2047L) << (57 - 11));
+ out[35 + outpos] = (in[31 + inpos] >>> 11)
+ | ((in[32 + inpos] & 15L) << (57 - 4));
+ out[36 + outpos] = ((in[32 + inpos] >>> 4) & 144115188075855871L);
+ out[37 + outpos] = (in[32 + inpos] >>> 61)
+ | ((in[33 + inpos] & 18014398509481983L) << (57 - 54));
+ out[38 + outpos] = (in[33 + inpos] >>> 54)
+ | ((in[34 + inpos] & 140737488355327L) << (57 - 47));
+ out[39 + outpos] = (in[34 + inpos] >>> 47)
+ | ((in[35 + inpos] & 1099511627775L) << (57 - 40));
+ out[40 + outpos] = (in[35 + inpos] >>> 40)
+ | ((in[36 + inpos] & 8589934591L) << (57 - 33));
+ out[41 + outpos] = (in[36 + inpos] >>> 33)
+ | ((in[37 + inpos] & 67108863L) << (57 - 26));
+ out[42 + outpos] = (in[37 + inpos] >>> 26)
+ | ((in[38 + inpos] & 524287L) << (57 - 19));
+ out[43 + outpos] = (in[38 + inpos] >>> 19)
+ | ((in[39 + inpos] & 4095L) << (57 - 12));
+ out[44 + outpos] = (in[39 + inpos] >>> 12)
+ | ((in[40 + inpos] & 31L) << (57 - 5));
+ out[45 + outpos] = ((in[40 + inpos] >>> 5) & 144115188075855871L);
+ out[46 + outpos] = (in[40 + inpos] >>> 62)
+ | ((in[41 + inpos] & 36028797018963967L) << (57 - 55));
+ out[47 + outpos] = (in[41 + inpos] >>> 55)
+ | ((in[42 + inpos] & 281474976710655L) << (57 - 48));
+ out[48 + outpos] = (in[42 + inpos] >>> 48)
+ | ((in[43 + inpos] & 2199023255551L) << (57 - 41));
+ out[49 + outpos] = (in[43 + inpos] >>> 41)
+ | ((in[44 + inpos] & 17179869183L) << (57 - 34));
+ out[50 + outpos] = (in[44 + inpos] >>> 34)
+ | ((in[45 + inpos] & 134217727L) << (57 - 27));
+ out[51 + outpos] = (in[45 + inpos] >>> 27)
+ | ((in[46 + inpos] & 1048575L) << (57 - 20));
+ out[52 + outpos] = (in[46 + inpos] >>> 20)
+ | ((in[47 + inpos] & 8191L) << (57 - 13));
+ out[53 + outpos] = (in[47 + inpos] >>> 13)
+ | ((in[48 + inpos] & 63L) << (57 - 6));
+ out[54 + outpos] = ((in[48 + inpos] >>> 6) & 144115188075855871L);
+ out[55 + outpos] = (in[48 + inpos] >>> 63)
+ | ((in[49 + inpos] & 72057594037927935L) << (57 - 56));
+ out[56 + outpos] = (in[49 + inpos] >>> 56)
+ | ((in[50 + inpos] & 562949953421311L) << (57 - 49));
+ out[57 + outpos] = (in[50 + inpos] >>> 49)
+ | ((in[51 + inpos] & 4398046511103L) << (57 - 42));
+ out[58 + outpos] = (in[51 + inpos] >>> 42)
+ | ((in[52 + inpos] & 34359738367L) << (57 - 35));
+ out[59 + outpos] = (in[52 + inpos] >>> 35)
+ | ((in[53 + inpos] & 268435455L) << (57 - 28));
+ out[60 + outpos] = (in[53 + inpos] >>> 28)
+ | ((in[54 + inpos] & 2097151L) << (57 - 21));
+ out[61 + outpos] = (in[54 + inpos] >>> 21)
+ | ((in[55 + inpos] & 16383L) << (57 - 14));
+ out[62 + outpos] = (in[55 + inpos] >>> 14)
+ | ((in[56 + inpos] & 127L) << (57 - 7));
+ out[63 + outpos] = (in[56 + inpos] >>> 7);
+ }
+
+ protected static void fastunpack58(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 288230376151711743L);
+ out[1 + outpos] = (in[inpos] >>> 58)
+ | ((in[1 + inpos] & 4503599627370495L) << (58 - 52));
+ out[2 + outpos] = (in[1 + inpos] >>> 52)
+ | ((in[2 + inpos] & 70368744177663L) << (58 - 46));
+ out[3 + outpos] = (in[2 + inpos] >>> 46)
+ | ((in[3 + inpos] & 1099511627775L) << (58 - 40));
+ out[4 + outpos] = (in[3 + inpos] >>> 40)
+ | ((in[4 + inpos] & 17179869183L) << (58 - 34));
+ out[5 + outpos] = (in[4 + inpos] >>> 34)
+ | ((in[5 + inpos] & 268435455L) << (58 - 28));
+ out[6 + outpos] = (in[5 + inpos] >>> 28)
+ | ((in[6 + inpos] & 4194303L) << (58 - 22));
+ out[7 + outpos] = (in[6 + inpos] >>> 22)
+ | ((in[7 + inpos] & 65535L) << (58 - 16));
+ out[8 + outpos] = (in[7 + inpos] >>> 16)
+ | ((in[8 + inpos] & 1023L) << (58 - 10));
+ out[9 + outpos] = (in[8 + inpos] >>> 10)
+ | ((in[9 + inpos] & 15L) << (58 - 4));
+ out[10 + outpos] = ((in[9 + inpos] >>> 4) & 288230376151711743L);
+ out[11 + outpos] = (in[9 + inpos] >>> 62)
+ | ((in[10 + inpos] & 72057594037927935L) << (58 - 56));
+ out[12 + outpos] = (in[10 + inpos] >>> 56)
+ | ((in[11 + inpos] & 1125899906842623L) << (58 - 50));
+ out[13 + outpos] = (in[11 + inpos] >>> 50)
+ | ((in[12 + inpos] & 17592186044415L) << (58 - 44));
+ out[14 + outpos] = (in[12 + inpos] >>> 44)
+ | ((in[13 + inpos] & 274877906943L) << (58 - 38));
+ out[15 + outpos] = (in[13 + inpos] >>> 38)
+ | ((in[14 + inpos] & 4294967295L) << (58 - 32));
+ out[16 + outpos] = (in[14 + inpos] >>> 32)
+ | ((in[15 + inpos] & 67108863L) << (58 - 26));
+ out[17 + outpos] = (in[15 + inpos] >>> 26)
+ | ((in[16 + inpos] & 1048575L) << (58 - 20));
+ out[18 + outpos] = (in[16 + inpos] >>> 20)
+ | ((in[17 + inpos] & 16383L) << (58 - 14));
+ out[19 + outpos] = (in[17 + inpos] >>> 14)
+ | ((in[18 + inpos] & 255L) << (58 - 8));
+ out[20 + outpos] = (in[18 + inpos] >>> 8)
+ | ((in[19 + inpos] & 3L) << (58 - 2));
+ out[21 + outpos] = ((in[19 + inpos] >>> 2) & 288230376151711743L);
+ out[22 + outpos] = (in[19 + inpos] >>> 60)
+ | ((in[20 + inpos] & 18014398509481983L) << (58 - 54));
+ out[23 + outpos] = (in[20 + inpos] >>> 54)
+ | ((in[21 + inpos] & 281474976710655L) << (58 - 48));
+ out[24 + outpos] = (in[21 + inpos] >>> 48)
+ | ((in[22 + inpos] & 4398046511103L) << (58 - 42));
+ out[25 + outpos] = (in[22 + inpos] >>> 42)
+ | ((in[23 + inpos] & 68719476735L) << (58 - 36));
+ out[26 + outpos] = (in[23 + inpos] >>> 36)
+ | ((in[24 + inpos] & 1073741823L) << (58 - 30));
+ out[27 + outpos] = (in[24 + inpos] >>> 30)
+ | ((in[25 + inpos] & 16777215L) << (58 - 24));
+ out[28 + outpos] = (in[25 + inpos] >>> 24)
+ | ((in[26 + inpos] & 262143L) << (58 - 18));
+ out[29 + outpos] = (in[26 + inpos] >>> 18)
+ | ((in[27 + inpos] & 4095L) << (58 - 12));
+ out[30 + outpos] = (in[27 + inpos] >>> 12)
+ | ((in[28 + inpos] & 63L) << (58 - 6));
+ out[31 + outpos] = (in[28 + inpos] >>> 6);
+ out[32 + outpos] = (in[29 + inpos] & 288230376151711743L);
+ out[33 + outpos] = (in[29 + inpos] >>> 58)
+ | ((in[30 + inpos] & 4503599627370495L) << (58 - 52));
+ out[34 + outpos] = (in[30 + inpos] >>> 52)
+ | ((in[31 + inpos] & 70368744177663L) << (58 - 46));
+ out[35 + outpos] = (in[31 + inpos] >>> 46)
+ | ((in[32 + inpos] & 1099511627775L) << (58 - 40));
+ out[36 + outpos] = (in[32 + inpos] >>> 40)
+ | ((in[33 + inpos] & 17179869183L) << (58 - 34));
+ out[37 + outpos] = (in[33 + inpos] >>> 34)
+ | ((in[34 + inpos] & 268435455L) << (58 - 28));
+ out[38 + outpos] = (in[34 + inpos] >>> 28)
+ | ((in[35 + inpos] & 4194303L) << (58 - 22));
+ out[39 + outpos] = (in[35 + inpos] >>> 22)
+ | ((in[36 + inpos] & 65535L) << (58 - 16));
+ out[40 + outpos] = (in[36 + inpos] >>> 16)
+ | ((in[37 + inpos] & 1023L) << (58 - 10));
+ out[41 + outpos] = (in[37 + inpos] >>> 10)
+ | ((in[38 + inpos] & 15L) << (58 - 4));
+ out[42 + outpos] = ((in[38 + inpos] >>> 4) & 288230376151711743L);
+ out[43 + outpos] = (in[38 + inpos] >>> 62)
+ | ((in[39 + inpos] & 72057594037927935L) << (58 - 56));
+ out[44 + outpos] = (in[39 + inpos] >>> 56)
+ | ((in[40 + inpos] & 1125899906842623L) << (58 - 50));
+ out[45 + outpos] = (in[40 + inpos] >>> 50)
+ | ((in[41 + inpos] & 17592186044415L) << (58 - 44));
+ out[46 + outpos] = (in[41 + inpos] >>> 44)
+ | ((in[42 + inpos] & 274877906943L) << (58 - 38));
+ out[47 + outpos] = (in[42 + inpos] >>> 38)
+ | ((in[43 + inpos] & 4294967295L) << (58 - 32));
+ out[48 + outpos] = (in[43 + inpos] >>> 32)
+ | ((in[44 + inpos] & 67108863L) << (58 - 26));
+ out[49 + outpos] = (in[44 + inpos] >>> 26)
+ | ((in[45 + inpos] & 1048575L) << (58 - 20));
+ out[50 + outpos] = (in[45 + inpos] >>> 20)
+ | ((in[46 + inpos] & 16383L) << (58 - 14));
+ out[51 + outpos] = (in[46 + inpos] >>> 14)
+ | ((in[47 + inpos] & 255L) << (58 - 8));
+ out[52 + outpos] = (in[47 + inpos] >>> 8)
+ | ((in[48 + inpos] & 3L) << (58 - 2));
+ out[53 + outpos] = ((in[48 + inpos] >>> 2) & 288230376151711743L);
+ out[54 + outpos] = (in[48 + inpos] >>> 60)
+ | ((in[49 + inpos] & 18014398509481983L) << (58 - 54));
+ out[55 + outpos] = (in[49 + inpos] >>> 54)
+ | ((in[50 + inpos] & 281474976710655L) << (58 - 48));
+ out[56 + outpos] = (in[50 + inpos] >>> 48)
+ | ((in[51 + inpos] & 4398046511103L) << (58 - 42));
+ out[57 + outpos] = (in[51 + inpos] >>> 42)
+ | ((in[52 + inpos] & 68719476735L) << (58 - 36));
+ out[58 + outpos] = (in[52 + inpos] >>> 36)
+ | ((in[53 + inpos] & 1073741823L) << (58 - 30));
+ out[59 + outpos] = (in[53 + inpos] >>> 30)
+ | ((in[54 + inpos] & 16777215L) << (58 - 24));
+ out[60 + outpos] = (in[54 + inpos] >>> 24)
+ | ((in[55 + inpos] & 262143L) << (58 - 18));
+ out[61 + outpos] = (in[55 + inpos] >>> 18)
+ | ((in[56 + inpos] & 4095L) << (58 - 12));
+ out[62 + outpos] = (in[56 + inpos] >>> 12)
+ | ((in[57 + inpos] & 63L) << (58 - 6));
+ out[63 + outpos] = (in[57 + inpos] >>> 6);
+ }
+
+ protected static void fastunpack59(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 576460752303423487L);
+ out[1 + outpos] = (in[inpos] >>> 59)
+ | ((in[1 + inpos] & 18014398509481983L) << (59 - 54));
+ out[2 + outpos] = (in[1 + inpos] >>> 54)
+ | ((in[2 + inpos] & 562949953421311L) << (59 - 49));
+ out[3 + outpos] = (in[2 + inpos] >>> 49)
+ | ((in[3 + inpos] & 17592186044415L) << (59 - 44));
+ out[4 + outpos] = (in[3 + inpos] >>> 44)
+ | ((in[4 + inpos] & 549755813887L) << (59 - 39));
+ out[5 + outpos] = (in[4 + inpos] >>> 39)
+ | ((in[5 + inpos] & 17179869183L) << (59 - 34));
+ out[6 + outpos] = (in[5 + inpos] >>> 34)
+ | ((in[6 + inpos] & 536870911L) << (59 - 29));
+ out[7 + outpos] = (in[6 + inpos] >>> 29)
+ | ((in[7 + inpos] & 16777215L) << (59 - 24));
+ out[8 + outpos] = (in[7 + inpos] >>> 24)
+ | ((in[8 + inpos] & 524287L) << (59 - 19));
+ out[9 + outpos] = (in[8 + inpos] >>> 19)
+ | ((in[9 + inpos] & 16383L) << (59 - 14));
+ out[10 + outpos] = (in[9 + inpos] >>> 14)
+ | ((in[10 + inpos] & 511L) << (59 - 9));
+ out[11 + outpos] = (in[10 + inpos] >>> 9)
+ | ((in[11 + inpos] & 15L) << (59 - 4));
+ out[12 + outpos] = ((in[11 + inpos] >>> 4) & 576460752303423487L);
+ out[13 + outpos] = (in[11 + inpos] >>> 63)
+ | ((in[12 + inpos] & 288230376151711743L) << (59 - 58));
+ out[14 + outpos] = (in[12 + inpos] >>> 58)
+ | ((in[13 + inpos] & 9007199254740991L) << (59 - 53));
+ out[15 + outpos] = (in[13 + inpos] >>> 53)
+ | ((in[14 + inpos] & 281474976710655L) << (59 - 48));
+ out[16 + outpos] = (in[14 + inpos] >>> 48)
+ | ((in[15 + inpos] & 8796093022207L) << (59 - 43));
+ out[17 + outpos] = (in[15 + inpos] >>> 43)
+ | ((in[16 + inpos] & 274877906943L) << (59 - 38));
+ out[18 + outpos] = (in[16 + inpos] >>> 38)
+ | ((in[17 + inpos] & 8589934591L) << (59 - 33));
+ out[19 + outpos] = (in[17 + inpos] >>> 33)
+ | ((in[18 + inpos] & 268435455L) << (59 - 28));
+ out[20 + outpos] = (in[18 + inpos] >>> 28)
+ | ((in[19 + inpos] & 8388607L) << (59 - 23));
+ out[21 + outpos] = (in[19 + inpos] >>> 23)
+ | ((in[20 + inpos] & 262143L) << (59 - 18));
+ out[22 + outpos] = (in[20 + inpos] >>> 18)
+ | ((in[21 + inpos] & 8191L) << (59 - 13));
+ out[23 + outpos] = (in[21 + inpos] >>> 13)
+ | ((in[22 + inpos] & 255L) << (59 - 8));
+ out[24 + outpos] = (in[22 + inpos] >>> 8)
+ | ((in[23 + inpos] & 7L) << (59 - 3));
+ out[25 + outpos] = ((in[23 + inpos] >>> 3) & 576460752303423487L);
+ out[26 + outpos] = (in[23 + inpos] >>> 62)
+ | ((in[24 + inpos] & 144115188075855871L) << (59 - 57));
+ out[27 + outpos] = (in[24 + inpos] >>> 57)
+ | ((in[25 + inpos] & 4503599627370495L) << (59 - 52));
+ out[28 + outpos] = (in[25 + inpos] >>> 52)
+ | ((in[26 + inpos] & 140737488355327L) << (59 - 47));
+ out[29 + outpos] = (in[26 + inpos] >>> 47)
+ | ((in[27 + inpos] & 4398046511103L) << (59 - 42));
+ out[30 + outpos] = (in[27 + inpos] >>> 42)
+ | ((in[28 + inpos] & 137438953471L) << (59 - 37));
+ out[31 + outpos] = (in[28 + inpos] >>> 37)
+ | ((in[29 + inpos] & 4294967295L) << (59 - 32));
+ out[32 + outpos] = (in[29 + inpos] >>> 32)
+ | ((in[30 + inpos] & 134217727L) << (59 - 27));
+ out[33 + outpos] = (in[30 + inpos] >>> 27)
+ | ((in[31 + inpos] & 4194303L) << (59 - 22));
+ out[34 + outpos] = (in[31 + inpos] >>> 22)
+ | ((in[32 + inpos] & 131071L) << (59 - 17));
+ out[35 + outpos] = (in[32 + inpos] >>> 17)
+ | ((in[33 + inpos] & 4095L) << (59 - 12));
+ out[36 + outpos] = (in[33 + inpos] >>> 12)
+ | ((in[34 + inpos] & 127L) << (59 - 7));
+ out[37 + outpos] = (in[34 + inpos] >>> 7)
+ | ((in[35 + inpos] & 3L) << (59 - 2));
+ out[38 + outpos] = ((in[35 + inpos] >>> 2) & 576460752303423487L);
+ out[39 + outpos] = (in[35 + inpos] >>> 61)
+ | ((in[36 + inpos] & 72057594037927935L) << (59 - 56));
+ out[40 + outpos] = (in[36 + inpos] >>> 56)
+ | ((in[37 + inpos] & 2251799813685247L) << (59 - 51));
+ out[41 + outpos] = (in[37 + inpos] >>> 51)
+ | ((in[38 + inpos] & 70368744177663L) << (59 - 46));
+ out[42 + outpos] = (in[38 + inpos] >>> 46)
+ | ((in[39 + inpos] & 2199023255551L) << (59 - 41));
+ out[43 + outpos] = (in[39 + inpos] >>> 41)
+ | ((in[40 + inpos] & 68719476735L) << (59 - 36));
+ out[44 + outpos] = (in[40 + inpos] >>> 36)
+ | ((in[41 + inpos] & 2147483647L) << (59 - 31));
+ out[45 + outpos] = (in[41 + inpos] >>> 31)
+ | ((in[42 + inpos] & 67108863L) << (59 - 26));
+ out[46 + outpos] = (in[42 + inpos] >>> 26)
+ | ((in[43 + inpos] & 2097151L) << (59 - 21));
+ out[47 + outpos] = (in[43 + inpos] >>> 21)
+ | ((in[44 + inpos] & 65535L) << (59 - 16));
+ out[48 + outpos] = (in[44 + inpos] >>> 16)
+ | ((in[45 + inpos] & 2047L) << (59 - 11));
+ out[49 + outpos] = (in[45 + inpos] >>> 11)
+ | ((in[46 + inpos] & 63L) << (59 - 6));
+ out[50 + outpos] = (in[46 + inpos] >>> 6)
+ | ((in[47 + inpos] & 1L) << (59 - 1));
+ out[51 + outpos] = ((in[47 + inpos] >>> 1) & 576460752303423487L);
+ out[52 + outpos] = (in[47 + inpos] >>> 60)
+ | ((in[48 + inpos] & 36028797018963967L) << (59 - 55));
+ out[53 + outpos] = (in[48 + inpos] >>> 55)
+ | ((in[49 + inpos] & 1125899906842623L) << (59 - 50));
+ out[54 + outpos] = (in[49 + inpos] >>> 50)
+ | ((in[50 + inpos] & 35184372088831L) << (59 - 45));
+ out[55 + outpos] = (in[50 + inpos] >>> 45)
+ | ((in[51 + inpos] & 1099511627775L) << (59 - 40));
+ out[56 + outpos] = (in[51 + inpos] >>> 40)
+ | ((in[52 + inpos] & 34359738367L) << (59 - 35));
+ out[57 + outpos] = (in[52 + inpos] >>> 35)
+ | ((in[53 + inpos] & 1073741823L) << (59 - 30));
+ out[58 + outpos] = (in[53 + inpos] >>> 30)
+ | ((in[54 + inpos] & 33554431L) << (59 - 25));
+ out[59 + outpos] = (in[54 + inpos] >>> 25)
+ | ((in[55 + inpos] & 1048575L) << (59 - 20));
+ out[60 + outpos] = (in[55 + inpos] >>> 20)
+ | ((in[56 + inpos] & 32767L) << (59 - 15));
+ out[61 + outpos] = (in[56 + inpos] >>> 15)
+ | ((in[57 + inpos] & 1023L) << (59 - 10));
+ out[62 + outpos] = (in[57 + inpos] >>> 10)
+ | ((in[58 + inpos] & 31L) << (59 - 5));
+ out[63 + outpos] = (in[58 + inpos] >>> 5);
+ }
+
+ protected static void fastunpack60(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1152921504606846975L);
+ out[1 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 72057594037927935L) << (60 - 56));
+ out[2 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 4503599627370495L) << (60 - 52));
+ out[3 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 281474976710655L) << (60 - 48));
+ out[4 + outpos] = (in[3 + inpos] >>> 48)
+ | ((in[4 + inpos] & 17592186044415L) << (60 - 44));
+ out[5 + outpos] = (in[4 + inpos] >>> 44)
+ | ((in[5 + inpos] & 1099511627775L) << (60 - 40));
+ out[6 + outpos] = (in[5 + inpos] >>> 40)
+ | ((in[6 + inpos] & 68719476735L) << (60 - 36));
+ out[7 + outpos] = (in[6 + inpos] >>> 36)
+ | ((in[7 + inpos] & 4294967295L) << (60 - 32));
+ out[8 + outpos] = (in[7 + inpos] >>> 32)
+ | ((in[8 + inpos] & 268435455L) << (60 - 28));
+ out[9 + outpos] = (in[8 + inpos] >>> 28)
+ | ((in[9 + inpos] & 16777215L) << (60 - 24));
+ out[10 + outpos] = (in[9 + inpos] >>> 24)
+ | ((in[10 + inpos] & 1048575L) << (60 - 20));
+ out[11 + outpos] = (in[10 + inpos] >>> 20)
+ | ((in[11 + inpos] & 65535L) << (60 - 16));
+ out[12 + outpos] = (in[11 + inpos] >>> 16)
+ | ((in[12 + inpos] & 4095L) << (60 - 12));
+ out[13 + outpos] = (in[12 + inpos] >>> 12)
+ | ((in[13 + inpos] & 255L) << (60 - 8));
+ out[14 + outpos] = (in[13 + inpos] >>> 8)
+ | ((in[14 + inpos] & 15L) << (60 - 4));
+ out[15 + outpos] = (in[14 + inpos] >>> 4);
+ out[16 + outpos] = (in[15 + inpos] & 1152921504606846975L);
+ out[17 + outpos] = (in[15 + inpos] >>> 60)
+ | ((in[16 + inpos] & 72057594037927935L) << (60 - 56));
+ out[18 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 4503599627370495L) << (60 - 52));
+ out[19 + outpos] = (in[17 + inpos] >>> 52)
+ | ((in[18 + inpos] & 281474976710655L) << (60 - 48));
+ out[20 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 17592186044415L) << (60 - 44));
+ out[21 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 1099511627775L) << (60 - 40));
+ out[22 + outpos] = (in[20 + inpos] >>> 40)
+ | ((in[21 + inpos] & 68719476735L) << (60 - 36));
+ out[23 + outpos] = (in[21 + inpos] >>> 36)
+ | ((in[22 + inpos] & 4294967295L) << (60 - 32));
+ out[24 + outpos] = (in[22 + inpos] >>> 32)
+ | ((in[23 + inpos] & 268435455L) << (60 - 28));
+ out[25 + outpos] = (in[23 + inpos] >>> 28)
+ | ((in[24 + inpos] & 16777215L) << (60 - 24));
+ out[26 + outpos] = (in[24 + inpos] >>> 24)
+ | ((in[25 + inpos] & 1048575L) << (60 - 20));
+ out[27 + outpos] = (in[25 + inpos] >>> 20)
+ | ((in[26 + inpos] & 65535L) << (60 - 16));
+ out[28 + outpos] = (in[26 + inpos] >>> 16)
+ | ((in[27 + inpos] & 4095L) << (60 - 12));
+ out[29 + outpos] = (in[27 + inpos] >>> 12)
+ | ((in[28 + inpos] & 255L) << (60 - 8));
+ out[30 + outpos] = (in[28 + inpos] >>> 8)
+ | ((in[29 + inpos] & 15L) << (60 - 4));
+ out[31 + outpos] = (in[29 + inpos] >>> 4);
+ out[32 + outpos] = (in[30 + inpos] & 1152921504606846975L);
+ out[33 + outpos] = (in[30 + inpos] >>> 60)
+ | ((in[31 + inpos] & 72057594037927935L) << (60 - 56));
+ out[34 + outpos] = (in[31 + inpos] >>> 56)
+ | ((in[32 + inpos] & 4503599627370495L) << (60 - 52));
+ out[35 + outpos] = (in[32 + inpos] >>> 52)
+ | ((in[33 + inpos] & 281474976710655L) << (60 - 48));
+ out[36 + outpos] = (in[33 + inpos] >>> 48)
+ | ((in[34 + inpos] & 17592186044415L) << (60 - 44));
+ out[37 + outpos] = (in[34 + inpos] >>> 44)
+ | ((in[35 + inpos] & 1099511627775L) << (60 - 40));
+ out[38 + outpos] = (in[35 + inpos] >>> 40)
+ | ((in[36 + inpos] & 68719476735L) << (60 - 36));
+ out[39 + outpos] = (in[36 + inpos] >>> 36)
+ | ((in[37 + inpos] & 4294967295L) << (60 - 32));
+ out[40 + outpos] = (in[37 + inpos] >>> 32)
+ | ((in[38 + inpos] & 268435455L) << (60 - 28));
+ out[41 + outpos] = (in[38 + inpos] >>> 28)
+ | ((in[39 + inpos] & 16777215L) << (60 - 24));
+ out[42 + outpos] = (in[39 + inpos] >>> 24)
+ | ((in[40 + inpos] & 1048575L) << (60 - 20));
+ out[43 + outpos] = (in[40 + inpos] >>> 20)
+ | ((in[41 + inpos] & 65535L) << (60 - 16));
+ out[44 + outpos] = (in[41 + inpos] >>> 16)
+ | ((in[42 + inpos] & 4095L) << (60 - 12));
+ out[45 + outpos] = (in[42 + inpos] >>> 12)
+ | ((in[43 + inpos] & 255L) << (60 - 8));
+ out[46 + outpos] = (in[43 + inpos] >>> 8)
+ | ((in[44 + inpos] & 15L) << (60 - 4));
+ out[47 + outpos] = (in[44 + inpos] >>> 4);
+ out[48 + outpos] = (in[45 + inpos] & 1152921504606846975L);
+ out[49 + outpos] = (in[45 + inpos] >>> 60)
+ | ((in[46 + inpos] & 72057594037927935L) << (60 - 56));
+ out[50 + outpos] = (in[46 + inpos] >>> 56)
+ | ((in[47 + inpos] & 4503599627370495L) << (60 - 52));
+ out[51 + outpos] = (in[47 + inpos] >>> 52)
+ | ((in[48 + inpos] & 281474976710655L) << (60 - 48));
+ out[52 + outpos] = (in[48 + inpos] >>> 48)
+ | ((in[49 + inpos] & 17592186044415L) << (60 - 44));
+ out[53 + outpos] = (in[49 + inpos] >>> 44)
+ | ((in[50 + inpos] & 1099511627775L) << (60 - 40));
+ out[54 + outpos] = (in[50 + inpos] >>> 40)
+ | ((in[51 + inpos] & 68719476735L) << (60 - 36));
+ out[55 + outpos] = (in[51 + inpos] >>> 36)
+ | ((in[52 + inpos] & 4294967295L) << (60 - 32));
+ out[56 + outpos] = (in[52 + inpos] >>> 32)
+ | ((in[53 + inpos] & 268435455L) << (60 - 28));
+ out[57 + outpos] = (in[53 + inpos] >>> 28)
+ | ((in[54 + inpos] & 16777215L) << (60 - 24));
+ out[58 + outpos] = (in[54 + inpos] >>> 24)
+ | ((in[55 + inpos] & 1048575L) << (60 - 20));
+ out[59 + outpos] = (in[55 + inpos] >>> 20)
+ | ((in[56 + inpos] & 65535L) << (60 - 16));
+ out[60 + outpos] = (in[56 + inpos] >>> 16)
+ | ((in[57 + inpos] & 4095L) << (60 - 12));
+ out[61 + outpos] = (in[57 + inpos] >>> 12)
+ | ((in[58 + inpos] & 255L) << (60 - 8));
+ out[62 + outpos] = (in[58 + inpos] >>> 8)
+ | ((in[59 + inpos] & 15L) << (60 - 4));
+ out[63 + outpos] = (in[59 + inpos] >>> 4);
+ }
+
+ protected static void fastunpack61(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 2305843009213693951L);
+ out[1 + outpos] = (in[inpos] >>> 61)
+ | ((in[1 + inpos] & 288230376151711743L) << (61 - 58));
+ out[2 + outpos] = (in[1 + inpos] >>> 58)
+ | ((in[2 + inpos] & 36028797018963967L) << (61 - 55));
+ out[3 + outpos] = (in[2 + inpos] >>> 55)
+ | ((in[3 + inpos] & 4503599627370495L) << (61 - 52));
+ out[4 + outpos] = (in[3 + inpos] >>> 52)
+ | ((in[4 + inpos] & 562949953421311L) << (61 - 49));
+ out[5 + outpos] = (in[4 + inpos] >>> 49)
+ | ((in[5 + inpos] & 70368744177663L) << (61 - 46));
+ out[6 + outpos] = (in[5 + inpos] >>> 46)
+ | ((in[6 + inpos] & 8796093022207L) << (61 - 43));
+ out[7 + outpos] = (in[6 + inpos] >>> 43)
+ | ((in[7 + inpos] & 1099511627775L) << (61 - 40));
+ out[8 + outpos] = (in[7 + inpos] >>> 40)
+ | ((in[8 + inpos] & 137438953471L) << (61 - 37));
+ out[9 + outpos] = (in[8 + inpos] >>> 37)
+ | ((in[9 + inpos] & 17179869183L) << (61 - 34));
+ out[10 + outpos] = (in[9 + inpos] >>> 34)
+ | ((in[10 + inpos] & 2147483647L) << (61 - 31));
+ out[11 + outpos] = (in[10 + inpos] >>> 31)
+ | ((in[11 + inpos] & 268435455L) << (61 - 28));
+ out[12 + outpos] = (in[11 + inpos] >>> 28)
+ | ((in[12 + inpos] & 33554431L) << (61 - 25));
+ out[13 + outpos] = (in[12 + inpos] >>> 25)
+ | ((in[13 + inpos] & 4194303L) << (61 - 22));
+ out[14 + outpos] = (in[13 + inpos] >>> 22)
+ | ((in[14 + inpos] & 524287L) << (61 - 19));
+ out[15 + outpos] = (in[14 + inpos] >>> 19)
+ | ((in[15 + inpos] & 65535L) << (61 - 16));
+ out[16 + outpos] = (in[15 + inpos] >>> 16)
+ | ((in[16 + inpos] & 8191L) << (61 - 13));
+ out[17 + outpos] = (in[16 + inpos] >>> 13)
+ | ((in[17 + inpos] & 1023L) << (61 - 10));
+ out[18 + outpos] = (in[17 + inpos] >>> 10)
+ | ((in[18 + inpos] & 127L) << (61 - 7));
+ out[19 + outpos] = (in[18 + inpos] >>> 7)
+ | ((in[19 + inpos] & 15L) << (61 - 4));
+ out[20 + outpos] = (in[19 + inpos] >>> 4)
+ | ((in[20 + inpos] & 1L) << (61 - 1));
+ out[21 + outpos] = ((in[20 + inpos] >>> 1) & 2305843009213693951L);
+ out[22 + outpos] = (in[20 + inpos] >>> 62)
+ | ((in[21 + inpos] & 576460752303423487L) << (61 - 59));
+ out[23 + outpos] = (in[21 + inpos] >>> 59)
+ | ((in[22 + inpos] & 72057594037927935L) << (61 - 56));
+ out[24 + outpos] = (in[22 + inpos] >>> 56)
+ | ((in[23 + inpos] & 9007199254740991L) << (61 - 53));
+ out[25 + outpos] = (in[23 + inpos] >>> 53)
+ | ((in[24 + inpos] & 1125899906842623L) << (61 - 50));
+ out[26 + outpos] = (in[24 + inpos] >>> 50)
+ | ((in[25 + inpos] & 140737488355327L) << (61 - 47));
+ out[27 + outpos] = (in[25 + inpos] >>> 47)
+ | ((in[26 + inpos] & 17592186044415L) << (61 - 44));
+ out[28 + outpos] = (in[26 + inpos] >>> 44)
+ | ((in[27 + inpos] & 2199023255551L) << (61 - 41));
+ out[29 + outpos] = (in[27 + inpos] >>> 41)
+ | ((in[28 + inpos] & 274877906943L) << (61 - 38));
+ out[30 + outpos] = (in[28 + inpos] >>> 38)
+ | ((in[29 + inpos] & 34359738367L) << (61 - 35));
+ out[31 + outpos] = (in[29 + inpos] >>> 35)
+ | ((in[30 + inpos] & 4294967295L) << (61 - 32));
+ out[32 + outpos] = (in[30 + inpos] >>> 32)
+ | ((in[31 + inpos] & 536870911L) << (61 - 29));
+ out[33 + outpos] = (in[31 + inpos] >>> 29)
+ | ((in[32 + inpos] & 67108863L) << (61 - 26));
+ out[34 + outpos] = (in[32 + inpos] >>> 26)
+ | ((in[33 + inpos] & 8388607L) << (61 - 23));
+ out[35 + outpos] = (in[33 + inpos] >>> 23)
+ | ((in[34 + inpos] & 1048575L) << (61 - 20));
+ out[36 + outpos] = (in[34 + inpos] >>> 20)
+ | ((in[35 + inpos] & 131071L) << (61 - 17));
+ out[37 + outpos] = (in[35 + inpos] >>> 17)
+ | ((in[36 + inpos] & 16383L) << (61 - 14));
+ out[38 + outpos] = (in[36 + inpos] >>> 14)
+ | ((in[37 + inpos] & 2047L) << (61 - 11));
+ out[39 + outpos] = (in[37 + inpos] >>> 11)
+ | ((in[38 + inpos] & 255L) << (61 - 8));
+ out[40 + outpos] = (in[38 + inpos] >>> 8)
+ | ((in[39 + inpos] & 31L) << (61 - 5));
+ out[41 + outpos] = (in[39 + inpos] >>> 5)
+ | ((in[40 + inpos] & 3L) << (61 - 2));
+ out[42 + outpos] = ((in[40 + inpos] >>> 2) & 2305843009213693951L);
+ out[43 + outpos] = (in[40 + inpos] >>> 63)
+ | ((in[41 + inpos] & 1152921504606846975L) << (61 - 60));
+ out[44 + outpos] = (in[41 + inpos] >>> 60)
+ | ((in[42 + inpos] & 144115188075855871L) << (61 - 57));
+ out[45 + outpos] = (in[42 + inpos] >>> 57)
+ | ((in[43 + inpos] & 18014398509481983L) << (61 - 54));
+ out[46 + outpos] = (in[43 + inpos] >>> 54)
+ | ((in[44 + inpos] & 2251799813685247L) << (61 - 51));
+ out[47 + outpos] = (in[44 + inpos] >>> 51)
+ | ((in[45 + inpos] & 281474976710655L) << (61 - 48));
+ out[48 + outpos] = (in[45 + inpos] >>> 48)
+ | ((in[46 + inpos] & 35184372088831L) << (61 - 45));
+ out[49 + outpos] = (in[46 + inpos] >>> 45)
+ | ((in[47 + inpos] & 4398046511103L) << (61 - 42));
+ out[50 + outpos] = (in[47 + inpos] >>> 42)
+ | ((in[48 + inpos] & 549755813887L) << (61 - 39));
+ out[51 + outpos] = (in[48 + inpos] >>> 39)
+ | ((in[49 + inpos] & 68719476735L) << (61 - 36));
+ out[52 + outpos] = (in[49 + inpos] >>> 36)
+ | ((in[50 + inpos] & 8589934591L) << (61 - 33));
+ out[53 + outpos] = (in[50 + inpos] >>> 33)
+ | ((in[51 + inpos] & 1073741823L) << (61 - 30));
+ out[54 + outpos] = (in[51 + inpos] >>> 30)
+ | ((in[52 + inpos] & 134217727L) << (61 - 27));
+ out[55 + outpos] = (in[52 + inpos] >>> 27)
+ | ((in[53 + inpos] & 16777215L) << (61 - 24));
+ out[56 + outpos] = (in[53 + inpos] >>> 24)
+ | ((in[54 + inpos] & 2097151L) << (61 - 21));
+ out[57 + outpos] = (in[54 + inpos] >>> 21)
+ | ((in[55 + inpos] & 262143L) << (61 - 18));
+ out[58 + outpos] = (in[55 + inpos] >>> 18)
+ | ((in[56 + inpos] & 32767L) << (61 - 15));
+ out[59 + outpos] = (in[56 + inpos] >>> 15)
+ | ((in[57 + inpos] & 4095L) << (61 - 12));
+ out[60 + outpos] = (in[57 + inpos] >>> 12)
+ | ((in[58 + inpos] & 511L) << (61 - 9));
+ out[61 + outpos] = (in[58 + inpos] >>> 9)
+ | ((in[59 + inpos] & 63L) << (61 - 6));
+ out[62 + outpos] = (in[59 + inpos] >>> 6)
+ | ((in[60 + inpos] & 7L) << (61 - 3));
+ out[63 + outpos] = (in[60 + inpos] >>> 3);
+ }
+
+ protected static void fastunpack62(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 4611686018427387903L);
+ out[1 + outpos] = (in[inpos] >>> 62)
+ | ((in[1 + inpos] & 1152921504606846975L) << (62 - 60));
+ out[2 + outpos] = (in[1 + inpos] >>> 60)
+ | ((in[2 + inpos] & 288230376151711743L) << (62 - 58));
+ out[3 + outpos] = (in[2 + inpos] >>> 58)
+ | ((in[3 + inpos] & 72057594037927935L) << (62 - 56));
+ out[4 + outpos] = (in[3 + inpos] >>> 56)
+ | ((in[4 + inpos] & 18014398509481983L) << (62 - 54));
+ out[5 + outpos] = (in[4 + inpos] >>> 54)
+ | ((in[5 + inpos] & 4503599627370495L) << (62 - 52));
+ out[6 + outpos] = (in[5 + inpos] >>> 52)
+ | ((in[6 + inpos] & 1125899906842623L) << (62 - 50));
+ out[7 + outpos] = (in[6 + inpos] >>> 50)
+ | ((in[7 + inpos] & 281474976710655L) << (62 - 48));
+ out[8 + outpos] = (in[7 + inpos] >>> 48)
+ | ((in[8 + inpos] & 70368744177663L) << (62 - 46));
+ out[9 + outpos] = (in[8 + inpos] >>> 46)
+ | ((in[9 + inpos] & 17592186044415L) << (62 - 44));
+ out[10 + outpos] = (in[9 + inpos] >>> 44)
+ | ((in[10 + inpos] & 4398046511103L) << (62 - 42));
+ out[11 + outpos] = (in[10 + inpos] >>> 42)
+ | ((in[11 + inpos] & 1099511627775L) << (62 - 40));
+ out[12 + outpos] = (in[11 + inpos] >>> 40)
+ | ((in[12 + inpos] & 274877906943L) << (62 - 38));
+ out[13 + outpos] = (in[12 + inpos] >>> 38)
+ | ((in[13 + inpos] & 68719476735L) << (62 - 36));
+ out[14 + outpos] = (in[13 + inpos] >>> 36)
+ | ((in[14 + inpos] & 17179869183L) << (62 - 34));
+ out[15 + outpos] = (in[14 + inpos] >>> 34)
+ | ((in[15 + inpos] & 4294967295L) << (62 - 32));
+ out[16 + outpos] = (in[15 + inpos] >>> 32)
+ | ((in[16 + inpos] & 1073741823L) << (62 - 30));
+ out[17 + outpos] = (in[16 + inpos] >>> 30)
+ | ((in[17 + inpos] & 268435455L) << (62 - 28));
+ out[18 + outpos] = (in[17 + inpos] >>> 28)
+ | ((in[18 + inpos] & 67108863L) << (62 - 26));
+ out[19 + outpos] = (in[18 + inpos] >>> 26)
+ | ((in[19 + inpos] & 16777215L) << (62 - 24));
+ out[20 + outpos] = (in[19 + inpos] >>> 24)
+ | ((in[20 + inpos] & 4194303L) << (62 - 22));
+ out[21 + outpos] = (in[20 + inpos] >>> 22)
+ | ((in[21 + inpos] & 1048575L) << (62 - 20));
+ out[22 + outpos] = (in[21 + inpos] >>> 20)
+ | ((in[22 + inpos] & 262143L) << (62 - 18));
+ out[23 + outpos] = (in[22 + inpos] >>> 18)
+ | ((in[23 + inpos] & 65535L) << (62 - 16));
+ out[24 + outpos] = (in[23 + inpos] >>> 16)
+ | ((in[24 + inpos] & 16383L) << (62 - 14));
+ out[25 + outpos] = (in[24 + inpos] >>> 14)
+ | ((in[25 + inpos] & 4095L) << (62 - 12));
+ out[26 + outpos] = (in[25 + inpos] >>> 12)
+ | ((in[26 + inpos] & 1023L) << (62 - 10));
+ out[27 + outpos] = (in[26 + inpos] >>> 10)
+ | ((in[27 + inpos] & 255L) << (62 - 8));
+ out[28 + outpos] = (in[27 + inpos] >>> 8)
+ | ((in[28 + inpos] & 63L) << (62 - 6));
+ out[29 + outpos] = (in[28 + inpos] >>> 6)
+ | ((in[29 + inpos] & 15L) << (62 - 4));
+ out[30 + outpos] = (in[29 + inpos] >>> 4)
+ | ((in[30 + inpos] & 3L) << (62 - 2));
+ out[31 + outpos] = (in[30 + inpos] >>> 2);
+ out[32 + outpos] = (in[31 + inpos] & 4611686018427387903L);
+ out[33 + outpos] = (in[31 + inpos] >>> 62)
+ | ((in[32 + inpos] & 1152921504606846975L) << (62 - 60));
+ out[34 + outpos] = (in[32 + inpos] >>> 60)
+ | ((in[33 + inpos] & 288230376151711743L) << (62 - 58));
+ out[35 + outpos] = (in[33 + inpos] >>> 58)
+ | ((in[34 + inpos] & 72057594037927935L) << (62 - 56));
+ out[36 + outpos] = (in[34 + inpos] >>> 56)
+ | ((in[35 + inpos] & 18014398509481983L) << (62 - 54));
+ out[37 + outpos] = (in[35 + inpos] >>> 54)
+ | ((in[36 + inpos] & 4503599627370495L) << (62 - 52));
+ out[38 + outpos] = (in[36 + inpos] >>> 52)
+ | ((in[37 + inpos] & 1125899906842623L) << (62 - 50));
+ out[39 + outpos] = (in[37 + inpos] >>> 50)
+ | ((in[38 + inpos] & 281474976710655L) << (62 - 48));
+ out[40 + outpos] = (in[38 + inpos] >>> 48)
+ | ((in[39 + inpos] & 70368744177663L) << (62 - 46));
+ out[41 + outpos] = (in[39 + inpos] >>> 46)
+ | ((in[40 + inpos] & 17592186044415L) << (62 - 44));
+ out[42 + outpos] = (in[40 + inpos] >>> 44)
+ | ((in[41 + inpos] & 4398046511103L) << (62 - 42));
+ out[43 + outpos] = (in[41 + inpos] >>> 42)
+ | ((in[42 + inpos] & 1099511627775L) << (62 - 40));
+ out[44 + outpos] = (in[42 + inpos] >>> 40)
+ | ((in[43 + inpos] & 274877906943L) << (62 - 38));
+ out[45 + outpos] = (in[43 + inpos] >>> 38)
+ | ((in[44 + inpos] & 68719476735L) << (62 - 36));
+ out[46 + outpos] = (in[44 + inpos] >>> 36)
+ | ((in[45 + inpos] & 17179869183L) << (62 - 34));
+ out[47 + outpos] = (in[45 + inpos] >>> 34)
+ | ((in[46 + inpos] & 4294967295L) << (62 - 32));
+ out[48 + outpos] = (in[46 + inpos] >>> 32)
+ | ((in[47 + inpos] & 1073741823L) << (62 - 30));
+ out[49 + outpos] = (in[47 + inpos] >>> 30)
+ | ((in[48 + inpos] & 268435455L) << (62 - 28));
+ out[50 + outpos] = (in[48 + inpos] >>> 28)
+ | ((in[49 + inpos] & 67108863L) << (62 - 26));
+ out[51 + outpos] = (in[49 + inpos] >>> 26)
+ | ((in[50 + inpos] & 16777215L) << (62 - 24));
+ out[52 + outpos] = (in[50 + inpos] >>> 24)
+ | ((in[51 + inpos] & 4194303L) << (62 - 22));
+ out[53 + outpos] = (in[51 + inpos] >>> 22)
+ | ((in[52 + inpos] & 1048575L) << (62 - 20));
+ out[54 + outpos] = (in[52 + inpos] >>> 20)
+ | ((in[53 + inpos] & 262143L) << (62 - 18));
+ out[55 + outpos] = (in[53 + inpos] >>> 18)
+ | ((in[54 + inpos] & 65535L) << (62 - 16));
+ out[56 + outpos] = (in[54 + inpos] >>> 16)
+ | ((in[55 + inpos] & 16383L) << (62 - 14));
+ out[57 + outpos] = (in[55 + inpos] >>> 14)
+ | ((in[56 + inpos] & 4095L) << (62 - 12));
+ out[58 + outpos] = (in[56 + inpos] >>> 12)
+ | ((in[57 + inpos] & 1023L) << (62 - 10));
+ out[59 + outpos] = (in[57 + inpos] >>> 10)
+ | ((in[58 + inpos] & 255L) << (62 - 8));
+ out[60 + outpos] = (in[58 + inpos] >>> 8)
+ | ((in[59 + inpos] & 63L) << (62 - 6));
+ out[61 + outpos] = (in[59 + inpos] >>> 6)
+ | ((in[60 + inpos] & 15L) << (62 - 4));
+ out[62 + outpos] = (in[60 + inpos] >>> 4)
+ | ((in[61 + inpos] & 3L) << (62 - 2));
+ out[63 + outpos] = (in[61 + inpos] >>> 2);
+ }
+
+ protected static void fastunpack63(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 9223372036854775807L);
+ out[1 + outpos] = (in[inpos] >>> 63)
+ | ((in[1 + inpos] & 4611686018427387903L) << (63 - 62));
+ out[2 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 2305843009213693951L) << (63 - 61));
+ out[3 + outpos] = (in[2 + inpos] >>> 61)
+ | ((in[3 + inpos] & 1152921504606846975L) << (63 - 60));
+ out[4 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 576460752303423487L) << (63 - 59));
+ out[5 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 288230376151711743L) << (63 - 58));
+ out[6 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 144115188075855871L) << (63 - 57));
+ out[7 + outpos] = (in[6 + inpos] >>> 57)
+ | ((in[7 + inpos] & 72057594037927935L) << (63 - 56));
+ out[8 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 36028797018963967L) << (63 - 55));
+ out[9 + outpos] = (in[8 + inpos] >>> 55)
+ | ((in[9 + inpos] & 18014398509481983L) << (63 - 54));
+ out[10 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 9007199254740991L) << (63 - 53));
+ out[11 + outpos] = (in[10 + inpos] >>> 53)
+ | ((in[11 + inpos] & 4503599627370495L) << (63 - 52));
+ out[12 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 2251799813685247L) << (63 - 51));
+ out[13 + outpos] = (in[12 + inpos] >>> 51)
+ | ((in[13 + inpos] & 1125899906842623L) << (63 - 50));
+ out[14 + outpos] = (in[13 + inpos] >>> 50)
+ | ((in[14 + inpos] & 562949953421311L) << (63 - 49));
+ out[15 + outpos] = (in[14 + inpos] >>> 49)
+ | ((in[15 + inpos] & 281474976710655L) << (63 - 48));
+ out[16 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 140737488355327L) << (63 - 47));
+ out[17 + outpos] = (in[16 + inpos] >>> 47)
+ | ((in[17 + inpos] & 70368744177663L) << (63 - 46));
+ out[18 + outpos] = (in[17 + inpos] >>> 46)
+ | ((in[18 + inpos] & 35184372088831L) << (63 - 45));
+ out[19 + outpos] = (in[18 + inpos] >>> 45)
+ | ((in[19 + inpos] & 17592186044415L) << (63 - 44));
+ out[20 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 8796093022207L) << (63 - 43));
+ out[21 + outpos] = (in[20 + inpos] >>> 43)
+ | ((in[21 + inpos] & 4398046511103L) << (63 - 42));
+ out[22 + outpos] = (in[21 + inpos] >>> 42)
+ | ((in[22 + inpos] & 2199023255551L) << (63 - 41));
+ out[23 + outpos] = (in[22 + inpos] >>> 41)
+ | ((in[23 + inpos] & 1099511627775L) << (63 - 40));
+ out[24 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 549755813887L) << (63 - 39));
+ out[25 + outpos] = (in[24 + inpos] >>> 39)
+ | ((in[25 + inpos] & 274877906943L) << (63 - 38));
+ out[26 + outpos] = (in[25 + inpos] >>> 38)
+ | ((in[26 + inpos] & 137438953471L) << (63 - 37));
+ out[27 + outpos] = (in[26 + inpos] >>> 37)
+ | ((in[27 + inpos] & 68719476735L) << (63 - 36));
+ out[28 + outpos] = (in[27 + inpos] >>> 36)
+ | ((in[28 + inpos] & 34359738367L) << (63 - 35));
+ out[29 + outpos] = (in[28 + inpos] >>> 35)
+ | ((in[29 + inpos] & 17179869183L) << (63 - 34));
+ out[30 + outpos] = (in[29 + inpos] >>> 34)
+ | ((in[30 + inpos] & 8589934591L) << (63 - 33));
+ out[31 + outpos] = (in[30 + inpos] >>> 33)
+ | ((in[31 + inpos] & 4294967295L) << (63 - 32));
+ out[32 + outpos] = (in[31 + inpos] >>> 32)
+ | ((in[32 + inpos] & 2147483647L) << (63 - 31));
+ out[33 + outpos] = (in[32 + inpos] >>> 31)
+ | ((in[33 + inpos] & 1073741823L) << (63 - 30));
+ out[34 + outpos] = (in[33 + inpos] >>> 30)
+ | ((in[34 + inpos] & 536870911L) << (63 - 29));
+ out[35 + outpos] = (in[34 + inpos] >>> 29)
+ | ((in[35 + inpos] & 268435455L) << (63 - 28));
+ out[36 + outpos] = (in[35 + inpos] >>> 28)
+ | ((in[36 + inpos] & 134217727L) << (63 - 27));
+ out[37 + outpos] = (in[36 + inpos] >>> 27)
+ | ((in[37 + inpos] & 67108863L) << (63 - 26));
+ out[38 + outpos] = (in[37 + inpos] >>> 26)
+ | ((in[38 + inpos] & 33554431L) << (63 - 25));
+ out[39 + outpos] = (in[38 + inpos] >>> 25)
+ | ((in[39 + inpos] & 16777215L) << (63 - 24));
+ out[40 + outpos] = (in[39 + inpos] >>> 24)
+ | ((in[40 + inpos] & 8388607L) << (63 - 23));
+ out[41 + outpos] = (in[40 + inpos] >>> 23)
+ | ((in[41 + inpos] & 4194303L) << (63 - 22));
+ out[42 + outpos] = (in[41 + inpos] >>> 22)
+ | ((in[42 + inpos] & 2097151L) << (63 - 21));
+ out[43 + outpos] = (in[42 + inpos] >>> 21)
+ | ((in[43 + inpos] & 1048575L) << (63 - 20));
+ out[44 + outpos] = (in[43 + inpos] >>> 20)
+ | ((in[44 + inpos] & 524287L) << (63 - 19));
+ out[45 + outpos] = (in[44 + inpos] >>> 19)
+ | ((in[45 + inpos] & 262143L) << (63 - 18));
+ out[46 + outpos] = (in[45 + inpos] >>> 18)
+ | ((in[46 + inpos] & 131071L) << (63 - 17));
+ out[47 + outpos] = (in[46 + inpos] >>> 17)
+ | ((in[47 + inpos] & 65535L) << (63 - 16));
+ out[48 + outpos] = (in[47 + inpos] >>> 16)
+ | ((in[48 + inpos] & 32767L) << (63 - 15));
+ out[49 + outpos] = (in[48 + inpos] >>> 15)
+ | ((in[49 + inpos] & 16383L) << (63 - 14));
+ out[50 + outpos] = (in[49 + inpos] >>> 14)
+ | ((in[50 + inpos] & 8191L) << (63 - 13));
+ out[51 + outpos] = (in[50 + inpos] >>> 13)
+ | ((in[51 + inpos] & 4095L) << (63 - 12));
+ out[52 + outpos] = (in[51 + inpos] >>> 12)
+ | ((in[52 + inpos] & 2047L) << (63 - 11));
+ out[53 + outpos] = (in[52 + inpos] >>> 11)
+ | ((in[53 + inpos] & 1023L) << (63 - 10));
+ out[54 + outpos] = (in[53 + inpos] >>> 10)
+ | ((in[54 + inpos] & 511L) << (63 - 9));
+ out[55 + outpos] = (in[54 + inpos] >>> 9)
+ | ((in[55 + inpos] & 255L) << (63 - 8));
+ out[56 + outpos] = (in[55 + inpos] >>> 8)
+ | ((in[56 + inpos] & 127L) << (63 - 7));
+ out[57 + outpos] = (in[56 + inpos] >>> 7)
+ | ((in[57 + inpos] & 63L) << (63 - 6));
+ out[58 + outpos] = (in[57 + inpos] >>> 6)
+ | ((in[58 + inpos] & 31L) << (63 - 5));
+ out[59 + outpos] = (in[58 + inpos] >>> 5)
+ | ((in[59 + inpos] & 15L) << (63 - 4));
+ out[60 + outpos] = (in[59 + inpos] >>> 4)
+ | ((in[60 + inpos] & 7L) << (63 - 3));
+ out[61 + outpos] = (in[60 + inpos] >>> 3)
+ | ((in[61 + inpos] & 3L) << (63 - 2));
+ out[62 + outpos] = (in[61 + inpos] >>> 2)
+ | ((in[62 + inpos] & 1L) << (63 - 1));
+ out[63 + outpos] = (in[62 + inpos] >>> 1);
+ }
protected static void fastunpack64(final long[] in, int inpos,
final long[] out, int outpos) {
diff --git a/src/main/java/me/lemire/longcompression/LongCODEC.java b/src/main/java/me/lemire/longcompression/LongCODEC.java
index 1068f9f..0951ffd 100644
--- a/src/main/java/me/lemire/longcompression/LongCODEC.java
+++ b/src/main/java/me/lemire/longcompression/LongCODEC.java
@@ -36,7 +36,7 @@ public interface LongCODEC {
* where to write in the output array
*/
public void compress(long[] in, IntWrapper inpos, int inlength,
- long[] out, IntWrapper outpos);
+ long[] out, IntWrapper outpos);
/**
* Uncompress data from an array to another array.
@@ -57,6 +57,6 @@ public void compress(long[] in, IntWrapper inpos, int inlength,
* where to start writing the uncompressed output in out
*/
public void uncompress(long[] in, IntWrapper inpos, int inlength,
- long[] out, IntWrapper outpos);
+ long[] out, IntWrapper outpos);
}
diff --git a/src/main/java/me/lemire/longcompression/LongComposition.java b/src/main/java/me/lemire/longcompression/LongComposition.java
index 1394a78..5111a51 100644
--- a/src/main/java/me/lemire/longcompression/LongComposition.java
+++ b/src/main/java/me/lemire/longcompression/LongComposition.java
@@ -37,7 +37,7 @@ public LongComposition(LongCODEC f1, LongCODEC f2) {
@Override
public void compress(long[] in, IntWrapper inpos, int inlength,
- long[] out, IntWrapper outpos) {
+ long[] out, IntWrapper outpos) {
if (inlength == 0) {
return;
}
@@ -54,7 +54,7 @@ public void compress(long[] in, IntWrapper inpos, int inlength,
@Override
public void uncompress(long[] in, IntWrapper inpos, int inlength,
- long[] out, IntWrapper outpos) {
+ long[] out, IntWrapper outpos) {
if (inlength == 0)
return;
final int init = inpos.get();
diff --git a/src/main/java/me/lemire/longcompression/LongCompressor.java b/src/main/java/me/lemire/longcompression/LongCompressor.java
index a2c79fd..246647f 100644
--- a/src/main/java/me/lemire/longcompression/LongCompressor.java
+++ b/src/main/java/me/lemire/longcompression/LongCompressor.java
@@ -3,7 +3,6 @@
import java.util.Arrays;
import me.lemire.integercompression.IntWrapper;
-import me.lemire.integercompression.UncompressibleInputException;
/**
* This is a convenience class that wraps a codec to provide
@@ -37,20 +36,14 @@ public LongCompressor() {
*
* @param input array to be compressed
* @return compressed array
- * @throws UncompressibleInputException if the data is too poorly compressible
*/
public long[] compress(long[] input) {
- long[] compressed = new long[input.length + input.length / 100 + 1024];
+ int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length);
+ long[] compressed = new long[maxCompressedLength + 1]; // +1 to store the length of the input
// Store at index=0 the length of the input, hence enabling .headlessCompress
compressed[0] = input.length;
IntWrapper outpos = new IntWrapper(1);
- try {
- codec.headlessCompress(input, new IntWrapper(0),
- input.length, compressed, outpos);
- } catch (IndexOutOfBoundsException ioebe) {
- throw new UncompressibleInputException("Your input is too poorly compressible "
- + "with the current codec : "+codec);
- }
+ codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos);
compressed = Arrays.copyOf(compressed,outpos.intValue());
return compressed;
}
diff --git a/src/main/java/me/lemire/longcompression/LongJustCopy.java b/src/main/java/me/lemire/longcompression/LongJustCopy.java
index 7a5a67a..95abc1e 100644
--- a/src/main/java/me/lemire/longcompression/LongJustCopy.java
+++ b/src/main/java/me/lemire/longcompression/LongJustCopy.java
@@ -17,7 +17,7 @@ public final class LongJustCopy implements LongCODEC, SkippableLongCODEC {
@Override
public void headlessCompress(long[] in, IntWrapper inpos, int inlength,
- long[] out, IntWrapper outpos) {
+ long[] out, IntWrapper outpos) {
System.arraycopy(in, inpos.get(), out, outpos.get(), inlength);
inpos.add(inlength);
outpos.add(inlength);
@@ -25,7 +25,7 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength,
@Override
public void uncompress(long[] in, IntWrapper inpos, int inlength,
- long[] out, IntWrapper outpos) {
+ long[] out, IntWrapper outpos) {
headlessUncompress(in,inpos,inlength,out,outpos,inlength);
}
@@ -36,16 +36,22 @@ public String toString() {
@Override
public void headlessUncompress(long[] in, IntWrapper inpos, int inlength,
- long[] out, IntWrapper outpos, int num) {
+ long[] out, IntWrapper outpos, int num) {
System.arraycopy(in, inpos.get(), out, outpos.get(), num);
inpos.add(num);
outpos.add(num);
}
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ compressedPositions.add(inlength);
+ return inlength;
+ }
+
@Override
public void compress(long[] in, IntWrapper inpos, int inlength,
- long[] out, IntWrapper outpos) {
+ long[] out, IntWrapper outpos) {
headlessCompress(in,inpos,inlength,out,outpos);
}
diff --git a/src/main/java/me/lemire/longcompression/LongVariableByte.java b/src/main/java/me/lemire/longcompression/LongVariableByte.java
index ad2b0eb..63c194b 100644
--- a/src/main/java/me/lemire/longcompression/LongVariableByte.java
+++ b/src/main/java/me/lemire/longcompression/LongVariableByte.java
@@ -22,6 +22,7 @@
* @author Benoit Lacelle
*/
public class LongVariableByte implements LongCODEC, ByteLongCODEC, SkippableLongCODEC {
+ private static final int MAX_BYTES_PER_INT = 10;
private static byte extract7bits(int i, long val) {
return (byte) ((val >>> (7 * i)) & ((1 << 7) - 1));
@@ -90,7 +91,7 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o
buf.put((byte) extract7bits(5, val));
buf.put((byte) extract7bits(6, val));
buf.put((byte) (extract7bitsmaskless(7, (val)) | (1 << 7)));
- } else if (val >= 0 && val < (1L << 63)) {
+ } else if (val >= 0) {
buf.put((byte) extract7bits(0, val));
buf.put((byte) extract7bits(1, val));
buf.put((byte) extract7bits(2, val));
@@ -175,7 +176,7 @@ public void compress(long[] in, IntWrapper inpos, int inlength, byte[] out,
out[outpostmp++] = (byte) extract7bits(5, val);
out[outpostmp++] = (byte) extract7bits(6, val);
out[outpostmp++] = (byte) (extract7bitsmaskless(7, (val)) | (1 << 7));
- } else if (val >= 0 && val < (1L << 63)) {
+ } else if (val >= 0) {
out[outpostmp++] = (byte) extract7bits(0, val);
out[outpostmp++] = (byte) extract7bits(1, val);
out[outpostmp++] = (byte) extract7bits(2, val);
@@ -326,6 +327,14 @@ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[]
inpos.set(p + (s!=0 ? 1 : 0));
}
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int maxLengthInBytes = inlength * MAX_BYTES_PER_INT;
+ int maxLengthInLongs = (maxLengthInBytes + Long.BYTES - 1) / Long.BYTES;
+ compressedPositions.add(inlength);
+ return maxLengthInLongs;
+ }
+
/**
* Creates a new buffer of the requested size.
*
diff --git a/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java
index 7fe1fe5..33fd562 100644
--- a/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java
+++ b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java
@@ -67,4 +67,21 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o
public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out,
IntWrapper outpos, int num);
+ /**
+ * Compute the maximum number of longs that might be required to store
+ * the compressed form of a given input array segment, without headers.
+ *
+ * This is useful to pre-allocate the output buffer before calling
+ * {@link #headlessCompress(long[], IntWrapper, int, long[], IntWrapper)}.
+ *
+ *
+ * @param compressedPositions
+ * since not all schemes compress every input integer, this parameter
+ * returns how many input integers will actually be compressed.
+ * This is useful when composing multiple schemes.
+ * @param inlength
+ * number of longs to be compressed
+ * @return the maximum number of longs needed in the output array
+ */
+ int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength);
}
diff --git a/src/main/java/me/lemire/longcompression/SkippableLongComposition.java b/src/main/java/me/lemire/longcompression/SkippableLongComposition.java
index 5568489..eb03b72 100644
--- a/src/main/java/me/lemire/longcompression/SkippableLongComposition.java
+++ b/src/main/java/me/lemire/longcompression/SkippableLongComposition.java
@@ -53,15 +53,27 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o
public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out,
IntWrapper outpos, int num) {
int init = inpos.get();
+ int outposInit = outpos.get();
+
F1.headlessUncompress(in, inpos, inlength, out, outpos, num);
if (inpos.get() == init) {
- inpos.increment();
+ inpos.increment();
}
inlength -= inpos.get() - init;
- num -= outpos.get();
+ num -= outpos.get() - outposInit;
F2.headlessUncompress(in, inpos, inlength, out, outpos, num);
}
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int init = compressedPositions.get();
+ int maxLength = F1.maxHeadlessCompressedLength(compressedPositions, inlength);
+ maxLength += 1; // Add +1 for the potential F2 header. Question: is this header actually needed in the headless version?
+ inlength -= compressedPositions.get() - init;
+ maxLength += F2.maxHeadlessCompressedLength(compressedPositions, inlength);
+ return maxLength;
+ }
+
@Override
public String toString() {
return F1.toString() + "+" + F2.toString();
diff --git a/src/main/java/me/lemire/longcompression/differential/LongDelta.java b/src/main/java/me/lemire/longcompression/differential/LongDelta.java
index 2b0e077..8399f94 100644
--- a/src/main/java/me/lemire/longcompression/differential/LongDelta.java
+++ b/src/main/java/me/lemire/longcompression/differential/LongDelta.java
@@ -66,7 +66,7 @@ public static long delta(long[] data, int start, int length, int init) {
* @return next initial vale
*/
public static long delta(long[] data, int start, int length, int init,
- long[] out) {
+ long[] out) {
for (int i = length - 1; i > 0; --i) {
out[i] = data[start + i] - data[start + i - 1];
}
@@ -98,7 +98,7 @@ public static void fastinverseDelta(long[] data) {
int sz0 = data.length / 4 * 4;
int i = 1;
if (sz0 >= 4) {
- long a = data[0];
+ long a = data[0];
for (; i < sz0 - 4; i += 4) {
a = data[i] += a;
a = data[i + 1] += a;
@@ -107,7 +107,7 @@ public static void fastinverseDelta(long[] data) {
}
}
- for (; i != data.length; ++i) {
+ for (; i < data.length; ++i) {
data[i] += data[i - 1];
}
}
@@ -132,7 +132,7 @@ public static long fastinverseDelta(long[] data, int start, int length,
int sz0 = length / 4 * 4;
int i = 1;
if (sz0 >= 4) {
- long a = data[start];
+ long a = data[start];
for (; i < sz0 - 4; i += 4) {
a = data[start + i] += a;
a = data[start + i + 1] += a;
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index d254c12..4d652dd 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -2,9 +2,13 @@
// SPDX-License-Identifier: Apache-2.0
module me.lemire.integercompression {
- // This is currently only for advanced users:
- // requires jdk.incubator.vector;
+ // Optional at runtime: only consumers of the vector package (VectorFastPFOR)
+ // need jdk.incubator.vector resolved (e.g. --add-modules jdk.incubator.vector).
+ // Scalar consumers resolve without it.
+ requires static jdk.incubator.vector;
exports me.lemire.integercompression;
exports me.lemire.longcompression;
- // exports me.lemire.integercompression.vector;
+ exports me.lemire.longcompression.differential;
+ exports me.lemire.integercompression.differential;
+ exports me.lemire.integercompression.vector;
}
diff --git a/src/test/java/me/lemire/integercompression/AdhocTest.java b/src/test/java/me/lemire/integercompression/AdhocTest.java
index 8fd4049..ee911b3 100644
--- a/src/test/java/me/lemire/integercompression/AdhocTest.java
+++ b/src/test/java/me/lemire/integercompression/AdhocTest.java
@@ -22,13 +22,48 @@
@SuppressWarnings({ "static-method" })
public class AdhocTest {
-
- /**
- *
- */
+ @Test
+ public void testIssue59() {
+ FastPFOR128 fastpfor = new FastPFOR128();
+
+ int N = 9984;
+ int[] data = new int[N];
+ for (var i = 0; i < N; i += 150) {
+ data[i] = i;
+ }
+
+ int[] compressedoutput1 = new int[N + 1024];
+
+ IntWrapper inputoffset1 = new IntWrapper(0);
+ IntWrapper outputoffset1 = new IntWrapper(0);
+
+ fastpfor.compress(data, inputoffset1, N, compressedoutput1, outputoffset1);
+ int compressedsize1 = outputoffset1.get();
+
+ int[] recovered1 = new int[N];
+ inputoffset1 = new IntWrapper(0);
+ outputoffset1 = new IntWrapper(0);
+ fastpfor.uncompress(compressedoutput1, outputoffset1, compressedsize1, recovered1, inputoffset1);
+ Assert.assertArrayEquals(data, recovered1);
+
+ int[] compressedoutput2 = new int[N + 1024];
+
+ IntWrapper inputoffset2 = new IntWrapper(0);
+ IntWrapper outputoffset2 = new IntWrapper(0);
+
+ fastpfor.compress(data, inputoffset2, N, compressedoutput2, outputoffset2);
+ int compressedsize2 = outputoffset2.get();
+
+ int[] recovered2 = new int[N];
+ inputoffset2 = new IntWrapper(0);
+ outputoffset2 = new IntWrapper(0);
+ fastpfor.uncompress(compressedoutput2, outputoffset2, compressedsize2, recovered2, inputoffset2);
+ Assert.assertArrayEquals(data, recovered2);
+ }
+
@Test
public void testIssue29() {
- for(int x = 0; x < 64; x++) {
+ for(int x = 0; x < 64; x++) {
int[] a = {2, 3, 4, 5};
int[] b = new int[90];
int[] c = new int[a.length];
@@ -42,7 +77,7 @@ public void testIssue29() {
IntWrapper cOffset = new IntWrapper(0);
codec.uncompress(b, bOffset, len, c, cOffset);
Assert.assertArrayEquals(a,c);
- }
+ }
}
/**
@@ -50,20 +85,20 @@ public void testIssue29() {
*/
@Test
public void testIssue29b() {
- for(int x = 0; x < 64; x++) {
- int[] a = {2, 3, 4, 5};
- int[] b = new int[90];
- int[] c = new int[a.length];
- SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte());
- IntWrapper aOffset = new IntWrapper(0);
- IntWrapper bOffset = new IntWrapper(x);
- codec.headlessCompress(a, aOffset, a.length, b, bOffset);
- int len = bOffset.get() - x;
- bOffset.set(x);
- IntWrapper cOffset = new IntWrapper(0);
- codec.headlessUncompress(b, bOffset, len, c, cOffset, a.length);
- Assert.assertArrayEquals(a,c);
- }
+ for(int x = 0; x < 64; x++) {
+ SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte());
+ int[] a = {2, 3, 4, 5};
+ int[] b = new int[x + codec.maxHeadlessCompressedLength(new IntWrapper(0), a.length)];
+ int[] c = new int[a.length];
+ IntWrapper aOffset = new IntWrapper(0);
+ IntWrapper bOffset = new IntWrapper(x);
+ codec.headlessCompress(a, aOffset, a.length, b, bOffset);
+ int len = bOffset.get() - x;
+ bOffset.set(x);
+ IntWrapper cOffset = new IntWrapper(0);
+ codec.headlessUncompress(b, bOffset, len, c, cOffset, a.length);
+ Assert.assertArrayEquals(a,c);
+ }
}
@@ -71,30 +106,27 @@ public void testIssue29b() {
*
*/
@Test
- public void testIssue41() {
- for (int x = 0; x < 64; x++) {
- int[] a = { 2, 3, 4, 5 };
- int[] b = new int[90];
- int[] c = new int[a.length];
- SkippableIntegratedIntegerCODEC codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(),
- new IntegratedVariableByte());
- IntWrapper aOffset = new IntWrapper(0);
- IntWrapper bOffset = new IntWrapper(x);
- IntWrapper initValue = new IntWrapper(0);
-
- codec.headlessCompress(a, aOffset, a.length, b, bOffset, initValue);
- int len = bOffset.get() - x;
- bOffset.set(x);
- IntWrapper cOffset = new IntWrapper(0);
- initValue = new IntWrapper(0);
- codec.headlessUncompress(b, bOffset, len, c, cOffset, a.length, initValue);
- Assert.assertArrayEquals(a, c);
- }
- }
+ public void testIssue41() {
+ for (int x = 0; x < 64; x++) {
+ SkippableIntegratedIntegerCODEC codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte());
+ int[] a = { 2, 3, 4, 5 };
+ int[] b = new int[x + codec.maxHeadlessCompressedLength(new IntWrapper(0), a.length)];
+ int[] c = new int[a.length];
+ IntWrapper aOffset = new IntWrapper(0);
+ IntWrapper bOffset = new IntWrapper(x);
+ IntWrapper initValue = new IntWrapper(0);
+
+ codec.headlessCompress(a, aOffset, a.length, b, bOffset, initValue);
+ int len = bOffset.get() - x;
+ bOffset.set(x);
+ IntWrapper cOffset = new IntWrapper(0);
+ initValue = new IntWrapper(0);
+ codec.headlessUncompress(b, bOffset, len, c, cOffset, a.length, initValue);
+ Assert.assertArrayEquals(a, c);
+ }
+ }
- /**
- * a test
- */
@Test
public void biggerCompressedArray0() {
// No problem: for comparison.
@@ -102,12 +134,8 @@ public void biggerCompressedArray0() {
assertSymmetry(c, 0, 16384);
c = new Composition(new FastPFOR(), new VariableByte());
assertSymmetry(c, 0, 16384);
-
}
- /**
- * a test
- */
@Test
public void biggerCompressedArray1() {
// Compressed array is bigger than original, because of VariableByte.
@@ -115,9 +143,6 @@ public void biggerCompressedArray1() {
assertSymmetry(c, -1);
}
- /**
- * a test
- */
@Test
public void biggerCompressedArray2() {
// Compressed array is bigger than original, because of Composition.
diff --git a/src/test/java/me/lemire/integercompression/BasicTest.java b/src/test/java/me/lemire/integercompression/BasicTest.java
index b5f292e..51f90ee 100644
--- a/src/test/java/me/lemire/integercompression/BasicTest.java
+++ b/src/test/java/me/lemire/integercompression/BasicTest.java
@@ -17,6 +17,8 @@
import me.lemire.integercompression.differential.IntegratedVariableByte;
import me.lemire.integercompression.differential.XorBinaryPacking;
import me.lemire.integercompression.synth.ClusteredDataGenerator;
+import me.lemire.integercompression.vector.VectorBinaryPacking;
+import me.lemire.integercompression.vector.VectorFastPFOR;
import org.junit.Test;
@@ -43,40 +45,42 @@ public class BasicTest {
new Composition(new OptPFDS16(), new VariableByte()),
new Composition(new FastPFOR128(), new VariableByte()),
new Composition(new FastPFOR(), new VariableByte()),
+ new Composition(new VectorFastPFOR(), new VariableByte()),
+ new Composition(new VectorBinaryPacking(), new VariableByte()),
new Simple9(),
new Simple16(),
new GroupSimple9(),
new Composition(new XorBinaryPacking(), new VariableByte()),
new Composition(new DeltaZigzagBinaryPacking(),
- new DeltaZigzagVariableByte()) };
+ new DeltaZigzagVariableByte()) };
- /**
+ /**
* This tests with a compressed array with various offset
*/
- @Test
- public void saulTest() {
- for (IntegerCODEC C : codecs) {
- for (int x = 0; x < 50; ++x) {
- int[] a = { 2, 3, 4, 5 };
- int[] b = new int[90];
- int[] c = new int[a.length];
-
- IntWrapper aOffset = new IntWrapper(0);
- IntWrapper bOffset = new IntWrapper(x);
- C.compress(a, aOffset, a.length, b, bOffset);
- int len = bOffset.get() - x;
-
- bOffset.set(x);
- IntWrapper cOffset = new IntWrapper(0);
- C.uncompress(b, bOffset, len, c, cOffset);
- if(!Arrays.equals(a, c)) {
- System.out.println("Problem with "+C);
- }
- assertArrayEquals(a, c);
-
- }
- }
- }
+ @Test
+ public void saulTest() {
+ for (IntegerCODEC C : codecs) {
+ for (int x = 0; x < 50; ++x) {
+ int[] a = { 2, 3, 4, 5 };
+ int[] b = new int[90];
+ int[] c = new int[a.length];
+
+ IntWrapper aOffset = new IntWrapper(0);
+ IntWrapper bOffset = new IntWrapper(x);
+ C.compress(a, aOffset, a.length, b, bOffset);
+ int len = bOffset.get() - x;
+
+ bOffset.set(x);
+ IntWrapper cOffset = new IntWrapper(0);
+ C.uncompress(b, bOffset, len, c, cOffset);
+ if(!Arrays.equals(a, c)) {
+ System.out.println("Problem with "+C);
+ }
+ assertArrayEquals(a, c);
+
+ }
+ }
+ }
/**
*
*/
diff --git a/src/test/java/me/lemire/integercompression/ByteBasicTest.java b/src/test/java/me/lemire/integercompression/ByteBasicTest.java
index 93112c3..2b2d4f1 100644
--- a/src/test/java/me/lemire/integercompression/ByteBasicTest.java
+++ b/src/test/java/me/lemire/integercompression/ByteBasicTest.java
@@ -28,32 +28,32 @@ public class ByteBasicTest {
new IntegratedVariableByte(),
};
- /**
+ /**
*
*/
- @Test
- public void saulTest() {
- for (ByteIntegerCODEC C : codecs) {
- for (int x = 0; x < 50 * 4; ++x) {
- int[] a = { 2, 3, 4, 5 };
- byte[] b = new byte[90*4];
- int[] c = new int[a.length];
+ @Test
+ public void saulTest() {
+ for (ByteIntegerCODEC C : codecs) {
+ for (int x = 0; x < 50 * 4; ++x) {
+ int[] a = { 2, 3, 4, 5 };
+ byte[] b = new byte[90*4];
+ int[] c = new int[a.length];
- IntWrapper aOffset = new IntWrapper(0);
- IntWrapper bOffset = new IntWrapper(x);
- C.compress(a, aOffset, a.length, b, bOffset);
- int len = bOffset.get() - x;
+ IntWrapper aOffset = new IntWrapper(0);
+ IntWrapper bOffset = new IntWrapper(x);
+ C.compress(a, aOffset, a.length, b, bOffset);
+ int len = bOffset.get() - x;
- bOffset.set(x);
- IntWrapper cOffset = new IntWrapper(0);
- C.uncompress(b, bOffset, len, c, cOffset);
- if(!Arrays.equals(a, c)) {
- System.out.println("Problem with "+C);
- }
- assertArrayEquals(a, c);
- }
- }
- }
+ bOffset.set(x);
+ IntWrapper cOffset = new IntWrapper(0);
+ C.uncompress(b, bOffset, len, c, cOffset);
+ if(!Arrays.equals(a, c)) {
+ System.out.println("Problem with "+C);
+ }
+ assertArrayEquals(a, c);
+ }
+ }
+ }
/**
*
*/
diff --git a/src/test/java/me/lemire/integercompression/ExampleTest.java b/src/test/java/me/lemire/integercompression/ExampleTest.java
index f6038b8..c63c69b 100644
--- a/src/test/java/me/lemire/integercompression/ExampleTest.java
+++ b/src/test/java/me/lemire/integercompression/ExampleTest.java
@@ -17,305 +17,303 @@
*
*/
public class ExampleTest {
- /**
- *
- */
- @Test
-
- public void superSimpleExample() {
- IntegratedIntCompressor iic = new IntegratedIntCompressor();
- int[] data = new int[2342351];
- for (int k = 0; k < data.length; ++k)
- data[k] = k;
- System.out.println("Compressing " + data.length + " integers using friendly interface");
- int[] compressed = iic.compress(data);
- int[] recov = iic.uncompress(compressed);
- System.out
- .println("compressed from " + data.length * 4 / 1024 + "KB to " + compressed.length * 4 / 1024 + "KB");
- if (!Arrays.equals(recov, data))
- throw new RuntimeException("bug");
- }
-
- /**
- *
- */
- @Test
-
- public void basicExample() {
- int[] data = new int[2342351];
- System.out.println("Compressing " + data.length + " integers in one go");
- // data should be sorted for best
- // results
- for (int k = 0; k < data.length; ++k)
- data[k] = k;
- // Very important: the data is in sorted order!!! If not, you
- // will get very poor compression with IntegratedBinaryPacking,
- // you should use another CODEC.
-
- // next we compose a CODEC. Most of the processing
- // will be done with binary packing, and leftovers will
- // be processed using variable byte
- IntegratedIntegerCODEC codec = new IntegratedComposition(new IntegratedBinaryPacking(),
- new IntegratedVariableByte());
- // output vector should be large enough...
- int[] compressed = new int[data.length + 1024];
- // compressed might not be large enough in some cases
- // if you get java.lang.ArrayIndexOutOfBoundsException, try
- // allocating more memory
-
- /**
- *
- * compressing
- *
- */
- IntWrapper inputoffset = new IntWrapper(0);
- IntWrapper outputoffset = new IntWrapper(0);
- codec.compress(data, inputoffset, data.length, compressed, outputoffset);
- // got it!
- // inputoffset should be at data.length but outputoffset tells
- // us where we are...
- System.out.println(
- "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB");
- // we can repack the data: (optional)
- compressed = Arrays.copyOf(compressed, outputoffset.intValue());
-
- /**
- *
- * now uncompressing
- *
- * This assumes that we otherwise know how many integers have been
- * compressed. See basicExampleHeadless for a more general case.
- */
- int[] recovered = new int[data.length];
- IntWrapper recoffset = new IntWrapper(0);
- codec.uncompress(compressed, new IntWrapper(0), compressed.length, recovered, recoffset);
- if (Arrays.equals(data, recovered))
- System.out.println("data is recovered without loss");
- else
- throw new RuntimeException("bug"); // could use assert
- System.out.println();
- }
-
- /**
- * Like the basicExample, but we store the input array size manually.
- */
- @Test
- public void basicExampleHeadless() {
- int[] data = new int[2342351];
- System.out.println("Compressing " + data.length + " integers in one go using the headless approach");
- // data should be sorted for best
- // results
- for (int k = 0; k < data.length; ++k)
- data[k] = k;
- // Very important: the data is in sorted order!!! If not, you
- // will get very poor compression with IntegratedBinaryPacking,
- // you should use another CODEC.
-
- // next we compose a CODEC. Most of the processing
- // will be done with binary packing, and leftovers will
- // be processed using variable byte
- SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(),
- new IntegratedVariableByte());
- // output vector should be large enough...
- int[] compressed = new int[data.length + 1024];
- // compressed might not be large enough in some cases
- // if you get java.lang.ArrayIndexOutOfBoundsException, try
- // allocating more memory
-
- /**
- *
- * compressing
- *
- */
- IntWrapper inputoffset = new IntWrapper(0);
- IntWrapper outputoffset = new IntWrapper(1);
- compressed[0] = data.length; // we manually store how many integers we
- codec.headlessCompress(data, inputoffset, data.length, compressed, outputoffset, new IntWrapper(0));
- // got it!
- // inputoffset should be at data.length but outputoffset tells
- // us where we are...
- System.out.println(
- "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB");
- // we can repack the data: (optional)
- compressed = Arrays.copyOf(compressed, outputoffset.intValue());
-
- /**
- *
- * now uncompressing
- *
- */
- int howmany = compressed[0];// we manually stored the number of
- // compressed integers
- int[] recovered = new int[howmany];
- IntWrapper recoffset = new IntWrapper(0);
- codec.headlessUncompress(compressed, new IntWrapper(1), compressed.length, recovered, recoffset, howmany, new IntWrapper(0));
- if (Arrays.equals(data, recovered))
- System.out.println("data is recovered without loss");
- else
- throw new RuntimeException("bug"); // could use assert
- System.out.println();
- }
-
- /**
- * This is an example to show you can compress unsorted integers as long as
- * most are small.
- */
- @Test
- public void unsortedExample() {
- final int N = 1333333;
- int[] data = new int[N];
- // initialize the data (most will be small
- for (int k = 0; k < N; k += 1)
- data[k] = 3;
- // throw some larger values
- for (int k = 0; k < N; k += 5)
- data[k] = 100;
- for (int k = 0; k < N; k += 533)
- data[k] = 10000;
- int[] compressed = new int[N + 1024];// could need more
- IntegerCODEC codec = new Composition(new FastPFOR(), new VariableByte());
- // compressing
- IntWrapper inputoffset = new IntWrapper(0);
- IntWrapper outputoffset = new IntWrapper(0);
- codec.compress(data, inputoffset, data.length, compressed, outputoffset);
- System.out.println("compressed unsorted integers from " + data.length * 4 / 1024 + "KB to "
- + outputoffset.intValue() * 4 / 1024 + "KB");
- // we can repack the data: (optional)
- compressed = Arrays.copyOf(compressed, outputoffset.intValue());
-
- int[] recovered = new int[N];
- IntWrapper recoffset = new IntWrapper(0);
- codec.uncompress(compressed, new IntWrapper(0), compressed.length, recovered, recoffset);
- if (Arrays.equals(data, recovered))
- System.out.println("data is recovered without loss");
- else
- throw new RuntimeException("bug"); // could use assert
- System.out.println();
-
- }
-
- /**
- * This is like the basic example, but we show how to process larger arrays
- * in chunks.
- *
- * Some of this code was written by Pavel Klinov.
- */
- @Test
- public void advancedExample() {
- int TotalSize = 2342351; // some arbitrary number
- int ChunkSize = 16384; // size of each chunk, choose a multiple of 128
- System.out.println("Compressing " + TotalSize + " integers using chunks of " + ChunkSize + " integers ("
- + ChunkSize * 4 / 1024 + "KB)");
- System.out.println("(It is often better for applications to work in chunks fitting in CPU cache.)");
- int[] data = new int[TotalSize];
- // data should be sorted for best
- // results
- for (int k = 0; k < data.length; ++k)
- data[k] = k;
- // next we compose a CODEC. Most of the processing
- // will be done with binary packing, and leftovers will
- // be processed using variable byte, using variable byte
- // only for the last chunk!
- IntegratedIntegerCODEC regularcodec = new IntegratedBinaryPacking();
- IntegratedVariableByte ivb = new IntegratedVariableByte();
- IntegratedIntegerCODEC lastcodec = new IntegratedComposition(regularcodec, ivb);
- // output vector should be large enough...
- int[] compressed = new int[TotalSize + 1024];
-
- /**
- *
- * compressing
- *
- */
- IntWrapper inputoffset = new IntWrapper(0);
- IntWrapper outputoffset = new IntWrapper(0);
- for (int k = 0; k < TotalSize / ChunkSize; ++k)
- regularcodec.compress(data, inputoffset, ChunkSize, compressed, outputoffset);
- lastcodec.compress(data, inputoffset, TotalSize % ChunkSize, compressed, outputoffset);
- // got it!
- // inputoffset should be at data.length but outputoffset tells
- // us where we are...
- System.out.println(
- "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB");
- // we can repack the data:
- compressed = Arrays.copyOf(compressed, outputoffset.intValue());
-
- /**
- *
- * now uncompressing
- *
- * We are *not* assuming that the original array length is known,
- * however we assume that the chunk size (ChunkSize) is known.
- *
- */
- int[] recovered = new int[ChunkSize];
- IntWrapper compoff = new IntWrapper(0);
- IntWrapper recoffset;
- int currentpos = 0;
-
- while (compoff.get() < compressed.length) {
- recoffset = new IntWrapper(0);
- regularcodec.uncompress(compressed, compoff, compressed.length - compoff.get(), recovered, recoffset);
-
- if (recoffset.get() < ChunkSize) {// last chunk detected
- ivb.uncompress(compressed, compoff, compressed.length - compoff.get(), recovered, recoffset);
- }
- for (int i = 0; i < recoffset.get(); ++i) {
- if (data[currentpos + i] != recovered[i])
- throw new RuntimeException("bug"); // could use assert
- }
- currentpos += recoffset.get();
- }
- System.out.println("data is recovered without loss");
- System.out.println();
-
- }
-
- /**
- * Demo of the headless approach where we must supply the array length
- */
- @Test
- public void headlessDemo() {
- System.out.println("Compressing arrays with minimal header...");
- int[] uncompressed1 = { 1, 2, 1, 3, 1 };
- int[] uncompressed2 = { 3, 2, 4, 6, 1 };
-
- int[] compressed = new int[uncompressed1.length + uncompressed2.length + 1024];
-
- SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte());
-
- // compressing
- IntWrapper outPos = new IntWrapper();
-
- IntWrapper previous = new IntWrapper();
-
- codec.headlessCompress(uncompressed1, new IntWrapper(), uncompressed1.length, compressed, outPos);
- int length1 = outPos.get() - previous.get();
- previous = new IntWrapper(outPos.get());
- codec.headlessCompress(uncompressed2, new IntWrapper(), uncompressed2.length, compressed, outPos);
- int length2 = outPos.get() - previous.get();
-
- compressed = Arrays.copyOf(compressed, length1 + length2);
- System.out
- .println("compressed unsorted integers from " + uncompressed1.length * 4 + "B to " + length1 * 4 + "B");
- System.out
- .println("compressed unsorted integers from " + uncompressed2.length * 4 + "B to " + length2 * 4 + "B");
- System.out.println("Total compressed output " + compressed.length);
-
- int[] recovered1 = new int[uncompressed1.length];
- int[] recovered2 = new int[uncompressed1.length];
- IntWrapper inPos = new IntWrapper();
- System.out.println("Decoding first array starting at pos = " + inPos);
- codec.headlessUncompress(compressed, inPos, compressed.length, recovered1, new IntWrapper(0),
- uncompressed1.length);
- System.out.println("Decoding second array starting at pos = " + inPos);
- codec.headlessUncompress(compressed, inPos, compressed.length, recovered2, new IntWrapper(0),
- uncompressed2.length);
- if (!Arrays.equals(uncompressed1, recovered1))
- throw new RuntimeException("First array does not match.");
- if (!Arrays.equals(uncompressed2, recovered2))
- throw new RuntimeException("Second array does not match.");
- System.out.println("The arrays match, your code is probably ok.");
-
- }
+ /**
+ *
+ */
+ @Test
+
+ public void superSimpleExample() {
+ IntegratedIntCompressor iic = new IntegratedIntCompressor();
+ int[] data = new int[2342351];
+ for (int k = 0; k < data.length; ++k)
+ data[k] = k;
+ System.out.println("Compressing " + data.length + " integers using friendly interface");
+ int[] compressed = iic.compress(data);
+ int[] recov = iic.uncompress(compressed);
+ System.out
+ .println("compressed from " + data.length * 4 / 1024 + "KB to " + compressed.length * 4 / 1024 + "KB");
+ if (!Arrays.equals(recov, data))
+ throw new RuntimeException("bug");
+ }
+
+ /**
+ *
+ */
+ @Test
+
+ public void basicExample() {
+ int[] data = new int[2342351];
+ System.out.println("Compressing " + data.length + " integers in one go");
+ // data should be sorted for best
+ // results
+ for (int k = 0; k < data.length; ++k)
+ data[k] = k;
+ // Very important: the data is in sorted order!!! If not, you
+ // will get very poor compression with IntegratedBinaryPacking,
+ // you should use another CODEC.
+
+ // next we compose a CODEC. Most of the processing
+ // will be done with binary packing, and leftovers will
+ // be processed using variable byte
+ IntegratedIntegerCODEC codec = new IntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte());
+ // output vector should be large enough...
+ int[] compressed = new int[data.length + 1024];
+ // compressed might not be large enough in some cases
+ // if you get java.lang.ArrayIndexOutOfBoundsException, try
+ // allocating more memory
+
+ /**
+ *
+ * compressing
+ *
+ */
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(0);
+ codec.compress(data, inputoffset, data.length, compressed, outputoffset);
+ // got it!
+ // inputoffset should be at data.length but outputoffset tells
+ // us where we are...
+ System.out.println(
+ "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB");
+ // we can repack the data: (optional)
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ /**
+ *
+ * now uncompressing
+ *
+ * This assumes that we otherwise know how many integers have been
+ * compressed. See basicExampleHeadless for a more general case.
+ */
+ int[] recovered = new int[data.length];
+ IntWrapper recoffset = new IntWrapper(0);
+ codec.uncompress(compressed, new IntWrapper(0), compressed.length, recovered, recoffset);
+ if (Arrays.equals(data, recovered))
+ System.out.println("data is recovered without loss");
+ else
+ throw new RuntimeException("bug"); // could use assert
+ System.out.println();
+ }
+
+ /**
+ * Like the basicExample, but we store the input array size manually.
+ */
+ @Test
+ public void basicExampleHeadless() {
+ int[] data = new int[2342351];
+ System.out.println("Compressing " + data.length + " integers in one go using the headless approach");
+ // data should be sorted for best
+ // results
+ for (int k = 0; k < data.length; ++k)
+ data[k] = k;
+ // Very important: the data is in sorted order!!! If not, you
+ // will get very poor compression with IntegratedBinaryPacking,
+ // you should use another CODEC.
+
+ // next we compose a CODEC. Most of the processing
+ // will be done with binary packing, and leftovers will
+ // be processed using variable byte
+ SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte());
+ int[] compressed = new int[codec.maxHeadlessCompressedLength(new IntWrapper(0), data.length)];
+
+ /**
+ *
+ * compressing
+ *
+ */
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(1);
+ compressed[0] = data.length; // we manually store how many integers we
+ codec.headlessCompress(data, inputoffset, data.length, compressed, outputoffset, new IntWrapper(0));
+ // got it!
+ // inputoffset should be at data.length but outputoffset tells
+ // us where we are...
+ System.out.println(
+ "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB");
+ // we can repack the data: (optional)
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ /**
+ *
+ * now uncompressing
+ *
+ */
+ int howmany = compressed[0];// we manually stored the number of
+ // compressed integers
+ int[] recovered = new int[howmany];
+ IntWrapper recoffset = new IntWrapper(0);
+ codec.headlessUncompress(compressed, new IntWrapper(1), compressed.length, recovered, recoffset, howmany, new IntWrapper(0));
+ if (Arrays.equals(data, recovered))
+ System.out.println("data is recovered without loss");
+ else
+ throw new RuntimeException("bug"); // could use assert
+ System.out.println();
+ }
+
+ /**
+ * This is an example to show you can compress unsorted integers as long as
+ * most are small.
+ */
+ @Test
+ public void unsortedExample() {
+ final int N = 1333333;
+ int[] data = new int[N];
+ // initialize the data (most will be small
+ for (int k = 0; k < N; k += 1)
+ data[k] = 3;
+ // throw some larger values
+ for (int k = 0; k < N; k += 5)
+ data[k] = 100;
+ for (int k = 0; k < N; k += 533)
+ data[k] = 10000;
+ int[] compressed = new int[N + 1024];// could need more
+ IntegerCODEC codec = new Composition(new FastPFOR(), new VariableByte());
+ // compressing
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(0);
+ codec.compress(data, inputoffset, data.length, compressed, outputoffset);
+ System.out.println("compressed unsorted integers from " + data.length * 4 / 1024 + "KB to "
+ + outputoffset.intValue() * 4 / 1024 + "KB");
+ // we can repack the data: (optional)
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ int[] recovered = new int[N];
+ IntWrapper recoffset = new IntWrapper(0);
+ codec.uncompress(compressed, new IntWrapper(0), compressed.length, recovered, recoffset);
+ if (Arrays.equals(data, recovered))
+ System.out.println("data is recovered without loss");
+ else
+ throw new RuntimeException("bug"); // could use assert
+ System.out.println();
+
+ }
+
+ /**
+ * This is like the basic example, but we show how to process larger arrays
+ * in chunks.
+ *
+ * Some of this code was written by Pavel Klinov.
+ */
+ @Test
+ public void advancedExample() {
+ int TotalSize = 2342351; // some arbitrary number
+ int ChunkSize = 16384; // size of each chunk, choose a multiple of 128
+ System.out.println("Compressing " + TotalSize + " integers using chunks of " + ChunkSize + " integers ("
+ + ChunkSize * 4 / 1024 + "KB)");
+ System.out.println("(It is often better for applications to work in chunks fitting in CPU cache.)");
+ int[] data = new int[TotalSize];
+ // data should be sorted for best
+ // results
+ for (int k = 0; k < data.length; ++k)
+ data[k] = k;
+ // next we compose a CODEC. Most of the processing
+ // will be done with binary packing, and leftovers will
+ // be processed using variable byte, using variable byte
+ // only for the last chunk!
+ IntegratedIntegerCODEC regularcodec = new IntegratedBinaryPacking();
+ IntegratedVariableByte ivb = new IntegratedVariableByte();
+ IntegratedIntegerCODEC lastcodec = new IntegratedComposition(regularcodec, ivb);
+ // output vector should be large enough...
+ int[] compressed = new int[TotalSize + 1024];
+
+ /**
+ *
+ * compressing
+ *
+ */
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(0);
+ for (int k = 0; k < TotalSize / ChunkSize; ++k)
+ regularcodec.compress(data, inputoffset, ChunkSize, compressed, outputoffset);
+ lastcodec.compress(data, inputoffset, TotalSize % ChunkSize, compressed, outputoffset);
+ // got it!
+ // inputoffset should be at data.length but outputoffset tells
+ // us where we are...
+ System.out.println(
+ "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB");
+ // we can repack the data:
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ /**
+ *
+ * now uncompressing
+ *
+ * We are *not* assuming that the original array length is known,
+ * however we assume that the chunk size (ChunkSize) is known.
+ *
+ */
+ int[] recovered = new int[ChunkSize];
+ IntWrapper compoff = new IntWrapper(0);
+ IntWrapper recoffset;
+ int currentpos = 0;
+
+ while (compoff.get() < compressed.length) {
+ recoffset = new IntWrapper(0);
+ regularcodec.uncompress(compressed, compoff, compressed.length - compoff.get(), recovered, recoffset);
+
+ if (recoffset.get() < ChunkSize) {// last chunk detected
+ ivb.uncompress(compressed, compoff, compressed.length - compoff.get(), recovered, recoffset);
+ }
+ for (int i = 0; i < recoffset.get(); ++i) {
+ if (data[currentpos + i] != recovered[i])
+ throw new RuntimeException("bug"); // could use assert
+ }
+ currentpos += recoffset.get();
+ }
+ System.out.println("data is recovered without loss");
+ System.out.println();
+
+ }
+
+ /**
+ * Demo of the headless approach where we must supply the array length
+ */
+ @Test
+ public void headlessDemo() {
+ System.out.println("Compressing arrays with minimal header...");
+ int[] uncompressed1 = { 1, 2, 1, 3, 1 };
+ int[] uncompressed2 = { 3, 2, 4, 6, 1 };
+
+ SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte());
+
+ int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), uncompressed1.length)
+ + codec.maxHeadlessCompressedLength(new IntWrapper(0), uncompressed2.length);
+ int[] compressed = new int[maxCompressedLength];
+
+ // compressing
+ IntWrapper outPos = new IntWrapper();
+
+ IntWrapper previous = new IntWrapper();
+
+ codec.headlessCompress(uncompressed1, new IntWrapper(), uncompressed1.length, compressed, outPos);
+ int length1 = outPos.get() - previous.get();
+ previous = new IntWrapper(outPos.get());
+ codec.headlessCompress(uncompressed2, new IntWrapper(), uncompressed2.length, compressed, outPos);
+ int length2 = outPos.get() - previous.get();
+
+ compressed = Arrays.copyOf(compressed, length1 + length2);
+ System.out
+ .println("compressed unsorted integers from " + uncompressed1.length * 4 + "B to " + length1 * 4 + "B");
+ System.out
+ .println("compressed unsorted integers from " + uncompressed2.length * 4 + "B to " + length2 * 4 + "B");
+ System.out.println("Total compressed output " + compressed.length);
+
+ int[] recovered1 = new int[uncompressed1.length];
+ int[] recovered2 = new int[uncompressed1.length];
+ IntWrapper inPos = new IntWrapper();
+ System.out.println("Decoding first array starting at pos = " + inPos);
+ codec.headlessUncompress(compressed, inPos, compressed.length, recovered1, new IntWrapper(0),
+ uncompressed1.length);
+ System.out.println("Decoding second array starting at pos = " + inPos);
+ codec.headlessUncompress(compressed, inPos, compressed.length, recovered2, new IntWrapper(0),
+ uncompressed2.length);
+ if (!Arrays.equals(uncompressed1, recovered1))
+ throw new RuntimeException("First array does not match.");
+ if (!Arrays.equals(uncompressed2, recovered2))
+ throw new RuntimeException("Second array does not match.");
+ System.out.println("The arrays match, your code is probably ok.");
+
+ }
}
diff --git a/src/test/java/me/lemire/integercompression/ResourcedTest.java b/src/test/java/me/lemire/integercompression/ResourcedTest.java
index 34f1d05..8316129 100644
--- a/src/test/java/me/lemire/integercompression/ResourcedTest.java
+++ b/src/test/java/me/lemire/integercompression/ResourcedTest.java
@@ -24,65 +24,65 @@
*
*/
public class ResourcedTest {
- SkippableIntegerCODEC[] codecs = { new JustCopy(), new VariableByte(),
- new SkippableComposition(new BinaryPacking(), new VariableByte()),
- new SkippableComposition(new NewPFD(), new VariableByte()),
- new SkippableComposition(new NewPFDS9(), new VariableByte()),
- new SkippableComposition(new NewPFDS16(), new VariableByte()),
- new SkippableComposition(new OptPFD(), new VariableByte()),
- new SkippableComposition(new OptPFDS9(), new VariableByte()),
- new SkippableComposition(new OptPFDS16(), new VariableByte()),
- new SkippableComposition(new FastPFOR128(), new VariableByte()),
- new SkippableComposition(new FastPFOR(), new VariableByte()), new Simple9(), new Simple16() };
+ SkippableIntegerCODEC[] codecs = { new JustCopy(), new VariableByte(),
+ new SkippableComposition(new BinaryPacking(), new VariableByte()),
+ new SkippableComposition(new NewPFD(), new VariableByte()),
+ new SkippableComposition(new NewPFDS9(), new VariableByte()),
+ new SkippableComposition(new NewPFDS16(), new VariableByte()),
+ new SkippableComposition(new OptPFD(), new VariableByte()),
+ new SkippableComposition(new OptPFDS9(), new VariableByte()),
+ new SkippableComposition(new OptPFDS16(), new VariableByte()),
+ new SkippableComposition(new FastPFOR128(), new VariableByte()),
+ new SkippableComposition(new FastPFOR(), new VariableByte()), new Simple9(), new Simple16() };
- /**
- * @throws IOException
- * if the resource cannot be accessed (should be considered a
- * bug)
- *
- */
- @Test
- public void IntCompressorTest() throws IOException {
- // next line requires Java8?
- // int[] data =
- // Files.lines(Paths.get("integers.txt")).mapToInt(Integer::parseInt).toArray();
- File f = new File("src/test/resources/integers.txt");
- System.out.println("loading test data from "+ f.getAbsolutePath());
- BufferedReader bfr = new BufferedReader(new FileReader(f));
- String line;
- ArrayList ai = new ArrayList();
- while ((line = bfr.readLine()) != null) {
- ai.add(Integer.parseInt(line));
- }
- bfr.close();
- int[] data = new int[ai.size()];
- for (int k = 0; k < data.length; ++k)
- data[k] = ai.get(k).intValue();
- ai = null;
- // finally!
- {
- IntegratedIntCompressor iic = new IntegratedIntCompressor();
- int[] compressed = iic.compress(data);
- int[] recovered = iic.uncompress(compressed);
- Assert.assertArrayEquals(recovered, data);
- }
- for (SkippableIntegerCODEC C : codecs) {
- IntCompressor iic = new IntCompressor(C);
- int[] compressed = iic.compress(data);
- int[] recovered = iic.uncompress(compressed);
- Assert.assertArrayEquals(recovered, data);
+ /**
+ * @throws IOException
+ * if the resource cannot be accessed (should be considered a
+ * bug)
+ *
+ */
+ @Test
+ public void IntCompressorTest() throws IOException {
+ // next line requires Java8?
+ // int[] data =
+ // Files.lines(Paths.get("integers.txt")).mapToInt(Integer::parseInt).toArray();
+ File f = new File("src/test/resources/integers.txt");
+ System.out.println("loading test data from "+ f.getAbsolutePath());
+ BufferedReader bfr = new BufferedReader(new FileReader(f));
+ String line;
+ ArrayList ai = new ArrayList();
+ while ((line = bfr.readLine()) != null) {
+ ai.add(Integer.parseInt(line));
+ }
+ bfr.close();
+ int[] data = new int[ai.size()];
+ for (int k = 0; k < data.length; ++k)
+ data[k] = ai.get(k).intValue();
+ ai = null;
+ // finally!
+ {
+ IntegratedIntCompressor iic = new IntegratedIntCompressor();
+ int[] compressed = iic.compress(data);
+ int[] recovered = iic.uncompress(compressed);
+ Assert.assertArrayEquals(recovered, data);
+ }
+ for (SkippableIntegerCODEC C : codecs) {
+ IntCompressor iic = new IntCompressor(C);
+ int[] compressed = iic.compress(data);
+ int[] recovered = iic.uncompress(compressed);
+ Assert.assertArrayEquals(recovered, data);
- }
- for (SkippableIntegerCODEC C : codecs) {
- if (C instanceof SkippableIntegratedIntegerCODEC) {
- IntegratedIntCompressor iic = new IntegratedIntCompressor((SkippableIntegratedIntegerCODEC) C);
- int[] compressed = iic.compress(data);
- int[] recovered = iic.uncompress(compressed);
- Assert.assertArrayEquals(recovered, data);
- }
+ }
+ for (SkippableIntegerCODEC C : codecs) {
+ if (C instanceof SkippableIntegratedIntegerCODEC) {
+ IntegratedIntCompressor iic = new IntegratedIntCompressor((SkippableIntegratedIntegerCODEC) C);
+ int[] compressed = iic.compress(data);
+ int[] recovered = iic.uncompress(compressed);
+ Assert.assertArrayEquals(recovered, data);
+ }
- }
+ }
- }
+ }
}
diff --git a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java
index 93c1784..252cfea 100644
--- a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java
+++ b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java
@@ -9,8 +9,16 @@
import java.util.Arrays;
+import me.lemire.integercompression.differential.IntegratedBinaryPacking;
+import me.lemire.integercompression.differential.IntegratedVariableByte;
+import me.lemire.integercompression.differential.SkippableIntegratedComposition;
+import me.lemire.integercompression.differential.SkippableIntegratedIntegerCODEC;
+import me.lemire.integercompression.vector.VectorBinaryPacking;
+import me.lemire.integercompression.vector.VectorFastPFOR;
import org.junit.Test;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertTrue;
/**
* Just some basic sanity tests.
@@ -19,7 +27,7 @@
*/
@SuppressWarnings({ "static-method" })
public class SkippableBasicTest {
- final SkippableIntegerCODEC[] codecs = {
+ final SkippableIntegerCODEC[] codecs = {
new JustCopy(),
new VariableByte(),
new SkippableComposition(new BinaryPacking(), new VariableByte()),
@@ -31,6 +39,8 @@ public class SkippableBasicTest {
new SkippableComposition(new OptPFDS16(), new VariableByte()),
new SkippableComposition(new FastPFOR128(), new VariableByte()),
new SkippableComposition(new FastPFOR(), new VariableByte()),
+ new SkippableComposition(new VectorFastPFOR(), new VariableByte()),
+ new SkippableComposition(new VectorBinaryPacking(), new VariableByte()),
new Simple9(),
new Simple16() };
@@ -48,10 +58,11 @@ public void consistentTest() {
for (SkippableIntegerCODEC c : codecs) {
System.out.println("[SkippeableBasicTest.consistentTest] codec = "
+ c);
- int[] outBuf = new int[N + 1024];
for (int n = 0; n <= N; ++n) {
IntWrapper inPos = new IntWrapper();
IntWrapper outPos = new IntWrapper();
+ int[] outBuf = new int[c.maxHeadlessCompressedLength(new IntWrapper(0), n)];
+
c.headlessCompress(data, inPos, n, outBuf, outPos);
IntWrapper inPoso = new IntWrapper();
@@ -147,5 +158,137 @@ public void varyingLengthTest2() {
}
}
+ @Test
+ public void testMaxHeadlessCompressedLength() {
+ testMaxHeadlessCompressedLength(new IntegratedBinaryPacking(), 16 * IntegratedBinaryPacking.BLOCK_SIZE);
+ testMaxHeadlessCompressedLength(new IntegratedVariableByte(), 128);
+ testMaxHeadlessCompressedLength(new SkippableIntegratedComposition(new IntegratedBinaryPacking(), new IntegratedVariableByte()), 16 * IntegratedBinaryPacking.BLOCK_SIZE + 10);
+
+ testMaxHeadlessCompressedLength(new BinaryPacking(), 16 * BinaryPacking.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new VariableByte(), 128, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new BinaryPacking(), new VariableByte()), 16 * BinaryPacking.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new VectorBinaryPacking(), 4 * VectorBinaryPacking.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new VectorBinaryPacking(), new VariableByte()), 4 * VectorBinaryPacking.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new JustCopy(), 128, 32);
+ testMaxHeadlessCompressedLength(new Simple9(), 128, 28);
+ testMaxHeadlessCompressedLength(new Simple16(), 128, 28);
+ testMaxHeadlessCompressedLength(new GroupSimple9(), 128, 28);
+ testMaxHeadlessCompressedLength(new OptPFD(), 4 * OptPFD.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new OptPFD(), new VariableByte()), 4 * OptPFD.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new OptPFDS9(), 4 * OptPFDS9.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new OptPFDS9(), new VariableByte()), 4 * OptPFDS9.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new OptPFDS16(), 4 * OptPFDS16.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new OptPFDS9(), new VariableByte()), 4 * OptPFDS16.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new NewPFD(), 4 * NewPFD.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new NewPFD(), new VariableByte()), 4 * NewPFD.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new NewPFDS9(), 4 * NewPFDS9.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new NewPFDS9(), new VariableByte()), 4 * NewPFDS9.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new NewPFDS16(), 4 * NewPFDS16.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new NewPFDS16(), new VariableByte()), 4 * NewPFDS16.BLOCK_SIZE + 10, 32);
+
+ int fastPfor128PageSize = FastPFOR128.BLOCK_SIZE * 4; // smaller page size than the default to speed up the test
+ testMaxHeadlessCompressedLength(new FastPFOR128(fastPfor128PageSize), 2 * fastPfor128PageSize, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new FastPFOR128(fastPfor128PageSize), new VariableByte()), 2 * fastPfor128PageSize + 10, 32);
+ int fastPforPageSize = FastPFOR.BLOCK_SIZE * 4; // smaller page size than the default to speed up the test
+ testMaxHeadlessCompressedLength(new FastPFOR(fastPforPageSize), 2 * fastPforPageSize, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new FastPFOR(fastPforPageSize), new VariableByte()), 2 * fastPforPageSize + 10, 32);
+ }
+
+ private static void testMaxHeadlessCompressedLength(SkippableIntegratedIntegerCODEC codec, int inlengthTo) {
+ // We test the worst-case scenario by making all deltas and the initial value negative.
+ int delta = -1;
+ int value = delta;
+ for (int inlength = 0; inlength < inlengthTo; ++inlength) {
+ int[] input = new int[inlength];
+ for (int i = 0; i < inlength; i++) {
+ input[i] = value;
+ value += delta;
+ }
+
+ int maxOutputLength = codec.maxHeadlessCompressedLength(new IntWrapper(), inlength);
+ int[] output = new int[maxOutputLength];
+ IntWrapper outPos = new IntWrapper();
+
+ codec.headlessCompress(input, new IntWrapper(), inlength, output, outPos, new IntWrapper());
+ // If we reach this point, no exception was thrown, which means the calculated output length was sufficient.
+
+ assertTrue(maxOutputLength <= outPos.get() + 1); // +1 because SkippableIntegratedComposition always adds one extra integer for the potential header
+ }
+ }
+
+ private static void testMaxHeadlessCompressedLength(SkippableIntegerCODEC codec, int inlengthTo, int maxBitWidth) {
+ // Some schemes ignore bit widths between 21 and 31. Therefore, in addition to maxBitWidth - 1, we also test 20.
+ assertTrue(maxBitWidth >= 20);
+ int[] regularValueBitWidths = { 20, maxBitWidth - 1 };
+
+ for (int inlength = 0; inlength < inlengthTo; ++inlength) {
+ int[] input = new int[inlength];
+
+ int maxOutputLength = codec.maxHeadlessCompressedLength(new IntWrapper(), inlength);
+ int[] output = new int[maxOutputLength];
+
+ for (int exceptionCount = 0; exceptionCount < inlength; exceptionCount++) {
+ int exception = maxBitWidth == 32 ? -1 : (1 << maxBitWidth) - 1;
+
+ for (int regularValueBitWidth : regularValueBitWidths) {
+ int regularValue = regularValueBitWidth == 32 ? -1 : (1 << regularValueBitWidth) - 1;
+
+ Arrays.fill(input, 0, exceptionCount, exception);
+ Arrays.fill(input, exceptionCount, input.length, regularValue);
+
+ codec.headlessCompress(input, new IntWrapper(), inlength, output, new IntWrapper());
+ // If we reach this point, no exception was thrown, which means the calculated output length was sufficient.
+ }
+ }
+ }
+ }
+
+ @Test
+ public void testUncompressOutputOffset_SkippableComposition() {
+ for (int offset : new int[] {0, 1, 6}) {
+ SkippableComposition codec = new SkippableComposition(new BinaryPacking(), new VariableByte());
+
+ int[] input = { 2, 3, 4, 5 };
+ int[] compressed = new int[codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length)];
+ int[] uncompressed = new int[offset + input.length];
+
+ IntWrapper inputOffset = new IntWrapper(0);
+ IntWrapper compressedOffset = new IntWrapper(0);
+
+ codec.headlessCompress(input, inputOffset, input.length, compressed, compressedOffset);
+
+ int compressedLength = compressedOffset.get();
+ IntWrapper uncompressedOffset = new IntWrapper(offset);
+ compressedOffset = new IntWrapper(0);
+ codec.headlessUncompress(compressed, compressedOffset, compressedLength, uncompressed, uncompressedOffset, input.length);
+
+ assertArrayEquals(input, Arrays.copyOfRange(uncompressed, offset, offset + input.length));
+ }
+ }
+
+ @Test
+ public void testUncompressOutputOffset_SkippableIntegratedComposition() {
+ for (int offset : new int[] {0, 1, 6}) {
+ SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), new IntegratedVariableByte());
+
+ int[] input = { 2, 3, 4, 5 };
+ int[] compressed = new int[codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length)];
+ int[] uncompressed = new int[offset + input.length];
+
+ IntWrapper inputOffset = new IntWrapper(0);
+ IntWrapper compressedOffset = new IntWrapper(0);
+ IntWrapper initValue = new IntWrapper(0);
+
+ codec.headlessCompress(input, inputOffset, input.length, compressed, compressedOffset, initValue);
+
+ int compressedLength = compressedOffset.get();
+ IntWrapper uncompressedOffset = new IntWrapper(offset);
+ compressedOffset = new IntWrapper(0);
+ initValue = new IntWrapper(0);
+ codec.headlessUncompress(compressed, compressedOffset, compressedLength, uncompressed, uncompressedOffset, input.length, initValue);
+
+ assertArrayEquals(input, Arrays.copyOfRange(uncompressed, offset, offset + input.length));
+ }
+ }
}
diff --git a/src/test/java/me/lemire/integercompression/TestUtils.java b/src/test/java/me/lemire/integercompression/TestUtils.java
index 7ce51b3..b3cbff3 100644
--- a/src/test/java/me/lemire/integercompression/TestUtils.java
+++ b/src/test/java/me/lemire/integercompression/TestUtils.java
@@ -165,7 +165,7 @@ protected static int[] uncompress(ByteIntegerCODEC codec, byte[] data, int len)
}
protected static int[] compressHeadless(SkippableIntegerCODEC codec, int[] data) {
- int[] outBuf = new int[data.length * 4];
+ int[] outBuf = new int[codec.maxHeadlessCompressedLength(new IntWrapper(0), data.length)];
IntWrapper inPos = new IntWrapper();
IntWrapper outPos = new IntWrapper();
codec.headlessCompress(data, inPos, data.length, outBuf, outPos);
diff --git a/src/test/java/me/lemire/integercompression/vector/VectorBinaryPackingTest.java b/src/test/java/me/lemire/integercompression/vector/VectorBinaryPackingTest.java
new file mode 100644
index 0000000..2746b11
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/vector/VectorBinaryPackingTest.java
@@ -0,0 +1,48 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.vector;
+
+import static org.junit.Assert.assertArrayEquals;
+
+import org.junit.Test;
+
+import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.vector.VectorBitPackerKernels.LaneWidth;
+
+/**
+ * Tests for the vectorized BinaryPacking codec.
+ */
+public class VectorBinaryPackingTest {
+
+ /** Every lane width packs and unpacks back to the original values. */
+ @Test
+ public void roundTripAcrossLaneWidths() {
+ for (LaneWidth laneWidth : LaneWidth.values()) {
+ roundTrip(new VectorBinaryPacking(laneWidth));
+ }
+ }
+
+ private static void roundTrip(VectorBinaryPacking codec) {
+ int[] data = new int[3 * VectorBinaryPacking.BLOCK_SIZE];
+ for (int i = 0; i < data.length; i++) {
+ data[i] = i % 8; // mix of bit widths across blocks
+ }
+ data[5] = 1 << 20;
+ data[600] = 1 << 30;
+
+ int[] compressed = new int[2 * data.length];
+ IntWrapper inpos = new IntWrapper(0);
+ IntWrapper outpos = new IntWrapper(0);
+ codec.headlessCompress(data, inpos, data.length, compressed, outpos);
+
+ int[] recovered = new int[data.length];
+ codec.headlessUncompress(compressed, new IntWrapper(0), outpos.get(),
+ recovered, new IntWrapper(0), data.length);
+
+ assertArrayEquals(data, recovered);
+ }
+}
diff --git a/src/test/java/me/lemire/integercompression/vector/VectorBitPackerTest.java b/src/test/java/me/lemire/integercompression/vector/VectorBitPackerTest.java
new file mode 100644
index 0000000..6640890
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/vector/VectorBitPackerTest.java
@@ -0,0 +1,73 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.vector;
+
+import static org.junit.Assert.assertArrayEquals;
+
+import java.util.Random;
+
+import org.junit.Test;
+
+/**
+ * Tests for the width-specific bit-packing kernels.
+ *
+ * VectorBitPacker (256/512-bit lanes), VectorBitPacker256 (256-bit lanes) and
+ * VectorBitPacker128 (128-bit lanes) use different lane strides, so their packed
+ * layouts differ and are not wire-compatible. Each must satisfy the same
+ * roundtrip contract: packing a 256-integer block whose values fit in b bits and
+ * unpacking it recovers the input for every width b.
+ */
+public class VectorBitPackerTest {
+
+ private static final int BLOCK_SIZE = 256;
+
+ private static int[] randomBlock(Random random, int b) {
+ int mask = b == 32 ? -1 : (1 << b) - 1;
+ int[] in = new int[BLOCK_SIZE];
+ for (int i = 0; i < BLOCK_SIZE; i++) {
+ in[i] = random.nextInt() & mask;
+ }
+ return in;
+ }
+
+ private static void roundTrip(VectorBitPackerKernels packer) {
+ Random random = new Random(42);
+ for (int b = 1; b <= 32; b++) {
+ int[] in = randomBlock(random, b);
+
+ int[] packed = new int[8 * b];
+ packer.fastpack(in, 0, packed, 0, b);
+ int[] recovered = new int[BLOCK_SIZE];
+ packer.fastunpack(packed, 0, recovered, 0, b);
+ assertArrayEquals("fastpack b=" + b, in, recovered);
+
+ int[] packedNoMask = new int[8 * b];
+ packer.fastpackNoMask(in, 0, packedNoMask, 0, b);
+ int[] recoveredNoMask = new int[BLOCK_SIZE];
+ packer.fastunpack(packedNoMask, 0, recoveredNoMask, 0, b);
+ assertArrayEquals("fastpackNoMask b=" + b, in, recoveredNoMask);
+
+ assertArrayEquals("fastpack vs fastpackNoMask b=" + b, packed,
+ packedNoMask);
+ }
+ }
+
+ @Test
+ public void vectorBitPacker128RoundTrip() {
+ roundTrip(new VectorBitPacker128());
+ }
+
+ @Test
+ public void vectorBitPacker256RoundTrip() {
+ roundTrip(new VectorBitPacker256());
+ }
+
+ @Test
+ public void vectorBitPackerRoundTrip() {
+ roundTrip(new VectorBitPacker());
+ }
+}
diff --git a/src/test/java/me/lemire/integercompression/vector/VectorFastPFORTest.java b/src/test/java/me/lemire/integercompression/vector/VectorFastPFORTest.java
new file mode 100644
index 0000000..e222c09
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/vector/VectorFastPFORTest.java
@@ -0,0 +1,88 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.vector;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertThrows;
+
+import java.util.Arrays;
+
+import org.junit.Test;
+
+import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.vector.VectorBitPackerKernels.LaneWidth;
+
+/**
+ * Tests for the vectorized FastPFOR codec.
+ */
+public class VectorFastPFORTest {
+
+ /**
+ * A few exceptions in a single block leave a sub-block remainder that is
+ * packed with slowpack, which OR-accumulates into the output. Compressing
+ * into a non-zero buffer must still produce a clean roundtrip.
+ */
+ @Test
+ public void dirtyOutputBufferRoundTrip() {
+ int[] data = new int[VectorFastPFOR.BLOCK_SIZE];
+ for (int i = 0; i < data.length; i++) {
+ data[i] = i % 8; // base values fit in 3 bits
+ }
+ data[5] = 1 << 20; // exceptions sharing one width, count not a multiple
+ data[200] = 1 << 20; // of BLOCK_SIZE, so the remainder goes through slowpack
+
+ VectorFastPFOR codec = new VectorFastPFOR();
+ int[] compressed = new int[2 * data.length];
+ Arrays.fill(compressed, -1); // stale bits the slowpack remainder must overwrite
+ IntWrapper inpos = new IntWrapper(0);
+ IntWrapper outpos = new IntWrapper(0);
+ codec.headlessCompress(data, inpos, data.length, compressed, outpos);
+
+ int[] recovered = new int[data.length];
+ codec.headlessUncompress(compressed, new IntWrapper(0), outpos.get(),
+ recovered, new IntWrapper(0), data.length);
+
+ assertArrayEquals(data, recovered);
+ }
+
+ /** A stream packed for wider lanes than the host runs natively is refused. */
+ @Test
+ public void checkDecodableRejectsWiderStream() {
+ assertThrows(IllegalStateException.class,
+ () -> VectorFastPFOR.checkDecodable(LaneWidth.BITS_256, LaneWidth.BITS_128));
+ assertThrows(IllegalStateException.class,
+ () -> VectorFastPFOR.checkDecodable(LaneWidth.BITS_512, LaneWidth.BITS_256));
+ // equal or narrower stream decodes natively
+ VectorFastPFOR.checkDecodable(LaneWidth.BITS_128, LaneWidth.BITS_128);
+ VectorFastPFOR.checkDecodable(LaneWidth.BITS_128, LaneWidth.BITS_512);
+ VectorFastPFOR.checkDecodable(LaneWidth.BITS_256, LaneWidth.BITS_512);
+ }
+
+ /** 128-bit lanes are the universal floor, so such a stream decodes on any host. */
+ @Test
+ public void lowestCommonWidthRoundTripsOnAnyHost() {
+ int[] data = new int[3 * VectorFastPFOR.BLOCK_SIZE];
+ for (int i = 0; i < data.length; i++) {
+ data[i] = i % 8;
+ }
+ data[5] = 1 << 20;
+ data[600] = 1 << 25;
+
+ VectorFastPFOR codec =
+ new VectorFastPFOR(VectorFastPFOR.DEFAULT_PAGE_SIZE, LaneWidth.BITS_128);
+ int[] compressed = new int[2 * data.length];
+ IntWrapper inpos = new IntWrapper(0);
+ IntWrapper outpos = new IntWrapper(0);
+ codec.headlessCompress(data, inpos, data.length, compressed, outpos);
+
+ int[] recovered = new int[data.length];
+ codec.headlessUncompress(compressed, new IntWrapper(0), outpos.get(),
+ recovered, new IntWrapper(0), data.length);
+
+ assertArrayEquals(data, recovered);
+ }
+}
diff --git a/src/test/java/me/lemire/longcompression/LongBasicTest.java b/src/test/java/me/lemire/longcompression/LongBasicTest.java
index 1963246..8dc0c9b 100644
--- a/src/test/java/me/lemire/longcompression/LongBasicTest.java
+++ b/src/test/java/me/lemire/longcompression/LongBasicTest.java
@@ -34,33 +34,33 @@ public class LongBasicTest {
new LongComposition(new LongBinaryPacking(), new LongVariableByte()),
};
- /**
+ /**
* This tests with a compressed array with various offset
*/
- @Test
- public void saulTest() {
- for (LongCODEC C : codecs) {
- for (int x = 0; x < 50; ++x) {
- long[] a = { 2, 3, 4, 5 };
- long[] b = new long[90];
- long[] c = new long[a.length];
-
- IntWrapper aOffset = new IntWrapper(0);
- IntWrapper bOffset = new IntWrapper(x);
- C.compress(a, aOffset, a.length, b, bOffset);
- int len = bOffset.get() - x;
-
- bOffset.set(x);
- IntWrapper cOffset = new IntWrapper(0);
- C.uncompress(b, bOffset, len, c, cOffset);
- if(!Arrays.equals(a, c)) {
- System.out.println("Problem with "+C);
- }
- assertArrayEquals(a, c);
-
- }
- }
- }
+ @Test
+ public void saulTest() {
+ for (LongCODEC C : codecs) {
+ for (int x = 0; x < 50; ++x) {
+ long[] a = { 2, 3, 4, 5 };
+ long[] b = new long[90];
+ long[] c = new long[a.length];
+
+ IntWrapper aOffset = new IntWrapper(0);
+ IntWrapper bOffset = new IntWrapper(x);
+ C.compress(a, aOffset, a.length, b, bOffset);
+ int len = bOffset.get() - x;
+
+ bOffset.set(x);
+ IntWrapper cOffset = new IntWrapper(0);
+ C.uncompress(b, bOffset, len, c, cOffset);
+ if(!Arrays.equals(a, c)) {
+ System.out.println("Problem with "+C);
+ }
+ assertArrayEquals(a, c);
+
+ }
+ }
+ }
/**
*
*/
@@ -159,16 +159,16 @@ public void varyingLengthTest2() {
@Test
public void checkVariousCases() {
for (LongCODEC c : codecs) {
- testZeroInZeroOut(c);
- test(c, c, 5, 10);
- test(c, c, 5, 14);
- test(c, c, 2, 18);
- // TODO Unclear which codec should manage an empty output array or not
- // Some IntegerCodec does not output anything if the input is smaller than some block size
- // testSpurious(c);
- testUnsorted(c);
- testUnsorted2(c);
- testUnsorted3(c);
+ testZeroInZeroOut(c);
+ test(c, c, 5, 10);
+ test(c, c, 5, 14);
+ test(c, c, 2, 18);
+ // TODO Unclear which codec should manage an empty output array or not
+ // Some IntegerCodec does not output anything if the input is smaller than some block size
+ // testSpurious(c);
+ testUnsorted(c);
+ testUnsorted2(c);
+ testUnsorted3(c);
}
}
@@ -265,7 +265,7 @@ private static void testCodec(LongCODEC c, LongCODEC co,
buffer[0] = backupdata[0];
co.uncompress(dataout, inpos, thiscompsize - 1, buffer, outpos);
if (!(c instanceof IntegratedLongCODEC))
- LongDelta.fastinverseDelta(buffer);
+ LongDelta.fastinverseDelta(buffer);
// Check assertions.
assertEquals("length is not match", outpos.get(), data[k].length);
@@ -373,19 +373,19 @@ public void fastPforTest() {
@Test
public void fastPfor128Test() {
// proposed by Stefan Ackermann (https://github.com/Stivo)
- for (LongCODEC codec : codecs) {
- int N = FastPFOR128.BLOCK_SIZE;
- long[] data = new long[N];
- for (int i = 0; i < N; i++)
- data[i] = 0;
- data[126] = -1;
- long[] comp = LongTestUtils.compress(codec, Arrays.copyOf(data, N));
- long[] answer = LongTestUtils.uncompress(codec, comp, N);
- for (int k = 0; k < N; ++k)
- if (answer[k] != data[k])
- throw new RuntimeException("bug " + k + " " + answer[k]
- + " != " + data[k]);
- }
+ for (LongCODEC codec : codecs) {
+ int N = FastPFOR128.BLOCK_SIZE;
+ long[] data = new long[N];
+ for (int i = 0; i < N; i++)
+ data[i] = 0;
+ data[126] = -1;
+ long[] comp = LongTestUtils.compress(codec, Arrays.copyOf(data, N));
+ long[] answer = LongTestUtils.uncompress(codec, comp, N);
+ for (int k = 0; k < N; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug " + k + " " + answer[k]
+ + " != " + data[k]);
+ }
}
}
diff --git a/src/test/java/me/lemire/longcompression/LongDeltaTest.java b/src/test/java/me/lemire/longcompression/LongDeltaTest.java
new file mode 100644
index 0000000..bfa1e6f
--- /dev/null
+++ b/src/test/java/me/lemire/longcompression/LongDeltaTest.java
@@ -0,0 +1,23 @@
+package me.lemire.longcompression;
+
+import me.lemire.longcompression.differential.LongDelta;
+import org.junit.Test;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class LongDeltaTest {
+ @Test
+ public void testEmptyArrayFastInverseDelta() {
+ LongCompressor compressor = new LongCompressor();
+ long[] input = new long[0];
+
+ LongDelta.delta(input);
+ long[] compressed = compressor.compress(input);
+ long[] result = compressor.uncompress(compressed);
+ LongDelta.fastinverseDelta(result);
+
+ assertNotNull(result);
+ assertArrayEquals(input, result);
+ }
+}
diff --git a/src/test/java/me/lemire/longcompression/LongTestUtils.java b/src/test/java/me/lemire/longcompression/LongTestUtils.java
index a44e665..b7d9c63 100644
--- a/src/test/java/me/lemire/longcompression/LongTestUtils.java
+++ b/src/test/java/me/lemire/longcompression/LongTestUtils.java
@@ -111,7 +111,7 @@ protected static long[] uncompress(ByteLongCODEC codec, byte[] data, int len) {
}
protected static long[] compressHeadless(SkippableLongCODEC codec, long[] data) {
- long[] outBuf = new long[data.length * 4];
+ long[] outBuf = new long[codec.maxHeadlessCompressedLength(new IntWrapper(0), data.length)];
IntWrapper inPos = new IntWrapper();
IntWrapper outPos = new IntWrapper();
codec.headlessCompress(data, inPos, data.length, outBuf, outPos);
@@ -127,7 +127,7 @@ protected static long[] uncompressHeadless(SkippableLongCODEC codec, long[] data
return Arrays.copyOf(outBuf, outPos.get());
}
- public static String longToBinaryWithLeading(long l) {
- return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0');
- }
+ public static String longToBinaryWithLeading(long l) {
+ return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0');
+ }
}
diff --git a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java
index 24cb712..c4b7e01 100644
--- a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java
+++ b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java
@@ -15,6 +15,8 @@
import me.lemire.integercompression.TestUtils;
import me.lemire.integercompression.VariableByte;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertTrue;
/**
* Just some basic sanity tests.
@@ -42,10 +44,11 @@ public void consistentTest() {
for (SkippableLongCODEC c : codecs) {
System.out.println("[SkippeableBasicTest.consistentTest] codec = "
+ c);
- long[] outBuf = new long[N + 1024];
for (int n = 0; n <= N; ++n) {
IntWrapper inPos = new IntWrapper();
IntWrapper outPos = new IntWrapper();
+ long[] outBuf = new long[c.maxHeadlessCompressedLength(new IntWrapper(0), n)];
+
c.headlessCompress(data, inPos, n, outBuf, outPos);
IntWrapper inPoso = new IntWrapper();
@@ -79,15 +82,15 @@ public void varyingLengthTest() {
for (SkippableLongCODEC c : codecs) {
System.out.println("[SkippeableBasicTest.varyingLengthTest] codec = "+c);
for (int L = 1; L <= 128; L++) {
- long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L));
- long[] answer = LongTestUtils.uncompressHeadless(c, comp, L);
+ long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L));
+ long[] answer = LongTestUtils.uncompressHeadless(c, comp, L);
for (int k = 0; k < L; ++k)
if (answer[k] != data[k])
throw new RuntimeException("bug "+c.toString()+" "+k+" "+answer[k]+" "+data[k]);
}
for (int L = 128; L <= N; L *= 2) {
- long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L));
- long[] answer = LongTestUtils.uncompressHeadless(c, comp, L);
+ long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L));
+ long[] answer = LongTestUtils.uncompressHeadless(c, comp, L);
for (int k = 0; k < L; ++k)
if (answer[k] != data[k])
throw new RuntimeException("bug");
@@ -124,16 +127,16 @@ public void varyingLengthTest2() {
e.printStackTrace();
}
for (int L = 1; L <= 128; L++) {
- long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L));
- long[] answer = LongTestUtils.uncompressHeadless(c, comp, L);
+ long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L));
+ long[] answer = LongTestUtils.uncompressHeadless(c, comp, L);
for (int k = 0; k < L; ++k)
if (answer[k] != data[k]) {
- throw new RuntimeException("L=" + L + ": bug at k = "+k+" "+answer[k]+" "+data[k]+" for "+c.toString());
+ throw new RuntimeException("L=" + L + ": bug at k = "+k+" "+answer[k]+" "+data[k]+" for "+c.toString());
}
}
for (int L = 128; L <= N; L *= 2) {
- long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L));
- long[] answer = LongTestUtils.uncompressHeadless(c, comp, L);
+ long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L));
+ long[] answer = LongTestUtils.uncompressHeadless(c, comp, L);
for (int k = 0; k < L; ++k)
if (answer[k] != data[k])
throw new RuntimeException("bug");
@@ -142,5 +145,50 @@ public void varyingLengthTest2() {
}
}
+ @Test
+ public void testMaxHeadlessCompressedLength() {
+ testMaxHeadlessCompressedLength(new LongJustCopy(), 128);
+ testMaxHeadlessCompressedLength(new LongBinaryPacking(), 16 * LongBinaryPacking.BLOCK_SIZE);
+ testMaxHeadlessCompressedLength(new LongVariableByte(), 128);
+ testMaxHeadlessCompressedLength(new SkippableLongComposition(new LongBinaryPacking(), new LongVariableByte()), 16 * LongBinaryPacking.BLOCK_SIZE + 10);
+ }
+
+ private static void testMaxHeadlessCompressedLength(SkippableLongCODEC codec, int inlengthTo) {
+ for (int inlength = 0; inlength < inlengthTo; ++inlength) {
+ long[] input = new long[inlength];
+ Arrays.fill(input, -1L);
+
+ int maxOutputLength = codec.maxHeadlessCompressedLength(new IntWrapper(), inlength);
+ long[] output = new long[maxOutputLength];
+ IntWrapper outPos = new IntWrapper();
+
+ codec.headlessCompress(input, new IntWrapper(), inlength, output, outPos);
+ // If we reach this point, no exception was thrown, which means the calculated output length was sufficient.
+
+ assertTrue(maxOutputLength <= outPos.get() + 1); // +1 because SkippableLongComposition always adds one extra integer for the potential header
+ }
+ }
+ @Test
+ public void testUncompressOutputOffset_SkippableLongComposition() {
+ for (int offset : new int[] {0, 1, 6}) {
+ SkippableLongComposition codec = new SkippableLongComposition(new LongBinaryPacking(), new LongVariableByte());
+
+ long[] input = { 2, 3, 4, 5 };
+ long[] compressed = new long[codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length)];
+ long[] uncompressed = new long[offset + input.length];
+
+ IntWrapper inputOffset = new IntWrapper(0);
+ IntWrapper compressedOffset = new IntWrapper(0);
+
+ codec.headlessCompress(input, inputOffset, input.length, compressed, compressedOffset);
+
+ int compressedLength = compressedOffset.get();
+ IntWrapper uncompressedOffset = new IntWrapper(offset);
+ compressedOffset = new IntWrapper(0);
+ codec.headlessUncompress(compressed, compressedOffset, compressedLength, uncompressed, uncompressedOffset, input.length);
+
+ assertArrayEquals(input, Arrays.copyOfRange(uncompressed, offset, offset + input.length));
+ }
+ }
}
diff --git a/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java b/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java
index 5b8014e..bddff2a 100644
--- a/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java
+++ b/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java
@@ -23,9 +23,9 @@ public LongCODEC getCodec() {
return codec;
}
- @Test
- public void testCodec_intermediateHighPowerOfTwo() {
- Assert.assertEquals(3, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length);
- }
+ @Test
+ public void testCodec_intermediateHighPowerOfTwo() {
+ Assert.assertEquals(3, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length);
+ }
}
diff --git a/src/test/java/me/lemire/longcompression/TestLongBitPacking.java b/src/test/java/me/lemire/longcompression/TestLongBitPacking.java
new file mode 100644
index 0000000..a713faa
--- /dev/null
+++ b/src/test/java/me/lemire/longcompression/TestLongBitPacking.java
@@ -0,0 +1,140 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.Random;
+
+import org.junit.Test;
+
+/**
+ * Validates the unrolled {@link LongBitPacking} kernels.
+ */
+public class TestLongBitPacking {
+
+ private static final int BLOCK = 64;
+ private static final int TRIALS = 64;
+
+ private static long[] randomBlock(Random random, int bit) {
+ long mask;
+ if (bit == 64) {
+ mask = -1L;
+ } else {
+ mask = (1L << bit) - 1;
+ }
+ long[] data = new long[BLOCK];
+ for (int i = 0; i < BLOCK; i++) {
+ data[i] = random.nextLong() & mask;
+ }
+ return data;
+ }
+
+ @Test
+ public void roundTrip() {
+ Random random = new Random(0);
+ for (int bit = 0; bit <= 64; bit++) {
+ for (int trial = 0; trial < TRIALS; trial++) {
+ long[] data = randomBlock(random, bit);
+ long[] packed = new long[bit];
+ LongBitPacking.fastpackwithoutmask(data, 0, packed, 0, bit);
+ long[] unpacked = new long[BLOCK];
+ LongBitPacking.fastunpack(packed, 0, unpacked, 0, bit);
+ assertArrayEquals("bit width " + bit, data, unpacked);
+ }
+ }
+ }
+
+ @Test
+ public void layoutMatchesSlowPack() {
+ Random random = new Random(1);
+ for (int bit = 1; bit < 64; bit++) {
+ for (int trial = 0; trial < TRIALS; trial++) {
+ long[] data = randomBlock(random, bit);
+ long[] fast = new long[bit];
+ long[] slow = new long[bit];
+ LongBitPacking.fastpackwithoutmask(data, 0, fast, 0, bit);
+ LongBitPacking.slowpackwithoutmask(data, 0, slow, 0, bit);
+ assertArrayEquals("bit width " + bit, slow, fast);
+ }
+ }
+ }
+
+ @Test
+ public void layoutMatchesSlowUnpack() {
+ Random random = new Random(2);
+ for (int bit = 1; bit < 64; bit++) {
+ for (int trial = 0; trial < TRIALS; trial++) {
+ long[] data = randomBlock(random, bit);
+ long[] packed = new long[bit];
+ LongBitPacking.slowpackwithoutmask(data, 0, packed, 0, bit);
+ long[] fast = new long[BLOCK];
+ long[] slow = new long[BLOCK];
+ LongBitPacking.fastunpack(packed, 0, fast, 0, bit);
+ LongBitPacking.slowunpack(packed, 0, slow, 0, bit);
+ assertArrayEquals("bit width " + bit, slow, fast);
+ }
+ }
+ }
+
+ @Test
+ public void extremeValues() {
+ for (int bit = 0; bit <= 64; bit++) {
+ long mask;
+ if (bit == 64) {
+ mask = -1L;
+ } else {
+ mask = (1L << bit) - 1;
+ }
+ long[] data = new long[BLOCK];
+ Arrays.fill(data, mask);
+ long[] packed = new long[bit];
+ LongBitPacking.fastpackwithoutmask(data, 0, packed, 0, bit);
+ long[] unpacked = new long[BLOCK];
+ LongBitPacking.fastunpack(packed, 0, unpacked, 0, bit);
+ assertArrayEquals("bit width " + bit, data, unpacked);
+ if (bit > 0 && bit < 64) {
+ long[] slow = new long[bit];
+ LongBitPacking.slowpackwithoutmask(data, 0, slow, 0, bit);
+ assertArrayEquals("bit width " + bit, slow, packed);
+ }
+ }
+ }
+
+ @Test
+ public void roundTripWithOffsets() {
+ Random random = new Random(3);
+ int inOffset = 7;
+ int outOffset = 5;
+ long sentinel = 0x5555555555555555L;
+ for (int bit = 0; bit <= 64; bit++) {
+ long[] data = randomBlock(random, bit);
+ long[] in = new long[BLOCK + inOffset];
+ System.arraycopy(data, 0, in, inOffset, BLOCK);
+ long[] packed = new long[bit + outOffset];
+ Arrays.fill(packed, 0, outOffset, sentinel);
+ LongBitPacking.fastpackwithoutmask(in, inOffset, packed, outOffset, bit);
+ long[] unpacked = new long[BLOCK + inOffset];
+ Arrays.fill(unpacked, 0, inOffset, sentinel);
+ LongBitPacking.fastunpack(packed, outOffset, unpacked, inOffset, bit);
+ long[] result = new long[BLOCK];
+ System.arraycopy(unpacked, inOffset, result, 0, BLOCK);
+ assertArrayEquals("bit width " + bit, data, result);
+ for (int i = 0; i < outOffset; i++) {
+ assertEquals("pack wrote before outpos at bit " + bit,
+ sentinel, packed[i]);
+ }
+ for (int i = 0; i < inOffset; i++) {
+ assertEquals("unpack wrote before outpos at bit " + bit,
+ sentinel, unpacked[i]);
+ }
+ }
+ }
+}
diff --git a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java
index ee1755a..3cb2a49 100644
--- a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java
+++ b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java
@@ -24,11 +24,17 @@ public LongCODEC getCodec() {
}
@Test
- public void testCodec_intermediateHighPowerOfTwo() {
- Assert.assertEquals(1, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length);
- Assert.assertEquals(7, LongTestUtils.compress((ByteLongCODEC) codec, new long[] { 1L << 42 }).length);
- Assert.assertEquals(1,
- LongTestUtils.compressHeadless((SkippableLongCODEC) codec, new long[] { 1L << 42 }).length);
- }
+ public void testCodec_allBitWidths() {
+ for (int bitWidth = 0; bitWidth <= 64; bitWidth++) {
+ long value = bitWidth == 0 ? 0 : 1L << (bitWidth - 1);
+
+ int expectedSizeInBytes = Math.max(1, (bitWidth + 6) / 7);
+ int expectedSizeInLongs = (expectedSizeInBytes > 8) ? 2 : 1;
+ Assert.assertEquals(expectedSizeInLongs, LongTestUtils.compress((LongCODEC) codec, new long[] { value }).length);
+ Assert.assertEquals(expectedSizeInBytes, LongTestUtils.compress((ByteLongCODEC) codec, new long[] { value }).length);
+ Assert.assertEquals(expectedSizeInLongs,
+ LongTestUtils.compressHeadless((SkippableLongCODEC) codec, new long[] { value }).length);
+ }
+ }
}
diff --git a/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java b/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java
index 5b90ee0..c964f6f 100644
--- a/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java
+++ b/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java
@@ -29,7 +29,7 @@ public LongClusteredDataGenerator() {
}
void fillUniform(long[] array, int offset, int length, long Min, long Max) {
- long[] v = this.unidg.generateUniform(length, Max - Min);
+ long[] v = this.unidg.generateUniform(length, Max - Min);
for (int k = 0; k < v.length; ++k)
array[k + offset] = Min + v[k];
}
@@ -70,7 +70,7 @@ void fillClustered(long[] array, int offset, int length, long Min, long Max) {
* @return array containing the integers
*/
public long[] generateClustered(int N, long Max) {
- long[] array = new long[N];
+ long[] array = new long[N];
fillClustered(array, 0, N, 0, Max);
return array;
}
@@ -82,7 +82,7 @@ public long[] generateClustered(int N, long Max) {
* arguments are ignored
*/
public static void main(final String[] args) {
- long[] example = (new LongClusteredDataGenerator())
+ long[] example = (new LongClusteredDataGenerator())
.generateClustered(20, 1000);
for (int k = 0; k < example.length; ++k)
System.out.println(example[k]);
diff --git a/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java b/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java
index 4d435f2..4aa797b 100644
--- a/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java
+++ b/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java
@@ -59,12 +59,12 @@ long[] generateUniformHash(int N, long Max) {
* output all longs from the range [0,Max) that are not in the array
*/
static long[] negate(long[] x, long Max) {
- int newLength = saturatedCast(Max - x.length);
- long[] ans = new long[newLength];
+ int newLength = saturatedCast(Max - x.length);
+ long[] ans = new long[newLength];
int i = 0;
int c = 0;
for (int j = 0; j < x.length; ++j) {
- long v = x[j];
+ long v = x[j];
for (; i < v; ++i)
ans[c++] = i;
++i;
@@ -74,13 +74,13 @@ static long[] negate(long[] x, long Max) {
return ans;
}
- private static int saturatedCast(long toInt) {
- if (toInt > Integer.MAX_VALUE) {
- return Integer.MAX_VALUE;
- } else {
- return (int) toInt;
- }
- }
+ private static int saturatedCast(long toInt) {
+ if (toInt > Integer.MAX_VALUE) {
+ return Integer.MAX_VALUE;
+ } else {
+ return (int) toInt;
+ }
+ }
/**
* generates randomly N distinct longs from 0 to Max.
@@ -92,7 +92,7 @@ private static int saturatedCast(long toInt) {
* @return an array containing randomly selected longs
*/
public long[] generateUniform(int N, long Max) {
- assert N >= 0;
+ assert N >= 0;
assert Max >= 0;
if (N * 2 > Max) {
return negate(generateUniform(saturatedCast(Max - N), Max), Max);