summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Kristian Rosbach <hk-git@circlestorm.org>2025-08-22 09:39:25 +0200
committerHans Kristian Rosbach <hk-github@circlestorm.org>2025-08-23 17:26:45 +0200
commit4378e4352369ce344ae1dcdb9a3bbfd145391004 (patch)
treef48fe5a1cbd80ee01a0587a0cfe03a74bb7c1eb1
parent4c6ec4c5517b1950442225a97c8391626dca1bfe (diff)
downloadProject-Tick-4378e4352369ce344ae1dcdb9a3bbfd145391004.tar.gz
Project-Tick-4378e4352369ce344ae1dcdb9a3bbfd145391004.zip
Inline bi_reverse
-rw-r--r--arch/s390/dfltcc_deflate.c3
-rw-r--r--deflate.h1
-rw-r--r--deflate_p.h12
-rw-r--r--tools/maketrees.c3
-rw-r--r--trees.c15
5 files changed, 18 insertions, 16 deletions
diff --git a/arch/s390/dfltcc_deflate.c b/arch/s390/dfltcc_deflate.c
index 90b4b96e9c..8216771f3d 100644
--- a/arch/s390/dfltcc_deflate.c
+++ b/arch/s390/dfltcc_deflate.c
@@ -15,6 +15,7 @@
#include "zbuild.h"
#include "deflate.h"
+#include "deflate_p.h"
#include "trees_emit.h"
#include "dfltcc_deflate.h"
#include "dfltcc_detail.h"
@@ -90,7 +91,7 @@ static inline dfltcc_cc dfltcc_cmpr(PREFIX3(streamp) strm) {
static inline void send_eobs(PREFIX3(streamp) strm, const struct dfltcc_param_v0 *param) {
deflate_state *state = (deflate_state *)strm->state;
- send_bits(state, PREFIX(bi_reverse)(param->eobs >> (15 - param->eobl), param->eobl), param->eobl, state->bi_buf, state->bi_valid);
+ send_bits(state, bi_reverse(param->eobs >> (15 - param->eobl), param->eobl), param->eobl, state->bi_buf, state->bi_valid);
PREFIX(flush_pending)(strm);
if (state->pending != 0) {
/* The remaining data is located in pending_out[0:pending]. If someone
diff --git a/deflate.h b/deflate.h
index 02d68211a3..e6b0108850 100644
--- a/deflate.h
+++ b/deflate.h
@@ -432,7 +432,6 @@ void Z_INTERNAL zng_tr_flush_block(deflate_state *s, char *buf, uint32_t stored_
void Z_INTERNAL zng_tr_flush_bits(deflate_state *s);
void Z_INTERNAL zng_tr_align(deflate_state *s);
void Z_INTERNAL zng_tr_stored_block(deflate_state *s, char *buf, uint32_t stored_len, int last);
-uint16_t Z_INTERNAL PREFIX(bi_reverse)(unsigned code, int len);
void Z_INTERNAL PREFIX(flush_pending)(PREFIX3(streamp) strm);
#define d_code(dist) ((dist) < 256 ? zng_dist_code[dist] : zng_dist_code[256+((dist)>>7)])
/* Mapping from a distance to a distance code. dist is the distance - 1 and
diff --git a/deflate_p.h b/deflate_p.h
index abcc8b1c7c..24d1c35b1d 100644
--- a/deflate_p.h
+++ b/deflate_p.h
@@ -98,6 +98,18 @@ static inline int zng_tr_tally_dist(deflate_state* s, uint32_t dist, uint32_t le
}
/* ===========================================================================
+ * Reverse the first len bits of a code using bit manipulation
+ */
+static inline uint16_t bi_reverse(unsigned code, int len) {
+ /* code: the value to invert */
+ /* len: its bit length */
+ Assert(len >= 1 && len <= 15, "code length must be 1-15");
+#define bitrev8(b) \
+ (uint8_t)((((uint8_t)(b) * 0x80200802ULL) & 0x0884422110ULL) * 0x0101010101ULL >> 32)
+ return (bitrev8(code >> 8) | (uint16_t)bitrev8(code) << 8) >> (16 - len);
+}
+
+/* ===========================================================================
* Flush the current block, with given end-of-file flag.
* IN assertion: strstart is set to the end of the current match.
*/
diff --git a/tools/maketrees.c b/tools/maketrees.c
index 2c32ccae08..317c2d46b4 100644
--- a/tools/maketrees.c
+++ b/tools/maketrees.c
@@ -6,6 +6,7 @@
#include <stdio.h>
#include "zbuild.h"
#include "deflate.h"
+#include "deflate_p.h"
#include "trees.h"
static ct_data static_ltree[L_CODES+2];
@@ -90,7 +91,7 @@ static void tr_static_init(void) {
/* The static distance tree is trivial: */
for (n = 0; n < D_CODES; n++) {
static_dtree[n].Len = 5;
- static_dtree[n].Code = PREFIX(bi_reverse)((unsigned)n, 5);
+ static_dtree[n].Code = bi_reverse((unsigned)n, 5);
}
}
diff --git a/trees.c b/trees.c
index 8debd63f3c..5fc1fc924b 100644
--- a/trees.c
+++ b/trees.c
@@ -32,6 +32,7 @@
#include "zbuild.h"
#include "deflate.h"
+#include "deflate_p.h"
#include "trees.h"
#include "trees_emit.h"
#include "trees_tbl.h"
@@ -399,7 +400,7 @@ Z_INTERNAL void gen_codes(ct_data *tree, int max_code, uint16_t *bl_count) {
if (len == 0)
continue;
/* Now reverse the bits */
- tree[n].Code = PREFIX(bi_reverse)(next_code[len]++, len);
+ tree[n].Code = bi_reverse(next_code[len]++, len);
Tracecv(tree != static_ltree, (stderr, "\nn %3d %c l %2d c %4x (%x) ",
n, (isgraph(n & 0xff) ? n : ' '), len, tree[n].Code, next_code[len]-1));
@@ -815,15 +816,3 @@ void Z_INTERNAL zng_tr_flush_bits(deflate_state *s) {
s->bi_valid -= 8;
}
}
-
-/* ===========================================================================
- * Reverse the first len bits of a code using bit manipulation
- */
-Z_INTERNAL uint16_t PREFIX(bi_reverse)(unsigned code, int len) {
- /* code: the value to invert */
- /* len: its bit length */
- Assert(len >= 1 && len <= 15, "code length must be 1-15");
-#define bitrev8(b) \
- (uint8_t)((((uint8_t)(b) * 0x80200802ULL) & 0x0884422110ULL) * 0x0101010101ULL >> 32)
- return (bitrev8(code >> 8) | (uint16_t)bitrev8(code) << 8) >> (16 - len);
-}