summaryrefslogtreecommitdiff
path: root/dviware/dvisvgm/libs/brotli/enc/hash_forgetful_chain_inc.h
diff options
context:
space:
mode:
Diffstat (limited to 'dviware/dvisvgm/libs/brotli/enc/hash_forgetful_chain_inc.h')
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/hash_forgetful_chain_inc.h38
1 files changed, 20 insertions, 18 deletions
diff --git a/dviware/dvisvgm/libs/brotli/enc/hash_forgetful_chain_inc.h b/dviware/dvisvgm/libs/brotli/enc/hash_forgetful_chain_inc.h
index bfae6ba6a2..48e1cdcdf2 100644
--- a/dviware/dvisvgm/libs/brotli/enc/hash_forgetful_chain_inc.h
+++ b/dviware/dvisvgm/libs/brotli/enc/hash_forgetful_chain_inc.h
@@ -49,7 +49,7 @@ typedef struct HashForgetfulChain {
size_t max_hops;
/* Shortcuts. */
- void* extra;
+ void* extra[2];
HasherCommon* common;
/* --- Dynamic size members --- */
@@ -77,14 +77,15 @@ static uint8_t* FN(TinyHash)(void* extra) {
}
static FN(Bank)* FN(Banks)(void* extra) {
- return (FN(Bank)*)(&FN(TinyHash)(extra)[65536]);
+ return (FN(Bank)*)(extra);
}
static void FN(Initialize)(
HasherCommon* common, HashForgetfulChain* BROTLI_RESTRICT self,
const BrotliEncoderParams* params) {
self->common = common;
- self->extra = common->extra;
+ self->extra[0] = common->extra[0];
+ self->extra[1] = common->extra[1];
self->max_hops = (params->quality > 6 ? 7u : 8u) << (params->quality - 4);
}
@@ -92,9 +93,9 @@ static void FN(Initialize)(
static void FN(Prepare)(
HashForgetfulChain* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,
size_t input_size, const uint8_t* BROTLI_RESTRICT data) {
- uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra);
- uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra);
- uint8_t* BROTLI_RESTRICT tiny_hash = FN(TinyHash)(self->extra);
+ uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra[0]);
+ uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra[0]);
+ uint8_t* BROTLI_RESTRICT tiny_hash = FN(TinyHash)(self->extra[0]);
/* Partial preparation is 100 times slower (per socket). */
size_t partial_prepare_threshold = BUCKET_SIZE >> 6;
if (one_shot && input_size <= partial_prepare_threshold) {
@@ -116,24 +117,25 @@ static void FN(Prepare)(
memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx));
}
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
+static BROTLI_INLINE void FN(HashMemAllocInBytes)(
const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
+ size_t input_size, size_t* alloc_size) {
BROTLI_UNUSED(params);
BROTLI_UNUSED(one_shot);
BROTLI_UNUSED(input_size);
- return sizeof(uint32_t) * BUCKET_SIZE + sizeof(uint16_t) * BUCKET_SIZE +
- sizeof(uint8_t) * 65536 + sizeof(FN(Bank)) * NUM_BANKS;
+ alloc_size[0] = sizeof(uint32_t) * BUCKET_SIZE +
+ sizeof(uint16_t) * BUCKET_SIZE + sizeof(uint8_t) * 65536;
+ alloc_size[1] = sizeof(FN(Bank)) * NUM_BANKS;
}
/* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and prepend
node to corresponding chain; also update tiny_hash for current position. */
static BROTLI_INLINE void FN(Store)(HashForgetfulChain* BROTLI_RESTRICT self,
const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
- uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra);
- uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra);
- uint8_t* BROTLI_RESTRICT tiny_hash = FN(TinyHash)(self->extra);
- FN(Bank)* BROTLI_RESTRICT banks = FN(Banks)(self->extra);
+ uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra[0]);
+ uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra[0]);
+ uint8_t* BROTLI_RESTRICT tiny_hash = FN(TinyHash)(self->extra[0]);
+ FN(Bank)* BROTLI_RESTRICT banks = FN(Banks)(self->extra[1]);
const size_t key = FN(HashBytes)(&data[ix & mask]);
const size_t bank = key & (NUM_BANKS - 1);
const size_t idx = self->free_slot_idx[bank]++ & (BANK_SIZE - 1);
@@ -196,10 +198,10 @@ static BROTLI_INLINE void FN(FindLongestMatch)(
const size_t cur_ix, const size_t max_length, const size_t max_backward,
const size_t dictionary_distance, const size_t max_distance,
HasherSearchResult* BROTLI_RESTRICT out) {
- uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra);
- uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra);
- uint8_t* BROTLI_RESTRICT tiny_hashes = FN(TinyHash)(self->extra);
- FN(Bank)* BROTLI_RESTRICT banks = FN(Banks)(self->extra);
+ uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra[0]);
+ uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra[0]);
+ uint8_t* BROTLI_RESTRICT tiny_hashes = FN(TinyHash)(self->extra[0]);
+ FN(Bank)* BROTLI_RESTRICT banks = FN(Banks)(self->extra[1]);
const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
/* Don't accept a short copy from far away. */
score_t min_score = out->score;