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