1 /* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
2 /*
3  * Copyright (c) Meta Platforms, Inc. and affiliates.
4  * All rights reserved.
5  *
6  * This source code is licensed under both the BSD-style license (found in the
7  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
8  * in the COPYING file in the root directory of this source tree).
9  * You may select, at your option, one of the above-listed licenses.
10  */
11 
12 #ifndef ZSTD_CLEVELS_H
13 #define ZSTD_CLEVELS_H
14 
15 #define ZSTD_STATIC_LINKING_ONLY  /* ZSTD_compressionParameters  */
16 #include <linux/zstd.h>
17 
18 /*-=====  Pre-defined compression levels  =====-*/
19 
20 #define ZSTD_MAX_CLEVEL     22
21 
22 __attribute__((__unused__))
23 
24 static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEVEL+1] = {
25 {   /* "default" - for any srcSize > 256 KB */
26     /* W,  C,  H,  S,  L, TL, strat */
27     { 19, 12, 13,  1,  6,  1, ZSTD_fast    },  /* base for negative levels */
28     { 19, 13, 14,  1,  7,  0, ZSTD_fast    },  /* level  1 */
29     { 20, 15, 16,  1,  6,  0, ZSTD_fast    },  /* level  2 */
30     { 21, 16, 17,  1,  5,  0, ZSTD_dfast   },  /* level  3 */
31     { 21, 18, 18,  1,  5,  0, ZSTD_dfast   },  /* level  4 */
32     { 21, 18, 19,  3,  5,  2, ZSTD_greedy  },  /* level  5 */
33     { 21, 18, 19,  3,  5,  4, ZSTD_lazy    },  /* level  6 */
34     { 21, 19, 20,  4,  5,  8, ZSTD_lazy    },  /* level  7 */
35     { 21, 19, 20,  4,  5, 16, ZSTD_lazy2   },  /* level  8 */
36     { 22, 20, 21,  4,  5, 16, ZSTD_lazy2   },  /* level  9 */
37     { 22, 21, 22,  5,  5, 16, ZSTD_lazy2   },  /* level 10 */
38     { 22, 21, 22,  6,  5, 16, ZSTD_lazy2   },  /* level 11 */
39     { 22, 22, 23,  6,  5, 32, ZSTD_lazy2   },  /* level 12 */
40     { 22, 22, 22,  4,  5, 32, ZSTD_btlazy2 },  /* level 13 */
41     { 22, 22, 23,  5,  5, 32, ZSTD_btlazy2 },  /* level 14 */
42     { 22, 23, 23,  6,  5, 32, ZSTD_btlazy2 },  /* level 15 */
43     { 22, 22, 22,  5,  5, 48, ZSTD_btopt   },  /* level 16 */
44     { 23, 23, 22,  5,  4, 64, ZSTD_btopt   },  /* level 17 */
45     { 23, 23, 22,  6,  3, 64, ZSTD_btultra },  /* level 18 */
46     { 23, 24, 22,  7,  3,256, ZSTD_btultra2},  /* level 19 */
47     { 25, 25, 23,  7,  3,256, ZSTD_btultra2},  /* level 20 */
48     { 26, 26, 24,  7,  3,512, ZSTD_btultra2},  /* level 21 */
49     { 27, 27, 25,  9,  3,999, ZSTD_btultra2},  /* level 22 */
50 },
51 {   /* for srcSize <= 256 KB */
52     /* W,  C,  H,  S,  L,  T, strat */
53     { 18, 12, 13,  1,  5,  1, ZSTD_fast    },  /* base for negative levels */
54     { 18, 13, 14,  1,  6,  0, ZSTD_fast    },  /* level  1 */
55     { 18, 14, 14,  1,  5,  0, ZSTD_dfast   },  /* level  2 */
56     { 18, 16, 16,  1,  4,  0, ZSTD_dfast   },  /* level  3 */
57     { 18, 16, 17,  3,  5,  2, ZSTD_greedy  },  /* level  4.*/
58     { 18, 17, 18,  5,  5,  2, ZSTD_greedy  },  /* level  5.*/
59     { 18, 18, 19,  3,  5,  4, ZSTD_lazy    },  /* level  6.*/
60     { 18, 18, 19,  4,  4,  4, ZSTD_lazy    },  /* level  7 */
61     { 18, 18, 19,  4,  4,  8, ZSTD_lazy2   },  /* level  8 */
62     { 18, 18, 19,  5,  4,  8, ZSTD_lazy2   },  /* level  9 */
63     { 18, 18, 19,  6,  4,  8, ZSTD_lazy2   },  /* level 10 */
64     { 18, 18, 19,  5,  4, 12, ZSTD_btlazy2 },  /* level 11.*/
65     { 18, 19, 19,  7,  4, 12, ZSTD_btlazy2 },  /* level 12.*/
66     { 18, 18, 19,  4,  4, 16, ZSTD_btopt   },  /* level 13 */
67     { 18, 18, 19,  4,  3, 32, ZSTD_btopt   },  /* level 14.*/
68     { 18, 18, 19,  6,  3,128, ZSTD_btopt   },  /* level 15.*/
69     { 18, 19, 19,  6,  3,128, ZSTD_btultra },  /* level 16.*/
70     { 18, 19, 19,  8,  3,256, ZSTD_btultra },  /* level 17.*/
71     { 18, 19, 19,  6,  3,128, ZSTD_btultra2},  /* level 18.*/
72     { 18, 19, 19,  8,  3,256, ZSTD_btultra2},  /* level 19.*/
73     { 18, 19, 19, 10,  3,512, ZSTD_btultra2},  /* level 20.*/
74     { 18, 19, 19, 12,  3,512, ZSTD_btultra2},  /* level 21.*/
75     { 18, 19, 19, 13,  3,999, ZSTD_btultra2},  /* level 22.*/
76 },
77 {   /* for srcSize <= 128 KB */
78     /* W,  C,  H,  S,  L,  T, strat */
79     { 17, 12, 12,  1,  5,  1, ZSTD_fast    },  /* base for negative levels */
80     { 17, 12, 13,  1,  6,  0, ZSTD_fast    },  /* level  1 */
81     { 17, 13, 15,  1,  5,  0, ZSTD_fast    },  /* level  2 */
82     { 17, 15, 16,  2,  5,  0, ZSTD_dfast   },  /* level  3 */
83     { 17, 17, 17,  2,  4,  0, ZSTD_dfast   },  /* level  4 */
84     { 17, 16, 17,  3,  4,  2, ZSTD_greedy  },  /* level  5 */
85     { 17, 16, 17,  3,  4,  4, ZSTD_lazy    },  /* level  6 */
86     { 17, 16, 17,  3,  4,  8, ZSTD_lazy2   },  /* level  7 */
87     { 17, 16, 17,  4,  4,  8, ZSTD_lazy2   },  /* level  8 */
88     { 17, 16, 17,  5,  4,  8, ZSTD_lazy2   },  /* level  9 */
89     { 17, 16, 17,  6,  4,  8, ZSTD_lazy2   },  /* level 10 */
90     { 17, 17, 17,  5,  4,  8, ZSTD_btlazy2 },  /* level 11 */
91     { 17, 18, 17,  7,  4, 12, ZSTD_btlazy2 },  /* level 12 */
92     { 17, 18, 17,  3,  4, 12, ZSTD_btopt   },  /* level 13.*/
93     { 17, 18, 17,  4,  3, 32, ZSTD_btopt   },  /* level 14.*/
94     { 17, 18, 17,  6,  3,256, ZSTD_btopt   },  /* level 15.*/
95     { 17, 18, 17,  6,  3,128, ZSTD_btultra },  /* level 16.*/
96     { 17, 18, 17,  8,  3,256, ZSTD_btultra },  /* level 17.*/
97     { 17, 18, 17, 10,  3,512, ZSTD_btultra },  /* level 18.*/
98     { 17, 18, 17,  5,  3,256, ZSTD_btultra2},  /* level 19.*/
99     { 17, 18, 17,  7,  3,512, ZSTD_btultra2},  /* level 20.*/
100     { 17, 18, 17,  9,  3,512, ZSTD_btultra2},  /* level 21.*/
101     { 17, 18, 17, 11,  3,999, ZSTD_btultra2},  /* level 22.*/
102 },
103 {   /* for srcSize <= 16 KB */
104     /* W,  C,  H,  S,  L,  T, strat */
105     { 14, 12, 13,  1,  5,  1, ZSTD_fast    },  /* base for negative levels */
106     { 14, 14, 15,  1,  5,  0, ZSTD_fast    },  /* level  1 */
107     { 14, 14, 15,  1,  4,  0, ZSTD_fast    },  /* level  2 */
108     { 14, 14, 15,  2,  4,  0, ZSTD_dfast   },  /* level  3 */
109     { 14, 14, 14,  4,  4,  2, ZSTD_greedy  },  /* level  4 */
110     { 14, 14, 14,  3,  4,  4, ZSTD_lazy    },  /* level  5.*/
111     { 14, 14, 14,  4,  4,  8, ZSTD_lazy2   },  /* level  6 */
112     { 14, 14, 14,  6,  4,  8, ZSTD_lazy2   },  /* level  7 */
113     { 14, 14, 14,  8,  4,  8, ZSTD_lazy2   },  /* level  8.*/
114     { 14, 15, 14,  5,  4,  8, ZSTD_btlazy2 },  /* level  9.*/
115     { 14, 15, 14,  9,  4,  8, ZSTD_btlazy2 },  /* level 10.*/
116     { 14, 15, 14,  3,  4, 12, ZSTD_btopt   },  /* level 11.*/
117     { 14, 15, 14,  4,  3, 24, ZSTD_btopt   },  /* level 12.*/
118     { 14, 15, 14,  5,  3, 32, ZSTD_btultra },  /* level 13.*/
119     { 14, 15, 15,  6,  3, 64, ZSTD_btultra },  /* level 14.*/
120     { 14, 15, 15,  7,  3,256, ZSTD_btultra },  /* level 15.*/
121     { 14, 15, 15,  5,  3, 48, ZSTD_btultra2},  /* level 16.*/
122     { 14, 15, 15,  6,  3,128, ZSTD_btultra2},  /* level 17.*/
123     { 14, 15, 15,  7,  3,256, ZSTD_btultra2},  /* level 18.*/
124     { 14, 15, 15,  8,  3,256, ZSTD_btultra2},  /* level 19.*/
125     { 14, 15, 15,  8,  3,512, ZSTD_btultra2},  /* level 20.*/
126     { 14, 15, 15,  9,  3,512, ZSTD_btultra2},  /* level 21.*/
127     { 14, 15, 15, 10,  3,999, ZSTD_btultra2},  /* level 22.*/
128 },
129 };
130 
131 
132 
133 #endif  /* ZSTD_CLEVELS_H */
134