options: Define TARGET_<NAME>_P and TARGET_<NAME>_OPTS_P macro for Mask and InverseMask
We TARGET_<NAME>_P marcro to test a Mask and InverseMask with user specified target_variable, however we may want to test with specific gcc_options variable rather than target_variable. Like RISC-V has defined lots of Mask with TargetVariable, which is not easy to use, because that means we need to known which Mask are associate with which TargetVariable, so take a gcc_options variable is a better interface for such use case. gcc/ChangeLog: * doc/options.texi (Mask): Document TARGET_<NAME>_P and TARGET_<NAME>_OPTS_P. (InverseMask): Ditto. * opth-gen.awk (Mask): Generate TARGET_<NAME>_P and TARGET_<NAME>_OPTS_P macro. (InverseMask): Ditto.
This commit is contained in:
parent
e8d418df3d
commit
0363bba87f
2 changed files with 28 additions and 8 deletions
|
@ -404,18 +404,27 @@ You may also specify @code{Var} to select a variable other than
|
|||
The options-processing script will automatically allocate a unique bit
|
||||
for the option. If the option is attached to @samp{target_flags} or @code{Var}
|
||||
which is defined by @code{TargetVariable}, the script will set the macro
|
||||
@code{MASK_@var{name}} to the appropriate bitmask. It will also declare a
|
||||
@code{TARGET_@var{name}} macro that has the value 1 when the option is active
|
||||
and 0 otherwise. If you use @code{Var} to attach the option to a different variable
|
||||
which is not defined by @code{TargetVariable}, the bitmask macro with be
|
||||
called @code{OPTION_MASK_@var{name}}.
|
||||
@code{MASK_@var{name}} to the appropriate bitmask. It will also declare a
|
||||
@code{TARGET_@var{name}}, @code{TARGET_@var{name}_P} and
|
||||
@code{TARGET_@var{name}_OPTS_P}: @code{TARGET_@var{name}} macros that has the
|
||||
value 1 when the option is active and 0 otherwise, @code{TARGET_@var{name}_P} is
|
||||
similar to @code{TARGET_@var{name}} but take an argument as @samp{target_flags}
|
||||
or @code{TargetVariable}, and @code{TARGET_@var{name}_OPTS_P} also similar to
|
||||
@code{TARGET_@var{name}} but take an argument as @code{gcc_options}.
|
||||
If you use @code{Var} to attach the option to a different variable which is not
|
||||
defined by @code{TargetVariable}, the bitmask macro with be called
|
||||
@code{OPTION_MASK_@var{name}}.
|
||||
|
||||
@item InverseMask(@var{othername})
|
||||
@itemx InverseMask(@var{othername}, @var{thisname})
|
||||
The option is the inverse of another option that has the
|
||||
@code{Mask(@var{othername})} property. If @var{thisname} is given,
|
||||
the options-processing script will declare a @code{TARGET_@var{thisname}}
|
||||
macro that is 1 when the option is active and 0 otherwise.
|
||||
the options-processing script will declare @code{TARGET_@var{thisname}},
|
||||
@code{TARGET_@var{name}_P} and @code{TARGET_@var{name}_OPTS_P} macros:
|
||||
@code{TARGET_@var{thisname}} is 1 when the option is active and 0 otherwise,
|
||||
@code{TARGET_@var{name}_P} is similar to @code{TARGET_@var{name}} but take an
|
||||
argument as @samp{target_flags}, and and @code{TARGET_@var{name}_OPTS_P} also
|
||||
similar to @code{TARGET_@var{name}} but take an argument as @code{gcc_options}.
|
||||
|
||||
@item Enum(@var{name})
|
||||
The option's argument is a string from the set of strings associated
|
||||
|
|
|
@ -439,6 +439,10 @@ for (i = 0; i < n_target_vars; i++)
|
|||
{
|
||||
print "#define TARGET_" other_masks[i "," j] \
|
||||
" ((" target_vars[i] " & MASK_" other_masks[i "," j] ") != 0)"
|
||||
print "#define TARGET_" other_masks[i "," j] "_P(" target_vars[i] ")" \
|
||||
" (((" target_vars[i] ") & MASK_" other_masks[i "," j] ") != 0)"
|
||||
print "#define TARGET_" other_masks[i "," j] "_OPTS_P(opts)" \
|
||||
" (((opts->x_" target_vars[i] ") & MASK_" other_masks[i "," j] ") != 0)"
|
||||
}
|
||||
}
|
||||
print ""
|
||||
|
@ -469,15 +473,22 @@ for (i = 0; i < n_opts; i++) {
|
|||
" ((" vname " & " mask original_name ") != 0)"
|
||||
print "#define TARGET_" name "_P(" vname ")" \
|
||||
" (((" vname ") & " mask original_name ") != 0)"
|
||||
print "#define TARGET_" name "_OPTS_P(opts)" \
|
||||
" (((opts->x_" vname ") & " mask original_name ") != 0)"
|
||||
print "#define TARGET_EXPLICIT_" name "_P(opts)" \
|
||||
" ((opts->x_" vname "_explicit & " mask original_name ") != 0)"
|
||||
print "#define SET_TARGET_" name "(opts) opts->x_" vname " |= " mask original_name
|
||||
}
|
||||
}
|
||||
for (i = 0; i < n_extra_masks; i++) {
|
||||
if (extra_mask_macros[extra_masks[i]] == 0)
|
||||
if (extra_mask_macros[extra_masks[i]] == 0) {
|
||||
print "#define TARGET_" extra_masks[i] \
|
||||
" ((target_flags & MASK_" extra_masks[i] ") != 0)"
|
||||
print "#define TARGET_" extra_masks[i] "_P(target_flags)" \
|
||||
" (((target_flags) & " extra_masks[i] ") != 0)"
|
||||
print "#define TARGET_" extra_masks[i] "_OPTS_P(opts)" \
|
||||
" (((opts->x_target_flags) & MASK_" extra_masks[i] ") != 0)"
|
||||
}
|
||||
}
|
||||
print ""
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue