1 // SPDX-License-Identifier: 0BSD 2 3 /////////////////////////////////////////////////////////////////////////////// 4 // 5 /// \file fastpos_tablegen.c 6 /// \brief Generates the lzma_fastpos[] lookup table 7 /// 8 // Authors: Igor Pavlov 9 // Lasse Collin 10 // 11 /////////////////////////////////////////////////////////////////////////////// 12 13 #include <inttypes.h> 14 #include <stdio.h> 15 16 #define lzma_attr_visibility_hidden 17 #include "fastpos.h" 18 19 20 int 21 main(void) 22 { 23 uint8_t fastpos[1 << FASTPOS_BITS]; 24 25 const uint8_t fast_slots = 2 * FASTPOS_BITS; 26 uint32_t c = 2; 27 28 fastpos[0] = 0; 29 fastpos[1] = 1; 30 31 for (uint8_t slot_fast = 2; slot_fast < fast_slots; ++slot_fast) { 32 const uint32_t k = 1 << ((slot_fast >> 1) - 1); 33 for (uint32_t j = 0; j < k; ++j, ++c) 34 fastpos[c] = slot_fast; 35 } 36 37 // Split the SPDX string so that it won't accidentally match 38 // when tools search for the string. 39 printf("// SPDX" "-License-Identifier" ": 0BSD\n\n" 40 "// This file has been generated by fastpos_tablegen.c.\n\n" 41 "#include \"common.h\"\n" 42 "#include \"fastpos.h\"\n\n" 43 "const uint8_t lzma_fastpos[1 << FASTPOS_BITS] = {"); 44 45 for (size_t i = 0; i < (1 << FASTPOS_BITS); ++i) { 46 if (i % 16 == 0) 47 printf("\n\t"); 48 49 printf("%3u", (unsigned int)(fastpos[i])); 50 51 if (i != (1 << FASTPOS_BITS) - 1) 52 printf(","); 53 } 54 55 printf("\n};\n"); 56 57 return 0; 58 } 59