X-Git-Url: https://git.draconx.ca/gitweb/dxcommon.git/blobdiff_plain/0a296c1808200072deea6285f3e9992fca6095dd..e599119f0492b01f1f21a8cce8d695c314dab3b1:/scripts/gen-options.awk diff --git a/scripts/gen-options.awk b/scripts/gen-options.awk index a93c47c..80adcb4 100755 --- a/scripts/gen-options.awk +++ b/scripts/gen-options.awk @@ -82,7 +82,9 @@ # # * the object-like macro LOPT_PACK_BITS expands to an integer constant # expression, suitable for use in #if directives, that specifies the -# minimum number of bits required by the encoding. +# minimum number of bits required by the encoding. LOPT_PACK_BITS2 +# is the same, but rounded up to the next power of two greater than +# or equal to 8. # # * the object-like macro LOPTS_PACKED_INITIALIZER expands to a # comma-separated sequence of integer constant expressions, suitable @@ -358,17 +360,18 @@ END { # Currently, this only works if none of the options use action specifications # (as these would require encoding user-specified pointer expressions and # arbitrary int values). -function output_packed_macros(i, tmp, accum, max) +function output_packed_macros(i, tmp, accum, max, totalbits) { - print "\n#define LOPT_PACK_BITS (LOPT_SC_BITS + LOPT_HA_BITS + LOPT_LS_BITS)"; + print ""; # determine number of bits to encode offsets in SOPT_STRING max = length(sopt_string); - accum = 0; + totalbits = accum = 0; for (i = 1; i <= max; i *= 2) { accum++; } print "#define LOPT_SC_BITS " accum; + totalbits += accum; # determine number of bits to encode has_arg values max = 0; @@ -377,7 +380,9 @@ function output_packed_macros(i, tmp, accum, max) if (tmp > max) max = tmp; } - print "#define LOPT_HA_BITS " (max > 1 ? 2 : max > 0 ? 1 : 0); + accum = (max > 1 ? 2 : max > 0 ? 1 : 0); + print "#define LOPT_HA_BITS " accum; + totalbits += accum; # determine number of bits to encode offsets in lopt_strings max = 0; @@ -391,6 +396,12 @@ function output_packed_macros(i, tmp, accum, max) accum++; } print "#define LOPT_LS_BITS " accum; + totalbits += accum; + + print "#define LOPT_PACK_BITS " totalbits; + for (i = 8; i < totalbits; i *= 2) + ; + print "#define LOPT_PACK_BITS2 " i; # Now emit the packed initializer macro print "\n#define LOPTS_PACKED_INITIALIZER \\";