diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-02-02 20:59:28 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-02-02 20:59:28 +0100 |
commit | 125c3ff4b10ee36b757924b3c55b3ac34e902120 (patch) | |
tree | f30e2c9ac1f4f7b28f1782f98b24c91203fdc10c | |
parent | da49e7057a6efada17ba43d046770c95d0bd71a6 (diff) | |
download | busybox-w32-125c3ff4b10ee36b757924b3c55b3ac34e902120.tar.gz busybox-w32-125c3ff4b10ee36b757924b3c55b3ac34e902120.tar.bz2 busybox-w32-125c3ff4b10ee36b757924b3c55b3ac34e902120.zip |
bzip2: code shrink
function old new delta
bsW16 - 59 +59
sendMTFValues 2116 2111 -5
bsPutU16 36 - -36
bsPutU32 76 31 -45
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 0/2 up/down: 59/-86) Total: -27 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | archival/libarchive/bz/compress.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/archival/libarchive/bz/compress.c b/archival/libarchive/bz/compress.c index 2d994685c..c640173e5 100644 --- a/archival/libarchive/bz/compress.c +++ b/archival/libarchive/bz/compress.c | |||
@@ -75,25 +75,39 @@ void bsW(EState* s, int32_t n, uint32_t v) | |||
75 | s->bsBuff |= (v << (32 - s->bsLive - n)); | 75 | s->bsBuff |= (v << (32 - s->bsLive - n)); |
76 | s->bsLive += n; | 76 | s->bsLive += n; |
77 | } | 77 | } |
78 | /* Same with n == 16: */ | ||
79 | static | ||
80 | #if CONFIG_BZIP2_FAST >= 5 | ||
81 | ALWAYS_INLINE | ||
82 | #endif | ||
83 | void bsW16(EState* s, uint32_t v) | ||
84 | { | ||
85 | while (s->bsLive >= 8) { | ||
86 | s->zbits[s->numZ] = (uint8_t)(s->bsBuff >> 24); | ||
87 | s->numZ++; | ||
88 | s->bsBuff <<= 8; | ||
89 | s->bsLive -= 8; | ||
90 | } | ||
91 | s->bsBuff |= (v << (16 - s->bsLive)); | ||
92 | s->bsLive += 16; | ||
93 | } | ||
78 | 94 | ||
79 | 95 | ||
80 | /*---------------------------------------------------*/ | 96 | /*---------------------------------------------------*/ |
81 | static | 97 | static ALWAYS_INLINE |
82 | void bsPutU32(EState* s, unsigned u) | 98 | void bsPutU16(EState* s, unsigned u) |
83 | { | 99 | { |
84 | bsW(s, 8, (u >> 24) & 0xff); | 100 | bsW16(s, u); |
85 | bsW(s, 8, (u >> 16) & 0xff); | ||
86 | bsW(s, 8, (u >> 8) & 0xff); | ||
87 | bsW(s, 8, u & 0xff); | ||
88 | } | 101 | } |
89 | 102 | ||
90 | 103 | ||
91 | /*---------------------------------------------------*/ | 104 | /*---------------------------------------------------*/ |
92 | static | 105 | static |
93 | void bsPutU16(EState* s, unsigned u) | 106 | void bsPutU32(EState* s, unsigned u) |
94 | { | 107 | { |
95 | bsW(s, 8, (u >> 8) & 0xff); | 108 | //bsW(s, 32, u); // can't use: may try "uint32 << -n" |
96 | bsW(s, 8, u & 0xff); | 109 | bsW16(s, (u >> 16) & 0xffff); |
110 | bsW16(s, u & 0xffff); | ||
97 | } | 111 | } |
98 | 112 | ||
99 | 113 | ||
@@ -509,7 +523,7 @@ void sendMTFValues(EState* s) | |||
509 | } | 523 | } |
510 | } | 524 | } |
511 | 525 | ||
512 | bsW(s, 16, inUse16); | 526 | bsW16(s, inUse16); |
513 | 527 | ||
514 | inUse16 <<= (sizeof(int)*8 - 16); /* move 15th bit into sign bit */ | 528 | inUse16 <<= (sizeof(int)*8 - 16); /* move 15th bit into sign bit */ |
515 | for (i = 0; i < 16; i++) { | 529 | for (i = 0; i < 16; i++) { |
@@ -517,7 +531,7 @@ void sendMTFValues(EState* s) | |||
517 | unsigned v16 = 0; | 531 | unsigned v16 = 0; |
518 | for (j = 0; j < 16; j++) | 532 | for (j = 0; j < 16; j++) |
519 | v16 = v16*2 + s->inUse[i * 16 + j]; | 533 | v16 = v16*2 + s->inUse[i * 16 + j]; |
520 | bsW(s, 16, v16); | 534 | bsW16(s, v16); |
521 | } | 535 | } |
522 | inUse16 <<= 1; | 536 | inUse16 <<= 1; |
523 | } | 537 | } |