diff options
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.h | 38 |
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; |