mirror of
				https://github.com/eledio-devices/thirdparty-miniz.git
				synced 2025-10-31 16:14:16 +01:00 
			
		
		
		
	Cache pointers to tables for speed
This commit is contained in:
		| @@ -109,6 +109,7 @@ extern "C" { | |||||||
| #define TINFL_HUFF_BITBUF_FILL(state_index, pHuff)                             \ | #define TINFL_HUFF_BITBUF_FILL(state_index, pHuff)                             \ | ||||||
|     do                                                                         \ |     do                                                                         \ | ||||||
|     {                                                                          \ |     {                                                                          \ | ||||||
|  |         mz_int16 *pTree;                                                       \ | ||||||
|         temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)];     \ |         temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)];     \ | ||||||
|         if (temp >= 0)                                                         \ |         if (temp >= 0)                                                         \ | ||||||
|         {                                                                      \ |         {                                                                      \ | ||||||
| @@ -118,10 +119,11 @@ extern "C" { | |||||||
|         }                                                                      \ |         }                                                                      \ | ||||||
|         else if (num_bits > TINFL_FAST_LOOKUP_BITS)                            \ |         else if (num_bits > TINFL_FAST_LOOKUP_BITS)                            \ | ||||||
|         {                                                                      \ |         {                                                                      \ | ||||||
|  |             pTree = (pHuff)->m_pTree;                                          \ | ||||||
|             code_len = TINFL_FAST_LOOKUP_BITS;                                 \ |             code_len = TINFL_FAST_LOOKUP_BITS;                                 \ | ||||||
|             do                                                                 \ |             do                                                                 \ | ||||||
|             {                                                                  \ |             {                                                                  \ | ||||||
|                 temp = (pHuff)->m_pTree[~temp + ((bit_buf >> code_len++) & 1)];\ |                 temp = pTree[~temp + ((bit_buf >> code_len++) & 1)];           \ | ||||||
|             } while ((temp < 0) && (num_bits >= (code_len + 1)));              \ |             } while ((temp < 0) && (num_bits >= (code_len + 1)));              \ | ||||||
|             if (temp >= 0)                                                     \ |             if (temp >= 0)                                                     \ | ||||||
|                 break;                                                         \ |                 break;                                                         \ | ||||||
| @@ -142,6 +144,7 @@ extern "C" { | |||||||
|     {                                                                                                                               \ |     {                                                                                                                               \ | ||||||
|         int temp;                                                                                                                   \ |         int temp;                                                                                                                   \ | ||||||
|         mz_uint code_len, c;                                                                                                        \ |         mz_uint code_len, c;                                                                                                        \ | ||||||
|  |         mz_int16 *pTree;                                                                                                            \ | ||||||
|         if (num_bits < 15)                                                                                                          \ |         if (num_bits < 15)                                                                                                          \ | ||||||
|         {                                                                                                                           \ |         {                                                                                                                           \ | ||||||
|             if ((pIn_buf_end - pIn_buf_cur) < 2)                                                                                    \ |             if ((pIn_buf_end - pIn_buf_cur) < 2)                                                                                    \ | ||||||
| @@ -159,10 +162,11 @@ extern "C" { | |||||||
|             code_len = temp >> 9, temp &= 511;                                                                                      \ |             code_len = temp >> 9, temp &= 511;                                                                                      \ | ||||||
|         else                                                                                                                        \ |         else                                                                                                                        \ | ||||||
|         {                                                                                                                           \ |         {                                                                                                                           \ | ||||||
|  |             pTree = (pHuff)->m_pTree;                                                                                               \ | ||||||
|             code_len = TINFL_FAST_LOOKUP_BITS;                                                                                      \ |             code_len = TINFL_FAST_LOOKUP_BITS;                                                                                      \ | ||||||
|             do                                                                                                                      \ |             do                                                                                                                      \ | ||||||
|             {                                                                                                                       \ |             {                                                                                                                       \ | ||||||
|                 temp = (pHuff)->m_pTree[~temp + ((bit_buf >> code_len++) & 1)];                                                      \ |                 temp = pTree[~temp + ((bit_buf >> code_len++) & 1)];                                                                \ | ||||||
|             } while (temp < 0);                                                                                                     \ |             } while (temp < 0);                                                                                                     \ | ||||||
|         }                                                                                                                           \ |         }                                                                                                                           \ | ||||||
|         sym = temp;                                                                                                                 \ |         sym = temp;                                                                                                                 \ | ||||||
| @@ -305,13 +309,17 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_nex | |||||||
|             { |             { | ||||||
|                 int tree_next, tree_cur; |                 int tree_next, tree_cur; | ||||||
|                 tinfl_huff_table *pTable; |                 tinfl_huff_table *pTable; | ||||||
|  |                 mz_int16 *pTree; | ||||||
|  |                 mz_uint8 *pCode_size; | ||||||
|                 mz_uint i, j, used_syms, total, sym_index, next_code[17], total_syms[16]; |                 mz_uint i, j, used_syms, total, sym_index, next_code[17], total_syms[16]; | ||||||
|                 pTable = &r->m_tables[r->m_type]; |                 pTable = &r->m_tables[r->m_type]; | ||||||
|  |                 pTree = pTable->m_pTree; | ||||||
|  |                 pCode_size = pTable->m_pCode_size; | ||||||
|                 MZ_CLEAR_OBJ(total_syms); |                 MZ_CLEAR_OBJ(total_syms); | ||||||
|                 MZ_CLEAR_OBJ(pTable->m_look_up); |                 MZ_CLEAR_OBJ(pTable->m_look_up); | ||||||
|                 TINFL_MEMSET(pTable->m_pTree, 0, r->m_table_sizes[r->m_type] * sizeof(pTable->m_pTree[0]) * 2); |                 TINFL_MEMSET(pTree, 0, r->m_table_sizes[r->m_type] * sizeof(pTree[0]) * 2); | ||||||
|                 for (i = 0; i < r->m_table_sizes[r->m_type]; ++i) |                 for (i = 0; i < r->m_table_sizes[r->m_type]; ++i) | ||||||
|                     total_syms[pTable->m_pCode_size[i]]++; |                     total_syms[pCode_size[i]]++; | ||||||
|                 used_syms = 0, total = 0; |                 used_syms = 0, total = 0; | ||||||
|                 next_code[0] = next_code[1] = 0; |                 next_code[0] = next_code[1] = 0; | ||||||
|                 for (i = 1; i <= 15; ++i) |                 for (i = 1; i <= 15; ++i) | ||||||
| @@ -325,7 +333,7 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_nex | |||||||
|                 } |                 } | ||||||
|                 for (tree_next = -1, sym_index = 0; sym_index < r->m_table_sizes[r->m_type]; ++sym_index) |                 for (tree_next = -1, sym_index = 0; sym_index < r->m_table_sizes[r->m_type]; ++sym_index) | ||||||
|                 { |                 { | ||||||
|                     mz_uint rev_code = 0, l, cur_code, code_size = pTable->m_pCode_size[sym_index]; |                     mz_uint rev_code = 0, l, cur_code, code_size = pCode_size[sym_index]; | ||||||
|                     if (!code_size) |                     if (!code_size) | ||||||
|                         continue; |                         continue; | ||||||
|                     cur_code = next_code[code_size]++; |                     cur_code = next_code[code_size]++; | ||||||
| @@ -351,17 +359,17 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_nex | |||||||
|                     for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) |                     for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) | ||||||
|                     { |                     { | ||||||
|                         tree_cur -= ((rev_code >>= 1) & 1); |                         tree_cur -= ((rev_code >>= 1) & 1); | ||||||
|                         if (!pTable->m_pTree[-tree_cur - 1]) |                         if (!pTree[-tree_cur - 1]) | ||||||
|                         { |                         { | ||||||
|                             pTable->m_pTree[-tree_cur - 1] = (mz_int16)tree_next; |                             pTree[-tree_cur - 1] = (mz_int16)tree_next; | ||||||
|                             tree_cur = tree_next; |                             tree_cur = tree_next; | ||||||
|                             tree_next -= 2; |                             tree_next -= 2; | ||||||
|                         } |                         } | ||||||
|                         else |                         else | ||||||
|                             tree_cur = pTable->m_pTree[-tree_cur - 1]; |                             tree_cur = pTree[-tree_cur - 1]; | ||||||
|                     } |                     } | ||||||
|                     tree_cur -= ((rev_code >>= 1) & 1); |                     tree_cur -= ((rev_code >>= 1) & 1); | ||||||
|                     pTable->m_pTree[-tree_cur - 1] = (mz_int16)sym_index; |                     pTree[-tree_cur - 1] = (mz_int16)sym_index; | ||||||
|                 } |                 } | ||||||
|                 if (r->m_type == 2) |                 if (r->m_type == 2) | ||||||
|                 { |                 { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user