Commit 2fbc4ad9 authored by Moritz Hanke's avatar Moritz Hanke Committed by Thomas Jahns

unrolling

parent 790a3612
......@@ -167,7 +167,6 @@ EMITBLOCK_FS(1);
Emit the k LSB of a whole block of input data. \
*/ \
\
int b; \
uint64_t a; \
struct internal_state *state = strm->state; \
uint32_t *in = state->block + ref; \
......@@ -187,9 +186,65 @@ EMITBLOCK_FS(1);
a += ((uint64_t)(*in++) & mask) << p; \
} \
\
for (b = 56; b > (p & ~7); b -= 8) \
*o++ = a >> b; \
a >>= b; \
switch (p & ~ 7) { \
case 0: \
o[0] = a >> 56; \
o[1] = a >> 48; \
o[2] = a >> 40; \
o[3] = a >> 32; \
o[4] = a >> 24; \
o[5] = a >> 16; \
o[6] = a >> 8; \
o += 7; \
break; \
case 8: \
o[0] = a >> 56; \
o[1] = a >> 48; \
o[2] = a >> 40; \
o[3] = a >> 32; \
o[4] = a >> 24; \
o[5] = a >> 16; \
a >>= 8; \
o += 6; \
break; \
case 16: \
o[0] = a >> 56; \
o[1] = a >> 48; \
o[2] = a >> 40; \
o[3] = a >> 32; \
o[4] = a >> 24; \
a >>= 16; \
o += 5; \
break; \
case 24: \
o[0] = a >> 56; \
o[1] = a >> 48; \
o[2] = a >> 40; \
o[3] = a >> 32; \
a >>= 24; \
o += 4; \
break; \
case 32: \
o[0] = a >> 56; \
o[1] = a >> 48; \
o[2] = a >> 40; \
a >>= 32; \
o += 3; \
break; \
case 40: \
o[0] = a >> 56; \
o[1] = a >> 48; \
a >>= 40; \
o += 2; \
break; \
case 48: \
*o++ = a >> 56; \
a >>= 48; \
break; \
default: \
a >>= 56; \
break; \
} \
} \
\
*o = a; \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment