X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fopth-gen.awk;h=541bc3ea596eb65818a698d66ed4aa17423f8b63;hb=fafb561af4a422ee8d865bc27c8b15e75e66f970;hp=c3f6c04ebfb46a08d6b62e453db8586f67ee3537;hpb=ecee1b296d7a3e1bf2a7613eac325a9d761e8a1c;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/opth-gen.awk b/gcc/opth-gen.awk index c3f6c04ebfb..541bc3ea596 100644 --- a/gcc/opth-gen.awk +++ b/gcc/opth-gen.awk @@ -21,100 +21,10 @@ # opt-gather.awk, combines the flags of duplicate options and generates a # C header file. # -# This program uses functions from opt-functions.awk -# Usage: awk -f opt-functions.awk -f opth-gen.awk < inputfile > options.h - -BEGIN { - n_opts = 0 - n_langs = 0 - n_target_save = 0 - n_extra_vars = 0 - n_extra_target_vars = 0 - n_extra_masks = 0 - n_extra_c_includes = 0 - n_extra_h_includes = 0 - have_save = 0; - quote = "\042" - FS=SUBSEP -} - -# Collect the text and flags of each option into an array - { - if ($1 == "Language") { - langs[n_langs] = $2 - n_langs++; - } - else if ($1 == "TargetSave") { - # Make sure the declarations are put in source order - target_save_decl[n_target_save] = $2 - n_target_save++ - } - else if ($1 == "Variable") { - extra_vars[n_extra_vars] = $2 - n_extra_vars++ - } - else if ($1 == "TargetVariable") { - # Combination of TargetSave and Variable - extra_vars[n_extra_vars] = $2 - n_extra_vars++ - - var = $2 - sub(" *=.*", "", var) - orig_var = var - name = var - type = var - sub("^.*[ *]", "", name) - sub(" *" name "$", "", type) - target_save_decl[n_target_save] = type " x_" name - n_target_save++ - - extra_target_vars[n_extra_target_vars] = name - n_extra_target_vars++ - } - else if ($1 == "HeaderInclude") { - extra_h_includes[n_extra_h_includes++] = $2; - } - else if ($1 == "SourceInclude") { - extra_c_includes[n_extra_c_includes++] = $2; - } - else if ($1 == "Enum") { - props = $2 - name = opt_args("Name", props) - type = opt_args("Type", props) - unknown_error = opt_args("UnknownError", props) - enum_names[n_enums] = name - enum_type[name] = type - enum_index[name] = n_enums - enum_unknown_error[name] = unknown_error - enum_help[name] = $3 - n_enums++ - } - else if ($1 == "EnumValue") { - props = $2 - enum_name = opt_args("Enum", props) - string = opt_args("String", props) - value = opt_args("Value", props) - val_flags = "0" - val_flags = val_flags \ - test_flag("Canonical", props, "| CL_ENUM_CANONICAL") \ - test_flag("DriverOnly", props, "| CL_ENUM_DRIVER_ONLY") - enum_data[enum_name] = enum_data[enum_name] \ - " { " quote string quote ", " value ", " val_flags \ - " },\n" - } - else { - name = opt_args("Mask", $1) - if (name == "") { - opts[n_opts] = $1 - flags[n_opts] = $2 - help[n_opts] = $3 - n_opts++; - } - else { - extra_masks[n_extra_masks++] = name - } - } - } +# This program uses functions from opt-functions.awk and code from +# opt-read.awk. +# Usage: awk -f opt-functions.awk -f opt-read.awk -f opth-gen.awk \ +# < inputfile > options.h # Dump out an enumeration into a .h file. # Combine the flags of duplicate options. @@ -136,7 +46,7 @@ if (n_extra_h_includes > 0) { print "#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)" print "#ifndef GENERATOR_FILE" -print "#if !defined(GCC_DRIVER) && !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS)" +print "#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS)" print "struct GTY(()) gcc_options" print "#else" print "struct gcc_options" @@ -217,7 +127,7 @@ print "" # Also, order the structure so that pointer fields occur first, then int # fields, and then char fields to provide the best packing. -print "#if !defined(GCC_DRIVER) && !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS)" +print "#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)" print "" print "/* Structure to save/restore optimization and target specific options. */"; print "struct GTY(()) cl_optimization"; @@ -390,18 +300,26 @@ for (i = 0; i < n_opts; i++) { name = opt_args("Mask", flags[i]) vname = var_name(flags[i]) mask = "MASK_" + mask_1 = "1" if (vname != "") { mask = "OPTION_MASK_" + if (host_wide_int[vname] == "yes") + mask_1 = "HOST_WIDE_INT_1" } if (name != "" && !flag_set_p("MaskExists", flags[i])) - print "#define " mask name " (1 << " masknum[vname]++ ")" + print "#define " mask name " (" mask_1 " << " masknum[vname]++ ")" } for (i = 0; i < n_extra_masks; i++) { print "#define MASK_" extra_masks[i] " (1 << " masknum[""]++ ")" } for (var in masknum) { - if (masknum[var] > 31) { + if (var != "" && host_wide_int[var] == "yes") { + print" #if defined(HOST_BITS_PER_WIDE_INT) && " masknum[var] " >= HOST_BITS_PER_WIDE_INT" + print "#error too many masks for " var + print "#endif" + } + else if (masknum[var] > 31) { if (var == "") print "#error too many target masks" else @@ -451,9 +369,9 @@ for (i = 0; i < n_langs; i++) { macros[i] = "CL_" langs[i] gsub( "[^" alnum "_]", "X", macros[i] ) s = substr(" ", length (macros[i])) - print "#define " macros[i] s " (1 << " i ")" + print "#define " macros[i] s " (1U << " i ")" } -print "#define CL_LANG_ALL ((1 << " n_langs ") - 1)" +print "#define CL_LANG_ALL ((1U << " n_langs ") - 1)" print "" print "enum opt_code"