/*************************************************************/ /* macros for fast unpacking of integers of fixed bit length */ /*************************************************************/ #define BS 128 /* supported bit lengths */ int cnum[17] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,20,32}; void unpack0(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i++) p[i] = 0; } void unpack1(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 1) { p[0] = (w[0] >> 31); p[1] = (w[0] >> 30) & 1; p[2] = (w[0] >> 29) & 1; p[3] = (w[0] >> 28) & 1; p[4] = (w[0] >> 27) & 1; p[5] = (w[0] >> 26) & 1; p[6] = (w[0] >> 25) & 1; p[7] = (w[0] >> 24) & 1; p[8] = (w[0] >> 23) & 1; p[9] = (w[0] >> 22) & 1; p[10] = (w[0] >> 21) & 1; p[11] = (w[0] >> 20) & 1; p[12] = (w[0] >> 19) & 1; p[13] = (w[0] >> 18) & 1; p[14] = (w[0] >> 17) & 1; p[15] = (w[0] >> 16) & 1; p[16] = (w[0] >> 15) & 1; p[17] = (w[0] >> 14) & 1; p[18] = (w[0] >> 13) & 1; p[19] = (w[0] >> 12) & 1; p[20] = (w[0] >> 11) & 1; p[21] = (w[0] >> 10) & 1; p[22] = (w[0] >> 9) & 1; p[23] = (w[0] >> 8) & 1; p[24] = (w[0] >> 7) & 1; p[25] = (w[0] >> 6) & 1; p[26] = (w[0] >> 5) & 1; p[27] = (w[0] >> 4) & 1; p[28] = (w[0] >> 3) & 1; p[29] = (w[0] >> 2) & 1; p[30] = (w[0] >> 1) & 1; p[31] = (w[0]) & 1; } } void unpack2(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 2) { p[0] = (w[0] >> 30); p[1] = (w[0] >> 28) & 3; p[2] = (w[0] >> 26) & 3; p[3] = (w[0] >> 24) & 3; p[4] = (w[0] >> 22) & 3; p[5] = (w[0] >> 20) & 3; p[6] = (w[0] >> 18) & 3; p[7] = (w[0] >> 16) & 3; p[8] = (w[0] >> 14) & 3; p[9] = (w[0] >> 12) & 3; p[10] = (w[0] >> 10) & 3; p[11] = (w[0] >> 8) & 3; p[12] = (w[0] >> 6) & 3; p[13] = (w[0] >> 4) & 3; p[14] = (w[0] >> 2) & 3; p[15] = (w[0]) & 3; p[16] = (w[1] >> 30); p[17] = (w[1] >> 28) & 3; p[18] = (w[1] >> 26) & 3; p[19] = (w[1] >> 24) & 3; p[20] = (w[1] >> 22) & 3; p[21] = (w[1] >> 20) & 3; p[22] = (w[1] >> 18) & 3; p[23] = (w[1] >> 16) & 3; p[24] = (w[1] >> 14) & 3; p[25] = (w[1] >> 12) & 3; p[26] = (w[1] >> 10) & 3; p[27] = (w[1] >> 8) & 3; p[28] = (w[1] >> 6) & 3; p[29] = (w[1] >> 4) & 3; p[30] = (w[1] >> 2) & 3; p[31] = (w[1]) & 3; } } void unpack3(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 3) { p[0] = (w[0] >> 29); p[1] = (w[0] >> 26) & 7; p[2] = (w[0] >> 23) & 7; p[3] = (w[0] >> 20) & 7; p[4] = (w[0] >> 17) & 7; p[5] = (w[0] >> 14) & 7; p[6] = (w[0] >> 11) & 7; p[7] = (w[0] >> 8) & 7; p[8] = (w[0] >> 5) & 7; p[9] = (w[0] >> 2) & 7; p[10] = (w[0] << 1) & 7; p[10] |= (w[1] >> 31); p[11] = (w[1] >> 28) & 7; p[12] = (w[1] >> 25) & 7; p[13] = (w[1] >> 22) & 7; p[14] = (w[1] >> 19) & 7; p[15] = (w[1] >> 16) & 7; p[16] = (w[1] >> 13) & 7; p[17] = (w[1] >> 10) & 7; p[18] = (w[1] >> 7) & 7; p[19] = (w[1] >> 4) & 7; p[20] = (w[1] >> 1) & 7; p[21] = (w[1] << 2) & 7; p[21] |= (w[2] >> 30); p[22] = (w[2] >> 27) & 7; p[23] = (w[2] >> 24) & 7; p[24] = (w[2] >> 21) & 7; p[25] = (w[2] >> 18) & 7; p[26] = (w[2] >> 15) & 7; p[27] = (w[2] >> 12) & 7; p[28] = (w[2] >> 9) & 7; p[29] = (w[2] >> 6) & 7; p[30] = (w[2] >> 3) & 7; p[31] = (w[2]) & 7; } } void unpack4(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 4) { p[0] = (w[0] >> 28); p[1] = (w[0] >> 24) & 15; p[2] = (w[0] >> 20) & 15; p[3] = (w[0] >> 16) & 15; p[4] = (w[0] >> 12) & 15; p[5] = (w[0] >> 8) & 15; p[6] = (w[0] >> 4) & 15; p[7] = (w[0]) & 15; p[8] = (w[1] >> 28); p[9] = (w[1] >> 24) & 15; p[10] = (w[1] >> 20) & 15; p[11] = (w[1] >> 16) & 15; p[12] = (w[1] >> 12) & 15; p[13] = (w[1] >> 8) & 15; p[14] = (w[1] >> 4) & 15; p[15] = (w[1]) & 15; p[16] = (w[2] >> 28); p[17] = (w[2] >> 24) & 15; p[18] = (w[2] >> 20) & 15; p[19] = (w[2] >> 16) & 15; p[20] = (w[2] >> 12) & 15; p[21] = (w[2] >> 8) & 15; p[22] = (w[2] >> 4) & 15; p[23] = (w[2]) & 15; p[24] = (w[3] >> 28); p[25] = (w[3] >> 24) & 15; p[26] = (w[3] >> 20) & 15; p[27] = (w[3] >> 16) & 15; p[28] = (w[3] >> 12) & 15; p[29] = (w[3] >> 8) & 15; p[30] = (w[3] >> 4) & 15; p[31] = (w[3]) & 15; } } void unpack5(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 5) { p[0] = (w[0] >> 27); p[1] = (w[0] >> 22) & 31; p[2] = (w[0] >> 17) & 31; p[3] = (w[0] >> 12) & 31; p[4] = (w[0] >> 7) & 31; p[5] = (w[0] >> 2) & 31; p[6] = (w[0] << 3) & 31; p[6] |= (w[1] >> 29); p[7] = (w[1] >> 24) & 31; p[8] = (w[1] >> 19) & 31; p[9] = (w[1] >> 14) & 31; p[10] = (w[1] >> 9) & 31; p[11] = (w[1] >> 4) & 31; p[12] = (w[1] << 1) & 31; p[12] |= (w[2] >> 31); p[13] = (w[2] >> 26) & 31; p[14] = (w[2] >> 21) & 31; p[15] = (w[2] >> 16) & 31; p[16] = (w[2] >> 11) & 31; p[17] = (w[2] >> 6) & 31; p[18] = (w[2] >> 1) & 31; p[19] = (w[2] << 4) & 31; p[19] |= (w[3] >> 28); p[20] = (w[3] >> 23) & 31; p[21] = (w[3] >> 18) & 31; p[22] = (w[3] >> 13) & 31; p[23] = (w[3] >> 8) & 31; p[24] = (w[3] >> 3) & 31; p[25] = (w[3] << 2) & 31; p[25] |= (w[4] >> 30); p[26] = (w[4] >> 25) & 31; p[27] = (w[4] >> 20) & 31; p[28] = (w[4] >> 15) & 31; p[29] = (w[4] >> 10) & 31; p[30] = (w[4] >> 5) & 31; p[31] = (w[4]) & 31; } } void unpack6(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 6) { p[0] = (w[0] >> 26); p[1] = (w[0] >> 20) & 63; p[2] = (w[0] >> 14) & 63; p[3] = (w[0] >> 8) & 63; p[4] = (w[0] >> 2) & 63; p[5] = (w[0] << 4) & 63; p[5] |= (w[1] >> 28); p[6] = (w[1] >> 22) & 63; p[7] = (w[1] >> 16) & 63; p[8] = (w[1] >> 10) & 63; p[9] = (w[1] >> 4) & 63; p[10] = (w[1] << 2) & 63; p[10] |= (w[2] >> 30); p[11] = (w[2] >> 24) & 63; p[12] = (w[2] >> 18) & 63; p[13] = (w[2] >> 12) & 63; p[14] = (w[2] >> 6) & 63; p[15] = (w[2]) & 63; p[16] = (w[3] >> 26); p[17] = (w[3] >> 20) & 63; p[18] = (w[3] >> 14) & 63; p[19] = (w[3] >> 8) & 63; p[20] = (w[3] >> 2) & 63; p[21] = (w[3] << 4) & 63; p[21] |= (w[4] >> 28); p[22] = (w[4] >> 22) & 63; p[23] = (w[4] >> 16) & 63; p[24] = (w[4] >> 10) & 63; p[25] = (w[4] >> 4) & 63; p[26] = (w[4] << 2) & 63; p[26] |= (w[5] >> 30); p[27] = (w[5] >> 24) & 63; p[28] = (w[5] >> 18) & 63; p[29] = (w[5] >> 12) & 63; p[30] = (w[5] >> 6) & 63; p[31] = (w[5]) & 63; } } void unpack7(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 7) { p[0] = (w[0] >> 25); p[1] = (w[0] >> 18) & 127; p[2] = (w[0] >> 11) & 127; p[3] = (w[0] >> 4) & 127; p[4] = (w[0] << 3) & 127; p[4] |= (w[1] >> 29); p[5] = (w[1] >> 22) & 127; p[6] = (w[1] >> 15) & 127; p[7] = (w[1] >> 8) & 127; p[8] = (w[1] >> 1) & 127; p[9] = (w[1] << 6) & 127; p[9] |= (w[2] >> 26); p[10] = (w[2] >> 19) & 127; p[11] = (w[2] >> 12) & 127; p[12] = (w[2] >> 5) & 127; p[13] = (w[2] << 2) & 127; p[13] |= (w[3] >> 30); p[14] = (w[3] >> 23) & 127; p[15] = (w[3] >> 16) & 127; p[16] = (w[3] >> 9) & 127; p[17] = (w[3] >> 2) & 127; p[18] = (w[3] << 5) & 127; p[18] |= (w[4] >> 27); p[19] = (w[4] >> 20) & 127; p[20] = (w[4] >> 13) & 127; p[21] = (w[4] >> 6) & 127; p[22] = (w[4] << 1) & 127; p[22] |= (w[5] >> 31); p[23] = (w[5] >> 24) & 127; p[24] = (w[5] >> 17) & 127; p[25] = (w[5] >> 10) & 127; p[26] = (w[5] >> 3) & 127; p[27] = (w[5] << 4) & 127; p[27] |= (w[6] >> 28); p[28] = (w[6] >> 21) & 127; p[29] = (w[6] >> 14) & 127; p[30] = (w[6] >> 7) & 127; p[31] = (w[6]) & 127; } } void unpack8(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 8) { p[0] = (w[0] >> 24); p[1] = (w[0] >> 16) & 255; p[2] = (w[0] >> 8) & 255; p[3] = (w[0]) & 255; p[4] = (w[1] >> 24); p[5] = (w[1] >> 16) & 255; p[6] = (w[1] >> 8) & 255; p[7] = (w[1]) & 255; p[8] = (w[2] >> 24); p[9] = (w[2] >> 16) & 255; p[10] = (w[2] >> 8) & 255; p[11] = (w[2]) & 255; p[12] = (w[3] >> 24); p[13] = (w[3] >> 16) & 255; p[14] = (w[3] >> 8) & 255; p[15] = (w[3]) & 255; p[16] = (w[4] >> 24); p[17] = (w[4] >> 16) & 255; p[18] = (w[4] >> 8) & 255; p[19] = (w[4]) & 255; p[20] = (w[5] >> 24); p[21] = (w[5] >> 16) & 255; p[22] = (w[5] >> 8) & 255; p[23] = (w[5]) & 255; p[24] = (w[6] >> 24); p[25] = (w[6] >> 16) & 255; p[26] = (w[6] >> 8) & 255; p[27] = (w[6]) & 255; p[28] = (w[7] >> 24); p[29] = (w[7] >> 16) & 255; p[30] = (w[7] >> 8) & 255; p[31] = (w[7]) & 255; } } void unpack9(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 9) { p[0] = (w[0] >> 23); p[1] = (w[0] >> 14) & 511; p[2] = (w[0] >> 5) & 511; p[3] = (w[0] << 4) & 511; p[3] |= (w[1] >> 28); p[4] = (w[1] >> 19) & 511; p[5] = (w[1] >> 10) & 511; p[6] = (w[1] >> 1) & 511; p[7] = (w[1] << 8) & 511; p[7] |= (w[2] >> 24); p[8] = (w[2] >> 15) & 511; p[9] = (w[2] >> 6) & 511; p[10] = (w[2] << 3) & 511; p[10] |= (w[3] >> 29); p[11] = (w[3] >> 20) & 511; p[12] = (w[3] >> 11) & 511; p[13] = (w[3] >> 2) & 511; p[14] = (w[3] << 7) & 511; p[14] |= (w[4] >> 25); p[15] = (w[4] >> 16) & 511; p[16] = (w[4] >> 7) & 511; p[17] = (w[4] << 2) & 511; p[17] |= (w[5] >> 30); p[18] = (w[5] >> 21) & 511; p[19] = (w[5] >> 12) & 511; p[20] = (w[5] >> 3) & 511; p[21] = (w[5] << 6) & 511; p[21] |= (w[6] >> 26); p[22] = (w[6] >> 17) & 511; p[23] = (w[6] >> 8) & 511; p[24] = (w[6] << 1) & 511; p[24] |= (w[7] >> 31); p[25] = (w[7] >> 22) & 511; p[26] = (w[7] >> 13) & 511; p[27] = (w[7] >> 4) & 511; p[28] = (w[7] << 5) & 511; p[28] |= (w[8] >> 27); p[29] = (w[8] >> 18) & 511; p[30] = (w[8] >> 9) & 511; p[31] = (w[8]) & 511; } } void unpack10(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 10) { p[0] = (w[0] >> 22); p[1] = (w[0] >> 12) & 1023; p[2] = (w[0] >> 2) & 1023; p[3] = (w[0] << 8) & 1023; p[3] |= (w[1] >> 24); p[4] = (w[1] >> 14) & 1023; p[5] = (w[1] >> 4) & 1023; p[6] = (w[1] << 6) & 1023; p[6] |= (w[2] >> 26); p[7] = (w[2] >> 16) & 1023; p[8] = (w[2] >> 6) & 1023; p[9] = (w[2] << 4) & 1023; p[9] |= (w[3] >> 28); p[10] = (w[3] >> 18) & 1023; p[11] = (w[3] >> 8) & 1023; p[12] = (w[3] << 2) & 1023; p[12] |= (w[4] >> 30); p[13] = (w[4] >> 20) & 1023; p[14] = (w[4] >> 10) & 1023; p[15] = (w[4]) & 1023; p[16] = (w[5] >> 22); p[17] = (w[5] >> 12) & 1023; p[18] = (w[5] >> 2) & 1023; p[19] = (w[5] << 8) & 1023; p[19] |= (w[6] >> 24); p[20] = (w[6] >> 14) & 1023; p[21] = (w[6] >> 4) & 1023; p[22] = (w[6] << 6) & 1023; p[22] |= (w[7] >> 26); p[23] = (w[7] >> 16) & 1023; p[24] = (w[7] >> 6) & 1023; p[25] = (w[7] << 4) & 1023; p[25] |= (w[8] >> 28); p[26] = (w[8] >> 18) & 1023; p[27] = (w[8] >> 8) & 1023; p[28] = (w[8] << 2) & 1023; p[28] |= (w[9] >> 30); p[29] = (w[9] >> 20) & 1023; p[30] = (w[9] >> 10) & 1023; p[31] = (w[9]) & 1023; } } void unpack11(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 11) { p[0] = (w[0] >> 21); p[1] = (w[0] >> 10) & 2047; p[2] = (w[0] << 1) & 2047; p[2] |= (w[1] >> 31); p[3] = (w[1] >> 20) & 2047; p[4] = (w[1] >> 9) & 2047; p[5] = (w[1] << 2) & 2047; p[5] |= (w[2] >> 30); p[6] = (w[2] >> 19) & 2047; p[7] = (w[2] >> 8) & 2047; p[8] = (w[2] << 3) & 2047; p[8] |= (w[3] >> 29); p[9] = (w[3] >> 18) & 2047; p[10] = (w[3] >> 7) & 2047; p[11] = (w[3] << 4) & 2047; p[11] |= (w[4] >> 28); p[12] = (w[4] >> 17) & 2047; p[13] = (w[4] >> 6) & 2047; p[14] = (w[4] << 5) & 2047; p[14] |= (w[5] >> 27); p[15] = (w[5] >> 16) & 2047; p[16] = (w[5] >> 5) & 2047; p[17] = (w[5] << 6) & 2047; p[17] |= (w[6] >> 26); p[18] = (w[6] >> 15) & 2047; p[19] = (w[6] >> 4) & 2047; p[20] = (w[6] << 7) & 2047; p[20] |= (w[7] >> 25); p[21] = (w[7] >> 14) & 2047; p[22] = (w[7] >> 3) & 2047; p[23] = (w[7] << 8) & 2047; p[23] |= (w[8] >> 24); p[24] = (w[8] >> 13) & 2047; p[25] = (w[8] >> 2) & 2047; p[26] = (w[8] << 9) & 2047; p[26] |= (w[9] >> 23); p[27] = (w[9] >> 12) & 2047; p[28] = (w[9] >> 1) & 2047; p[29] = (w[9] << 10) & 2047; p[29] |= (w[10] >> 22); p[30] = (w[10] >> 11) & 2047; p[31] = (w[10]) & 2047; } } void unpack12(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 12) { p[0] = (w[0] >> 20); p[1] = (w[0] >> 8) & 4095; p[2] = (w[0] << 4) & 4095; p[2] |= (w[1] >> 28); p[3] = (w[1] >> 16) & 4095; p[4] = (w[1] >> 4) & 4095; p[5] = (w[1] << 8) & 4095; p[5] |= (w[2] >> 24); p[6] = (w[2] >> 12) & 4095; p[7] = (w[2]) & 4095; p[8] = (w[3] >> 20); p[9] = (w[3] >> 8) & 4095; p[10] = (w[3] << 4) & 4095; p[10] |= (w[4] >> 28); p[11] = (w[4] >> 16) & 4095; p[12] = (w[4] >> 4) & 4095; p[13] = (w[4] << 8) & 4095; p[13] |= (w[5] >> 24); p[14] = (w[5] >> 12) & 4095; p[15] = (w[5]) & 4095; p[16] = (w[6] >> 20); p[17] = (w[6] >> 8) & 4095; p[18] = (w[6] << 4) & 4095; p[18] |= (w[7] >> 28); p[19] = (w[7] >> 16) & 4095; p[20] = (w[7] >> 4) & 4095; p[21] = (w[7] << 8) & 4095; p[21] |= (w[8] >> 24); p[22] = (w[8] >> 12) & 4095; p[23] = (w[8]) & 4095; p[24] = (w[9] >> 20); p[25] = (w[9] >> 8) & 4095; p[26] = (w[9] << 4) & 4095; p[26] |= (w[10] >> 28); p[27] = (w[10] >> 16) & 4095; p[28] = (w[10] >> 4) & 4095; p[29] = (w[10] << 8) & 4095; p[29] |= (w[11] >> 24); p[30] = (w[11] >> 12) & 4095; p[31] = (w[11]) & 4095; } } void unpack13(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 13) { p[0] = (w[0] >> 19); p[1] = (w[0] >> 6) & 8191; p[2] = (w[0] << 7) & 8191; p[2] |= (w[1] >> 25); p[3] = (w[1] >> 12) & 8191; p[4] = (w[1] << 1) & 8191; p[4] |= (w[2] >> 31); p[5] = (w[2] >> 18) & 8191; p[6] = (w[2] >> 5) & 8191; p[7] = (w[2] << 8) & 8191; p[7] |= (w[3] >> 24); p[8] = (w[3] >> 11) & 8191; p[9] = (w[3] << 2) & 8191; p[9] |= (w[4] >> 30); p[10] = (w[4] >> 17) & 8191; p[11] = (w[4] >> 4) & 8191; p[12] = (w[4] << 9) & 8191; p[12] |= (w[5] >> 23); p[13] = (w[5] >> 10) & 8191; p[14] = (w[5] << 3) & 8191; p[14] |= (w[6] >> 29); p[15] = (w[6] >> 16) & 8191; p[16] = (w[6] >> 3) & 8191; p[17] = (w[6] << 10) & 8191; p[17] |= (w[7] >> 22); p[18] = (w[7] >> 9) & 8191; p[19] = (w[7] << 4) & 8191; p[19] |= (w[8] >> 28); p[20] = (w[8] >> 15) & 8191; p[21] = (w[8] >> 2) & 8191; p[22] = (w[8] << 11) & 8191; p[22] |= (w[9] >> 21); p[23] = (w[9] >> 8) & 8191; p[24] = (w[9] << 5) & 8191; p[24] |= (w[10] >> 27); p[25] = (w[10] >> 14) & 8191; p[26] = (w[10] >> 1) & 8191; p[27] = (w[10] << 12) & 8191; p[27] |= (w[11] >> 20); p[28] = (w[11] >> 7) & 8191; p[29] = (w[11] << 6) & 8191; p[29] |= (w[12] >> 26); p[30] = (w[12] >> 13) & 8191; p[31] = (w[12]) & 8191; } } void unpack16(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 16) { p[0] = (w[0] >> 16); p[1] = (w[0]) & 65535; p[2] = (w[1] >> 16); p[3] = (w[1]) & 65535; p[4] = (w[2] >> 16); p[5] = (w[2]) & 65535; p[6] = (w[3] >> 16); p[7] = (w[3]) & 65535; p[8] = (w[4] >> 16); p[9] = (w[4]) & 65535; p[10] = (w[5] >> 16); p[11] = (w[5]) & 65535; p[12] = (w[6] >> 16); p[13] = (w[6]) & 65535; p[14] = (w[7] >> 16); p[15] = (w[7]) & 65535; p[16] = (w[8] >> 16); p[17] = (w[8]) & 65535; p[18] = (w[9] >> 16); p[19] = (w[9]) & 65535; p[20] = (w[10] >> 16); p[21] = (w[10]) & 65535; p[22] = (w[11] >> 16); p[23] = (w[11]) & 65535; p[24] = (w[12] >> 16); p[25] = (w[12]) & 65535; p[26] = (w[13] >> 16); p[27] = (w[13]) & 65535; p[28] = (w[14] >> 16); p[29] = (w[14]) & 65535; p[30] = (w[15] >> 16); p[31] = (w[15]) & 65535; } } void unpack20(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 20) { p[0] = (w[0] >> 12); p[1] = (w[0] << 8) & ((1<<20)-1); p[1] |= (w[1] >> 24); p[2] = (w[1] >> 4) & ((1<<20)-1); p[3] = (w[1] << 16) & ((1<<20)-1); p[3] |= (w[2] >> 16); p[4] = (w[2] << 4) & ((1<<20)-1); p[4] |= (w[3] >> 28); p[5] = (w[3] >> 8) & ((1<<20)-1); p[6] = (w[3] << 12) & ((1<<20)-1); p[6] |= (w[4] >> 20); p[7] = (w[4]) & ((1<<20)-1); p[8] = (w[5] >> 12); p[9] = (w[5] << 8) & ((1<<20)-1); p[9] |= (w[6] >> 24); p[10] = (w[6] >> 4) & ((1<<20)-1); p[11] = (w[6] << 16) & ((1<<20)-1); p[11] |= (w[7] >> 16); p[12] = (w[7] << 4) & ((1<<20)-1); p[12] |= (w[8] >> 28); p[13] = (w[8] >> 8) & ((1<<20)-1); p[14] = (w[8] << 12) & ((1<<20)-1); p[14] |= (w[9] >> 20); p[15] = (w[9]) & ((1<<20)-1); p[16] = (w[10] >> 12); p[17] = (w[10] << 8) & ((1<<20)-1); p[17] |= (w[11] >> 24); p[18] = (w[11] >> 4) & ((1<<20)-1); p[19] = (w[11] << 16) & ((1<<20)-1); p[19] |= (w[12] >> 16); p[20] = (w[12] << 4) & ((1<<20)-1); p[20] |= (w[13] >> 28); p[21] = (w[13] >> 8) & ((1<<20)-1); p[22] = (w[13] << 12) & ((1<<20)-1); p[22] |= (w[14] >> 20); p[23] = (w[14]) & ((1<<20)-1); p[24] = (w[15] >> 12); p[25] = (w[15] << 8) & ((1<<20)-1); p[25] |= (w[16] >> 24); p[26] = (w[16] >> 4) & ((1<<20)-1); p[27] = (w[16] << 16) & ((1<<20)-1); p[27] |= (w[17] >> 16); p[28] = (w[17] << 4) & ((1<<20)-1); p[28] |= (w[18] >> 28); p[29] = (w[18] >> 8) & ((1<<20)-1); p[30] = (w[18] << 12) & ((1<<20)-1); p[30] |= (w[19] >> 20); p[31] = (w[19]) & ((1<<20)-1); } } static void unpack32(unsigned int *p, unsigned int *w) { int i; for (i = 0; i < BS; i += 32, p += 32, w += 32) { p[0] = w[0]; p[1] = w[1]; p[2] = w[2]; p[3] = w[3]; p[4] = w[4]; p[5] = w[5]; p[6] = w[6]; p[7] = w[7]; p[8] = w[8]; p[9] = w[9]; p[10] = w[10]; p[11] = w[11]; p[12] = w[12]; p[13] = w[13]; p[14] = w[14]; p[15] = w[15]; p[16] = w[16]; p[17] = w[17]; p[18] = w[18]; p[19] = w[19]; p[20] = w[20]; p[21] = w[21]; p[22] = w[22]; p[23] = w[23]; p[24] = w[24]; p[25] = w[25]; p[26] = w[26]; p[27] = w[27]; p[28] = w[28]; p[29] = w[29]; p[30] = w[30]; p[31] = w[31]; } } typedef void (*pf)(unsigned int *p, unsigned int *w); pf unpack[17] = {unpack0, unpack1, unpack2, unpack3, unpack4, unpack5, unpack6, unpack7, unpack8, unpack9, unpack10, unpack11, unpack12, unpack13, unpack16, unpack20, unpack32};