com.kamikaze.pfordelta.PForDeltaUnpack128 Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of JavaFastPFOR Show documentation
Show all versions of JavaFastPFOR Show documentation
It is a library to compress and uncompress arrays of integers
very fast. The assumption is that most (but not all) values in
your array use less than 32 bits.
package com.kamikaze.pfordelta;
/**
* This is a version of the kamikaze PForDelta library that was slightly cleaned
* up by D. Lemire. It is included in the JavaFastPFOR library for comparison
* purposes. As the original
*/
public class PForDeltaUnpack128 {
static protected void unpack(int[] out, int[] in, int bits) {
switch (bits) {
case 0:
unpack0(out, in);
break;
case 1:
unpack1(out, in);
break;
case 2:
unpack2(out, in);
break;
case 3:
unpack3(out, in);
break;
case 4:
unpack4(out, in);
break;
case 5:
unpack5(out, in);
break;
case 6:
unpack6(out, in);
break;
case 7:
unpack7(out, in);
break;
case 8:
unpack8(out, in);
break;
case 9:
unpack9(out, in);
break;
case 10:
unpack10(out, in);
break;
case 11:
unpack11(out, in);
break;
case 12:
unpack12(out, in);
break;
case 13:
unpack13(out, in);
break;
case 16:
unpack16(out, in);
break;
case 20:
unpack20(out, in);
break;
case 28:
unpack28(out, in);
break;
default:
break;
}
}
static private void unpack0(int[] out, int[] in) {
}
static private void unpack1(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 1;
for (i = 0, w = 1; i < 4; ++i, w += 1) {
int curInputValue0 = in[w];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 1) & mask;
out[2 + outOffset] = (curInputValue0 >>> 2) & mask;
out[3 + outOffset] = (curInputValue0 >>> 3) & mask;
out[4 + outOffset] = (curInputValue0 >>> 4) & mask;
out[5 + outOffset] = (curInputValue0 >>> 5) & mask;
out[6 + outOffset] = (curInputValue0 >>> 6) & mask;
out[7 + outOffset] = (curInputValue0 >>> 7) & mask;
out[8 + outOffset] = (curInputValue0 >>> 8) & mask;
out[9 + outOffset] = (curInputValue0 >>> 9) & mask;
out[10 + outOffset] = (curInputValue0 >>> 10) & mask;
out[11 + outOffset] = (curInputValue0 >>> 11) & mask;
out[12 + outOffset] = (curInputValue0 >>> 12) & mask;
out[13 + outOffset] = (curInputValue0 >>> 13) & mask;
out[14 + outOffset] = (curInputValue0 >>> 14) & mask;
out[15 + outOffset] = (curInputValue0 >>> 15) & mask;
out[16 + outOffset] = (curInputValue0 >>> 16) & mask;
out[17 + outOffset] = (curInputValue0 >>> 17) & mask;
out[18 + outOffset] = (curInputValue0 >>> 18) & mask;
out[19 + outOffset] = (curInputValue0 >>> 19) & mask;
out[20 + outOffset] = (curInputValue0 >>> 20) & mask;
out[21 + outOffset] = (curInputValue0 >>> 21) & mask;
out[22 + outOffset] = (curInputValue0 >>> 22) & mask;
out[23 + outOffset] = (curInputValue0 >>> 23) & mask;
out[24 + outOffset] = (curInputValue0 >>> 24) & mask;
out[25 + outOffset] = (curInputValue0 >>> 25) & mask;
out[26 + outOffset] = (curInputValue0 >>> 26) & mask;
out[27 + outOffset] = (curInputValue0 >>> 27) & mask;
out[28 + outOffset] = (curInputValue0 >>> 28) & mask;
out[29 + outOffset] = (curInputValue0 >>> 29) & mask;
out[30 + outOffset] = (curInputValue0 >>> 30) & mask;
out[31 + outOffset] = curInputValue0 >>> 31;
outOffset += 32;
}
}
static private void unpack2(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 3;
for (i = 0, w = 1; i < 4; ++i, w += 2) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 2) & mask;
out[2 + outOffset] = (curInputValue0 >>> 4) & mask;
out[3 + outOffset] = (curInputValue0 >>> 6) & mask;
out[4 + outOffset] = (curInputValue0 >>> 8) & mask;
out[5 + outOffset] = (curInputValue0 >>> 10) & mask;
out[6 + outOffset] = (curInputValue0 >>> 12) & mask;
out[7 + outOffset] = (curInputValue0 >>> 14) & mask;
out[8 + outOffset] = (curInputValue0 >>> 16) & mask;
out[9 + outOffset] = (curInputValue0 >>> 18) & mask;
out[10 + outOffset] = (curInputValue0 >>> 20) & mask;
out[11 + outOffset] = (curInputValue0 >>> 22) & mask;
out[12 + outOffset] = (curInputValue0 >>> 24) & mask;
out[13 + outOffset] = (curInputValue0 >>> 26) & mask;
out[14 + outOffset] = (curInputValue0 >>> 28) & mask;
out[15 + outOffset] = curInputValue0 >>> 30;
out[16 + outOffset] = curInputValue1 & mask;
out[17 + outOffset] = (curInputValue1 >>> 2) & mask;
out[18 + outOffset] = (curInputValue1 >>> 4) & mask;
out[19 + outOffset] = (curInputValue1 >>> 6) & mask;
out[20 + outOffset] = (curInputValue1 >>> 8) & mask;
out[21 + outOffset] = (curInputValue1 >>> 10) & mask;
out[22 + outOffset] = (curInputValue1 >>> 12) & mask;
out[23 + outOffset] = (curInputValue1 >>> 14) & mask;
out[24 + outOffset] = (curInputValue1 >>> 16) & mask;
out[25 + outOffset] = (curInputValue1 >>> 18) & mask;
out[26 + outOffset] = (curInputValue1 >>> 20) & mask;
out[27 + outOffset] = (curInputValue1 >>> 22) & mask;
out[28 + outOffset] = (curInputValue1 >>> 24) & mask;
out[29 + outOffset] = (curInputValue1 >>> 26) & mask;
out[30 + outOffset] = (curInputValue1 >>> 28) & mask;
out[31 + outOffset] = curInputValue1 >>> 30;
outOffset += 32;
}
}
static private void unpack3(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 7;
for (i = 0, w = 1; i < 4; ++i, w += 3) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 3) & mask;
out[2 + outOffset] = (curInputValue0 >>> 6) & mask;
out[3 + outOffset] = (curInputValue0 >>> 9) & mask;
out[4 + outOffset] = (curInputValue0 >>> 12) & mask;
out[5 + outOffset] = (curInputValue0 >>> 15) & mask;
out[6 + outOffset] = (curInputValue0 >>> 18) & mask;
out[7 + outOffset] = (curInputValue0 >>> 21) & mask;
out[8 + outOffset] = (curInputValue0 >>> 24) & mask;
out[9 + outOffset] = (curInputValue0 >>> 27) & mask;
out[10 + outOffset] = ((curInputValue0 >>> 30) | (curInputValue1 << 2))
& mask;
out[11 + outOffset] = (curInputValue1 >>> 1) & mask;
out[12 + outOffset] = (curInputValue1 >>> 4) & mask;
out[13 + outOffset] = (curInputValue1 >>> 7) & mask;
out[14 + outOffset] = (curInputValue1 >>> 10) & mask;
out[15 + outOffset] = (curInputValue1 >>> 13) & mask;
out[16 + outOffset] = (curInputValue1 >>> 16) & mask;
out[17 + outOffset] = (curInputValue1 >>> 19) & mask;
out[18 + outOffset] = (curInputValue1 >>> 22) & mask;
out[19 + outOffset] = (curInputValue1 >>> 25) & mask;
out[20 + outOffset] = (curInputValue1 >>> 28) & mask;
out[21 + outOffset] = ((curInputValue1 >>> 31) | (curInputValue2 << 1))
& mask;
out[22 + outOffset] = (curInputValue2 >>> 2) & mask;
out[23 + outOffset] = (curInputValue2 >>> 5) & mask;
out[24 + outOffset] = (curInputValue2 >>> 8) & mask;
out[25 + outOffset] = (curInputValue2 >>> 11) & mask;
out[26 + outOffset] = (curInputValue2 >>> 14) & mask;
out[27 + outOffset] = (curInputValue2 >>> 17) & mask;
out[28 + outOffset] = (curInputValue2 >>> 20) & mask;
out[29 + outOffset] = (curInputValue2 >>> 23) & mask;
out[30 + outOffset] = (curInputValue2 >>> 26) & mask;
out[31 + outOffset] = curInputValue2 >>> 29;
outOffset += 32;
}
}
static private void unpack4(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 15;
for (i = 0, w = 1; i < 4; ++i, w += 4) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 4) & mask;
out[2 + outOffset] = (curInputValue0 >>> 8) & mask;
out[3 + outOffset] = (curInputValue0 >>> 12) & mask;
out[4 + outOffset] = (curInputValue0 >>> 16) & mask;
out[5 + outOffset] = (curInputValue0 >>> 20) & mask;
out[6 + outOffset] = (curInputValue0 >>> 24) & mask;
out[7 + outOffset] = curInputValue0 >>> 28;
out[8 + outOffset] = curInputValue1 & mask;
out[9 + outOffset] = (curInputValue1 >>> 4) & mask;
out[10 + outOffset] = (curInputValue1 >>> 8) & mask;
out[11 + outOffset] = (curInputValue1 >>> 12) & mask;
out[12 + outOffset] = (curInputValue1 >>> 16) & mask;
out[13 + outOffset] = (curInputValue1 >>> 20) & mask;
out[14 + outOffset] = (curInputValue1 >>> 24) & mask;
out[15 + outOffset] = curInputValue1 >>> 28;
out[16 + outOffset] = curInputValue2 & mask;
out[17 + outOffset] = (curInputValue2 >>> 4) & mask;
out[18 + outOffset] = (curInputValue2 >>> 8) & mask;
out[19 + outOffset] = (curInputValue2 >>> 12) & mask;
out[20 + outOffset] = (curInputValue2 >>> 16) & mask;
out[21 + outOffset] = (curInputValue2 >>> 20) & mask;
out[22 + outOffset] = (curInputValue2 >>> 24) & mask;
out[23 + outOffset] = curInputValue2 >>> 28;
out[24 + outOffset] = curInputValue3 & mask;
out[25 + outOffset] = (curInputValue3 >>> 4) & mask;
out[26 + outOffset] = (curInputValue3 >>> 8) & mask;
out[27 + outOffset] = (curInputValue3 >>> 12) & mask;
out[28 + outOffset] = (curInputValue3 >>> 16) & mask;
out[29 + outOffset] = (curInputValue3 >>> 20) & mask;
out[30 + outOffset] = (curInputValue3 >>> 24) & mask;
out[31 + outOffset] = curInputValue3 >>> 28;
outOffset += 32;
}
}
static private void unpack5(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 31;
for (i = 0, w = 1; i < 4; ++i, w += 5) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 5) & mask;
out[2 + outOffset] = (curInputValue0 >>> 10) & mask;
out[3 + outOffset] = (curInputValue0 >>> 15) & mask;
out[4 + outOffset] = (curInputValue0 >>> 20) & mask;
out[5 + outOffset] = (curInputValue0 >>> 25) & mask;
out[6 + outOffset] = ((curInputValue0 >>> 30) | (curInputValue1 << 2))
& mask;
out[7 + outOffset] = (curInputValue1 >>> 3) & mask;
out[8 + outOffset] = (curInputValue1 >>> 8) & mask;
out[9 + outOffset] = (curInputValue1 >>> 13) & mask;
out[10 + outOffset] = (curInputValue1 >>> 18) & mask;
out[11 + outOffset] = (curInputValue1 >>> 23) & mask;
out[12 + outOffset] = ((curInputValue1 >>> 28) | (curInputValue2 << 4))
& mask;
out[13 + outOffset] = (curInputValue2 >>> 1) & mask;
out[14 + outOffset] = (curInputValue2 >>> 6) & mask;
out[15 + outOffset] = (curInputValue2 >>> 11) & mask;
out[16 + outOffset] = (curInputValue2 >>> 16) & mask;
out[17 + outOffset] = (curInputValue2 >>> 21) & mask;
out[18 + outOffset] = (curInputValue2 >>> 26) & mask;
out[19 + outOffset] = ((curInputValue2 >>> 31) | (curInputValue3 << 1))
& mask;
out[20 + outOffset] = (curInputValue3 >>> 4) & mask;
out[21 + outOffset] = (curInputValue3 >>> 9) & mask;
out[22 + outOffset] = (curInputValue3 >>> 14) & mask;
out[23 + outOffset] = (curInputValue3 >>> 19) & mask;
out[24 + outOffset] = (curInputValue3 >>> 24) & mask;
out[25 + outOffset] = ((curInputValue3 >>> 29) | (curInputValue4 << 3))
& mask;
out[26 + outOffset] = (curInputValue4 >>> 2) & mask;
out[27 + outOffset] = (curInputValue4 >>> 7) & mask;
out[28 + outOffset] = (curInputValue4 >>> 12) & mask;
out[29 + outOffset] = (curInputValue4 >>> 17) & mask;
out[30 + outOffset] = (curInputValue4 >>> 22) & mask;
out[31 + outOffset] = curInputValue4 >>> 27;
outOffset += 32;
}
}
static private void unpack6(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 63;
for (i = 0, w = 1; i < 4; ++i, w += 6) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 6) & mask;
out[2 + outOffset] = (curInputValue0 >>> 12) & mask;
out[3 + outOffset] = (curInputValue0 >>> 18) & mask;
out[4 + outOffset] = (curInputValue0 >>> 24) & mask;
out[5 + outOffset] = ((curInputValue0 >>> 30) | (curInputValue1 << 2))
& mask;
out[6 + outOffset] = (curInputValue1 >>> 4) & mask;
out[7 + outOffset] = (curInputValue1 >>> 10) & mask;
out[8 + outOffset] = (curInputValue1 >>> 16) & mask;
out[9 + outOffset] = (curInputValue1 >>> 22) & mask;
out[10 + outOffset] = ((curInputValue1 >>> 28) | (curInputValue2 << 4))
& mask;
out[11 + outOffset] = (curInputValue2 >>> 2) & mask;
out[12 + outOffset] = (curInputValue2 >>> 8) & mask;
out[13 + outOffset] = (curInputValue2 >>> 14) & mask;
out[14 + outOffset] = (curInputValue2 >>> 20) & mask;
out[15 + outOffset] = curInputValue2 >>> 26;
out[16 + outOffset] = curInputValue3 & mask;
out[17 + outOffset] = (curInputValue3 >>> 6) & mask;
out[18 + outOffset] = (curInputValue3 >>> 12) & mask;
out[19 + outOffset] = (curInputValue3 >>> 18) & mask;
out[20 + outOffset] = (curInputValue3 >>> 24) & mask;
out[21 + outOffset] = ((curInputValue3 >>> 30) | (curInputValue4 << 2))
& mask;
out[22 + outOffset] = (curInputValue4 >>> 4) & mask;
out[23 + outOffset] = (curInputValue4 >>> 10) & mask;
out[24 + outOffset] = (curInputValue4 >>> 16) & mask;
out[25 + outOffset] = (curInputValue4 >>> 22) & mask;
out[26 + outOffset] = ((curInputValue4 >>> 28) | (curInputValue5 << 4))
& mask;
out[27 + outOffset] = (curInputValue5 >>> 2) & mask;
out[28 + outOffset] = (curInputValue5 >>> 8) & mask;
out[29 + outOffset] = (curInputValue5 >>> 14) & mask;
out[30 + outOffset] = (curInputValue5 >>> 20) & mask;
out[31 + outOffset] = curInputValue5 >>> 26;
outOffset += 32;
}
}
static private void unpack7(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 127;
for (i = 0, w = 1; i < 4; ++i, w += 7) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 7) & mask;
out[2 + outOffset] = (curInputValue0 >>> 14) & mask;
out[3 + outOffset] = (curInputValue0 >>> 21) & mask;
out[4 + outOffset] = ((curInputValue0 >>> 28) | (curInputValue1 << 4))
& mask;
out[5 + outOffset] = (curInputValue1 >>> 3) & mask;
out[6 + outOffset] = (curInputValue1 >>> 10) & mask;
out[7 + outOffset] = (curInputValue1 >>> 17) & mask;
out[8 + outOffset] = (curInputValue1 >>> 24) & mask;
out[9 + outOffset] = ((curInputValue1 >>> 31) | (curInputValue2 << 1))
& mask;
out[10 + outOffset] = (curInputValue2 >>> 6) & mask;
out[11 + outOffset] = (curInputValue2 >>> 13) & mask;
out[12 + outOffset] = (curInputValue2 >>> 20) & mask;
out[13 + outOffset] = ((curInputValue2 >>> 27) | (curInputValue3 << 5))
& mask;
out[14 + outOffset] = (curInputValue3 >>> 2) & mask;
out[15 + outOffset] = (curInputValue3 >>> 9) & mask;
out[16 + outOffset] = (curInputValue3 >>> 16) & mask;
out[17 + outOffset] = (curInputValue3 >>> 23) & mask;
out[18 + outOffset] = ((curInputValue3 >>> 30) | (curInputValue4 << 2))
& mask;
out[19 + outOffset] = (curInputValue4 >>> 5) & mask;
out[20 + outOffset] = (curInputValue4 >>> 12) & mask;
out[21 + outOffset] = (curInputValue4 >>> 19) & mask;
out[22 + outOffset] = ((curInputValue4 >>> 26) | (curInputValue5 << 6))
& mask;
out[23 + outOffset] = (curInputValue5 >>> 1) & mask;
out[24 + outOffset] = (curInputValue5 >>> 8) & mask;
out[25 + outOffset] = (curInputValue5 >>> 15) & mask;
out[26 + outOffset] = (curInputValue5 >>> 22) & mask;
out[27 + outOffset] = ((curInputValue5 >>> 29) | (curInputValue6 << 3))
& mask;
out[28 + outOffset] = (curInputValue6 >>> 4) & mask;
out[29 + outOffset] = (curInputValue6 >>> 11) & mask;
out[30 + outOffset] = (curInputValue6 >>> 18) & mask;
out[31 + outOffset] = curInputValue6 >>> 25;
outOffset += 32;
}
}
static private void unpack8(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 255;
for (i = 0, w = 1; i < 4; ++i, w += 8) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 8) & mask;
out[2 + outOffset] = (curInputValue0 >>> 16) & mask;
out[3 + outOffset] = curInputValue0 >>> 24;
out[4 + outOffset] = curInputValue1 & mask;
out[5 + outOffset] = (curInputValue1 >>> 8) & mask;
out[6 + outOffset] = (curInputValue1 >>> 16) & mask;
out[7 + outOffset] = curInputValue1 >>> 24;
out[8 + outOffset] = curInputValue2 & mask;
out[9 + outOffset] = (curInputValue2 >>> 8) & mask;
out[10 + outOffset] = (curInputValue2 >>> 16) & mask;
out[11 + outOffset] = curInputValue2 >>> 24;
out[12 + outOffset] = curInputValue3 & mask;
out[13 + outOffset] = (curInputValue3 >>> 8) & mask;
out[14 + outOffset] = (curInputValue3 >>> 16) & mask;
out[15 + outOffset] = curInputValue3 >>> 24;
out[16 + outOffset] = curInputValue4 & mask;
out[17 + outOffset] = (curInputValue4 >>> 8) & mask;
out[18 + outOffset] = (curInputValue4 >>> 16) & mask;
out[19 + outOffset] = curInputValue4 >>> 24;
out[20 + outOffset] = curInputValue5 & mask;
out[21 + outOffset] = (curInputValue5 >>> 8) & mask;
out[22 + outOffset] = (curInputValue5 >>> 16) & mask;
out[23 + outOffset] = curInputValue5 >>> 24;
out[24 + outOffset] = curInputValue6 & mask;
out[25 + outOffset] = (curInputValue6 >>> 8) & mask;
out[26 + outOffset] = (curInputValue6 >>> 16) & mask;
out[27 + outOffset] = curInputValue6 >>> 24;
out[28 + outOffset] = curInputValue7 & mask;
out[29 + outOffset] = (curInputValue7 >>> 8) & mask;
out[30 + outOffset] = (curInputValue7 >>> 16) & mask;
out[31 + outOffset] = curInputValue7 >>> 24;
outOffset += 32;
}
}
static private void unpack9(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 511;
for (i = 0, w = 1; i < 4; ++i, w += 9) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 9) & mask;
out[2 + outOffset] = (curInputValue0 >>> 18) & mask;
out[3 + outOffset] = ((curInputValue0 >>> 27) | (curInputValue1 << 5))
& mask;
out[4 + outOffset] = (curInputValue1 >>> 4) & mask;
out[5 + outOffset] = (curInputValue1 >>> 13) & mask;
out[6 + outOffset] = (curInputValue1 >>> 22) & mask;
out[7 + outOffset] = ((curInputValue1 >>> 31) | (curInputValue2 << 1))
& mask;
out[8 + outOffset] = (curInputValue2 >>> 8) & mask;
out[9 + outOffset] = (curInputValue2 >>> 17) & mask;
out[10 + outOffset] = ((curInputValue2 >>> 26) | (curInputValue3 << 6))
& mask;
out[11 + outOffset] = (curInputValue3 >>> 3) & mask;
out[12 + outOffset] = (curInputValue3 >>> 12) & mask;
out[13 + outOffset] = (curInputValue3 >>> 21) & mask;
out[14 + outOffset] = ((curInputValue3 >>> 30) | (curInputValue4 << 2))
& mask;
out[15 + outOffset] = (curInputValue4 >>> 7) & mask;
out[16 + outOffset] = (curInputValue4 >>> 16) & mask;
out[17 + outOffset] = ((curInputValue4 >>> 25) | (curInputValue5 << 7))
& mask;
out[18 + outOffset] = (curInputValue5 >>> 2) & mask;
out[19 + outOffset] = (curInputValue5 >>> 11) & mask;
out[20 + outOffset] = (curInputValue5 >>> 20) & mask;
out[21 + outOffset] = ((curInputValue5 >>> 29) | (curInputValue6 << 3))
& mask;
out[22 + outOffset] = (curInputValue6 >>> 6) & mask;
out[23 + outOffset] = (curInputValue6 >>> 15) & mask;
out[24 + outOffset] = ((curInputValue6 >>> 24) | (curInputValue7 << 8))
& mask;
out[25 + outOffset] = (curInputValue7 >>> 1) & mask;
out[26 + outOffset] = (curInputValue7 >>> 10) & mask;
out[27 + outOffset] = (curInputValue7 >>> 19) & mask;
out[28 + outOffset] = ((curInputValue7 >>> 28) | (curInputValue8 << 4))
& mask;
out[29 + outOffset] = (curInputValue8 >>> 5) & mask;
out[30 + outOffset] = (curInputValue8 >>> 14) & mask;
out[31 + outOffset] = curInputValue8 >>> 23;
outOffset += 32;
}
}
static private void unpack10(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 1023;
for (i = 0, w = 1; i < 4; ++i, w += 10) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 10) & mask;
out[2 + outOffset] = (curInputValue0 >>> 20) & mask;
out[3 + outOffset] = ((curInputValue0 >>> 30) | (curInputValue1 << 2))
& mask;
out[4 + outOffset] = (curInputValue1 >>> 8) & mask;
out[5 + outOffset] = (curInputValue1 >>> 18) & mask;
out[6 + outOffset] = ((curInputValue1 >>> 28) | (curInputValue2 << 4))
& mask;
out[7 + outOffset] = (curInputValue2 >>> 6) & mask;
out[8 + outOffset] = (curInputValue2 >>> 16) & mask;
out[9 + outOffset] = ((curInputValue2 >>> 26) | (curInputValue3 << 6))
& mask;
out[10 + outOffset] = (curInputValue3 >>> 4) & mask;
out[11 + outOffset] = (curInputValue3 >>> 14) & mask;
out[12 + outOffset] = ((curInputValue3 >>> 24) | (curInputValue4 << 8))
& mask;
out[13 + outOffset] = (curInputValue4 >>> 2) & mask;
out[14 + outOffset] = (curInputValue4 >>> 12) & mask;
out[15 + outOffset] = curInputValue4 >>> 22;
out[16 + outOffset] = curInputValue5 & mask;
out[17 + outOffset] = (curInputValue5 >>> 10) & mask;
out[18 + outOffset] = (curInputValue5 >>> 20) & mask;
out[19 + outOffset] = ((curInputValue5 >>> 30) | (curInputValue6 << 2))
& mask;
out[20 + outOffset] = (curInputValue6 >>> 8) & mask;
out[21 + outOffset] = (curInputValue6 >>> 18) & mask;
out[22 + outOffset] = ((curInputValue6 >>> 28) | (curInputValue7 << 4))
& mask;
out[23 + outOffset] = (curInputValue7 >>> 6) & mask;
out[24 + outOffset] = (curInputValue7 >>> 16) & mask;
out[25 + outOffset] = ((curInputValue7 >>> 26) | (curInputValue8 << 6))
& mask;
out[26 + outOffset] = (curInputValue8 >>> 4) & mask;
out[27 + outOffset] = (curInputValue8 >>> 14) & mask;
out[28 + outOffset] = ((curInputValue8 >>> 24) | (curInputValue9 << 8))
& mask;
out[29 + outOffset] = (curInputValue9 >>> 2) & mask;
out[30 + outOffset] = (curInputValue9 >>> 12) & mask;
out[31 + outOffset] = curInputValue9 >>> 22;
outOffset += 32;
}
}
static private void unpack11(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 2047;
for (i = 0, w = 1; i < 4; ++i, w += 11) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
int curInputValue10 = in[w + 10];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 11) & mask;
out[2 + outOffset] = ((curInputValue0 >>> 22) | (curInputValue1 << 10))
& mask;
out[3 + outOffset] = (curInputValue1 >>> 1) & mask;
out[4 + outOffset] = (curInputValue1 >>> 12) & mask;
out[5 + outOffset] = ((curInputValue1 >>> 23) | (curInputValue2 << 9))
& mask;
out[6 + outOffset] = (curInputValue2 >>> 2) & mask;
out[7 + outOffset] = (curInputValue2 >>> 13) & mask;
out[8 + outOffset] = ((curInputValue2 >>> 24) | (curInputValue3 << 8))
& mask;
out[9 + outOffset] = (curInputValue3 >>> 3) & mask;
out[10 + outOffset] = (curInputValue3 >>> 14) & mask;
out[11 + outOffset] = ((curInputValue3 >>> 25) | (curInputValue4 << 7))
& mask;
out[12 + outOffset] = (curInputValue4 >>> 4) & mask;
out[13 + outOffset] = (curInputValue4 >>> 15) & mask;
out[14 + outOffset] = ((curInputValue4 >>> 26) | (curInputValue5 << 6))
& mask;
out[15 + outOffset] = (curInputValue5 >>> 5) & mask;
out[16 + outOffset] = (curInputValue5 >>> 16) & mask;
out[17 + outOffset] = ((curInputValue5 >>> 27) | (curInputValue6 << 5))
& mask;
out[18 + outOffset] = (curInputValue6 >>> 6) & mask;
out[19 + outOffset] = (curInputValue6 >>> 17) & mask;
out[20 + outOffset] = ((curInputValue6 >>> 28) | (curInputValue7 << 4))
& mask;
out[21 + outOffset] = (curInputValue7 >>> 7) & mask;
out[22 + outOffset] = (curInputValue7 >>> 18) & mask;
out[23 + outOffset] = ((curInputValue7 >>> 29) | (curInputValue8 << 3))
& mask;
out[24 + outOffset] = (curInputValue8 >>> 8) & mask;
out[25 + outOffset] = (curInputValue8 >>> 19) & mask;
out[26 + outOffset] = ((curInputValue8 >>> 30) | (curInputValue9 << 2))
& mask;
out[27 + outOffset] = (curInputValue9 >>> 9) & mask;
out[28 + outOffset] = (curInputValue9 >>> 20) & mask;
out[29 + outOffset] = ((curInputValue9 >>> 31) | (curInputValue10 << 1))
& mask;
out[30 + outOffset] = (curInputValue10 >>> 10) & mask;
out[31 + outOffset] = curInputValue10 >>> 21;
outOffset += 32;
}
}
static private void unpack12(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 4095;
for (i = 0, w = 1; i < 4; ++i, w += 12) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
int curInputValue10 = in[w + 10];
int curInputValue11 = in[w + 11];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 12) & mask;
out[2 + outOffset] = ((curInputValue0 >>> 24) | (curInputValue1 << 8))
& mask;
out[3 + outOffset] = (curInputValue1 >>> 4) & mask;
out[4 + outOffset] = (curInputValue1 >>> 16) & mask;
out[5 + outOffset] = ((curInputValue1 >>> 28) | (curInputValue2 << 4))
& mask;
out[6 + outOffset] = (curInputValue2 >>> 8) & mask;
out[7 + outOffset] = curInputValue2 >>> 20;
out[8 + outOffset] = curInputValue3 & mask;
out[9 + outOffset] = (curInputValue3 >>> 12) & mask;
out[10 + outOffset] = ((curInputValue3 >>> 24) | (curInputValue4 << 8))
& mask;
out[11 + outOffset] = (curInputValue4 >>> 4) & mask;
out[12 + outOffset] = (curInputValue4 >>> 16) & mask;
out[13 + outOffset] = ((curInputValue4 >>> 28) | (curInputValue5 << 4))
& mask;
out[14 + outOffset] = (curInputValue5 >>> 8) & mask;
out[15 + outOffset] = curInputValue5 >>> 20;
out[16 + outOffset] = curInputValue6 & mask;
out[17 + outOffset] = (curInputValue6 >>> 12) & mask;
out[18 + outOffset] = ((curInputValue6 >>> 24) | (curInputValue7 << 8))
& mask;
out[19 + outOffset] = (curInputValue7 >>> 4) & mask;
out[20 + outOffset] = (curInputValue7 >>> 16) & mask;
out[21 + outOffset] = ((curInputValue7 >>> 28) | (curInputValue8 << 4))
& mask;
out[22 + outOffset] = (curInputValue8 >>> 8) & mask;
out[23 + outOffset] = curInputValue8 >>> 20;
out[24 + outOffset] = curInputValue9 & mask;
out[25 + outOffset] = (curInputValue9 >>> 12) & mask;
out[26 + outOffset] = ((curInputValue9 >>> 24) | (curInputValue10 << 8))
& mask;
out[27 + outOffset] = (curInputValue10 >>> 4) & mask;
out[28 + outOffset] = (curInputValue10 >>> 16) & mask;
out[29 + outOffset] = ((curInputValue10 >>> 28) | (curInputValue11 << 4))
& mask;
out[30 + outOffset] = (curInputValue11 >>> 8) & mask;
out[31 + outOffset] = curInputValue11 >>> 20;
outOffset += 32;
}
}
static private void unpack13(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 8191;
for (i = 0, w = 1; i < 4; ++i, w += 13) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
int curInputValue10 = in[w + 10];
int curInputValue11 = in[w + 11];
int curInputValue12 = in[w + 12];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 13) & mask;
out[2 + outOffset] = ((curInputValue0 >>> 26) | (curInputValue1 << 6))
& mask;
out[3 + outOffset] = (curInputValue1 >>> 7) & mask;
out[4 + outOffset] = ((curInputValue1 >>> 20) | (curInputValue2 << 12))
& mask;
out[5 + outOffset] = (curInputValue2 >>> 1) & mask;
out[6 + outOffset] = (curInputValue2 >>> 14) & mask;
out[7 + outOffset] = ((curInputValue2 >>> 27) | (curInputValue3 << 5))
& mask;
out[8 + outOffset] = (curInputValue3 >>> 8) & mask;
out[9 + outOffset] = ((curInputValue3 >>> 21) | (curInputValue4 << 11))
& mask;
out[10 + outOffset] = (curInputValue4 >>> 2) & mask;
out[11 + outOffset] = (curInputValue4 >>> 15) & mask;
out[12 + outOffset] = ((curInputValue4 >>> 28) | (curInputValue5 << 4))
& mask;
out[13 + outOffset] = (curInputValue5 >>> 9) & mask;
out[14 + outOffset] = ((curInputValue5 >>> 22) | (curInputValue6 << 10))
& mask;
out[15 + outOffset] = (curInputValue6 >>> 3) & mask;
out[16 + outOffset] = (curInputValue6 >>> 16) & mask;
out[17 + outOffset] = ((curInputValue6 >>> 29) | (curInputValue7 << 3))
& mask;
out[18 + outOffset] = (curInputValue7 >>> 10) & mask;
out[19 + outOffset] = ((curInputValue7 >>> 23) | (curInputValue8 << 9))
& mask;
out[20 + outOffset] = (curInputValue8 >>> 4) & mask;
out[21 + outOffset] = (curInputValue8 >>> 17) & mask;
out[22 + outOffset] = ((curInputValue8 >>> 30) | (curInputValue9 << 2))
& mask;
out[23 + outOffset] = (curInputValue9 >>> 11) & mask;
out[24 + outOffset] = ((curInputValue9 >>> 24) | (curInputValue10 << 8))
& mask;
out[25 + outOffset] = (curInputValue10 >>> 5) & mask;
out[26 + outOffset] = (curInputValue10 >>> 18) & mask;
out[27 + outOffset] = ((curInputValue10 >>> 31) | (curInputValue11 << 1))
& mask;
out[28 + outOffset] = (curInputValue11 >>> 12) & mask;
out[29 + outOffset] = ((curInputValue11 >>> 25) | (curInputValue12 << 7))
& mask;
out[30 + outOffset] = (curInputValue12 >>> 6) & mask;
out[31 + outOffset] = curInputValue12 >>> 19;
outOffset += 32;
}
}
static private void unpack16(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 65535;
for (i = 0, w = 1; i < 4; ++i, w += 16) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
int curInputValue10 = in[w + 10];
int curInputValue11 = in[w + 11];
int curInputValue12 = in[w + 12];
int curInputValue13 = in[w + 13];
int curInputValue14 = in[w + 14];
int curInputValue15 = in[w + 15];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = curInputValue0 >>> 16;
out[2 + outOffset] = curInputValue1 & mask;
out[3 + outOffset] = curInputValue1 >>> 16;
out[4 + outOffset] = curInputValue2 & mask;
out[5 + outOffset] = curInputValue2 >>> 16;
out[6 + outOffset] = curInputValue3 & mask;
out[7 + outOffset] = curInputValue3 >>> 16;
out[8 + outOffset] = curInputValue4 & mask;
out[9 + outOffset] = curInputValue4 >>> 16;
out[10 + outOffset] = curInputValue5 & mask;
out[11 + outOffset] = curInputValue5 >>> 16;
out[12 + outOffset] = curInputValue6 & mask;
out[13 + outOffset] = curInputValue6 >>> 16;
out[14 + outOffset] = curInputValue7 & mask;
out[15 + outOffset] = curInputValue7 >>> 16;
out[16 + outOffset] = curInputValue8 & mask;
out[17 + outOffset] = curInputValue8 >>> 16;
out[18 + outOffset] = curInputValue9 & mask;
out[19 + outOffset] = curInputValue9 >>> 16;
out[20 + outOffset] = curInputValue10 & mask;
out[21 + outOffset] = curInputValue10 >>> 16;
out[22 + outOffset] = curInputValue11 & mask;
out[23 + outOffset] = curInputValue11 >>> 16;
out[24 + outOffset] = curInputValue12 & mask;
out[25 + outOffset] = curInputValue12 >>> 16;
out[26 + outOffset] = curInputValue13 & mask;
out[27 + outOffset] = curInputValue13 >>> 16;
out[28 + outOffset] = curInputValue14 & mask;
out[29 + outOffset] = curInputValue14 >>> 16;
out[30 + outOffset] = curInputValue15 & mask;
out[31 + outOffset] = curInputValue15 >>> 16;
outOffset += 32;
}
}
static private void unpack20(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 1048575;
for (i = 0, w = 1; i < 4; ++i, w += 20) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
int curInputValue10 = in[w + 10];
int curInputValue11 = in[w + 11];
int curInputValue12 = in[w + 12];
int curInputValue13 = in[w + 13];
int curInputValue14 = in[w + 14];
int curInputValue15 = in[w + 15];
int curInputValue16 = in[w + 16];
int curInputValue17 = in[w + 17];
int curInputValue18 = in[w + 18];
int curInputValue19 = in[w + 19];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = ((curInputValue0 >>> 20) | (curInputValue1 << 12))
& mask;
out[2 + outOffset] = (curInputValue1 >>> 8) & mask;
out[3 + outOffset] = ((curInputValue1 >>> 28) | (curInputValue2 << 4))
& mask;
out[4 + outOffset] = ((curInputValue2 >>> 16) | (curInputValue3 << 16))
& mask;
out[5 + outOffset] = (curInputValue3 >>> 4) & mask;
out[6 + outOffset] = ((curInputValue3 >>> 24) | (curInputValue4 << 8))
& mask;
out[7 + outOffset] = curInputValue4 >>> 12;
out[8 + outOffset] = curInputValue5 & mask;
out[9 + outOffset] = ((curInputValue5 >>> 20) | (curInputValue6 << 12))
& mask;
out[10 + outOffset] = (curInputValue6 >>> 8) & mask;
out[11 + outOffset] = ((curInputValue6 >>> 28) | (curInputValue7 << 4))
& mask;
out[12 + outOffset] = ((curInputValue7 >>> 16) | (curInputValue8 << 16))
& mask;
out[13 + outOffset] = (curInputValue8 >>> 4) & mask;
out[14 + outOffset] = ((curInputValue8 >>> 24) | (curInputValue9 << 8))
& mask;
out[15 + outOffset] = curInputValue9 >>> 12;
out[16 + outOffset] = curInputValue10 & mask;
out[17 + outOffset] = ((curInputValue10 >>> 20) | (curInputValue11 << 12))
& mask;
out[18 + outOffset] = (curInputValue11 >>> 8) & mask;
out[19 + outOffset] = ((curInputValue11 >>> 28) | (curInputValue12 << 4))
& mask;
out[20 + outOffset] = ((curInputValue12 >>> 16) | (curInputValue13 << 16))
& mask;
out[21 + outOffset] = (curInputValue13 >>> 4) & mask;
out[22 + outOffset] = ((curInputValue13 >>> 24) | (curInputValue14 << 8))
& mask;
out[23 + outOffset] = curInputValue14 >>> 12;
out[24 + outOffset] = curInputValue15 & mask;
out[25 + outOffset] = ((curInputValue15 >>> 20) | (curInputValue16 << 12))
& mask;
out[26 + outOffset] = (curInputValue16 >>> 8) & mask;
out[27 + outOffset] = ((curInputValue16 >>> 28) | (curInputValue17 << 4))
& mask;
out[28 + outOffset] = ((curInputValue17 >>> 16) | (curInputValue18 << 16))
& mask;
out[29 + outOffset] = (curInputValue18 >>> 4) & mask;
out[30 + outOffset] = ((curInputValue18 >>> 24) | (curInputValue19 << 8))
& mask;
out[31 + outOffset] = curInputValue19 >>> 12;
outOffset += 32;
}
}
static private void unpack28(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 268435455;
for (i = 0, w = 1; i < 4; ++i, w += 28) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
int curInputValue10 = in[w + 10];
int curInputValue11 = in[w + 11];
int curInputValue12 = in[w + 12];
int curInputValue13 = in[w + 13];
int curInputValue14 = in[w + 14];
int curInputValue15 = in[w + 15];
int curInputValue16 = in[w + 16];
int curInputValue17 = in[w + 17];
int curInputValue18 = in[w + 18];
int curInputValue19 = in[w + 19];
int curInputValue20 = in[w + 20];
int curInputValue21 = in[w + 21];
int curInputValue22 = in[w + 22];
int curInputValue23 = in[w + 23];
int curInputValue24 = in[w + 24];
int curInputValue25 = in[w + 25];
int curInputValue26 = in[w + 26];
int curInputValue27 = in[w + 27];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = ((curInputValue0 >>> 28) | (curInputValue1 << 4))
& mask;
out[2 + outOffset] = ((curInputValue1 >>> 24) | (curInputValue2 << 8))
& mask;
out[3 + outOffset] = ((curInputValue2 >>> 20) | (curInputValue3 << 12))
& mask;
out[4 + outOffset] = ((curInputValue3 >>> 16) | (curInputValue4 << 16))
& mask;
out[5 + outOffset] = ((curInputValue4 >>> 12) | (curInputValue5 << 20))
& mask;
out[6 + outOffset] = ((curInputValue5 >>> 8) | (curInputValue6 << 24))
& mask;
out[7 + outOffset] = curInputValue6 >>> 4;
out[8 + outOffset] = curInputValue7 & mask;
out[9 + outOffset] = ((curInputValue7 >>> 28) | (curInputValue8 << 4))
& mask;
out[10 + outOffset] = ((curInputValue8 >>> 24) | (curInputValue9 << 8))
& mask;
out[11 + outOffset] = ((curInputValue9 >>> 20) | (curInputValue10 << 12))
& mask;
out[12 + outOffset] = ((curInputValue10 >>> 16) | (curInputValue11 << 16))
& mask;
out[13 + outOffset] = ((curInputValue11 >>> 12) | (curInputValue12 << 20))
& mask;
out[14 + outOffset] = ((curInputValue12 >>> 8) | (curInputValue13 << 24))
& mask;
out[15 + outOffset] = curInputValue13 >>> 4;
out[16 + outOffset] = curInputValue14 & mask;
out[17 + outOffset] = ((curInputValue14 >>> 28) | (curInputValue15 << 4))
& mask;
out[18 + outOffset] = ((curInputValue15 >>> 24) | (curInputValue16 << 8))
& mask;
out[19 + outOffset] = ((curInputValue16 >>> 20) | (curInputValue17 << 12))
& mask;
out[20 + outOffset] = ((curInputValue17 >>> 16) | (curInputValue18 << 16))
& mask;
out[21 + outOffset] = ((curInputValue18 >>> 12) | (curInputValue19 << 20))
& mask;
out[22 + outOffset] = ((curInputValue19 >>> 8) | (curInputValue20 << 24))
& mask;
out[23 + outOffset] = curInputValue20 >>> 4;
out[24 + outOffset] = curInputValue21 & mask;
out[25 + outOffset] = ((curInputValue21 >>> 28) | (curInputValue22 << 4))
& mask;
out[26 + outOffset] = ((curInputValue22 >>> 24) | (curInputValue23 << 8))
& mask;
out[27 + outOffset] = ((curInputValue23 >>> 20) | (curInputValue24 << 12))
& mask;
out[28 + outOffset] = ((curInputValue24 >>> 16) | (curInputValue25 << 16))
& mask;
out[29 + outOffset] = ((curInputValue25 >>> 12) | (curInputValue26 << 20))
& mask;
out[30 + outOffset] = ((curInputValue26 >>> 8) | (curInputValue27 << 24))
& mask;
out[31 + outOffset] = curInputValue27 >>> 4;
outOffset += 32;
}
}
}