static void _t2(rev_inv_xform, Int, DIMS)(Int* p);
static void
_t1(rev_inv_lift, Int)(Int* p, uint s)
{
Int x, y, z, w;
x = *p; p += s;
y = *p; p += s;
z = *p; p += s;
w = *p; p += s;
w += z;
z += y; w += z;
y += x; z += y; w += z;
p -= s; *p = w;
p -= s; *p = z;
p -= s; *p = y;
p -= s; *p = x;
}
static uint
_t2(rev_decode_block, Int, DIMS)(bitstream* stream, int minbits, int maxbits, Int* iblock)
{
int bits = PBITS;
int prec = (int)stream_read_bits(stream, PBITS) + 1;
cache_align_(UInt ublock[BLOCK_SIZE]);
bits += _t1(decode_ints, UInt)(stream, maxbits - bits, prec, ublock, BLOCK_SIZE);
if (bits < minbits) {
stream_skip(stream, minbits - bits);
bits = minbits;
}
_t1(inv_order, Int)(ublock, iblock, PERM, BLOCK_SIZE);
_t2(rev_inv_xform, Int, DIMS)(iblock);
return bits;
}