Hi Joseph, I need to support InverseMask(XXX) in options without the corresponding Mask(XXX) since XXX is never set directly via a command line option. This patch adds a MaskNeeded property which turns InverseMask(XXX) into the inverse version of Mask(XXX), which allocates a unique bit and defines the same set of macros as Mask(XXX). Does it look OK?
Thanks. H.J. ---- 2012-03-25 H.J. Lu <hongjiu...@intel.com> * opth-gen.awk: Handle MaskNeeded. * doc/options.texi: Document MaskNeeded. diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi index 0a54183..fb501cf 100644 --- a/gcc/doc/options.texi +++ b/gcc/doc/options.texi @@ -364,6 +364,14 @@ The main purpose of this property is to support synonymous options. The first option should use @samp{Mask(@var{name})} and the others should use @samp{Mask(@var{name}) MaskExists}. +@item MaskNeeded +It turns @samp{InverseMask(@var{othername})} into the inverse version of +@samp{Mask(@var{othername})}. + +This property only applies to @samp{InverseMask(@var{othername})}. Its +main purpose is to support @samp{InverseMask(@var{othername})} without +the corresponding @samp{Mask(@var{othername})}. + @item Enum(@var{name}) The option's argument is a string from the set of strings associated with the corresponding @samp{Enum} record. The string is checked and diff --git a/gcc/opth-gen.awk b/gcc/opth-gen.awk index 541bc3e..1885b2c 100644 --- a/gcc/opth-gen.awk +++ b/gcc/opth-gen.awk @@ -309,6 +309,21 @@ for (i = 0; i < n_opts; i++) { if (name != "" && !flag_set_p("MaskExists", flags[i])) print "#define " mask name " (" mask_1 " << " masknum[vname]++ ")" } +for (i = 0; i < n_opts; i++) { + name = opt_args("InverseMask", flags[i]) + if (name != "" && flag_set_p("MaskNeeded", 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" + } + print "#define " mask name " (" mask_1 \ + " << " masknum[vname]++ ")" + } +} for (i = 0; i < n_extra_masks; i++) { print "#define MASK_" extra_masks[i] " (1 << " masknum[""]++ ")" } @@ -342,6 +357,21 @@ for (i = 0; i < n_opts; i++) { print "#define " macro name \ " ((" vname " & " mask name ") != 0)" } +for (i = 0; i < n_opts; i++) { + name = opt_args("InverseMask", flags[i]) + if (name != "" && flag_set_p("MaskNeeded", flags[i])) { + vname = var_name(flags[i]) + macro = "OPTION_" + mask = "OPTION_MASK_" + if (vname == "") { + vname = "target_flags" + macro = "TARGET_" + mask = "MASK_" + } + print "#define " macro name \ + " ((" vname " & " mask name ") != 0)" + } +} for (i = 0; i < n_extra_masks; i++) { print "#define TARGET_" extra_masks[i] \ " ((target_flags & MASK_" extra_masks[i] ") != 0)"