xref: /freebsd/contrib/xz/src/liblzma/lzma/fastpos_tablegen.c (revision 3b35e7ee8de9b0260149a2b77e87a2b9c7a36244)
1*3b35e7eeSXin LI // SPDX-License-Identifier: 0BSD
2*3b35e7eeSXin LI 
381ad8388SMartin Matuska ///////////////////////////////////////////////////////////////////////////////
481ad8388SMartin Matuska //
581ad8388SMartin Matuska /// \file       fastpos_tablegen.c
681ad8388SMartin Matuska /// \brief      Generates the lzma_fastpos[] lookup table
781ad8388SMartin Matuska ///
881ad8388SMartin Matuska //  Authors:    Igor Pavlov
981ad8388SMartin Matuska //              Lasse Collin
1081ad8388SMartin Matuska //
1181ad8388SMartin Matuska ///////////////////////////////////////////////////////////////////////////////
1281ad8388SMartin Matuska 
1381ad8388SMartin Matuska #include <inttypes.h>
1481ad8388SMartin Matuska #include <stdio.h>
15ca6a6373SXin LI 
16ca6a6373SXin LI #define lzma_attr_visibility_hidden
1781ad8388SMartin Matuska #include "fastpos.h"
1881ad8388SMartin Matuska 
1981ad8388SMartin Matuska 
2081ad8388SMartin Matuska int
2181ad8388SMartin Matuska main(void)
2281ad8388SMartin Matuska {
2381ad8388SMartin Matuska 	uint8_t fastpos[1 << FASTPOS_BITS];
2481ad8388SMartin Matuska 
2581ad8388SMartin Matuska 	const uint8_t fast_slots = 2 * FASTPOS_BITS;
2681ad8388SMartin Matuska 	uint32_t c = 2;
2781ad8388SMartin Matuska 
2881ad8388SMartin Matuska 	fastpos[0] = 0;
2981ad8388SMartin Matuska 	fastpos[1] = 1;
3081ad8388SMartin Matuska 
3181ad8388SMartin Matuska 	for (uint8_t slot_fast = 2; slot_fast < fast_slots; ++slot_fast) {
3281ad8388SMartin Matuska 		const uint32_t k = 1 << ((slot_fast >> 1) - 1);
3381ad8388SMartin Matuska 		for (uint32_t j = 0; j < k; ++j, ++c)
3481ad8388SMartin Matuska 			fastpos[c] = slot_fast;
3581ad8388SMartin Matuska 	}
3681ad8388SMartin Matuska 
37*3b35e7eeSXin LI 	// Split the SPDX string so that it won't accidentally match
38*3b35e7eeSXin LI 	// when tools search for the string.
39*3b35e7eeSXin LI 	printf("// SPDX" "-License-Identifier" ": 0BSD\n\n"
40*3b35e7eeSXin LI 		"// This file has been generated by fastpos_tablegen.c.\n\n"
4181ad8388SMartin Matuska 		"#include \"common.h\"\n"
4281ad8388SMartin Matuska 		"#include \"fastpos.h\"\n\n"
4381ad8388SMartin Matuska 		"const uint8_t lzma_fastpos[1 << FASTPOS_BITS] = {");
4481ad8388SMartin Matuska 
4581ad8388SMartin Matuska 	for (size_t i = 0; i < (1 << FASTPOS_BITS); ++i) {
4681ad8388SMartin Matuska 		if (i % 16 == 0)
4781ad8388SMartin Matuska 			printf("\n\t");
4881ad8388SMartin Matuska 
4981ad8388SMartin Matuska 		printf("%3u", (unsigned int)(fastpos[i]));
5081ad8388SMartin Matuska 
5181ad8388SMartin Matuska 		if (i != (1 << FASTPOS_BITS) - 1)
5281ad8388SMartin Matuska 			printf(",");
5381ad8388SMartin Matuska 	}
5481ad8388SMartin Matuska 
5581ad8388SMartin Matuska 	printf("\n};\n");
5681ad8388SMartin Matuska 
5781ad8388SMartin Matuska 	return 0;
5881ad8388SMartin Matuska }
59