gzip: code shrink

function                                             old     new   delta
send_bits                                             92      70     -22

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-01-30 22:37:06 +01:00
parent 9c499a5af4
commit e4c4e6ddc3

View File

@ -358,7 +358,7 @@ struct globals {
unsigned short bi_buf;
#undef BUF_SIZE
#define BUF_SIZE (8 * sizeof(G1.bi_buf))
#define BUF_SIZE (int)(8 * sizeof(G1.bi_buf))
/* Number of bits used within bi_buf. (bi_buf might be implemented on
* more than 16 bits on some systems.)
@ -522,24 +522,29 @@ static unsigned file_read(void *buf, unsigned size)
*/
static void send_bits(int value, int length)
{
unsigned new_buf;
int remain;
#ifdef DEBUG
Tracev((stderr, " l %2d v %4x ", length, value));
Assert(length > 0 && length <= 15, "invalid length");
G1.bits_sent += length;
#endif
/* If not enough room in bi_buf, use (valid) bits from bi_buf and
* (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
* unused bits in value.
new_buf = G1.bi_buf | (value << G1.bi_valid);
remain = BUF_SIZE - G1.bi_valid;
/* If not enough room in bi_buf */
if (length > remain) {
/* ...use (valid) bits from bi_buf and
* (16 - bi_valid) bits from value,
* leaving (width - (16-bi_valid)) unused bits in value.
*/
if (G1.bi_valid > (int) BUF_SIZE - length) {
G1.bi_buf |= (value << G1.bi_valid);
put_16bit(G1.bi_buf);
G1.bi_buf = (ush) value >> (BUF_SIZE - G1.bi_valid);
G1.bi_valid += length - BUF_SIZE;
} else {
G1.bi_buf |= value << G1.bi_valid;
G1.bi_valid += length;
put_16bit(new_buf);
new_buf = (ush) value >> remain;
length -= BUF_SIZE;
}
G1.bi_buf = new_buf;
G1.bi_valid += length;
}