[git commit] bzip2: have two separate "store bit 0" and "store bit 1" functions

Denys Vlasenko vda.linux at googlemail.com
Sat Feb 3 13:56:43 UTC 2018


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

function                                             old     new   delta
sendMTFValues                                       2051    2085     +34
bsW1_0                                                 -      33     +33
BZ2_compressBlock                                    225     223      -2
bsW1                                                  52       -     -52
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 1/1 up/down: 67/-54)             Total: 13 bytes

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 archival/libarchive/bz/compress.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/archival/libarchive/bz/compress.c b/archival/libarchive/bz/compress.c
index 4d0f77592..fc6af6595 100644
--- a/archival/libarchive/bz/compress.c
+++ b/archival/libarchive/bz/compress.c
@@ -90,10 +90,23 @@ void bsW16(EState* s, uint32_t v)
 }
 /* Same with n == 1: */
 static
+ALWAYS_INLINE /* one callsite */
+void bsW1_1(EState* s)
+{
+	/* need space for only 1 bit, no need for loop freeing > 8 bits */
+	if (s->bsLive >= 8) {
+		*s->posZ++ = (uint8_t)(s->bsBuff >> 24);
+		s->bsBuff <<= 8;
+		s->bsLive -= 8;
+	}
+	s->bsBuff |= (1 << (31 - s->bsLive));
+	s->bsLive += 1;
+}
+static
 #if CONFIG_BZIP2_FAST >= 5
 ALWAYS_INLINE
 #endif
-void bsW1(EState* s, uint32_t v)
+void bsW1_0(EState* s)
 {
 	/* need space for only 1 bit, no need for loop freeing > 8 bits */
 	if (s->bsLive >= 8) {
@@ -101,7 +114,7 @@ void bsW1(EState* s, uint32_t v)
 		s->bsBuff <<= 8;
 		s->bsLive -= 8;
 	}
-	s->bsBuff |= (v << (31 - s->bsLive));
+	//s->bsBuff |= (0 << (31 - s->bsLive));
 	s->bsLive += 1;
 }
 
@@ -573,8 +586,8 @@ void sendMTFValues(EState* s)
 	for (i = 0; i < nSelectors; i++) {
 		unsigned j;
 		for (j = 0; j < s->selectorMtf[i]; j++)
-			bsW1(s, 1);
-		bsW1(s, 0);
+			bsW1_1(s);
+		bsW1_0(s);
 	}
 
 	/*--- Now the coding tables. ---*/
@@ -584,7 +597,7 @@ void sendMTFValues(EState* s)
 		for (i = 0; i < alphaSize; i++) {
 			while (curr < s->len[t][i]) { bsW(s, 2, 2); curr++; /* 10 */ };
 			while (curr > s->len[t][i]) { bsW(s, 2, 3); curr--; /* 11 */ };
-			bsW1(s, 0);
+			bsW1_0(s);
 		}
 	}
 
@@ -698,7 +711,7 @@ void BZ2_compressBlock(EState* s, int is_last_block)
 		 * so as to maintain backwards compatibility with
 		 * older versions of bzip2.
 		 */
-		bsW1(s, 0);
+		bsW1_0(s);
 
 		bsW(s, 24, s->origPtr);
 		generateMTFValues(s);


More information about the busybox-cvs mailing list