[git commit] bzip2: code shrink

Denys Vlasenko vda.linux at googlemail.com
Fri Feb 2 19:59:28 UTC 2018


commit: https://git.busybox.net/busybox/commit/?id=125c3ff4b10ee36b757924b3c55b3ac34e902120
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

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 at googlemail.com>
---
 archival/libarchive/bz/compress.c | 36 +++++++++++++++++++++++++-----------
 1 file 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)
 	s->bsBuff |= (v << (32 - s->bsLive - n));
 	s->bsLive += n;
 }
+/* Same with n == 16: */
+static
+#if CONFIG_BZIP2_FAST >= 5
+ALWAYS_INLINE
+#endif
+void bsW16(EState* s, uint32_t v)
+{
+	while (s->bsLive >= 8) {
+		s->zbits[s->numZ] = (uint8_t)(s->bsBuff >> 24);
+		s->numZ++;
+		s->bsBuff <<= 8;
+		s->bsLive -= 8;
+	}
+	s->bsBuff |= (v << (16 - s->bsLive));
+	s->bsLive += 16;
+}
 
 
 /*---------------------------------------------------*/
-static
-void bsPutU32(EState* s, unsigned u)
+static ALWAYS_INLINE
+void bsPutU16(EState* s, unsigned u)
 {
-	bsW(s, 8, (u >> 24) & 0xff);
-	bsW(s, 8, (u >> 16) & 0xff);
-	bsW(s, 8, (u >>  8) & 0xff);
-	bsW(s, 8,  u        & 0xff);
+	bsW16(s, u);
 }
 
 
 /*---------------------------------------------------*/
 static
-void bsPutU16(EState* s, unsigned u)
+void bsPutU32(EState* s, unsigned u)
 {
-	bsW(s, 8, (u >>  8) & 0xff);
-	bsW(s, 8,  u        & 0xff);
+	//bsW(s, 32, u); // can't use: may try "uint32 << -n"
+	bsW16(s, (u >> 16) & 0xffff);
+	bsW16(s, u         & 0xffff);
 }
 
 
@@ -509,7 +523,7 @@ void sendMTFValues(EState* s)
 			}
 		}
 
-		bsW(s, 16, inUse16);
+		bsW16(s, inUse16);
 
 		inUse16 <<= (sizeof(int)*8 - 16); /* move 15th bit into sign bit */
 		for (i = 0; i < 16; i++) {
@@ -517,7 +531,7 @@ void sendMTFValues(EState* s)
 				unsigned v16 = 0;
 				for (j = 0; j < 16; j++)
 					v16 = v16*2 + s->inUse[i * 16 + j];
-				bsW(s, 16, v16);
+				bsW16(s, v16);
 			}
 			inUse16 <<= 1;
 		}


More information about the busybox-cvs mailing list