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