| Index: third_party/brotli/dec/huffman.c
|
| diff --git a/third_party/brotli/dec/huffman.c b/third_party/brotli/dec/huffman.c
|
| index 3775ffe7e920f4cf1e1a5e95d1dfc7fb3d80182f..37da2a563959689bf97c658d032632d434bfef78 100644
|
| --- a/third_party/brotli/dec/huffman.c
|
| +++ b/third_party/brotli/dec/huffman.c
|
| @@ -10,8 +10,9 @@
|
|
|
| #include <string.h> /* memcpy, memset */
|
|
|
| +#include "../common/constants.h"
|
| +#include <brotli/types.h>
|
| #include "./port.h"
|
| -#include "./types.h"
|
|
|
| #if defined(__cplusplus) || defined(c_plusplus)
|
| extern "C" {
|
| @@ -20,7 +21,8 @@ extern "C" {
|
| #define BROTLI_REVERSE_BITS_MAX 8
|
|
|
| #ifdef BROTLI_RBIT
|
| -#define BROTLI_REVERSE_BITS_BASE (32 - BROTLI_REVERSE_BITS_MAX)
|
| +#define BROTLI_REVERSE_BITS_BASE \
|
| + ((sizeof(reg_t) << 3) - BROTLI_REVERSE_BITS_MAX)
|
| #else
|
| #define BROTLI_REVERSE_BITS_BASE 0
|
| static uint8_t kReverseBits[1 << BROTLI_REVERSE_BITS_MAX] = {
|
| @@ -60,12 +62,12 @@ static uint8_t kReverseBits[1 << BROTLI_REVERSE_BITS_MAX] = {
|
| #endif /* BROTLI_RBIT */
|
|
|
| #define BROTLI_REVERSE_BITS_LOWEST \
|
| - (1U << (BROTLI_REVERSE_BITS_MAX - 1 + BROTLI_REVERSE_BITS_BASE))
|
| + ((reg_t)1 << (BROTLI_REVERSE_BITS_MAX - 1 + BROTLI_REVERSE_BITS_BASE))
|
|
|
| /* Returns reverse(num >> BROTLI_REVERSE_BITS_BASE, BROTLI_REVERSE_BITS_MAX),
|
| where reverse(value, len) is the bit-wise reversal of the len least
|
| significant bits of value. */
|
| -static BROTLI_INLINE uint32_t BrotliReverseBits(uint32_t num) {
|
| +static BROTLI_INLINE reg_t BrotliReverseBits(reg_t num) {
|
| #ifdef BROTLI_RBIT
|
| return BROTLI_RBIT(num);
|
| #else
|
| @@ -102,13 +104,13 @@ static BROTLI_INLINE int NextTableBitSize(const uint16_t* const count,
|
| void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table,
|
| const uint8_t* const code_lengths,
|
| uint16_t* count) {
|
| - HuffmanCode code; /* current table entry */
|
| - int symbol; /* symbol index in original or sorted table */
|
| - uint32_t key; /* prefix code */
|
| - uint32_t key_step; /* prefix code addend */
|
| - int step; /* step size to replicate values in current table */
|
| - int table_size; /* size of current table */
|
| - int sorted[18]; /* symbols sorted by code length */
|
| + HuffmanCode code; /* current table entry */
|
| + int symbol; /* symbol index in original or sorted table */
|
| + reg_t key; /* prefix code */
|
| + reg_t key_step; /* prefix code addend */
|
| + int step; /* step size to replicate values in current table */
|
| + int table_size; /* size of current table */
|
| + int sorted[BROTLI_CODE_LENGTH_CODES]; /* symbols sorted by code length */
|
| /* offsets in sorted table for each length */
|
| int offset[BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1];
|
| int bits;
|
| @@ -125,10 +127,10 @@ void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table,
|
| bits++;
|
| });
|
| /* Symbols with code length 0 are placed after all other symbols. */
|
| - offset[0] = 17;
|
| + offset[0] = BROTLI_CODE_LENGTH_CODES - 1;
|
|
|
| /* sort symbols by length, by symbol order within each length */
|
| - symbol = 18;
|
| + symbol = BROTLI_CODE_LENGTH_CODES;
|
| do {
|
| BROTLI_REPEAT(6, {
|
| symbol--;
|
| @@ -142,7 +144,7 @@ void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table,
|
| if (offset[0] == 0) {
|
| code.bits = 0;
|
| code.value = (uint16_t)sorted[0];
|
| - for (key = 0; key < (uint32_t)table_size; ++key) {
|
| + for (key = 0; key < (reg_t)table_size; ++key) {
|
| table[key] = code;
|
| }
|
| return;
|
| @@ -170,18 +172,18 @@ uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,
|
| int root_bits,
|
| const uint16_t* const symbol_lists,
|
| uint16_t* count) {
|
| - HuffmanCode code; /* current table entry */
|
| - HuffmanCode* table; /* next available space in table */
|
| - int len; /* current code length */
|
| - int symbol; /* symbol index in original or sorted table */
|
| - uint32_t key; /* prefix code */
|
| - uint32_t key_step; /* prefix code addend */
|
| - uint32_t sub_key; /* 2nd level table prefix code */
|
| - uint32_t sub_key_step; /* 2nd level table prefix code addend */
|
| - int step; /* step size to replicate values in current table */
|
| - int table_bits; /* key length of current table */
|
| - int table_size; /* size of current table */
|
| - int total_size; /* sum of root table size and 2nd level table sizes */
|
| + HuffmanCode code; /* current table entry */
|
| + HuffmanCode* table; /* next available space in table */
|
| + int len; /* current code length */
|
| + int symbol; /* symbol index in original or sorted table */
|
| + reg_t key; /* prefix code */
|
| + reg_t key_step; /* prefix code addend */
|
| + reg_t sub_key; /* 2nd level table prefix code */
|
| + reg_t sub_key_step; /* 2nd level table prefix code addend */
|
| + int step; /* step size to replicate values in current table */
|
| + int table_bits; /* key length of current table */
|
| + int table_size; /* size of current table */
|
| + int total_size; /* sum of root table size and 2nd level table sizes */
|
| int max_length = -1;
|
| int bits;
|
| int bits_count;
|
|
|