*
* Code for decompression shared among multiple compression formats.
*
- * Author: Eric Biggers
- * Year: 2012 - 2014
+ * The following copying information applies to this specific source code file:
*
- * The author dedicates this file to the public domain.
- * You can do whatever you want with this file.
+ * Written in 2012-2015 by Eric Biggers <ebiggers3@gmail.com>
+ *
+ * To the extent possible under law, the author(s) have dedicated all copyright
+ * and related and neighboring rights to this software to the public domain
+ * worldwide via the Creative Commons Zero 1.0 Universal Public Domain
+ * Dedication (the "CC0").
+ *
+ * This software 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 CC0 for more details.
+ *
+ * You should have received a copy of the CC0 along with this software; if not
+ * see <http://creativecommons.org/publicdomain/zero/1.0/>.
*/
#ifdef HAVE_CONFIG_H
* binary tree.
*
* @decode_table:
- * The array in which to create the decoding table.
- * This must be 16-byte aligned and must have a length of at least
- * ((2**table_bits) + 2 * num_syms) entries.
+ * The array in which to create the decoding table. This must be
+ * 16-byte aligned and must have a length of at least
+ * ((2**table_bits) + 2 * num_syms) entries. This is permitted to
+ * alias @lens, since all information from @lens is consumed before
+* anything is written to @decode_table.
*
* @num_syms:
* The number of symbols in the alphabet; also, the length of the
* An array of length @num_syms, indexable by symbol, that gives the
* length of the codeword, in bits, for that symbol. The length can
* be 0, which means that the symbol does not have a codeword
- * assigned.
+ * assigned. This is permitted to alias @decode_table, since all
+ * information from @lens is consumed before anything is written to
+ * @decode_table.
*
* @max_codeword_len:
* The longest codeword length allowed in the compression format.
* code.
*/
int
-make_huffman_decode_table(u16 decode_table[const restrict],
+make_huffman_decode_table(u16 decode_table[const],
const unsigned num_syms,
const unsigned table_bits,
- const u8 lens[const restrict],
+ const u8 lens[const],
const unsigned max_codeword_len)
{
const unsigned table_num_entries = 1 << table_bits;
unsigned decode_table_pos;
#ifdef USE_WORD_FILL
- const unsigned entries_per_word = WORDSIZE / sizeof(decode_table[0]);
+ const unsigned entries_per_word = WORDBYTES / sizeof(decode_table[0]);
#endif
#ifdef USE_SSE2_FILL
aliased_word_t *p;
unsigned n;
- BUILD_BUG_ON(WORDSIZE != 4 && WORDSIZE != 8);
+ STATIC_ASSERT(WORDBITS == 32 || WORDBITS == 64);
v = MAKE_DIRECT_ENTRY(sorted_syms[sym_idx], codeword_len);
v |= v << 16;
- v |= v << (WORDSIZE == 8 ? 32 : 0);
+ v |= v << (WORDBITS == 64 ? 32 : 0);
p = (aliased_word_t *)decode_table_ptr;
n = stores_per_loop;
* of as simply the root of the tree. The
* representation of these internal nodes is
* simply the index of the left child combined
- * with the special bits 0xC000 to distingush
+ * with the special bits 0xC000 to distinguish
* the entry from direct mapping and leaf node
* entries. */
do {