aboutsummaryrefslogtreecommitdiff
path: root/src/liblzma/rangecoder
diff options
context:
space:
mode:
Diffstat (limited to 'src/liblzma/rangecoder')
-rw-r--r--src/liblzma/rangecoder/Makefile.am8
-rw-r--r--src/liblzma/rangecoder/price.h16
-rw-r--r--src/liblzma/rangecoder/price_table.c2
-rw-r--r--src/liblzma/rangecoder/price_table_init.c55
-rw-r--r--src/liblzma/rangecoder/price_tablegen.c51
5 files changed, 49 insertions, 83 deletions
diff --git a/src/liblzma/rangecoder/Makefile.am b/src/liblzma/rangecoder/Makefile.am
index b2e62d4a..a202e34e 100644
--- a/src/liblzma/rangecoder/Makefile.am
+++ b/src/liblzma/rangecoder/Makefile.am
@@ -24,12 +24,8 @@ librangecoder_la_CPPFLAGS = \
if COND_ENCODER_LZMA1
librangecoder_la_SOURCES += \
range_encoder.h \
- price.h
-if COND_SMALL
-librangecoder_la_SOURCES += price_table_init.c
-else
-librangecoder_la_SOURCES += price_table.c
-endif
+ price.h \
+ price_table.c
endif
if COND_DECODER_LZMA1
diff --git a/src/liblzma/rangecoder/price.h b/src/liblzma/rangecoder/price.h
index 001f753d..e336885c 100644
--- a/src/liblzma/rangecoder/price.h
+++ b/src/liblzma/rangecoder/price.h
@@ -28,20 +28,8 @@
#define RC_INFINITY_PRICE (UINT32_C(1) << 30)
-#if !defined(LZMA_RANGE_ENCODER_H) || defined(HAVE_SMALL)
-/// Probability prices used by *_get_price() macros. This is initialized
-/// by lzma_rc_init() and is not modified later.
-extern uint32_t lzma_rc_prices[RC_PRICE_TABLE_SIZE];
-
-/// Initializes lzma_rc_prices[]. This needs to be called only once.
-extern void lzma_rc_init(void);
-
-#else
-// Not building a size optimized version, so we use a precomputed
-// constant table.
-extern const uint32_t lzma_rc_prices[RC_PRICE_TABLE_SIZE];
-
-#endif
+/// Lookup table for the inline functions defined in this file.
+extern const uint8_t lzma_rc_prices[RC_PRICE_TABLE_SIZE];
static inline uint32_t
diff --git a/src/liblzma/rangecoder/price_table.c b/src/liblzma/rangecoder/price_table.c
index 539206b1..ac64bf62 100644
--- a/src/liblzma/rangecoder/price_table.c
+++ b/src/liblzma/rangecoder/price_table.c
@@ -2,7 +2,7 @@
#include "range_encoder.h"
-const uint32_t lzma_rc_prices[RC_PRICE_TABLE_SIZE] = {
+const uint8_t lzma_rc_prices[RC_PRICE_TABLE_SIZE] = {
128, 103, 91, 84, 78, 73, 69, 66,
63, 61, 58, 56, 54, 52, 51, 49,
48, 46, 45, 44, 43, 42, 41, 40,
diff --git a/src/liblzma/rangecoder/price_table_init.c b/src/liblzma/rangecoder/price_table_init.c
deleted file mode 100644
index 9c7d799b..00000000
--- a/src/liblzma/rangecoder/price_table_init.c
+++ /dev/null
@@ -1,55 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-//
-/// \file price_table_init.c
-/// \brief Static initializations for the range encoder's prices array
-//
-// Copyright (C) 1999-2006 Igor Pavlov
-// Copyright (C) 2007 Lasse Collin
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifdef HAVE_CONFIG_H
-# include "range_encoder.h"
-#endif
-
-
-uint32_t lzma_rc_prices[RC_PRICE_TABLE_SIZE];
-
-
-extern void
-lzma_rc_init(void)
-{
- for (uint32_t i = (UINT32_C(1) << RC_MOVE_REDUCING_BITS) / 2;
- i < RC_BIT_MODEL_TOTAL;
- i += (UINT32_C(1) << RC_MOVE_REDUCING_BITS)) {
- const uint32_t cycles_bits = RC_BIT_PRICE_SHIFT_BITS;
- uint32_t w = i;
- uint32_t bit_count = 0;
-
- for (uint32_t j = 0; j < cycles_bits; ++j) {
- w *= w;
- bit_count <<= 1;
-
- while (w >= (UINT32_C(1) << 16)) {
- w >>= 1;
- ++bit_count;
- }
- }
-
- lzma_rc_prices[i >> RC_MOVE_REDUCING_BITS]
- = (RC_BIT_MODEL_TOTAL_BITS << cycles_bits)
- - 15 - bit_count;
- }
-
- return;
-}
diff --git a/src/liblzma/rangecoder/price_tablegen.c b/src/liblzma/rangecoder/price_tablegen.c
index 68513635..4895ac76 100644
--- a/src/liblzma/rangecoder/price_tablegen.c
+++ b/src/liblzma/rangecoder/price_tablegen.c
@@ -19,23 +19,51 @@
//
///////////////////////////////////////////////////////////////////////////////
-#include <stddef.h>
#include <inttypes.h>
#include <stdio.h>
#include "range_common.h"
#include "price.h"
-#include "price_table_init.c"
-int
-main(void)
+static uint32_t rc_prices[RC_PRICE_TABLE_SIZE];
+
+
+static void
+init_price_table(void)
{
- lzma_rc_init();
+ for (uint32_t i = (UINT32_C(1) << RC_MOVE_REDUCING_BITS) / 2;
+ i < RC_BIT_MODEL_TOTAL;
+ i += (UINT32_C(1) << RC_MOVE_REDUCING_BITS)) {
+ const uint32_t cycles_bits = RC_BIT_PRICE_SHIFT_BITS;
+ uint32_t w = i;
+ uint32_t bit_count = 0;
+
+ for (uint32_t j = 0; j < cycles_bits; ++j) {
+ w *= w;
+ bit_count <<= 1;
+
+ while (w >= (UINT32_C(1) << 16)) {
+ w >>= 1;
+ ++bit_count;
+ }
+ }
+
+ rc_prices[i >> RC_MOVE_REDUCING_BITS]
+ = (RC_BIT_MODEL_TOTAL_BITS << cycles_bits)
+ - 15 - bit_count;
+ }
+
+ return;
+}
+
+static void
+print_price_table(void)
+{
printf("/* This file has been automatically generated by "
"price_tablegen.c. */\n\n"
"#include \"range_encoder.h\"\n\n"
- "const uint32_t lzma_rc_prices["
+ "const uint8_t lzma_rc_prices["
"RC_PRICE_TABLE_SIZE] = {");
const size_t array_size = sizeof(lzma_rc_prices)
@@ -44,7 +72,7 @@ main(void)
if (i % 8 == 0)
printf("\n\t");
- printf("%4" PRIu32, lzma_rc_prices[i]);
+ printf("%4" PRIu32, rc_prices[i]);
if (i != array_size - 1)
printf(",");
@@ -52,5 +80,14 @@ main(void)
printf("\n};\n");
+ return;
+}
+
+
+int
+main(void)
+{
+ init_price_table();
+ print_price_table();
return 0;
}