]> wimlib.net Git - wimlib/blob - include/wimlib/lzms_constants.h
x86_cpu_features.c: cpuid fix for x86_32 PIC with old GCC versions
[wimlib] / include / wimlib / lzms_constants.h
1 /*
2  * lzms_constants.h
3  *
4  * Constants for the LZMS compression format.
5  */
6
7 #ifndef _LZMS_CONSTANTS_H
8 #define _LZMS_CONSTANTS_H
9
10 /* Limits on match lengths and offsets (in bytes)  */
11 #define LZMS_MIN_MATCH_LENGTH                   1
12 #define LZMS_MAX_MATCH_LENGTH                   1073809578
13 #define LZMS_MIN_MATCH_OFFSET                   1
14 #define LZMS_MAX_MATCH_OFFSET                   1180427428
15
16 /* The value to which buffer sizes should be limited.  Microsoft's
17  * implementation seems to use 67108864 (2^26) bytes.  However, since the format
18  * itself supports higher match lengths and offsets, we'll use 2^30 bytes.  */
19 #define LZMS_MAX_BUFFER_SIZE                    1073741824
20
21 /* The length of each LRU queue for match sources:
22  *
23  *    1. offsets of LZ matches
24  *    2. (power, raw offset) pairs of delta matches */
25 #define LZMS_NUM_LZ_REPS                        3
26 #define LZMS_NUM_DELTA_REPS                     3
27
28 /* The numbers of binary decision classes needed for encoding queue indices  */
29 #define LZMS_NUM_LZ_REP_DECISIONS               (LZMS_NUM_LZ_REPS - 1)
30 #define LZMS_NUM_DELTA_REP_DECISIONS            (LZMS_NUM_DELTA_REPS - 1)
31
32 /* These are the numbers of probability entries for each binary decision class.
33  * The logarithm base 2 of each of these values is the number of recently
34  * encoded bits that are remembered for each decision class and are used to
35  * select the appropriate probability entry when decoding/encoding the next
36  * binary decision (bit).  */
37 #define LZMS_NUM_MAIN_PROBS                     16
38 #define LZMS_NUM_MATCH_PROBS                    32
39 #define LZMS_NUM_LZ_PROBS                       64
40 #define LZMS_NUM_LZ_REP_PROBS                   64
41 #define LZMS_NUM_DELTA_PROBS                    64
42 #define LZMS_NUM_DELTA_REP_PROBS                64
43
44 /* These values define the precision for probabilities in LZMS, which are always
45  * given as a numerator; the denominator is implied.  */
46 #define LZMS_PROBABILITY_BITS                   6
47 #define LZMS_PROBABILITY_DENOMINATOR            (1 << LZMS_PROBABILITY_BITS)
48
49 /* These values define the initial state of each probability entry.  */
50 #define LZMS_INITIAL_PROBABILITY                48
51 #define LZMS_INITIAL_RECENT_BITS                0x0000000055555555
52
53 /* The number of symbols in each Huffman-coded alphabet  */
54 #define LZMS_NUM_LITERAL_SYMS                   256
55 #define LZMS_NUM_LENGTH_SYMS                    54
56 #define LZMS_NUM_DELTA_POWER_SYMS               8
57 #define LZMS_MAX_NUM_OFFSET_SYMS                799
58 #define LZMS_MAX_NUM_SYMS                       799
59
60 /* The rebuild frequencies, in symbols, for each Huffman code  */
61 #define LZMS_LITERAL_CODE_REBUILD_FREQ          1024
62 #define LZMS_LZ_OFFSET_CODE_REBUILD_FREQ        1024
63 #define LZMS_LENGTH_CODE_REBUILD_FREQ           512
64 #define LZMS_DELTA_OFFSET_CODE_REBUILD_FREQ     1024
65 #define LZMS_DELTA_POWER_CODE_REBUILD_FREQ      512
66
67 /* The maximum length, in bits, of any Huffman codeword.  This is guaranteed by
68  * the way frequencies are updated.  */
69 #define LZMS_MAX_CODEWORD_LENGTH                15
70
71 /* The maximum number of verbatim bits, in addition to the Huffman-encoded
72  * length slot symbol, that may be required to encode a match length  */
73 #define LZMS_MAX_EXTRA_LENGTH_BITS              30
74
75 /* The maximum number of verbatim bits, in addition to the Huffman-encoded
76  * offset slot symbol, that may be required to encode a match offset  */
77 #define LZMS_MAX_EXTRA_OFFSET_BITS              30
78
79 /* Parameters for x86 machine code pre/post-processing  */
80 #define LZMS_X86_ID_WINDOW_SIZE                 65535
81 #define LZMS_X86_MAX_TRANSLATION_OFFSET         1023
82
83 #endif /* _LZMS_CONSTANTS_H */