[hellogcc] [patch 5 tm.texi]: Update gccint-zh trunk to upstreams r179462

  • From: Yao Qi <qiyaoltc@xxxxxxxxx>
  • To: hellogcc@xxxxxxxxxxxxx
  • Date: Fri, 7 Oct 2011 22:07:01 +0800

On Fri, Oct 07, 2011 at 09:47:15PM +0800, Yao Qi wrote:
> 这个patch是fsf gcc doc目录下边和gccint有关文件从 r170935到
> r179462的修改。我们gccint-zh trunk也是根据这个patch进行修改。
> 
> -- 
> Yao Qi <qiyaoltc AT gmail DOT com>
> 
> Index: tm.texi
> ===================================================================
> --- tm.texi   (revision 170935)
> +++ tm.texi   (revision 179462)
> @@ -1,5 +1,5 @@
>  @c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,
> -@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
> +@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
>  @c Free Software Foundation, Inc.
>  @c This is part of the GCC manual.
>  @c For copying conditions, see the file gcc.texi.
> @@ -91,6 +91,24 @@
>  from being defined in the @file{.h} file to being part of the
>  @code{targetm} structure.
>  
> +Similarly, there is a @code{targetcm} variable for hooks that are
> +specific to front ends for C-family languages, documented as ``C
> +Target Hook''.  This is declared in @file{c-family/c-target.h}, the
> +initializer @code{TARGETCM_INITIALIZER} in
> +@file{c-family/c-target-def.h}.  If targets initialize @code{targetcm}
> +themselves, they should set @code{target_has_targetcm=yes} in
> +@file{config.gcc}; otherwise a default definition is used.
> +
> +Similarly, there is a @code{targetm_common} variable for hooks that
> +are shared between the compiler driver and the compilers proper,
> +documented as ``Common Target Hook''.  This is declared in
> +@file{common/common-target.h}, the initializer
> +@code{TARGETM_COMMON_INITIALIZER} in
> +@file{common/common-target-def.h}.  If targets initialize
> +@code{targetm_common} themselves, they should set
> +@code{target_has_targetm_common=yes} in @file{config.gcc}; otherwise a
> +default definition is used.
> +
>  @node Driver
>  @section Controlling the Compilation Driver, @file{gcc}
>  @cindex driver
> @@ -375,6 +393,10 @@
>  removing duplicate search directories changes the linker's semantics.
>  @end defmac
>  
> +@deftypevr {Common Target Hook} bool TARGET_ALWAYS_STRIP_DOTDOT
> +True if @file{..} components should always be removed from directory names 
> computed relative to GCC's internal directories, false (default) if such 
> components should be preserved and directory names containing them passed to 
> other tools such as the linker.
> +@end deftypevr
> +
>  @defmac MULTILIB_DEFAULTS
>  Define this macro as a C expression for the initializer of an array of
>  string to tell the driver program which options are defaults for this
> @@ -524,7 +546,7 @@
>  
>  @item
>  The environment variable @code{GCC_EXEC_PREFIX} or, if @code{GCC_EXEC_PREFIX}
> -is not set and the compiler has not been installed in the configure-time 
> +is not set and the compiler has not been installed in the configure-time
>  @var{prefix}, the location in which the compiler has actually been installed.
>  
>  @item
> @@ -532,16 +554,16 @@
>  
>  @item
>  The macro @code{STANDARD_EXEC_PREFIX}, if the compiler has been installed
> -in the configured-time @var{prefix}. 
> +in the configured-time @var{prefix}.
>  
>  @item
> -The location @file{/usr/libexec/gcc/}, but only if this is a native 
> compiler. 
> +The location @file{/usr/libexec/gcc/}, but only if this is a native compiler.
>  
>  @item
> -The location @file{/usr/lib/gcc/}, but only if this is a native compiler. 
> +The location @file{/usr/lib/gcc/}, but only if this is a native compiler.
>  
>  @item
> -The macro @code{MD_EXEC_PREFIX}, if defined, but only if this is a native 
> +The macro @code{MD_EXEC_PREFIX}, if defined, but only if this is a native
>  compiler.
>  @end enumerate
>  
> @@ -561,21 +583,21 @@
>  
>  @item
>  The macro @code{STANDARD_EXEC_PREFIX}, but only if the toolchain is installed
> -in the configured @var{prefix} or this is a native compiler. 
> +in the configured @var{prefix} or this is a native compiler.
>  
>  @item
>  The location @file{/usr/lib/gcc/}, but only if this is a native compiler.
>  
>  @item
> -The macro @code{MD_EXEC_PREFIX}, if defined, but only if this is a native 
> +The macro @code{MD_EXEC_PREFIX}, if defined, but only if this is a native
>  compiler.
>  
>  @item
> -The macro @code{MD_STARTFILE_PREFIX}, if defined, but only if this is a 
> +The macro @code{MD_STARTFILE_PREFIX}, if defined, but only if this is a
>  native compiler, or we have a target system root.
>  
>  @item
> -The macro @code{MD_STARTFILE_PREFIX_1}, if defined, but only if this is a 
> +The macro @code{MD_STARTFILE_PREFIX_1}, if defined, but only if this is a
>  native compiler, or we have a target system root.
>  
>  @item
> @@ -656,7 +678,7 @@
>  any target-specific headers.
>  @end deftypevar
>  
> -@deftypevr {Target Hook} int TARGET_DEFAULT_TARGET_FLAGS
> +@deftypevr {Common Target Hook} int TARGET_DEFAULT_TARGET_FLAGS
>  This variable specifies the initial value of @code{target_flags}.
>  Its default setting is 0.
>  @end deftypevr
> @@ -664,24 +686,21 @@
>  @cindex optional hardware or system features
>  @cindex features, optional, in system conventions
>  
> -@deftypefn {Target Hook} bool TARGET_HANDLE_OPTION (size_t @var{code}, const 
> char *@var{arg}, int @var{value})
> +@deftypefn {Common Target Hook} bool TARGET_HANDLE_OPTION (struct 
> gcc_options *@var{opts}, struct gcc_options *@var{opts_set}, const struct 
> cl_decoded_option *@var{decoded}, location_t @var{loc})
>  This hook is called whenever the user specifies one of the
>  target-specific options described by the @file{.opt} definition files
>  (@pxref{Options}).  It has the opportunity to do some option-specific
>  processing and should return true if the option is valid.  The default
>  definition does nothing but return true.
>  
> -@var{code} specifies the @code{OPT_@var{name}} enumeration value
> -associated with the selected option; @var{name} is just a rendering of
> -the option name in which non-alphanumeric characters are replaced by
> -underscores.  @var{arg} specifies the string argument and is null if
> -no argument was given.  If the option is flagged as a @code{UInteger}
> -(@pxref{Option properties}), @var{value} is the numeric value of the
> -argument.  Otherwise @var{value} is 1 if the positive form of the
> -option was used and 0 if the ``no-'' form was.
> +@var{decoded} specifies the option and its arguments.  @var{opts} and
> +@var{opts_set} are the @code{gcc_options} structures to be used for
> +storing option state, and @var{loc} is the location at which the
> +option was passed (@code{UNKNOWN_LOCATION} except for options passed
> +via attributes).
>  @end deftypefn
>  
> -@deftypefn {Target Hook} bool TARGET_HANDLE_C_OPTION (size_t @var{code}, 
> const char *@var{arg}, int @var{value})
> +@deftypefn {C Target Hook} bool TARGET_HANDLE_C_OPTION (size_t @var{code}, 
> const char *@var{arg}, int @var{value})
>  This target hook is called whenever the user specifies one of the
>  target-specific C language family options described by the @file{.opt}
>  definition files(@pxref{Options}).  It has the opportunity to do some
> @@ -695,34 +714,18 @@
>  should use @code{TARGET_HANDLE_C_OPTION} instead.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree 
> @var{string})
> +@deftypefn {C Target Hook} tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree 
> @var{string})
>  Targets may provide a string object type that can be used within and between 
> C, C++ and their respective Objective-C dialects. A string object might, for 
> example, embed encoding and length information. These objects are considered 
> opaque to the compiler and handled as references. An ideal implementation 
> makes the composition of the string object match that of the Objective-C 
> @code{NSString} (@code{NXString} for GNUStep), allowing efficient 
> interworking between C-only and Objective-C code. If a target implements 
> string objects then this hook should return a reference to such an object 
> constructed from the normal `C' string representation provided in 
> @var{string}. At present, the hook is used by Objective-C only, to obtain a 
> common-format string object when the target provides one.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree 
> @var{stringref})
> +@deftypefn {C Target Hook} bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree 
> @var{stringref})
>  If a target implements string objects then this hook should return 
> @code{true} if @var{stringref} is a valid reference to such an object.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree 
> @var{format_arg}, tree @var{args_list})
> +@deftypefn {C Target Hook} void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree 
> @var{format_arg}, tree @var{args_list})
>  If a target implements string objects then this hook should should  provide 
> a facility to check the function arguments in @var{args_list}  against the 
> format specifiers in @var{format_arg} where the type of  @var{format_arg} is 
> one recognized as a valid string reference type.
>  @end deftypefn
>  
> -@defmac TARGET_VERSION
> -This macro is a C statement to print on @code{stderr} a string
> -describing the particular machine description choice.  Every machine
> -description should define @code{TARGET_VERSION}.  For example:
> -
> -@smallexample
> -#ifdef MOTOROLA
> -#define TARGET_VERSION \
> -  fprintf (stderr, " (68k, Motorola syntax)");
> -#else
> -#define TARGET_VERSION \
> -  fprintf (stderr, " (68k, MIT syntax)");
> -#endif
> -@end smallexample
> -@end defmac
> -
>  @deftypefn {Target Hook} void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void)
>  This target function is similar to the hook @code{TARGET_OPTION_OVERRIDE}
>  but is called when the optimize level is changed via an attribute or
> @@ -741,7 +744,7 @@
>  frontends.
>  @end defmac
>  
> -@deftypevr {Target Hook} {const struct default_options *} 
> TARGET_OPTION_OPTIMIZATION_TABLE
> +@deftypevr {Common Target Hook} {const struct default_options *} 
> TARGET_OPTION_OPTIMIZATION_TABLE
>  Some machines may desire to change what optimizations are performed for
>  various optimization levels.   This variable, if defined, describes
>  options to enable at particular sets of optimization levels.  These
> @@ -755,21 +758,14 @@
>  @code{optimize} attribute.
>  @end deftypevr
>  
> -@deftypefn {Target Hook} void TARGET_OPTION_INIT_STRUCT (struct gcc_options 
> *@var{opts})
> +@deftypefn {Common Target Hook} void TARGET_OPTION_INIT_STRUCT (struct 
> gcc_options *@var{opts})
>  Set target-dependent initial values of fields in @var{opts}.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} void TARGET_OPTION_DEFAULT_PARAMS (void)
> +@deftypefn {Common Target Hook} void TARGET_OPTION_DEFAULT_PARAMS (void)
>  Set target-dependent default values for @option{--param} settings, using 
> calls to @code{set_default_param_value}.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} void TARGET_HELP (void)
> -This hook is called in response to the user invoking
> -@option{--target-help} on the command line.  It gives the target a
> -chance to display extra information on the target specific command
> -line options found in its @file{.opt} file.
> -@end deftypefn
> -
>  @defmac SWITCHABLE_TARGET
>  Some targets need to switch between substantially different subtargets
>  during compilation.  For example, the MIPS target has one subtarget for
> @@ -874,11 +870,18 @@
>  @defmac WORDS_BIG_ENDIAN
>  Define this macro to have the value 1 if, in a multiword object, the
>  most significant word has the lowest number.  This applies to both
> -memory locations and registers; GCC fundamentally assumes that the
> -order of words in memory is the same as the order in registers.  This
> +memory locations and registers; see @code{REG_WORDS_BIG_ENDIAN} if the
> +order of words in memory is not the same as the order in registers.  This
>  macro need not be a constant.
>  @end defmac
>  
> +@defmac REG_WORDS_BIG_ENDIAN
> +On some machines, the order of words in a multiword object differs between
> +registers in memory.  In such a situation, define this macro to describe
> +the order of words in a register.  The macro @code{WORDS_BIG_ENDIAN} controls
> +the order of words in memory.
> +@end defmac
> +
>  @defmac FLOAT_WORDS_BIG_ENDIAN
>  Define this macro to have the value 1 if @code{DFmode}, @code{XFmode} or
>  @code{TFmode} floating point numbers are stored in memory with the word
> @@ -973,6 +976,8 @@
>  then the hook should return the same mode as @code{promote_mode}, though
>  the signedness may be different.
>  
> +@var{type} can be NULL when promoting function arguments of libcalls.
> +
>  The default is to not promote arguments and return values.  You can
>  also define the hook to @code{default_promote_function_mode_always_promote}
>  if you would like to apply the same rules given by @code{PROMOTE_MODE}.
> @@ -1590,6 +1595,15 @@
>  is 128 then the default is 1, otherwise it is 0.
>  @end defmac
>  
> +@defmac LIBGCC2_GNU_PREFIX
> +This macro corresponds to the @code{TARGET_LIBFUNC_GNU_PREFIX} target
> +hook and should be defined if that hook is overriden to be true.  It
> +causes function names in libgcc to be changed to use a @code{__gnu_}
> +prefix for their name rather than the default @code{__}.  A port which
> +uses this macro should also arrange to use @file{t-gnu-prefix} in
> +the libgcc @file{config.host}.
> +@end defmac
> +
>  @defmac SF_SIZE
>  @defmacx DF_SIZE
>  @defmacx XF_SIZE
> @@ -2337,13 +2351,19 @@
>  You can define such letters to correspond to various classes, then use
>  them in operand constraints.
>  
> +You must define the narrowest register classes for allocatable
> +registers, so that each class either has no subclasses, or that for
> +some mode, the move cost between registers within the class is
> +cheaper than moving a register in the class to or from memory
> +(@pxref{Costs}).
> +
>  You should define a class for the union of two classes whenever some
>  instruction allows both classes.  For example, if an instruction allows
>  either a floating point (coprocessor) register or a general register for a
>  certain operand, you should define a class @code{FLOAT_OR_GENERAL_REGS}
>  which includes both of them.  Otherwise you will get suboptimal code,
>  or even internal compiler errors when reload cannot find a register in the
> -the class computed via @code{reg_class_subunion}.
> +class computed via @code{reg_class_subunion}.
>  
>  You must also specify certain redundant information about the register
>  classes: for each class, which classes contain it and which ones are
> @@ -2533,7 +2553,7 @@
>  register, so @code{TARGET_PREFERRED_RELOAD_CLASS} returns @code{NO_REGS} when
>  @var{x} is a floating-point constant.  If the constant can't be loaded
>  into any kind of register, code generation will be better if
> -@code{LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
> +@code{TARGET_LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
>  of using @code{TARGET_PREFERRED_RELOAD_CLASS}.
>  
>  If an insn has pseudos in it after register allocation, reload will go
> @@ -2570,8 +2590,8 @@
>  register, so @code{PREFERRED_RELOAD_CLASS} returns @code{NO_REGS} when
>  @var{x} is a floating-point constant.  If the constant can't be loaded
>  into any kind of register, code generation will be better if
> -@code{LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
> -of using @code{PREFERRED_RELOAD_CLASS}.
> +@code{TARGET_LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
> +of using @code{TARGET_PREFERRED_RELOAD_CLASS}.
>  
>  If an insn has pseudos in it after register allocation, reload will go
>  through the alternatives and call repeatedly @code{PREFERRED_RELOAD_CLASS}
> @@ -2581,15 +2601,6 @@
>  the SSE registers (and vice versa).
>  @end defmac
>  
> -@defmac PREFERRED_OUTPUT_RELOAD_CLASS (@var{x}, @var{class})
> -Like @code{PREFERRED_RELOAD_CLASS}, but for output reloads instead of
> -input reloads.  If you don't define this macro, the default is to use
> -@var{class}, unchanged.
> -
> -You can also use @code{PREFERRED_OUTPUT_RELOAD_CLASS} to discourage
> -reload from using some alternatives, like @code{PREFERRED_RELOAD_CLASS}.
> -@end defmac
> -
>  @deftypefn {Target Hook} reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS 
> (rtx @var{x}, reg_class_t @var{rclass})
>  Like @code{TARGET_PREFERRED_RELOAD_CLASS}, but for output reloads instead of
>  input reloads.
> @@ -2826,6 +2837,23 @@
>  allocation.
>  @end deftypefn
>  
> +@deftypefn {Target Hook} {unsigned char} TARGET_CLASS_MAX_NREGS (reg_class_t 
> @var{rclass}, enum machine_mode @var{mode})
> +A target hook returns the maximum number of consecutive registers
> +of class @var{rclass} needed to hold a value of mode @var{mode}.
> +
> +This is closely related to the macro @code{HARD_REGNO_NREGS}.  In fact,
> +the value returned by @code{TARGET_CLASS_MAX_NREGS (@var{rclass},
> +@var{mode})} target hook should be the maximum value of
> +@code{HARD_REGNO_NREGS (@var{regno}, @var{mode})} for all @var{regno}
> +values in the class @var{rclass}.
> +
> +This target hook helps control the handling of multiple-word values
> +in the reload pass.
> +
> +The default version of this target hook returns the size of @var{mode}
> +in words.
> +@end deftypefn
> +
>  @defmac CLASS_MAX_NREGS (@var{class}, @var{mode})
>  A C expression for the maximum number of consecutive registers
>  of class @var{class} needed to hold a value of mode @var{mode}.
> @@ -2857,36 +2885,6 @@
>  @end smallexample
>  @end defmac
>  
> -@deftypefn {Target Hook} {const reg_class_t *} TARGET_IRA_COVER_CLASSES 
> (void)
> -Return an array of cover classes for the Integrated Register Allocator
> -(@acronym{IRA}).  Cover classes are a set of non-intersecting register
> -classes covering all hard registers used for register allocation
> -purposes.  If a move between two registers in the same cover class is
> -possible, it should be cheaper than a load or store of the registers.
> -The array is terminated by a @code{LIM_REG_CLASSES} element.
> -
> -The order of cover classes in the array is important.  If two classes
> -have the same cost of usage for a pseudo, the class occurred first in
> -the array is chosen for the pseudo.
> -
> -This hook is called once at compiler startup, after the command-line
> -options have been processed. It is then re-examined by every call to
> -@code{target_reinit}.
> -
> -The default implementation returns @code{IRA_COVER_CLASSES}, if defined,
> -otherwise there is no default implementation.  You must define either this
> -macro or @code{IRA_COVER_CLASSES} in order to use the integrated register
> -allocator with Chaitin-Briggs coloring. If the macro is not defined,
> -the only available coloring algorithm is Chow's priority coloring.
> -
> -This hook must not be modified from @code{NULL} to non-@code{NULL} or
> -vice versa by command-line option processing.
> -@end deftypefn
> -
> -@defmac IRA_COVER_CLASSES
> -See the documentation for @code{TARGET_IRA_COVER_CLASSES}.
> -@end defmac
> -
>  @node Old Constraints
>  @section Obsolete Macros for Defining Constraints
>  @cindex defining constraints, obsolete method
> @@ -3403,11 +3401,6 @@
>  to be emitted.
>  @end defmac
>  
> -@defmac MD_UNWIND_SUPPORT
> -A string specifying a file to be #include'd in unwind-dw2.c.  The file
> -so included typically defines @code{MD_FALLBACK_FRAME_STATE_FOR}.
> -@end defmac
> -
>  @defmac MD_FALLBACK_FRAME_STATE_FOR (@var{context}, @var{fs})
>  This macro allows the target to add CPU and operating system specific
>  code to the call-frame unwinder for use when there is no unwind data
> @@ -3723,6 +3716,24 @@
>  
>  @end defmac
>  
> +@defmac REG_VALUE_IN_UNWIND_CONTEXT
> +
> +Define this macro if the target stores register values as
> +@code{_Unwind_Word} type in unwind context.  It should be defined if
> +target register size is larger than the size of @code{void *}.  The
> +default is to store register values as @code{void *} type.
> +
> +@end defmac
> +
> +@defmac ASSUME_EXTENDED_UNWIND_CONTEXT
> +
> +Define this macro to be 1 if the target always uses extended unwind
> +context with version, args_size and by_value fields.  If it is undefined,
> +it will be defined to 1 when @code{REG_VALUE_IN_UNWIND_CONTEXT} is
> +defined and 0 otherwise.
> +
> +@end defmac
> +
>  @node Elimination
>  @subsection Eliminating Frame Pointer and Arg Pointer
>  
> @@ -3983,26 +3994,23 @@
>  types of arguments are passed in registers or how they are arranged in
>  the stack.
>  
> -@defmac FUNCTION_ARG (@var{cum}, @var{mode}, @var{type}, @var{named})
> -A C expression that controls whether a function argument is passed
> -in a register, and which register.
> +@deftypefn {Target Hook} rtx TARGET_FUNCTION_ARG (cumulative_args_t 
> @var{ca}, enum machine_mode @var{mode}, const_tree @var{type}, bool 
> @var{named})
> +Return an RTX indicating whether a function argument is passed in a
> +register and if so, which register.
>  
> -The arguments are @var{cum}, which summarizes all the previous
> +The arguments are @var{ca}, which summarizes all the previous
>  arguments; @var{mode}, the machine mode of the argument; @var{type},
>  the data type of the argument as a tree node or 0 if that is not known
>  (which happens for C support library functions); and @var{named},
> -which is 1 for an ordinary argument and 0 for nameless arguments that
> -correspond to @samp{@dots{}} in the called function's prototype.
> -@var{type} can be an incomplete type if a syntax error has previously
> -occurred.
> +which is @code{true} for an ordinary argument and @code{false} for
> +nameless arguments that correspond to @samp{@dots{}} in the called
> +function's prototype.  @var{type} can be an incomplete type if a
> +syntax error has previously occurred.
>  
> -The value of the expression is usually either a @code{reg} RTX for the
> -hard register in which to pass the argument, or zero to pass the
> -argument on the stack.
> +The return value is usually either a @code{reg} RTX for the hard
> +register in which to pass the argument, or zero to pass the argument
> +on the stack.
>  
> -For machines like the VAX and 68000, where normally all arguments are
> -pushed, zero suffices as a definition.
> -
>  The value of the expression can also be a @code{parallel} RTX@.  This is
>  used when an argument is passed in multiple locations.  The mode of the
>  @code{parallel} should be the mode of the entire argument.  The
> @@ -4017,26 +4025,27 @@
>  RTX may have a first operand of zero.  This indicates that the entire
>  argument is also stored on the stack.
>  
> -The last time this macro is called, it is called with @code{MODE ==
> +The last time this hook is called, it is called with @code{MODE ==
>  VOIDmode}, and its result is passed to the @code{call} or @code{call_value}
>  pattern as operands 2 and 3 respectively.
>  
>  @cindex @file{stdarg.h} and register arguments
> -The usual way to make the ISO library @file{stdarg.h} work on a machine
> -where some arguments are usually passed in registers, is to cause
> -nameless arguments to be passed on the stack instead.  This is done
> -by making @code{FUNCTION_ARG} return 0 whenever @var{named} is 0.
> +The usual way to make the ISO library @file{stdarg.h} work on a
> +machine where some arguments are usually passed in registers, is to
> +cause nameless arguments to be passed on the stack instead.  This is
> +done by making @code{TARGET_FUNCTION_ARG} return 0 whenever
> +@var{named} is @code{false}.
>  
> -@cindex @code{TARGET_MUST_PASS_IN_STACK}, and @code{FUNCTION_ARG}
> -@cindex @code{REG_PARM_STACK_SPACE}, and @code{FUNCTION_ARG}
> +@cindex @code{TARGET_MUST_PASS_IN_STACK}, and @code{TARGET_FUNCTION_ARG}
> +@cindex @code{REG_PARM_STACK_SPACE}, and @code{TARGET_FUNCTION_ARG}
>  You may use the hook @code{targetm.calls.must_pass_in_stack}
>  in the definition of this macro to determine if this argument is of a
>  type that must be passed in the stack.  If @code{REG_PARM_STACK_SPACE}
> -is not defined and @code{FUNCTION_ARG} returns nonzero for such an
> +is not defined and @code{TARGET_FUNCTION_ARG} returns nonzero for such an
>  argument, the compiler will abort.  If @code{REG_PARM_STACK_SPACE} is
>  defined, the argument will be computed in the stack and then loaded into
>  a register.
> -@end defmac
> +@end deftypefn
>  
>  @deftypefn {Target Hook} bool TARGET_MUST_PASS_IN_STACK (enum machine_mode 
> @var{mode}, const_tree @var{type})
>  This target hook should return @code{true} if we should not pass @var{type}
> @@ -4045,22 +4054,23 @@
>  documentation.
>  @end deftypefn
>  
> -@defmac FUNCTION_INCOMING_ARG (@var{cum}, @var{mode}, @var{type}, 
> @var{named})
> -Define this macro if the target machine has ``register windows'', so
> +@deftypefn {Target Hook} rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t 
> @var{ca}, enum machine_mode @var{mode}, const_tree @var{type}, bool 
> @var{named})
> +Define this hook if the target machine has ``register windows'', so
>  that the register in which a function sees an arguments is not
>  necessarily the same as the one in which the caller passed the
>  argument.
>  
> -For such machines, @code{FUNCTION_ARG} computes the register in which
> -the caller passes the value, and @code{FUNCTION_INCOMING_ARG} should
> -be defined in a similar fashion to tell the function being called
> -where the arguments will arrive.
> +For such machines, @code{TARGET_FUNCTION_ARG} computes the register in
> +which the caller passes the value, and
> +@code{TARGET_FUNCTION_INCOMING_ARG} should be defined in a similar
> +fashion to tell the function being called where the arguments will
> +arrive.
>  
> -If @code{FUNCTION_INCOMING_ARG} is not defined, @code{FUNCTION_ARG}
> -serves both purposes.
> -@end defmac
> +If @code{TARGET_FUNCTION_INCOMING_ARG} is not defined,
> +@code{TARGET_FUNCTION_ARG} serves both purposes.
> +@end deftypefn
>  
> -@deftypefn {Target Hook} int TARGET_ARG_PARTIAL_BYTES (CUMULATIVE_ARGS 
> *@var{cum}, enum machine_mode @var{mode}, tree @var{type}, bool @var{named})
> +@deftypefn {Target Hook} int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t 
> @var{cum}, enum machine_mode @var{mode}, tree @var{type}, bool @var{named})
>  This target hook returns the number of bytes at the beginning of an
>  argument that must be put in registers.  The value must be zero for
>  arguments that are passed entirely in registers or that are entirely
> @@ -4074,12 +4084,12 @@
>  in registers and the rest must be pushed.  This macro tells the
>  compiler when this occurs, and how many bytes should go in registers.
>  
> -@code{FUNCTION_ARG} for these arguments should return the first
> +@code{TARGET_FUNCTION_ARG} for these arguments should return the first
>  register to be used by the caller for this argument; likewise
> -@code{FUNCTION_INCOMING_ARG}, for the called function.
> +@code{TARGET_FUNCTION_INCOMING_ARG}, for the called function.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} bool TARGET_PASS_BY_REFERENCE (CUMULATIVE_ARGS 
> *@var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool 
> @var{named})
> +@deftypefn {Target Hook} bool TARGET_PASS_BY_REFERENCE (cumulative_args_t 
> @var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool 
> @var{named})
>  This target hook should return @code{true} if an argument at the
>  position indicated by @var{cum} should be passed by reference.  This
>  predicate is queried after target independent reasons for being
> @@ -4091,7 +4101,7 @@
>  to that type.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} bool TARGET_CALLEE_COPIES (CUMULATIVE_ARGS 
> *@var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool 
> @var{named})
> +@deftypefn {Target Hook} bool TARGET_CALLEE_COPIES (cumulative_args_t 
> @var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool 
> @var{named})
>  The function argument described by the parameters to this hook is
>  known to be passed by reference.  The hook should return true if the
>  function argument should be copied by the callee instead of copied
> @@ -4105,10 +4115,10 @@
>  @end deftypefn
>  
>  @defmac CUMULATIVE_ARGS
> -A C type for declaring a variable that is used as the first argument of
> -@code{FUNCTION_ARG} and other related values.  For some target machines,
> -the type @code{int} suffices and can hold the number of bytes of
> -argument so far.
> +A C type for declaring a variable that is used as the first argument
> +of @code{TARGET_FUNCTION_ARG} and other related values.  For some
> +target machines, the type @code{int} suffices and can hold the number
> +of bytes of argument so far.
>  
>  There is no need to record in @code{CUMULATIVE_ARGS} anything about the
>  arguments that have been passed on the stack.  The compiler has other
> @@ -4170,17 +4180,17 @@
>  @c --mew 5feb93   i switched the order of the sentences.  --mew 10feb93
>  @end defmac
>  
> -@defmac FUNCTION_ARG_ADVANCE (@var{cum}, @var{mode}, @var{type}, @var{named})
> -A C statement (sans semicolon) to update the summarizer variable
> -@var{cum} to advance past an argument in the argument list.  The
> -values @var{mode}, @var{type} and @var{named} describe that argument.
> -Once this is done, the variable @var{cum} is suitable for analyzing
> -the @emph{following} argument with @code{FUNCTION_ARG}, etc.
> +@deftypefn {Target Hook} void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t 
> @var{ca}, enum machine_mode @var{mode}, const_tree @var{type}, bool 
> @var{named})
> +This hook updates the summarizer variable pointed to by @var{ca} to
> +advance past an argument in the argument list.  The values @var{mode},
> +@var{type} and @var{named} describe that argument.  Once this is done,
> +the variable @var{cum} is suitable for analyzing the @emph{following}
> +argument with @code{TARGET_FUNCTION_ARG}, etc.
>  
> -This macro need not do anything if the argument in question was passed
> +This hook need not do anything if the argument in question was passed
>  on the stack.  The compiler knows how to track the amount of stack space
>  used for arguments without any special help.
> -@end defmac
> +@end deftypefn
>  
>  @defmac FUNCTION_ARG_OFFSET (@var{mode}, @var{type})
>  If defined, a C expression that is the number of bytes to add to the
> @@ -4196,9 +4206,9 @@
>  @code{enum direction}: either @code{upward} to pad above the argument,
>  @code{downward} to pad below, or @code{none} to inhibit padding.
>  
> -The @emph{amount} of padding is always just enough to reach the next
> -multiple of @code{TARGET_FUNCTION_ARG_BOUNDARY}; this macro does not
> -control it.
> +The @emph{amount} of padding is not controlled by this macro, but by the
> +target hook @code{TARGET_FUNCTION_ARG_ROUND_BOUNDARY}.  It is
> +always just enough to reach the next multiple of that boundary. 
>  
>  This macro has a default definition which is right for most systems.
>  For little-endian machines, the default is to pad upward.  For
> @@ -4231,6 +4241,13 @@
>  @code{PARM_BOUNDARY} for all arguments.
>  @end deftypefn
>  
> +@deftypefn {Target Hook} {unsigned int} TARGET_FUNCTION_ARG_ROUND_BOUNDARY 
> (enum machine_mode @var{mode}, const_tree @var{type})
> +Normally, the size of an argument is rounded up to @code{PARM_BOUNDARY},
> +which is the default value for this hook.  You can define this hook to
> +return a different value if an argument size must be rounded to a larger
> +value.
> +@end deftypefn
> +
>  @defmac FUNCTION_ARG_REGNO_P (@var{regno})
>  A C expression that is nonzero if @var{regno} is the number of a hard
>  register in which function arguments are sometimes passed.  This does
> @@ -4319,6 +4336,34 @@
>  must have move patterns for this mode.
>  @end deftypefn
>  
> +@deftypefn {Target Hook} bool TARGET_ARRAY_MODE_SUPPORTED_P (enum 
> machine_mode @var{mode}, unsigned HOST_WIDE_INT @var{nelems})
> +Return true if GCC should try to use a scalar mode to store an array
> +of @var{nelems} elements, given that each element has mode @var{mode}.
> +Returning true here overrides the usual @code{MAX_FIXED_MODE} limit
> +and allows GCC to use any defined integer mode.
> +
> +One use of this hook is to support vector load and store operations
> +that operate on several homogeneous vectors.  For example, ARM NEON
> +has operations like:
> +
> +@smallexample
> +int8x8x3_t vld3_s8 (const int8_t *)
> +@end smallexample
> +
> +where the return type is defined as:
> +
> +@smallexample
> +typedef struct int8x8x3_t
> +@{
> +  int8x8_t val[3];
> +@} int8x8x3_t;
> +@end smallexample
> +
> +If this hook allows @code{val} to have a scalar mode, then
> +@code{int8x8x3_t} can have the same mode.  GCC can then store
> +@code{int8x8x3_t}s in registers rather than forcing them onto the stack.
> +@end deftypefn
> +
>  @deftypefn {Target Hook} bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P (enum 
> machine_mode @var{mode})
>  Define this to return nonzero for machine modes for which the port has
>  small register classes.  If this target hook returns nonzero for a given
> @@ -4380,7 +4425,7 @@
>  place regardless of mode.)  The value of the expression is usually a
>  @code{reg} RTX for the hard register where the return value is stored.
>  The value can also be a @code{parallel} RTX, if the return value is in
> -multiple places.  See @code{FUNCTION_ARG} for an explanation of the
> +multiple places.  See @code{TARGET_FUNCTION_ARG} for an explanation of the
>  @code{parallel} form.   Note that the callee will populate every
>  location specified in the @code{parallel}, but if the first element of
>  the @code{parallel} contains the whole return value, callers will use
> @@ -4425,10 +4470,10 @@
>  
>  @deftypefn {Target Hook} rtx TARGET_LIBCALL_VALUE (enum machine_mode 
> @var{mode}, const_rtx @var{fun})
>  Define this hook if the back-end needs to know the name of the libcall
> -function in order to determine where the result should be returned.  
> +function in order to determine where the result should be returned.
>  
>  The mode of the result is given by @var{mode} and the name of the called
> -library function is given by @var{fun}.  The hook should return an RTX 
> +library function is given by @var{fun}.  The hook should return an RTX
>  representing the place where the library function result will be returned.
>  
>  If this hook is not defined, then LIBCALL_VALUE will be used.
> @@ -4953,7 +4998,7 @@
>  normally defined in @file{libgcc2.c}.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} bool TARGET_SUPPORTS_SPLIT_STACK (bool 
> @var{report}, struct gcc_options *@var{opts})
> +@deftypefn {Common Target Hook} bool TARGET_SUPPORTS_SPLIT_STACK (bool 
> @var{report}, struct gcc_options *@var{opts})
>  Whether this target supports splitting the stack when the options described 
> in @var{opts} have been passed.  This is called after options have been 
> parsed, so the target may reject splitting the stack in some configurations.  
> The default version of this hook returns false.  If @var{report} is true, 
> this function may issue a warning or error; if @var{report} is false, it must 
> simply return a value
>  @end deftypefn
>  
> @@ -5033,7 +5078,7 @@
>  to use as the return of @code{__builtin_saveregs}.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} void TARGET_SETUP_INCOMING_VARARGS (CUMULATIVE_ARGS 
> *@var{args_so_far}, enum machine_mode @var{mode}, tree @var{type}, int 
> *@var{pretend_args_size}, int @var{second_time})
> +@deftypefn {Target Hook} void TARGET_SETUP_INCOMING_VARARGS 
> (cumulative_args_t @var{args_so_far}, enum machine_mode @var{mode}, tree 
> @var{type}, int *@var{pretend_args_size}, int @var{second_time})
>  This target hook offers an alternative to using
>  @code{__builtin_saveregs} and defining the hook
>  @code{TARGET_EXPAND_BUILTIN_SAVEREGS}.  Use it to store the anonymous
> @@ -5067,11 +5112,11 @@
>  not generate any instructions in this case.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} bool TARGET_STRICT_ARGUMENT_NAMING (CUMULATIVE_ARGS 
> *@var{ca})
> +@deftypefn {Target Hook} bool TARGET_STRICT_ARGUMENT_NAMING 
> (cumulative_args_t @var{ca})
>  Define this hook to return @code{true} if the location where a function
>  argument is passed depends on whether or not it is a named argument.
>  
> -This hook controls how the @var{named} argument to @code{FUNCTION_ARG}
> +This hook controls how the @var{named} argument to @code{TARGET_FUNCTION_ARG}
>  is set for varargs and stdarg functions.  If this hook returns
>  @code{true}, the @var{named} argument is always true for named
>  arguments, and false for unnamed arguments.  If it returns @code{false},
> @@ -5082,7 +5127,7 @@
>  You need not define this hook if it always returns @code{false}.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED 
> (CUMULATIVE_ARGS *@var{ca})
> +@deftypefn {Target Hook} bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED 
> (cumulative_args_t @var{ca})
>  If you need to conditionally change ABIs so that one works with
>  @code{TARGET_SETUP_INCOMING_VARARGS}, but the other works like neither
>  @code{TARGET_SETUP_INCOMING_VARARGS} nor 
> @code{TARGET_STRICT_ARGUMENT_NAMING} was
> @@ -5157,12 +5202,12 @@
>  If the target defines @code{TARGET_ASM_TRAMPOLINE_TEMPLATE}, then the
>  first thing this hook should do is emit a block move into @var{m_tramp}
>  from the memory block returned by @code{assemble_trampoline_template}.
> -Note that the block move need only cover the constant parts of the 
> +Note that the block move need only cover the constant parts of the
>  trampoline.  If the target isolates the variable parts of the trampoline
>  to the end, not all @code{TRAMPOLINE_SIZE} bytes need be copied.
>  
>  If the target requires any other actions, such as flushing caches or
> -enabling stack execution, these actions should be performed after 
> +enabling stack execution, these actions should be performed after
>  initializing the trampoline proper.
>  @end deftypefn
>  
> @@ -5197,19 +5242,6 @@
>  @var{end} are both pointer expressions.
>  @end defmac
>  
> -The operating system may also require the stack to be made executable
> -before calling the trampoline.  To implement this requirement, define
> -the following macro.
> -
> -@defmac ENABLE_EXECUTE_STACK
> -Define this macro if certain operations must be performed before executing
> -code located on the stack.  The macro should expand to a series of C
> -file-scope constructs (e.g.@: functions) and provide a unique entry point
> -named @code{__enable_execute_stack}.  The target is responsible for
> -emitting calls to the entry point in the code, for example from the
> -@code{TARGET_TRAMPOLINE_INIT} hook.
> -@end defmac
> -
>  To use a standard subroutine, define the following macro.  In addition,
>  you must make sure that the instructions in a trampoline fill an entire
>  cache line with identical instructions, or else ensure that the
> @@ -5257,6 +5289,15 @@
>  The default is to do nothing.  Most ports don't need to define this hook.
>  @end deftypefn
>  
> +@deftypevr {Target Hook} bool TARGET_LIBFUNC_GNU_PREFIX
> +If false (the default), internal library routines start with two
> +underscores.  If set to true, these routines start with @code{__gnu_}
> +instead.  E.g., @code{__muldi3} changes to @code{__gnu_muldi3}.  This
> +currently only affects functions defined in @file{libgcc2.c}.  If this
> +is set to true, the @file{tm.h} file must also
> +@code{#define LIBGCC2_GNU_PREFIX}.
> +@end deftypevr
> +
>  @defmac FLOAT_LIB_COMPARE_RETURNS_BOOL (@var{mode}, @var{comparison})
>  This macro should return @code{true} if the library routine that
>  implements the floating point comparison operator @var{comparison} in
> @@ -5366,7 +5407,7 @@
>  is a valid address.  On most machines the default definition of
>  @code{(CONSTANT_P (@var{x}) && GET_CODE (@var{x}) != CONST_DOUBLE)}
>  is acceptable, but a few machines are more restrictive as to which
> -constant addresses are supported. 
> +constant addresses are supported.
>  @end defmac
>  
>  @defmac CONSTANT_P (@var{x})
> @@ -5577,14 +5618,14 @@
>  @code{TARGET_MODE_DEPENDENT_ADDRESS_P} target hook.
>  @end defmac
>  
> -@defmac LEGITIMATE_CONSTANT_P (@var{x})
> -A C expression that is nonzero if @var{x} is a legitimate constant for
> -an immediate operand on the target machine.  You can assume that
> -@var{x} satisfies @code{CONSTANT_P}, so you need not check this.  In fact,
> -@samp{1} is a suitable definition for this macro on machines where
> -anything @code{CONSTANT_P} is valid.
> -@end defmac
> +@deftypefn {Target Hook} bool TARGET_LEGITIMATE_CONSTANT_P (enum 
> machine_mode @var{mode}, rtx @var{x})
> +This hook returns true if @var{x} is a legitimate constant for a
> +@var{mode}-mode immediate operand on the target machine.  You can assume that
> +@var{x} satisfies @code{CONSTANT_P}, so you need not check this.
>  
> +The default definition returns true.
> +@end deftypefn
> +
>  @deftypefn {Target Hook} rtx TARGET_DELEGITIMIZE_ADDRESS (rtx @var{x})
>  This hook is used to undo the possibly obfuscating effects of the
>  @code{LEGITIMIZE_ADDRESS} and @code{LEGITIMIZE_RELOAD_ADDRESS} target
> @@ -5595,11 +5636,13 @@
>  into their original form.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} bool TARGET_CANNOT_FORCE_CONST_MEM (rtx @var{x})
> +@deftypefn {Target Hook} bool TARGET_CANNOT_FORCE_CONST_MEM (enum 
> machine_mode @var{mode}, rtx @var{x})
>  This hook should return true if @var{x} is of a form that cannot (or
> -should not) be spilled to the constant pool.  The default version of
> -this hook returns false.
> +should not) be spilled to the constant pool.  @var{mode} is the mode
> +of @var{x}.
>  
> +The default version of this hook returns false.
> +
>  The primary reason to define this hook is to prevent reload from
>  deciding that a non-legitimate constant would be better reloaded
>  from the constant pool instead of spilling and reloading a register
> @@ -5678,7 +5721,7 @@
>  
>  @deftypefn {Target Hook} int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST 
> (enum vect_cost_for_stmt @var{type_of_cost}, tree @var{vectype}, int 
> @var{misalign})
>  Returns cost of different scalar or vector statements for vectorization cost 
> model.
> -For vector memory operations the cost may depend on type (@var{vectype}) and 
> +For vector memory operations the cost may depend on type (@var{vectype}) and
>  misalignment value (@var{misalign}).
>  @end deftypefn
>  
> @@ -6276,7 +6319,7 @@
>  @defmac SET_RATIO (@var{speed})
>  The threshold of number of scalar move insns, @emph{below} which a sequence
>  of insns should be generated to set memory to a constant value, instead of
> -a block set insn or a library call.  
> +a block set insn or a library call.
>  Increasing the value will always make code faster, but
>  eventually incurs high cost in increased code size.
>  
> @@ -6288,8 +6331,8 @@
>  
>  @defmac SET_BY_PIECES_P (@var{size}, @var{alignment})
>  A C expression used to determine whether @code{store_by_pieces} will be
> -used to set a chunk of memory to a constant value, or whether some 
> -other mechanism will be used.  Used by @code{__builtin_memset} when 
> +used to set a chunk of memory to a constant value, or whether some
> +other mechanism will be used.  Used by @code{__builtin_memset} when
>  storing values other than constant zero.
>  Defaults to 1 if @code{move_by_pieces_ninsns} returns less
>  than @code{SET_RATIO}.
> @@ -6363,15 +6406,20 @@
>  @code{BRANCH_COST} is greater than or equal to the value 2.
>  @end defmac
>  
> -@deftypefn {Target Hook} bool TARGET_RTX_COSTS (rtx @var{x}, int @var{code}, 
> int @var{outer_code}, int *@var{total}, bool @var{speed})
> +@deftypefn {Target Hook} bool TARGET_RTX_COSTS (rtx @var{x}, int @var{code}, 
> int @var{outer_code}, int @var{opno}, int *@var{total}, bool @var{speed})
>  This target hook describes the relative costs of RTL expressions.
>  
>  The cost may depend on the precise form of the expression, which is
> -available for examination in @var{x}, and the rtx code of the expression
> -in which it is contained, found in @var{outer_code}.  @var{code} is the
> -expression code---redundant, since it can be obtained with
> -@code{GET_CODE (@var{x})}.
> +available for examination in @var{x}, and the fact that @var{x} appears
> +as operand @var{opno} of an expression with rtx code @var{outer_code}.
> +That is, the hook can assume that there is some rtx @var{y} such
> +that @samp{GET_CODE (@var{y}) == @var{outer_code}} and such that
> +either (a) @samp{XEXP (@var{y}, @var{opno}) == @var{x}} or
> +(b) @samp{XVEC (@var{y}, @var{opno})} contains @var{x}.
>  
> +@var{code} is @var{x}'s expression code---redundant, since it can be
> +obtained with @code{GET_CODE (@var{x})}.
> +
>  In implementing this hook, you can use the construct
>  @code{COSTS_N_INSNS (@var{n})} to specify a cost equal to @var{n} fast
>  instructions.
> @@ -6786,6 +6834,17 @@
>  in its second parameter.
>  @end deftypefn
>  
> +@deftypevr {Target Hook} bool TARGET_SCHED_EXPOSED_PIPELINE
> +True if the processor has an exposed pipeline, which means that not just
> +the order of instructions is important for correctness when scheduling, but
> +also the latencies of operations.
> +@end deftypevr
> +
> +@deftypefn {Target Hook} int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int 
> @var{opc}, enum machine_mode @var{mode})
> +This hook is called by tree reassociator to determine a level of
> +parallelism required in output calculations chain.
> +@end deftypefn
> +
>  @node Sections
>  @section Dividing the Output into Sections (Texts, Data, @dots{})
>  @c the above section title is WAY too long.  maybe cut the part between
> @@ -6863,8 +6922,8 @@
>  @defmac BSS_SECTION_ASM_OP
>  If defined, a C expression whose value is a string, including spacing,
>  containing the assembler operation to identify the following data as
> -uninitialized global data.  If not defined, and neither
> -@code{ASM_OUTPUT_BSS} nor @code{ASM_OUTPUT_ALIGNED_BSS} are defined,
> +uninitialized global data.  If not defined, and
> +@code{ASM_OUTPUT_ALIGNED_BSS} not defined,
>  uninitialized global data will be output in the data section if
>  @option{-fno-common} is passed, otherwise @code{ASM_OUTPUT_COMMON} will be
>  used.
> @@ -7027,6 +7086,12 @@
>  otherwise.
>  @end deftypefn
>  
> +@deftypevr {Target Hook} {const char *} TARGET_ASM_MERGEABLE_RODATA_PREFIX
> +Usually, the compiler uses the prefix @code{".rodata"} to construct
> +section names for mergeable constant data.  Define this macro to override
> +the string if a different section name should be used.
> +@end deftypevr
> +
>  @deftypefn {Target Hook} {section *} TARGET_ASM_SELECT_RTX_SECTION (enum 
> machine_mode @var{mode}, rtx @var{x}, unsigned HOST_WIDE_INT @var{align})
>  Return the section into which a constant @var{x}, of mode @var{mode},
>  should be placed.  You can assume that @var{x} is some kind of
> @@ -7140,7 +7205,7 @@
>  when the source operand contains a symbolic address.  You may also
>  need to alter the handling of switch statements so that they use
>  relative addresses.
> -@c i rearranged the order of the macros above to try to force one of 
> +@c i rearranged the order of the macros above to try to force one of
>  @c them to the next line, to eliminate an overfull hbox. --mew 10feb93
>  
>  @defmac PIC_OFFSET_TABLE_REGNUM
> @@ -7328,7 +7393,7 @@
>  @deftypefn {Target Hook} {section *} TARGET_ASM_FUNCTION_SECTION (tree 
> @var{decl}, enum node_frequency @var{freq}, bool @var{startup}, bool 
> @var{exit})
>  Return preferred text (sub)section for function @var{decl}.
>  Main purpose of this function is to separate cold, normal and hot
> -functions. @var{startup} is true when function is known to be used only 
> +functions. @var{startup} is true when function is known to be used only
>  at startup (from static constructors or it is @code{main()}).
>  @var{exit} is true when function is known to be used only at exit
>  (from static destructors).
> @@ -7339,7 +7404,7 @@
>  Used by the target to emit any assembler directives or additional  labels 
> needed when a function is partitioned between different  sections.  Output 
> should be written to @var{file}.  The function  decl is available as 
> @var{decl} and the new section is `cold' if  @var{new_is_cold} is @code{true}.
>  @end deftypefn
>  
> -@deftypevr {Target Hook} bool TARGET_HAVE_NAMED_SECTIONS
> +@deftypevr {Common Target Hook} bool TARGET_HAVE_NAMED_SECTIONS
>  This flag is true if the target supports @code{TARGET_ASM_NAMED_SECTION}.
>  It must not be modified by command-line option processing.
>  @end deftypevr
> @@ -7640,20 +7705,19 @@
>  the variable's decl in order to chose what to output.
>  @end defmac
>  
> -@defmac ASM_OUTPUT_BSS (@var{stream}, @var{decl}, @var{name}, @var{size}, 
> @var{rounded})
> +@defmac ASM_OUTPUT_ALIGNED_BSS (@var{stream}, @var{decl}, @var{name}, 
> @var{size}, @var{alignment})
>  A C statement (sans semicolon) to output to the stdio stream
>  @var{stream} the assembler definition of uninitialized global @var{decl} 
> named
> -@var{name} whose size is @var{size} bytes.  The variable @var{rounded}
> -is the size rounded up to whatever alignment the caller wants.
> +@var{name} whose size is @var{size} bytes.  The variable @var{alignment}
> +is the alignment specified as the number of bits.
>  
> -Try to use function @code{asm_output_bss} defined in @file{varasm.c} when
> -defining this macro.  If unable, use the expression
> +Try to use function @code{asm_output_aligned_bss} defined in file
> +@file{varasm.c} when defining this macro.  If unable, use the expression
>  @code{assemble_name (@var{stream}, @var{name})} to output the name itself;
>  before and after that, output the additional assembler syntax for defining
>  the name, and a newline.
>  
> -There are two ways of handling global BSS@.  One is to define either
> -this macro or its aligned counterpart, @code{ASM_OUTPUT_ALIGNED_BSS}.
> +There are two ways of handling global BSS@.  One is to define this macro.
>  The other is to have @code{TARGET_ASM_SELECT_SECTION} return a
>  switchable BSS section (@pxref{TARGET_HAVE_SWITCHABLE_BSS_SECTIONS}).
>  You do not need to do both.
> @@ -7665,17 +7729,6 @@
>  common in order to save space in the object file.
>  @end defmac
>  
> -@defmac ASM_OUTPUT_ALIGNED_BSS (@var{stream}, @var{decl}, @var{name}, 
> @var{size}, @var{alignment})
> -Like @code{ASM_OUTPUT_BSS} except takes the required alignment as a
> -separate, explicit argument.  If you define this macro, it is used in
> -place of @code{ASM_OUTPUT_BSS}, and gives you more flexibility in
> -handling the required alignment of the variable.  The alignment is specified
> -as the number of bits.
> -
> -Try to use function @code{asm_output_aligned_bss} defined in file
> -@file{varasm.c} when defining this macro.
> -@end defmac
> -
>  @defmac ASM_OUTPUT_LOCAL (@var{stream}, @var{name}, @var{size}, 
> @var{rounded})
>  A C statement (sans semicolon) to output to the stdio stream
>  @var{stream} the assembler definition of a local-common-label named
> @@ -8866,7 +8919,7 @@
>  or @code{OBJECT_FORMAT_ELF}), GCC will provide a default definition of 1.
>  @end defmac
>  
> -@deftypefn {Target Hook} {enum unwind_info_type} TARGET_EXCEPT_UNWIND_INFO 
> (struct gcc_options *@var{opts})
> +@deftypefn {Common Target Hook} {enum unwind_info_type} 
> TARGET_EXCEPT_UNWIND_INFO (struct gcc_options *@var{opts})
>  This hook defines the mechanism that will be used for exception handling
>  by the target.  If the target has ABI specified unwind tables, the hook
>  should return @code{UI_TARGET}.  If the target is to use the
> @@ -8892,7 +8945,7 @@
>  must define this hook so that @var{opts} is used correctly.
>  @end deftypefn
>  
> -@deftypevr {Target Hook} bool TARGET_UNWIND_TABLES_DEFAULT
> +@deftypevr {Common Target Hook} bool TARGET_UNWIND_TABLES_DEFAULT
>  This variable should be set to @code{true} if the target ABI requires 
> unwinding
>  tables even when exceptions are not used.  It must not be modified by
>  command-line option processing.
> @@ -9430,6 +9483,14 @@
>  True if the @code{.debug_pubtypes} and @code{.debug_pubnames} sections 
> should be emitted.  These sections are not used on most platforms, and in 
> particular GDB does not use them.
>  @end deftypevr
>  
> +@deftypevr {Target Hook} bool TARGET_DELAY_SCHED2
> +True if sched2 is not to be run at its normal place.  This usually means it 
> will be run as part of machine-specific reorg.
> +@end deftypevr
> +
> +@deftypevr {Target Hook} bool TARGET_DELAY_VARTRACK
> +True if vartrack is not to be run at its normal place.  This usually means 
> it will be run as part of machine-specific reorg.
> +@end deftypevr
> +
>  @defmac ASM_OUTPUT_DWARF_DELTA (@var{stream}, @var{size}, @var{label1}, 
> @var{label2})
>  A C statement to issue assembly directives that create a difference
>  @var{lab1} minus @var{lab2}, using an integer of the given @var{size}.
> @@ -10113,6 +10174,10 @@
>  @var{type} is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has just 
> been defined.  Use this hook to make adjustments to the class (eg, tweak 
> visibility or perform any other required target modifications).
>  @end deftypefn
>  
> +@deftypefn {Target Hook} tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree 
> @var{decl})
> +Return target-specific mangling context of @var{decl} or @code{NULL_TREE}.
> +@end deftypefn
> +
>  @node Named Address Spaces
>  @section Adding support for named address spaces
>  @cindex named address spaces
> @@ -10191,7 +10256,7 @@
>  except that it includes explicit named address space support.
>  @end deftypefn
>  
> -@deftypefn {Target Hook} bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t 
> @var{superset}, addr_space_t @var{subset})
> +@deftypefn {Target Hook} bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t 
> @var{subset}, addr_space_t @var{superset})
>  Define this to return whether the @var{subset} named address space is
>  contained within the @var{superset} named address space.  Pointers to
>  a named address space that is a subset of another named address space
> @@ -10555,14 +10620,14 @@
>  @defmac CLZ_DEFINED_VALUE_AT_ZERO (@var{mode}, @var{value})
>  @defmacx CTZ_DEFINED_VALUE_AT_ZERO (@var{mode}, @var{value})
>  A C expression that indicates whether the architecture defines a value
> -for @code{clz} or @code{ctz} with a zero operand.  
> +for @code{clz} or @code{ctz} with a zero operand.
>  A result of @code{0} indicates the value is undefined.
>  If the value is defined for only the RTL expression, the macro should
>  evaluate to @code{1}; if the value applies also to the corresponding optab
>  entry (which is normally the case if it expands directly into
> -the corresponding RTL), then the macro should evaluate to @code{2}.  
> +the corresponding RTL), then the macro should evaluate to @code{2}.
>  In the cases where the value is defined, @var{value} should be set to
> -this value.  
> +this value.
>  
>  If this macro is not defined, the value of @code{clz} or
>  @code{ctz} at zero is assumed to be undefined.
> @@ -10595,7 +10660,7 @@
>  @defmac FUNCTION_MODE
>  An alias for the machine mode used for memory references to functions
>  being called, in @code{call} RTL expressions.  On most CISC machines,
> -where an instruction can begin at any byte address, this should be 
> +where an instruction can begin at any byte address, this should be
>  @code{QImode}.  On most RISC machines, where all instructions have fixed
>  size and alignment, this should be a mode with the same size and alignment
>  as the machine instruction words - typically @code{SImode} or @code{HImode}.
> @@ -10871,7 +10936,7 @@
>  To create a built-in function, call the function
>  @code{lang_hooks.builtin_function}
>  which is defined by the language front end.  You can use any type nodes set
> -up by @code{build_common_tree_nodes} and @code{build_common_tree_nodes_2};
> +up by @code{build_common_tree_nodes};
>  only language front ends that use those two functions will call
>  @samp{TARGET_INIT_BUILTINS}.
>  @end deftypefn
> @@ -10982,7 +11047,7 @@
>  @end deftypefn
>  
>  @deftypefn {Target Hook} void TARGET_SET_CURRENT_FUNCTION (tree @var{decl})
> -The compiler invokes this hook whenever it changes its current function 
> +The compiler invokes this hook whenever it changes its current function
>  context (@code{cfun}).  You can define this function if
>  the back end needs to perform any initialization or reset actions on a
>  per-function basis.  For example, it may be used to implement function
> @@ -11196,21 +11261,21 @@
>  
>  @deftypefn {Target Hook} {const char *} TARGET_INVALID_PARAMETER_TYPE 
> (const_tree @var{type})
>  If defined, this macro returns the diagnostic message when it is
> -invalid for functions to include parameters of type @var{type}, 
> +invalid for functions to include parameters of type @var{type},
>  or @code{NULL} if validity should be determined by
>  the front end.  This is currently used only by the C and C++ front ends.
>  @end deftypefn
>  
>  @deftypefn {Target Hook} {const char *} TARGET_INVALID_RETURN_TYPE 
> (const_tree @var{type})
>  If defined, this macro returns the diagnostic message when it is
> -invalid for functions to have return type @var{type}, 
> +invalid for functions to have return type @var{type},
>  or @code{NULL} if validity should be determined by
>  the front end.  This is currently used only by the C and C++ front ends.
>  @end deftypefn
>  
>  @deftypefn {Target Hook} tree TARGET_PROMOTED_TYPE (const_tree @var{type})
> -If defined, this target hook returns the type to which values of 
> -@var{type} should be promoted when they appear in expressions, 
> +If defined, this target hook returns the type to which values of
> +@var{type} should be promoted when they appear in expressions,
>  analogous to the integer promotions, or @code{NULL_TREE} to use the
>  front end's normal promotion rules.  This hook is useful when there are
>  target-specific types with special promotion rules.
> @@ -11218,10 +11283,10 @@
>  @end deftypefn
>  
>  @deftypefn {Target Hook} tree TARGET_CONVERT_TO_TYPE (tree @var{type}, tree 
> @var{expr})
> -If defined, this hook returns the result of converting @var{expr} to 
> -@var{type}.  It should return the converted expression, 
> +If defined, this hook returns the result of converting @var{expr} to
> +@var{type}.  It should return the converted expression,
>  or @code{NULL_TREE} to apply the front end's normal conversion rules.
> -This hook is useful when there are target-specific types with special 
> +This hook is useful when there are target-specific types with special
>  conversion rules.
>  This is currently used only by the C and C++ front ends.
>  @end deftypefn
> @@ -11239,7 +11304,7 @@
>  
>  @defmac LIBGCC2_UNWIND_ATTRIBUTE
>  Define this macro if any target-specific attributes need to be attached
> -to the functions in @file{libgcc} that provide low-level support for 
> +to the functions in @file{libgcc} that provide low-level support for
>  call stack unwinding.  It is used in declarations in @file{unwind-generic.h}
>  and the associated definitions of those functions.
>  @end defmac
-- 
Yao Qi <qiyaoltc AT gmail DOT com>

Afternoon very favorable for romance.  Try a single person for a change.

Index: tm.texi
===================================================================
--- tm.texi     (revision 374)
+++ tm.texi     (working copy)
@@ -1,5 +1,5 @@
 @c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,
-@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 @c Free Software Foundation, Inc.
 @c This is part of the GCC manual.
 @c For copying conditions, see the file gcc.texi.
@@ -131,6 +131,24 @@
 @en @code{targetm} structure.
 
其中,宏应该通过这种方式在@file{.c}文件中被定义,从而成为@code{targetm}结构体的一部分。该宏将在下面作为具有函数原型的“目标钩子”来介绍。在@file{.h}文件中定义的许多宏将来都会改为@code{targetm}结构体的一部分。
 
+Similarly, there is a @code{targetcm} variable for hooks that are
+specific to front ends for C-family languages, documented as ``C
+Target Hook''.  This is declared in @file{c-family/c-target.h}, the
+initializer @code{TARGETCM_INITIALIZER} in
+@file{c-family/c-target-def.h}.  If targets initialize @code{targetcm}
+themselves, they should set @code{target_has_targetcm=yes} in
+@file{config.gcc}; otherwise a default definition is used.
+
+Similarly, there is a @code{targetm_common} variable for hooks that
+are shared between the compiler driver and the compilers proper,
+documented as ``Common Target Hook''.  This is declared in
+@file{common/common-target.h}, the initializer
+@code{TARGETM_COMMON_INITIALIZER} in
+@file{common/common-target-def.h}.  If targets initialize
+@code{targetm_common} themselves, they should set
+@code{target_has_targetm_common=yes} in @file{config.gcc}; otherwise a
+default definition is used.
+
 @en @node Driver
 @en @section Controlling the Compilation Driver, @file{gcc}
 @node Driver
@@ -536,6 +554,10 @@
 
一个非零值,使得@command{collect2}从连接命令中移除重复的@option{-L@var{directory}}搜索目录。如果移除重复的搜索目录会改变连接器的语法,则不要定义为非零。
 @end defmac
 
+@deftypevr {Common Target Hook} bool TARGET_ALWAYS_STRIP_DOTDOT
+True if @file{..} components should always be removed from directory names 
computed relative to GCC's internal directories, false (default) if such 
components should be preserved and directory names containing them passed to 
other tools such as the linker.
+@end deftypevr
+
 @defmac MULTILIB_DEFAULTS
 @en Define this macro as a C expression for the initializer of an array of
 @en string to tell the driver program which options are defaults for this
@@ -921,7 +943,7 @@
 @cindex optional hardware or system features
 @cindex features, optional, in system conventions
 
-@deftypefn {Target Hook} bool TARGET_HANDLE_OPTION (size_t @var{code}, const 
char *@var{arg}, int @var{value})
+@deftypefn {Common Target Hook} bool TARGET_HANDLE_OPTION (struct gcc_options 
*@var{opts}, struct gcc_options *@var{opts_set}, const struct cl_decoded_option 
*@var{decoded}, location_t @var{loc})
 @en This hook is called whenever the user specifies one of the
 @en target-specific options described by the @file{.opt} definition files
 @en (@pxref{Options}).  It has the opportunity to do some option-specific
@@ -937,7 +959,13 @@
 @en (@pxref{Option properties}), @var{value} is the numeric value of the
 @en argument.  Otherwise @var{value} is 1 if the positive form of the
 @en option was used and 0 if the ``no-'' form was.
-@var{code}指定了与选项相关的@code{OPT_@var{name}}枚举值;这里的@var{name}只是对选项名的重写,将非字母和数字的字符替换为下划线。@var{arg}指定了字符串参数,如果没有参数则为空。如果选项被标记为@code{UInteger}(@pxref{Option
 properties}),则@var{value}为参数的数值。否则@var{value}为1,如果使用了正的选项,为0如果使用了“no-”形式。
+@c 
@var{code}指定了与选项相关的@code{OPT_@var{name}}枚举值;这里的@var{name}只是对选项名的重写,将非字母和数字的字符替换为下划线。@var{arg}指定了字符串参数,如果没有参数则为空。如果选项被标记为@code{UInteger}(@pxref{Option
 properties}),则@var{value}为参数的数值。否则@var{value}为1,如果使用了正的选项,为0如果使用了“no-”形式。
+@var{decoded} specifies the option and its arguments.  @var{opts} and
+@var{opts_set} are the @code{gcc_options} structures to be used for
+storing option state, and @var{loc} is the location at which the
+option was passed (@code{UNKNOWN_LOCATION} except for options passed
+via attributes).
+
 @end deftypefn
 
 @deftypefn {Target Hook} bool TARGET_HANDLE_C_OPTION (size_t @var{code}, const 
char *@var{arg}, int @var{value})
@@ -956,35 +984,18 @@
 
通常,你应该使用@code{TARGET_HANDLE_OPTION}来处理选项。然而,如果选项处理只需要在C(和相关语言)前端中有效时,你再使用@code{TARGET_HANDLE_C_OPTION}。
 @end deftypefn
 
-@deftypefn {Target Hook} tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree 
@var{string})
+@deftypefn {C Target Hook} tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree 
@var{string})
 Targets may provide a string object type that can be used within and between 
C, C++ and their respective Objective-C dialects. A string object might, for 
example, embed encoding and length information. These objects are considered 
opaque to the compiler and handled as references. An ideal implementation makes 
the composition of the string object match that of the Objective-C 
@code{NSString} (@code{NXString} for GNUStep), allowing efficient interworking 
between C-only and Objective-C code. If a target implements string objects then 
this hook should return a reference to such an object constructed from the 
normal `C' string representation provided in @var{string}. At present, the hook 
is used by Objective-C only, to obtain a common-format string object when the 
target provides one.
 @end deftypefn
 
-@deftypefn {Target Hook} bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree 
@var{stringref})
+@deftypefn {C Target Hook} bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree 
@var{stringref})
 If a target implements string objects then this hook should return @code{true} 
if @var{stringref} is a valid reference to such an object.
 @end deftypefn
 
-@deftypefn {Target Hook} void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree 
@var{format_arg}, tree @var{args_list})
+@deftypefn {C Target Hook} void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree 
@var{format_arg}, tree @var{args_list})
 If a target implements string objects then this hook should should  provide a 
facility to check the function arguments in @var{args_list}  against the format 
specifiers in @var{format_arg} where the type of  @var{format_arg} is one 
recognized as a valid string reference type.
 @end deftypefn
 
-@defmac TARGET_VERSION
-@en This macro is a C statement to print on @code{stderr} a string
-@en describing the particular machine description choice.  Every machine
-@en description should define @code{TARGET_VERSION}.  For example:
-该宏为C语句,用来在@code{stderr}上打印表示特定机器描述选择的字符串。每个机器描述都应该定义@code{TARGET_VERSION}。例如:
-
-@smallexample
-#ifdef MOTOROLA
-#define TARGET_VERSION \
-  fprintf (stderr, " (68k, Motorola syntax)");
-#else
-#define TARGET_VERSION \
-  fprintf (stderr, " (68k, MIT syntax)");
-#endif
-@end smallexample
-@end defmac
-
 @defmac OVERRIDE_OPTIONS
 @en Sometimes certain combinations of command options do not make sense on
 @en a particular target machine.  You can define a macro
@@ -1038,7 +1049,7 @@
 @code{optimize} attribute.
 @end deftypevr
 
-@deftypefn {Target Hook} void TARGET_OPTION_INIT_STRUCT (struct gcc_options 
*@var{opts})
+@deftypefn {Common Target Hook} void TARGET_OPTION_INIT_STRUCT (struct 
gcc_options *@var{opts})
 Set target-dependent initial values of fields in @var{opts}.
 @end deftypefn
 
@@ -1046,14 +1057,6 @@
 Set target-dependent default values for @option{--param} settings, using calls 
to @code{set_default_param_value}.
 @end deftypefn
 
-@deftypefn {Target Hook} void TARGET_HELP (void)
-@en This hook is called in response to the user invoking
-@en @option{--target-help} on the command line.  It gives the target a
-@en chance to display extra information on the target specific command
-@en line options found in its @file{.opt} file.
-该钩子当用户在命令行中执行@option{--target-help}时被调用。使得target可以显示在其@file{.opt}文件中找到的机器特定的命令行选项信息。
-@end deftypefn
-
 @defmac CAN_DEBUG_WITHOUT_FP
 @en Define this macro if debugging can be performed even without a frame
 @en pointer.  If this macro is defined, GCC will turn on the
@@ -1182,10 +1185,10 @@
 @defmac WORDS_BIG_ENDIAN
 @en Define this macro to have the value 1 if, in a multiword object, the
 @en most significant word has the lowest number.  This applies to both
-@en memory locations and registers; GCC fundamentally assumes that the
-@en order of words in memory is the same as the order in registers.  This
+@en memory locations and registers; see @code{REG_WORDS_BIG_ENDIAN} if the
++order of words in memory is not the same as the order in registers.  This
 @en macro need not be a constant.
-定义该宏的值为1,如果在多字(multiword)对象中,最高有效字具有最低编号。这同时应用于内存位置和寄存器中;GCC从根本上假设在内存中的字的顺序与在寄存器中的一样。该宏不需要为一个常量。
+定义该宏的值为1,如果在多字(multiword)对象中,最高有效字具有最低编号。这同时应用于内存位置和寄存器中;如果内存中的字的顺序于在寄存器中的不一样,见@code{REG_WORDS_BIG_ENDIAN}
 。 该宏不需要为一个常量。
 @end defmac
 
 @defmac LIBGCC2_WORDS_BIG_ENDIAN
@@ -1196,6 +1199,13 @@
 
定义该宏如果@code{WORDS_BIG_ENDIAN}不是常量。该宏必须为一个常量值,其与@code{WORDS_BIG_ENDIAN}的具有相同的含义,并只用于编译@file{libgcc2.c}的时候。通常该值会根据预处理器定义来设置。
 @end defmac
 
+@defmac REG_WORDS_BIG_ENDIAN
+On some machines, the order of words in a multiword object differs between
+registers in memory.  In such a situation, define this macro to describe
+the order of words in a register.  The macro @code{WORDS_BIG_ENDIAN} controls
+the order of words in memory.
+@end defmac
+
 @defmac FLOAT_WORDS_BIG_ENDIAN
 @en Define this macro to have the value 1 if @code{DFmode}, @code{XFmode} or
 @en @code{TFmode} floating point numbers are stored in memory with the word
@@ -1312,6 +1322,8 @@
 then the hook should return the same mode as @code{promote_mode}, though
 the signedness may be different.
 
+@var{type} can be NULL when promoting function arguments of libcalls.
+
 The default is to not promote arguments and return values.  You can
 also define the hook to @code{default_promote_function_mode_always_promote}
 if you would like to apply the same rules given by @code{PROMOTE_MODE}.
@@ -2016,6 +2028,15 @@
 
定义该宏,如果@code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE}不是@code{TFmode},但是你还想让@file{libgcc2.a}中具有@code{TFmode}的程序。如果没有定义,并且@code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE}为128,则缺省为1,否则为0。
 @end defmac
 
+@defmac LIBGCC2_GNU_PREFIX
+This macro corresponds to the @code{TARGET_LIBFUNC_GNU_PREFIX} target
+hook and should be defined if that hook is overriden to be true.  It
+causes function names in libgcc to be changed to use a @code{__gnu_}
+prefix for their name rather than the default @code{__}.  A port which
+uses this macro should also arrange to use @file{t-gnu-prefix} in
+the libgcc @file{config.host}.
+@end defmac
+
 @defmac SF_SIZE
 @defmacx DF_SIZE
 @defmacx XF_SIZE
@@ -2886,13 +2907,19 @@
 @en them in operand constraints.
 
在操作数约束中指定@code{GENERAL_REGS}之外的类别的方法,是通过机器相关的约束字母。你可以定义该字母来对应于不同的类别,然后在操作数约束中使用它们。
 
+You must define the narrowest register classes for allocatable
+registers, so that each class either has no subclasses, or that for
+some mode, the move cost between registers within the class is
+cheaper than moving a register in the class to or from memory
+(@pxref{Costs}).
+
 @en You should define a class for the union of two classes whenever some
 @en instruction allows both classes.  For example, if an instruction allows
 @en either a floating point (coprocessor) register or a general register for a
 @en certain operand, you should define a class @code{FLOAT_OR_GENERAL_REGS}
 @en which includes both of them.  Otherwise you will get suboptimal code,
 @en or even internal compiler errors when reload cannot find a register in the
-@en the class computed via @code{reg_class_subunion}.
+@en class computed via @code{reg_class_subunion}.
 
只要有指令同时允许两个类别,就应该定义一个它们的并集的类别。例如,如果对于一个特定的操作数,有一条指令允许一个浮点(协处理器)寄存器或者一个通用寄存器,则应该定义一个类别@code{FLOAT_OR_GENERAL_REGS},其包含它们两。否则你不会得到最优的代码,甚至当reload无法在通过@code{reg_class_subunion}所计算的类别中找到一个寄存器时,还会产生编译器内部错误。
 
 @en You must also specify certain redundant information about the register
@@ -3125,9 +3152,9 @@
 @en register, so @code{TARGET_PREFERRED_RELOAD_CLASS} returns @code{NO_REGS} 
when
 @en @var{x} is a floating-point constant.  If the constant can't be loaded
 @en into any kind of register, code generation will be better if
-@en @code{LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
+@en @code{TARGET_LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
 @en of using @code{TARGET_PREFERRED_RELOAD_CLASS}.
-一种@code{PREFERRED_RELOAD_CLASS}必须不返回@var{rclass}的情况为,如果@var{x}为一个合法常量,且不能被加载到某个寄存器类别中。通过返回@code{NO_REGS},你可以强迫@var{x}被放入内存中。例如,rs6000可以加载立即数到通用寄存器中,但是没有指令可以加载立即数到浮点寄存器中,所以当@var{x}为一个浮点常量时,@code{PREFERRED_RELOAD_CLASS}返回@code{NO_REGS}。如果常量不能被加载到任何种类的寄存器中,则通过@code{LEGITIMATE_CONSTANT_P}使常量为非法的,而不是使用@code{PREFERRED_RELOAD_CLASS},将会生成更好的代码。
+一种@code{PREFERRED_RELOAD_CLASS}必须不返回@var{rclass}的情况为,如果@var{x}为一个合法常量,且不能被加载到某个寄存器类别中。通过返回@code{NO_REGS},你可以强迫@var{x}被放入内存中。例如,rs6000可以加载立即数到通用寄存器中,但是没有指令可以加载立即数到浮点寄存器中,所以当@var{x}为一个浮点常量时,@code{PREFERRED_RELOAD_CLASS}返回@code{NO_REGS}。如果常量不能被加载到任何种类的寄存器中,则通过@code{TARGET_LEGITIMATE_CONSTANT_P}使常量为非法的,而不是使用@code{PREFERRED_RELOAD_CLASS},将会生成更好的代码。
 
 @en If an insn has pseudos in it after register allocation, reload will go
 @en through the alternatives and call repeatedly 
@code{TARGET_PREFERRED_RELOAD_CLASS}
@@ -3166,9 +3193,9 @@
 @en register, so @code{PREFERRED_RELOAD_CLASS} returns @code{NO_REGS} when
 @en @var{x} is a floating-point constant.  If the constant can't be loaded
 @en into any kind of register, code generation will be better if
-@en @code{LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
+@en @code{TARGET_LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
 @en of using @code{PREFERRED_RELOAD_CLASS}.
-一种@code{PREFERRED_RELOAD_CLASS}必须不返回@var{rclass}的情况为,如果@var{x}为一个合法常量,且不能被加载到某个寄存器类别中。通过返回@code{NO_REGS},你可以强迫@var{x}被放入内存中。例如,rs6000可以加载立即数到通用寄存器中,但是没有指令可以加载立即数到浮点寄存器中,所以当@var{x}为一个浮点常量时,@code{PREFERRED_RELOAD_CLASS}返回@code{NO_REGS}。如果常量不能被加载到任何种类的寄存器中,则通过@code{LEGITIMATE_CONSTANT_P}使常量为非法的,而不是使用@code{PREFERRED_RELOAD_CLASS},将会生成更好的代码。
+一种@code{PREFERRED_RELOAD_CLASS}必须不返回@var{rclass}的情况为,如果@var{x}为一个合法常量,且不能被加载到某个寄存器类别中。通过返回@code{NO_REGS},你可以强迫@var{x}被放入内存中。例如,rs6000可以加载立即数到通用寄存器中,但是没有指令可以加载立即数到浮点寄存器中,所以当@var{x}为一个浮点常量时,@code{PREFERRED_RELOAD_CLASS}返回@code{NO_REGS}。如果常量不能被加载到任何种类的寄存器中,则通过@code{TARGET_LEGITIMATE_CONSTANT_P}使常量为非法的,而不是使用@code{PREFERRED_RELOAD_CLASS},将会生成更好的代码。
 
 @en If an insn has pseudos in it after register allocation, reload will go
 @en through the alternatives and call repeatedly @code{PREFERRED_RELOAD_CLASS}
@@ -3179,18 +3206,6 @@
 
如果一个insn在寄存器分配之后具有伪寄存器,则重载将遍历所有可选项并反复调用@code{PREFERRED_RELOAD_CLASS}来找到最好的一个。在这种情况下,如果返回@code{NO_REGS},会使得重载在约束前增加一个@code{!}:x86后端使用了该特点,当在SSE寄存器中进行算术运算时,会不鼓励对387寄存器的使用(反之亦然)。
 @end defmac
 
-@defmac PREFERRED_OUTPUT_RELOAD_CLASS (@var{x}, @var{class})
-@en Like @code{PREFERRED_RELOAD_CLASS}, but for output reloads instead of
-@en input reloads.  If you don't define this macro, the default is to use
-@en @var{class}, unchanged.
-类似于@code{PREFERRED_RELOAD_CLASS},但是用于输出重载而不是输入重载。
-如果没有定义该宏,则缺省为使用不变的@var{class}。
-
-@en You can also use @code{PREFERRED_OUTPUT_RELOAD_CLASS} to discourage
-@en reload from using some alternatives, like @code{PREFERRED_RELOAD_CLASS}.
-类似于@code{PREFERRED_RELOAD_CLASS},你还可以使用@code{PREFERRED_OUTPUT_RELOAD_CLASS}来不鼓励使用一些可选项进行重载。
-@end defmac
-
 @deftypefn {Target Hook} reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx 
@var{x}, reg_class_t @var{rclass})
 @en Like @code{TARGET_PREFERRED_RELOAD_CLASS}, but for output reloads instead 
of
 @en input reloads.
@@ -3455,6 +3470,23 @@
 @en allocation.
 @end deftypefn
 
+@deftypefn {Target Hook} {unsigned char} TARGET_CLASS_MAX_NREGS (reg_class_t 
@var{rclass}, enum machine_mode @var{mode})
+A target hook returns the maximum number of consecutive registers
+of class @var{rclass} needed to hold a value of mode @var{mode}.
+
+This is closely related to the macro @code{HARD_REGNO_NREGS}.  In fact,
+the value returned by @code{TARGET_CLASS_MAX_NREGS (@var{rclass},
+@var{mode})} target hook should be the maximum value of
+@code{HARD_REGNO_NREGS (@var{regno}, @var{mode})} for all @var{regno}
+values in the class @var{rclass}.
+
+This target hook helps control the handling of multiple-word values
+in the reload pass.
+
+The default version of this target hook returns the size of @var{mode}
+in words.
+@end deftypefn
+
 @defmac CLASS_MAX_NREGS (@var{class}, @var{mode})
 @en A C expression for the maximum number of consecutive registers
 @en of class @var{class} needed to hold a value of mode @var{mode}.
@@ -3491,42 +3523,6 @@
 @end smallexample
 @end defmac
 
-@deftypefn {Target Hook} {const reg_class_t *} TARGET_IRA_COVER_CLASSES (void)
-@en Return an array of cover classes for the Integrated Register Allocator
-@en (@acronym{IRA}).  Cover classes are a set of non-intersecting register
-@en classes covering all hard registers used for register allocation
-@en purposes.  If a move between two registers in the same cover class is
-@en possible, it should be cheaper than a load or store of the registers.
-@en The array is terminated by a @code{LIM_REG_CLASSES} element.
-为集成寄存器分配器(@acronym{IRA})返回一个cover类别数组。Cover类别为一个不相交的寄存器类别的集合,覆盖了用于寄存器分配的所有硬件寄存器。如果在相同cover类别中的两个寄存器之间可以进行move,则其代价应该比寄存器加载或者存储要低。该数组由元素@code{LIM_REG_CLASSES}来结束。
-
-@en The order of cover classes in the array is important.  If two classes
-@en have the same cost of usage for a pseudo, the class occurred first in
-@en the array is chosen for the pseudo.
-数组中cover类别的顺序很重要。如果对于一个伪寄存器的使用,两个类别具有相同代价,则先出现在数组中的类别将被选择用于该伪寄存器。
-
-@en This hook is called once at compiler startup, after the command-line
-@en options have been processed. It is then re-examined by every call to
-@en @code{target_reinit}.
-该钩子在编译器启动时,命令行选项被处理之后,被调用一次。然后,每次调用@code{target_reinit}的时候,都会重新被检查。
-
-@en The default implementation returns @code{IRA_COVER_CLASSES}, if defined,
-@en otherwise there is no default implementation.  You must define either this
-@en macro or @code{IRA_COVER_CLASSES} in order to use the integrated register
-@en allocator with Chaitin-Briggs coloring. If the macro is not defined,
-@en the only available coloring algorithm is Chow's priority coloring.
-如果定义,则缺省的实现会返回@code{IRA_COVER_CLASSES},否则,没有缺省实现。为了能够使用Chaitin-Briggs图着色的集成寄存器分配器,你必须定义该宏或者@code{IRA_COVER_CLASSES}。如果没有定义,则只有Chow的优先级图着色算法可用。
-
-@en This hook must not be modified from @code{NULL} to non-@code{NULL} or
-@en vice versa by command-line option processing.
-该钩子一定不要通过命令行选项处理,来将@code{NULL}修改为non-@code{NULL},反之依然。
-@end deftypefn
-
-@defmac IRA_COVER_CLASSES
-@en See the documentation for @code{TARGET_IRA_COVER_CLASSES}.
-参见对@code{TARGET_IRA_COVER_CLASSES}的介绍。
-@end defmac
-
 @en @node Old Constraints
 @en @section Obsolete Macros for Defining Constraints
 @node Old Constraints
@@ -4136,12 +4132,6 @@
 
这是一个C语句,如果格式被处理,则执行分支跳转。@var{encoding}为选择的格式,@var{size}为格式占用的字节数,@var{addr}为生成的@code{SYMBOL_REF}。
 @end defmac
 
-@defmac MD_UNWIND_SUPPORT
-@en A string specifying a file to be #include'd in unwind-dw2.c.  The file
-@en so included typically defines @code{MD_FALLBACK_FRAME_STATE_FOR}.
-一个字符串,指定了文件在unwind-dw2.c中被#include包含进来。被包含进来的文件通常定义了@code{MD_FALLBACK_FRAME_STATE_FOR}。
-@end defmac
-
 @defmac MD_FALLBACK_FRAME_STATE_FOR (@var{context}, @var{fs})
 @en This macro allows the target to add CPU and operating system specific
 @en code to the call-frame unwinder for use when there is no unwind data
@@ -4490,6 +4480,24 @@
 
定义该宏来影射在调用帧信息中存放的寄存器编号,其为GCC使用@code{DWARF_FRAME_REGNUM}来搜集的应该放在.debug_frame(@code{@var{for_eh}}为0)和.eh_frame(@code{@var{for_eh}}为非0)中的寄存器。缺省为返回@code{@var{regno}}。
 @end defmac
 
+@defmac REG_VALUE_IN_UNWIND_CONTEXT
+
+Define this macro if the target stores register values as
+@code{_Unwind_Word} type in unwind context.  It should be defined if
+target register size is larger than the size of @code{void *}.  The
+default is to store register values as @code{void *} type.
+
+@end defmac
+
+@defmac ASSUME_EXTENDED_UNWIND_CONTEXT
+
+Define this macro to be 1 if the target always uses extended unwind
+context with version, args_size and by_value fields.  If it is undefined,
+it will be defined to 1 when @code{REG_VALUE_IN_UNWIND_CONTEXT} is
+defined and 0 otherwise.
+
+@end defmac
+
 @en @node Elimination
 @en @subsection Eliminating Frame Pointer and Arg Pointer
 @node Elimination
@@ -4788,30 +4796,27 @@
 @en the stack.
 这节描述了让你控制不同类型的参数如何在寄存器中传递,或者它们如何被安排在栈中的宏。
 
-@defmac FUNCTION_ARG (@var{cum}, @var{mode}, @var{type}, @var{named})
-— Macro: FUNCTION_ARG (cum, mode, type, named)
-@en A C expression that controls whether a function argument is passed
-@en in a register, and which register.
-一个C表达式,控制函数的参数是否在寄存器中传递,以及在那个寄存器中传递。
+@deftypefn {Target Hook} rtx TARGET_FUNCTION_ARG (cumulative_args_t @var{ca}, 
enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
+@en Return an RTX indicating whether a function argument is passed in a
+@en register and if so, which register.
+返回一个RTX表明函数的参数是否在寄存器中传递,以及在那个寄存器中传递。
 
-@en The arguments are @var{cum}, which summarizes all the previous
+@en The arguments are @var{ca}, which summarizes all the previous
 @en arguments; @var{mode}, the machine mode of the argument; @var{type},
 @en the data type of the argument as a tree node or 0 if that is not known
 @en (which happens for C support library functions); and @var{named},
-@en which is 1 for an ordinary argument and 0 for nameless arguments that
-@en correspond to @samp{@dots{}} in the called function's prototype.
-@en @var{type} can be an incomplete type if a syntax error has previously
-@en occurred.
-参数为@var{cum},其总结了所有之前的参数;@var{mode},参数的机器模式;@var{type},参数的数据类型,作为一个树节点或者0如果不知道(这发生于C支持库的函数);@var{named},其为1对于普通参数,0对于无名参数,对应于在被调用函数原型中的@samp{@dots{}}。@var{type}可以为一个不完全类型,如果之前产生了语法错误。
+@en which is @code{true} for an ordinary argument and @code{false} for
+@en nameless arguments that correspond to @samp{@dots{}} in the called
+@en function's prototype.  @var{type} can be an incomplete type if a
+@en syntax error has previously occurred.
 
-@en The value of the expression is usually either a @code{reg} RTX for the
+参数为@var{ca},其总结了所有之前的参数;@var{mode},参数的机器模式;@var{type},参数的数据类型,作为一个树节点或者0如果不知道(这发生于C支持库的函数);@var{named},其为@code{true}对于普通参数,@code{false}对于无名参数,对应于在被调用函数原型中的@samp{@dots{}}。@var{type}可以为一个不完全类型,如果之前产生了语法错误。
+
+@en The return value of the expression is usually either a @code{reg} RTX for 
the
 @en hard register in which to pass the argument, or zero to pass the
 @en argument on the stack.
-表达式的值通常为一个在其中传递参数的硬件寄存器的@code{reg} RTX,或者0,在栈上传递参数。
 
-@en For machines like the VAX and 68000, where normally all arguments are
-@en pushed, zero suffices as a definition.
-对于像VAX和68000的机器,其通常所有参数被压栈,则定义为0就行。
+返回值表达式通常为一个在其中传递参数的硬件寄存器的@code{reg} RTX,或者0,在栈上传递参数。
 
 @en The value of the expression can also be a @code{parallel} RTX@.  This is
 @en used when an argument is passed in multiple locations.  The mode of the
@@ -4829,7 +4834,7 @@
 表达式的值也可以为一个@code{parallel} 
RTX。这用于当参数在多个位置传递的时候。@code{parallel}的机器模式应该为整个参数的机器模式。@code{parallel}保存了任意数目的@code{expr_list}对;每一个描述了该部分参数在哪里传递,@code{reg}
 
RTX的机器模式指示了该部分的参数有多大。@code{expr_list}的第二个操作数为一个const_int,其给出了该部分起始处与整个参数的偏移字节数。作为一个特例,@code{parallel}
 RTX中的第一个@code{expr_list}的第一个操作数可以为0。
 这意味着整个参数也在栈中存储。
 
-@en The last time this macro is called, it is called with @code{MODE ==
+@en The last time this hook is called, it is called with @code{MODE ==
 @en VOIDmode}, and its result is passed to the @code{call} or @code{call_value}
 @en pattern as operands 2 and 3 respectively.
 该宏最后一次被调用的时候,@code{MODE == 
VOIDmode},并且结果被传递给@code{call}或者@code{call_value}指令模式,分别作为其操作数2和3。
@@ -4838,20 +4843,20 @@
 @en The usual way to make the ISO library @file{stdarg.h} work on a machine
 @en where some arguments are usually passed in registers, is to cause
 @en nameless arguments to be passed on the stack instead.  This is done
-@en by making @code{FUNCTION_ARG} return 0 whenever @var{named} is 0.
-通常使ISO库@file{stdarg.h}在一些参数在寄存器中传递的机器上工作的方法,是使无名参数在栈上传递。这通过使@code{FUNCTION_ARG}当@var{named}为0时返回0来实现。
+@en by making @code{TARGET_FUNCTION_ARG} return 0 whenever @var{named} is 0.
+通常使ISO库@file{stdarg.h}在一些参数在寄存器中传递的机器上工作的方法,是使无名参数在栈上传递。这通过使@code{TARGET_FUNCTION_ARG}当@var{named}为@code{false}时返回0来实现。
 
-@en @cindex @code{TARGET_MUST_PASS_IN_STACK}, and @code{FUNCTION_ARG}
-@en @cindex @code{REG_PARM_STACK_SPACE}, and @code{FUNCTION_ARG}
+@en @cindex @code{TARGET_MUST_PASS_IN_STACK}, and @code{TARGET_FUNCTION_ARG}
+@en @cindex @code{REG_PARM_STACK_SPACE}, and @code{TARGET_FUNCTION_ARG}
 @en You may use the hook @code{targetm.calls.must_pass_in_stack}
 @en in the definition of this macro to determine if this argument is of a
 @en type that must be passed in the stack.  If @code{REG_PARM_STACK_SPACE}
-@en is not defined and @code{FUNCTION_ARG} returns nonzero for such an
+@en is not defined and @code{TARGET_FUNCTION_ARG} returns nonzero for such an
 @en argument, the compiler will abort.  If @code{REG_PARM_STACK_SPACE} is
 @en defined, the argument will be computed in the stack and then loaded into
 @en a register.
-你可以在该宏的定义中,使用钩子@code{targetm.calls.must_pass_in_stack}来确定该参数是否为一个必须在栈中传递的类型。如果@code{REG_PARM_STACK_SPACE}没有定义并且@code{FUNCTION_ARG}对于这样的参数返回非0,则编译器会abort。如果@code{REG_PARM_STACK_SPACE}被定义,则参数会在栈中计算并且然后加载到寄存器中。
-@end defmac
+你可以在该宏的定义中,使用钩子@code{targetm.calls.must_pass_in_stack}来确定该参数是否为一个必须在栈中传递的类型。如果@code{REG_PARM_STACK_SPACE}没有定义并且@code{TARGET_FUNCTION_ARG}对于这样的参数返回非0,则编译器会abort。如果@code{REG_PARM_STACK_SPACE}被定义,则参数会在栈中计算并且然后加载到寄存器中。
+@end deftypefn
 
 @deftypefn {Target Hook} bool TARGET_MUST_PASS_IN_STACK (enum machine_mode 
@var{mode}, const_tree @var{type})
 @en This target hook should return @code{true} if we should not pass @var{type}
@@ -4861,25 +4866,25 @@
 
该target钩子应该返回@code{true},如果我们不应该只在寄存器中传递@var{type}。文件@file{expr.h}中有一个定义,其通常是合适的,更多的文档请参考@file{expr.h}。
 @end deftypefn
 
-@defmac FUNCTION_INCOMING_ARG (@var{cum}, @var{mode}, @var{type}, @var{named})
-@en Define this macro if the target machine has ``register windows'', so
+@deftypefn {Target Hook} rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t 
@var{ca}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
+@en Define this hook if the target machine has ``register windows'', so
 @en that the register in which a function sees an arguments is not
 @en necessarily the same as the one in which the caller passed the
 @en argument.
-定义该宏,如果target机器具有“寄存器窗口”,这样函数看到的参数寄存器没有必要与调用者传递参数的寄存器相同。
+定义该钩子函数,如果target机器具有“寄存器窗口”,这样函数看到的参数寄存器没有必要与调用者传递参数的寄存器相同。
 
-@en For such machines, @code{FUNCTION_ARG} computes the register in which
-@en the caller passes the value, and @code{FUNCTION_INCOMING_ARG} should
+@en For such machines, @code{TARGET_FUNCTION_ARG} computes the register in 
which
+@en the caller passes the value, and @code{TARGET_FUNCTION_INCOMING_ARG} should
 @en be defined in a similar fashion to tell the function being called
 @en where the arguments will arrive.
-对于这样的机器,@code{FUNCTION_ARG}计算调用者传递值的寄存器,@code{FUNCTION_INCOMING_ARG}应该按照类似的方式定义,来告诉被调用的函数参数在哪里到来。
+对于这样的机器,@code{TARGET_FUNCTION_ARG}计算调用者传递值的寄存器,@code{TARGET_FUNCTION_INCOMING_ARG}应该按照类似的方式定义,来告诉被调用的函数参数在哪里到来。
 
-@en If @code{FUNCTION_INCOMING_ARG} is not defined, @code{FUNCTION_ARG}
+@en If @code{TARGET_FUNCTION_INCOMING_ARG} is not defined, 
@code{TARGET_FUNCTION_ARG}
 @en serves both purposes.
-如果@code{FUNCTION_INCOMING_ARG}没有定义,则@code{FUNCTION_ARG}具有这两种用途。
-@end defmac
+如果@code{TARGET_FUNCTION_INCOMING_ARG}没有定义,则@code{TARGET_FUNCTION_ARG}具有这两种用途。
+@end deftypefn
 
-@deftypefn {Target Hook} int TARGET_ARG_PARTIAL_BYTES (CUMULATIVE_ARGS 
*@var{cum}, enum machine_mode @var{mode}, tree @var{type}, bool @var{named})
+@deftypefn {Target Hook} int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t 
@var{cum}, enum machine_mode @var{mode}, tree @var{type}, bool @var{named})
 @en This target hook returns the number of bytes at the beginning of an
 @en argument that must be put in registers.  The value must be zero for
 @en arguments that are passed entirely in registers or that are entirely
@@ -4895,13 +4900,13 @@
 @en compiler when this occurs, and how many bytes should go in registers.
 
一些机器上,特定的参数必须部分在寄存器中传递并且部分在内存中传递。在这些机器上,通常参数的起始一些字在寄存器中传递,其余的在栈上。如果一个多字的参数(@code{double}或者结构体)跨越了边界,则其起始的一些字必须在寄存器中传递并且剩余的被压栈。该宏告诉编译器这种情况什么时候发生,以及多少字节应该在寄存器中。
 
-@en @code{FUNCTION_ARG} for these arguments should return the first
+@en @code{TARGET_FUNCTION_ARG} for these arguments should return the first
 @en register to be used by the caller for this argument; likewise
-@en @code{FUNCTION_INCOMING_ARG}, for the called function.
-@code{FUNCTION_ARG}对于这些参数应该返回第一个寄存器,被调用者用于该参数;通常@code{FUNCTION_INCOMING_ARG}用于被调用的函数。
+@en @code{TARGET_FUNCTION_INCOMING_ARG}, for the called function.
+@code{TARGET_FUNCTION_ARG}对于这些参数应该返回第一个寄存器,被调用者用于该参数;通常@code{TARGET_FUNCTION_INCOMING_ARG}用于被调用的函数。
 @end deftypefn
 
-@deftypefn {Target Hook} bool TARGET_PASS_BY_REFERENCE (CUMULATIVE_ARGS 
*@var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool 
@var{named})
+@deftypefn {Target Hook} bool TARGET_PASS_BY_REFERENCE (cumulative_args_t 
*@var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool 
@var{named})
 @en This target hook should return @code{true} if an argument at the
 @en position indicated by @var{cum} should be passed by reference.  This
 @en predicate is queried after target independent reasons for being
@@ -4915,7 +4920,7 @@
 如果钩子返回真,则参数的副本在内存中产生并且指向参数的指针被替代参数本身来传递。指针按照传递该类型的指针的方式来传递。
 @end deftypefn
 
-@deftypefn {Target Hook} bool TARGET_CALLEE_COPIES (CUMULATIVE_ARGS 
*@var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool 
@var{named})
+@deftypefn {Target Hook} bool TARGET_CALLEE_COPIES (cumulative_args_t 
*@var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool 
@var{named})
 @en The function argument described by the parameters to this hook is
 @en known to be passed by reference.  The hook should return true if the
 @en function argument should be copied by the callee instead of copied
@@ -4936,7 +4941,11 @@
 @en @code{FUNCTION_ARG} and other related values.  For some target machines,
 @en the type @code{int} suffices and can hold the number of bytes of
 @en argument so far.
-一个C类型,用来声明一个变量,被用作@code{FUNCTION_ARG}的第一个参数以及其它相关的值。对于一些target机器,类型@code{int}可以满足并且目前可以保持参数的字节数。
+@c 
一个C类型,用来声明一个变量,被用作@code{FUNCTION_ARG}的第一个参数以及其它相关的值。对于一些target机器,类型@code{int}可以满足并且目前可以保持参数的字节数。
+A C type for declaring a variable that is used as the first argument
+of @code{TARGET_FUNCTION_ARG} and other related values.  For some
+target machines, the type @code{int} suffices and can hold the number
+of bytes of argument so far.
 
 @en There is no need to record in @code{CUMULATIVE_ARGS} anything about the
 @en arguments that have been passed on the stack.  The compiler has other
@@ -5026,16 +5035,22 @@
 @en values @var{mode}, @var{type} and @var{named} describe that argument.
 @en Once this is done, the variable @var{cum} is suitable for analyzing
 @en the @emph{following} argument with @code{FUNCTION_ARG}, etc.
-一条C语句(没有分号),来更新总结变量@var{cum}来在参数列表中前进一个参数。
-值@var{mode}, @var{type}和@var{named}描述了那个参数。一旦执行后,
-变量@var{cum}便适合分析随后的参数。
+@c 一条C语句(没有分号),来更新总结变量@var{cum}来在参数列表中前进一个参数。
+@c 值@var{mode}, @var{type}和@var{named}描述了那个参数。一旦执行后,
+@c 变量@var{cum}便适合分析随后的参数。
+@deftypefn {Target Hook} void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t 
@var{ca}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
+This hook updates the summarizer variable pointed to by @var{ca} to
+advance past an argument in the argument list.  The values @var{mode},
+@var{type} and @var{named} describe that argument.  Once this is done,
+the variable @var{cum} is suitable for analyzing the @emph{following}
+argument with @code{TARGET_FUNCTION_ARG}, etc.
 
-@en This macro need not do anything if the argument in question was passed
+@en This hook need not do anything if the argument in question was passed
 @en on the stack.  The compiler knows how to track the amount of stack space
 @en used for arguments without any special help.
-该宏不需要做任何事情,如果要询问的参数是在栈中传递的。
+该钩子函数不需要做任何事情,如果要询问的参数是在栈中传递的。
 编译器知道如何追踪用于参数的栈空间,不需要任何特殊帮助。
-@end defmac
+@end deftypefn
 
 
 @defmac FUNCTION_ARG_OFFSET (@var{mode}, @var{type})
@@ -5058,8 +5073,11 @@
 @en The @emph{amount} of padding is always just enough to reach the next
 @en multiple of @code{TARGET_FUNCTION_ARG_BOUNDARY}; this macro does not
 @en control it.
-填补的数目总是刚足够达到下一个@code{TARGET_FUNCTION_ARG_BOUNDARY}的倍数;
-该宏不进行控制。
+@c 填补的数目总是刚足够达到下一个@code{TARGET_FUNCTION_ARG_BOUNDARY}的倍数;
+@c 该宏不进行控制。
+The @emph{amount} of padding is not controlled by this macro, but by the
+target hook @code{TARGET_FUNCTION_ARG_ROUND_BOUNDARY}.  It is
+always just enough to reach the next multiple of that boundary.
 
 @en This macro has a default definition which is right for most systems.
 @en For little-endian machines, the default is to pad upward.  For
@@ -5112,6 +5130,13 @@
 @code{PARM_BOUNDARY} for all arguments.
 @end deftypefn
 
+@deftypefn {Target Hook} {unsigned int} TARGET_FUNCTION_ARG_ROUND_BOUNDARY 
(enum machine_mode @var{mode}, const_tree @var{type})
+Normally, the size of an argument is rounded up to @code{PARM_BOUNDARY},
+which is the default value for this hook.  You can define this hook to
+return a different value if an argument size must be rounded to a larger
+value.
+@end deftypefn
+
 @defmac FUNCTION_ARG_REGNO_P (@var{regno})
 @en A C expression that is nonzero if @var{regno} is the number of a hard
 @en register in which function arguments are sometimes passed.  This does
@@ -5231,6 +5256,34 @@
 最起码,其必须有该机器模式的move指令模式。
 @end deftypefn
 
+@deftypefn {Target Hook} bool TARGET_ARRAY_MODE_SUPPORTED_P (enum machine_mode 
@var{mode}, unsigned HOST_WIDE_INT @var{nelems})
+Return true if GCC should try to use a scalar mode to store an array
+of @var{nelems} elements, given that each element has mode @var{mode}.
+Returning true here overrides the usual @code{MAX_FIXED_MODE} limit
+and allows GCC to use any defined integer mode.
+
+One use of this hook is to support vector load and store operations
+that operate on several homogeneous vectors.  For example, ARM NEON
+has operations like:
+
+@smallexample
+int8x8x3_t vld3_s8 (const int8_t *)
+@end smallexample
+
+where the return type is defined as:
+
+@smallexample
+typedef struct int8x8x3_t
+@{
+  int8x8_t val[3];
+@} int8x8x3_t;
+@end smallexample
+
+If this hook allows @code{val} to have a scalar mode, then
+@code{int8x8x3_t} can have the same mode.  GCC can then store
+@code{int8x8x3_t}s in registers rather than forcing them onto the stack.
+@end deftypefn
+
 @deftypefn {Target Hook} bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P (enum 
machine_mode @var{mode})
 Define this to return nonzero for machine modes for which the port has
 small register classes.  If this target hook returns nonzero for a given
@@ -6115,7 +6168,7 @@
 不接受任何参数。该函数通常在@file{libgcc2.c}中被定义。
 @end deftypefn
 
-@deftypefn {Target Hook} bool TARGET_SUPPORTS_SPLIT_STACK (bool @var{report}, 
struct gcc_options *@var{opts})
+@deftypefn {Common Target Hook} bool TARGET_SUPPORTS_SPLIT_STACK (bool 
@var{report}, struct gcc_options *@var{opts})
 Whether this target supports splitting the stack when the options described in 
@var{opts} have been passed.  This is called after options have been parsed, so 
the target may reject splitting the stack in some configurations.  The default 
version of this hook returns false.  If @var{report} is true, this function may 
issue a warning or error; if @var{report} is false, it must simply return a 
value
 @end deftypefn
 
@@ -6230,7 +6283,7 @@
 该函数的返回值应该为一个RTX,其包含了@code{__builtin_saveregs}的返回值。
 @end deftypefn
 
-@deftypefn {Target Hook} void TARGET_SETUP_INCOMING_VARARGS (CUMULATIVE_ARGS 
*@var{args_so_far}, enum machine_mode @var{mode}, tree @var{type}, int 
*@var{pretend_args_size}, int @var{second_time})
+@deftypefn {Target Hook} void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t 
@var{args_so_far}, enum machine_mode @var{mode}, tree @var{type}, int 
*@var{pretend_args_size}, int @var{second_time})
 @en This target hook offers an alternative to using
 @en @code{__builtin_saveregs} and defining the hook
 @en @code{TARGET_EXPAND_BUILTIN_SAVEREGS}.  Use it to store the anonymous
@@ -6280,7 +6333,7 @@
 钩子@code{TARGET_SETUP_INCOMING_VARARGS}不应该产生任何指令。
 @end deftypefn
 
-@deftypefn {Target Hook} bool TARGET_STRICT_ARGUMENT_NAMING (CUMULATIVE_ARGS 
*@var{ca})
+@deftypefn {Target Hook} bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t 
@var{ca})
 @en Define this hook to return @code{true} if the location where a function
 @en argument is passed depends on whether or not it is a named argument.
 定义该钩子来返回@code{true},如果函数参数传递的位置依赖于其是否为一个命名参数。
@@ -6302,7 +6355,7 @@
 如果其总是返回0,则不需要定义该钩子。
 @end deftypefn
 
-@deftypefn {Target Hook} bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED 
(CUMULATIVE_ARGS *@var{ca})
+@deftypefn {Target Hook} bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED 
(cumulative_args_t @var{ca})
 @en If you need to conditionally change ABIs so that one works with
 @en @code{TARGET_SETUP_INCOMING_VARARGS}, but the other works like neither
 @en @code{TARGET_SETUP_INCOMING_VARARGS} nor 
@code{TARGET_STRICT_ARGUMENT_NAMING} was
@@ -6441,24 +6494,6 @@
 该宏的定义通常为一系列@code{asm}语句。@var{beg}和@var{end}都为指针表达式。
 @end defmac
 
-@en The operating system may also require the stack to be made executable
-@en before calling the trampoline.  To implement this requirement, define
-@en the following macro.
-操作系统可能还需要栈被设为可执行的,在调用蹦床之前。要实现这种需求,定义下列宏。
-
-@defmac ENABLE_EXECUTE_STACK
-@en Define this macro if certain operations must be performed before executing
-@en code located on the stack.  The macro should expand to a series of C
-@en file-scope constructs (e.g.@: functions) and provide a unique entry point
-@en named @code{__enable_execute_stack}.  The target is responsible for
-@en emitting calls to the entry point in the code, for example from the
-@en @code{TARGET_TRAMPOLINE_INIT} hook.
-定义该宏,如果在执行位于栈上的代码之前必须执行特定的操作。
-宏应该扩展为一系列的C文件作用域的结构(例如函数)并提供一个唯一的如何口点名
-为@code{__enable_execute_stack}。target负责生成对入口点的调用,
-例如从@code{INITIALIZE_TRAMPOLINE}宏中。
-@end defmac
-
 @en To use a standard subroutine, define the following macro.  In addition,
 @en you must make sure that the instructions in a trampoline fill an entire
 @en cache line with identical instructions, or else ensure that the
@@ -6526,6 +6561,15 @@
 缺省为不作任何事情。大多数port不需要定义该钩子。
 @end deftypefn
 
+@deftypevr {Target Hook} bool TARGET_LIBFUNC_GNU_PREFIX
+If false (the default), internal library routines start with two
+underscores.  If set to true, these routines start with @code{__gnu_}
+instead.  E.g., @code{__muldi3} changes to @code{__gnu_muldi3}.  This
+currently only affects functions defined in @file{libgcc2.c}.  If this
+is set to true, the @file{tm.h} file must also
+@code{#define LIBGCC2_GNU_PREFIX}.
+@end deftypevr
+
 @defmac FLOAT_LIB_COMPARE_RETURNS_BOOL (@var{mode}, @var{comparison})
 @en This macro should return @code{true} if the library routine that
 @en implements the floating point comparison operator @var{comparison} in
@@ -6956,11 +7000,19 @@
 @en @var{x} satisfies @code{CONSTANT_P}, so you need not check this.  In fact,
 @en @samp{1} is a suitable definition for this macro on machines where
 @en anything @code{CONSTANT_P} is valid.
-一个C表达式,如果@var{x}对于target机器上的一个立即操作数为合法的常量,
-则为非0。你可以假设@var{x}满足@code{CONSTANT_P},所以不需要进行检查。
-实际上,在任何@code{CONSTANT_P}都是有效的机器上,为该宏定义为@samp{1}是合适的。
-@end defmac
+@c 一个C表达式,如果@var{x}对于target机器上的一个立即操作数为合法的常量,
+@c 则为非0。你可以假设@var{x}满足@code{CONSTANT_P},所以不需要进行检查。
+@c 实际上,在任何@code{CONSTANT_P}都是有效的机器上,为该宏定义为@samp{1}是合适的。
+@c @end defmac
 
+@deftypefn {Target Hook} bool TARGET_LEGITIMATE_CONSTANT_P (enum machine_mode 
@var{mode}, rtx @var{x})
+This hook returns true if @var{x} is a legitimate constant for a
+@var{mode}-mode immediate operand on the target machine.  You can assume that
+@var{x} satisfies @code{CONSTANT_P}, so you need not check this.
+ 
+The default definition returns true.
+@end deftypefn
+
 @deftypefn {Target Hook} rtx TARGET_DELEGITIMIZE_ADDRESS (rtx @var{x})
 @en This hook is used to undo the possibly obfuscating effects of the
 @en @code{LEGITIMIZE_ADDRESS} and @code{LEGITIMIZE_RELOAD_ADDRESS} target
@@ -6976,11 +7028,12 @@
 通过将它们转换回到它们最初的形式。
 @end deftypefn
 
-@deftypefn {Target Hook} bool TARGET_CANNOT_FORCE_CONST_MEM (rtx @var{x})
+@deftypefn {Target Hook} bool TARGET_CANNOT_FORCE_CONST_MEM ((enum 
machine_mode @var{mode}, rtx @var{x})
 @en This hook should return true if @var{x} is of a form that cannot (or
-@en should not) be spilled to the constant pool.  The default version of
-@en this hook returns false.
-该钩子应该返回真,如果@var{x}不能够(或不应该)被溢出到常量池中。
+@en should not) be spilled to the constant pool.  @var{mode} is the mode
+@en of @var{x}.
+@en The default version of this hook returns false.
+该钩子应该返回真,如果@var{x}不能够(或不应该)被溢出到常量池中。@var{mode} 是@var{x}的模式。
 该钩子的缺省版本返回假。
 
 @en The primary reason to define this hook is to prevent reload from
@@ -7974,7 +8027,7 @@
 该宏缺省为真,如果@code{BRANCH_COST}大于或等于2。
 @end defmac
 
-@deftypefn {Target Hook} bool TARGET_RTX_COSTS (rtx @var{x}, int @var{code}, 
int @var{outer_code}, int *@var{total}, bool @var{speed})
+@deftypefn {Target Hook} bool TARGET_RTX_COSTS (rtx @var{x}, int @var{code}, 
int @var{outer_code}, int @var{opno}, int *@var{total}, bool @var{speed})
 @en This target hook describes the relative costs of RTL expressions.
 该target钩子描述了RTL表达式的相对代价。
 
@@ -7983,9 +8036,19 @@
 @en in which it is contained, found in @var{outer_code}.  @var{code} is the
 @en expression code---redundant, since it can be obtained with
 @en @code{GET_CODE (@var{x})}.
-代价可以依赖于表达式的确切形式,可以通过检查@var{x}来获得表达式的形式,
-表达式包含的rtx的代码为@var{outer_code}。@var{code}为表达式代码,冗余的,
-因为其可以使用@code{GET_CODE (@var{x})}获得。
+@c 代价可以依赖于表达式的确切形式,可以通过检查@var{x}来获得表达式的形式,
+@c 表达式包含的rtx的代码为@var{outer_code}。@var{code}为表达式代码,冗余的,
+@c 因为其可以使用@code{GET_CODE (@var{x})}获得。
+The cost may depend on the precise form of the expression, which is
+available for examination in @var{x}, and the fact that @var{x} appears
+as operand @var{opno} of an expression with rtx code @var{outer_code}.
+That is, the hook can assume that there is some rtx @var{y} such
+that @samp{GET_CODE (@var{y}) == @var{outer_code}} and such that
+either (a) @samp{XEXP (@var{y}, @var{opno}) == @var{x}} or
+(b) @samp{XVEC (@var{y}, @var{opno})} contains @var{x}.
+ 
+@var{code} is @var{x}'s expression code---redundant, since it can be
+obtained with @code{GET_CODE (@var{x})}.
 
 @en In implementing this hook, you can use the construct
 @en @code{COSTS_N_INSNS (@var{n})} to specify a cost equal to @var{n} fast
@@ -8559,6 +8622,17 @@
 in its second parameter.
 @end deftypefn
 
+@deftypevr {Target Hook} bool TARGET_SCHED_EXPOSED_PIPELINE
+True if the processor has an exposed pipeline, which means that not just
+the order of instructions is important for correctness when scheduling, but
+also the latencies of operations.
+@end deftypevr
+
+@deftypefn {Target Hook} int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int 
@var{opc}, enum machine_mode @var{mode})
+This hook is called by tree reassociator to determine a level of
+parallelism required in output calculations chain.
+@end deftypefn
+
 @en @node Sections
 @en @section Dividing the Output into Sections (Texts, Data, @dots{})
 @node Sections
@@ -8670,14 +8744,14 @@
 @defmac BSS_SECTION_ASM_OP
 @en If defined, a C expression whose value is a string, including spacing,
 @en containing the assembler operation to identify the following data as
-@en uninitialized global data.  If not defined, and neither
-@en @code{ASM_OUTPUT_BSS} nor @code{ASM_OUTPUT_ALIGNED_BSS} are defined,
+@en uninitialized global data.  If not defined, and
+@en @code{ASM_OUTPUT_ALIGNED_BSS} not defined,
 @en uninitialized global data will be output in the data section if
 @en @option{-fno-common} is passed, otherwise @code{ASM_OUTPUT_COMMON} will be
 @en used.
 如果定义,则为一个C表达式,值为一个字符串,包括空格,
 其包含了标识后续的数据为未初始化的,global数据的汇编操作。如果没有定义,
-并且@code{ASM_OUTPUT_BSS}和@code{ASM_OUTPUT_ALIGNED_BSS}也都没有定义,
+并且@code{ASM_OUTPUT_ALIGNED_BSS}也都没有定义,
 则为初始化的global数据将被输出在data 
section,如果使用了@option{-fno-common},否则将使用@code{ASM_OUTPUT_COMMON}。
 @end defmac
 
@@ -8908,6 +8982,12 @@
 否则为通常的只读data section。
 @end deftypefn
 
+@deftypevr {Target Hook} {const char *} TARGET_ASM_MERGEABLE_RODATA_PREFIX
+Usually, the compiler uses the prefix @code{".rodata"} to construct
+section names for mergeable constant data.  Define this macro to override
+the string if a different section name should be used.
+@end deftypevr
+
 @deftypefn {Target Hook} {section *} TARGET_ASM_SELECT_RTX_SECTION (enum 
machine_mode @var{mode}, rtx @var{x}, unsigned HOST_WIDE_INT @var{align})
 @en Return the section into which a constant @var{x}, of mode @var{mode},
 @en should be placed.  You can assume that @var{x} is some kind of
@@ -9337,7 +9417,7 @@
 Used by the target to emit any assembler directives or additional  labels 
needed when a function is partitioned between different  sections.  Output 
should be written to @var{file}.  The function  decl is available as @var{decl} 
and the new section is `cold' if  @var{new_is_cold} is @code{true}.
 @end deftypefn
 
-@deftypevr {Target Hook} bool TARGET_HAVE_NAMED_SECTIONS
+@deftypevr {Common Target Hook} bool TARGET_HAVE_NAMED_SECTIONS
 @en This flag is true if the target supports @code{TARGET_ASM_NAMED_SECTION}.
 @en It must not be modified by command-line option processing.
 该标记为真,如果target支持@code{TARGET_ASM_NAMED_SECTION}。不要在命令行选项处理的时候来修改它。
@@ -9763,16 +9843,16 @@
 当你需要看到变量的decl,以便选择如何输出时,可以定义该宏。
 @end defmac
 
-@defmac ASM_OUTPUT_BSS (@var{stream}, @var{decl}, @var{name}, @var{size}, 
@var{rounded})
+@defmac ASM_OUTPUT_ALIGNED_BSS (@var{stream}, @var{decl}, @var{name}, 
@var{size}, @var{alignment})
 @en A C statement (sans semicolon) to output to the stdio stream
 @en @var{stream} the assembler definition of uninitialized global @var{decl} 
named
-@en @var{name} whose size is @var{size} bytes.  The variable @var{rounded}
-@en is the size rounded up to whatever alignment the caller wants.
+@en @var{name} whose size is @var{size} bytes.  The variable @var{alignment}
+@en is the alignment specified as the number of bits.
 一条C语句(没有分号),用来将名字为@var{name},
 大小为@var{size}个字节的未初始化的全局@var{decl}的汇编定义输出到stdio流
-@var{stream}中。变量@var{rounded}为调用者想要对齐而舍入的大小。
+@var{stream}中。变量@var{alignment}为内存对齐的比特位。
 
-@en Try to use function @code{asm_output_bss} defined in @file{varasm.c} when
+@en Try to use function @code{asm_output_aligned_bss} defined in 
@file{varasm.c} when
 @en defining this macro.  If unable, use the expression
 @en @code{assemble_name (@var{stream}, @var{name})} to output the name itself;
 @en before and after that, output the additional assembler syntax for defining
@@ -9782,12 +9862,11 @@
 使用表达式@code{assemble_name (@var{stream}, @var{name})}来输出name本身;
 在此之前和之后,输出额外的定义name的汇编语法,以及换行。
 
-@en There are two ways of handling global BSS@.  One is to define either
-@en this macro or its aligned counterpart, @code{ASM_OUTPUT_ALIGNED_BSS}.
+@en There are two ways of handling global BSS@.  One is to define this macro
 @en The other is to have @code{TARGET_ASM_SELECT_SECTION} return a
 @en switchable BSS section (@pxref{TARGET_HAVE_SWITCHABLE_BSS_SECTIONS}).
 @en You do not need to do both.
-有两种方式来处理全局BSS。一种是定义该宏或者它的对齐副本,
+有两种方式来处理全局BSS。一种是定义该宏,
 @code{ASM_OUTPUT_ALIGNED_BSS}。
 另一种是让@code{TARGET_ASM_SELECT_SECTION}返回一个可切换的BSS section
 (参见 @ref{TARGET_HAVE_SWITCHABLE_BSS_SECTIONS})。你不需要两者都做。
@@ -9803,23 +9882,6 @@
 以便在目标文件中节省空间。
 @end defmac
 
-@defmac ASM_OUTPUT_ALIGNED_BSS (@var{stream}, @var{decl}, @var{name}, 
@var{size}, @var{alignment})
-@en Like @code{ASM_OUTPUT_BSS} except takes the required alignment as a
-@en separate, explicit argument.  If you define this macro, it is used in
-@en place of @code{ASM_OUTPUT_BSS}, and gives you more flexibility in
-@en handling the required alignment of the variable.  The alignment is 
specified
-@en as the number of bits.
-类似@code{ASM_OUTPUT_BSS},除了其接受需要的aligment作为单独,显式的参数。
-如果你定义了该宏,其被用于替换@code{ASM_OUTPUT_BSS},
-这使得你在处理变量所需的对齐方面更加灵活。aligment被指定为位数。
-
-@en Try to use function @code{asm_output_aligned_bss} defined in file
-@en @file{varasm.c} when defining this macro.
-当定义该宏时,
-尝试使用在文件@file{varasm.c}中定义的函数@code{asm_output_aligned_bss}。
-@file{varasm.c} when defining this macro.
-@end defmac
-
 @defmac ASM_OUTPUT_LOCAL (@var{stream}, @var{name}, @var{size}, @var{rounded})
 @en A C statement (sans semicolon) to output to the stdio stream
 @en @var{stream} the assembler definition of a local-common-label named
@@ -11520,7 +11582,7 @@
 否则基于@code{setjmp}/@code{longjmp}的框架将被缺省使用。
 @end defmac
 
-@deftypefn {Target Hook} {enum unwind_info_type} TARGET_EXCEPT_UNWIND_INFO 
(struct gcc_options *@var{opts})
+@deftypefn {Common Target Hook} {enum unwind_info_type} 
TARGET_EXCEPT_UNWIND_INFO (struct gcc_options *@var{opts})
 This hook defines the mechanism that will be used for exception handling
 by the target.  If the target has ABI specified unwind tables, the hook
 should return @code{UI_TARGET}.  If the target is to use the
@@ -11546,7 +11608,7 @@
 must define this hook so that @var{opts} is used correctly.
 @end deftypefn
 
-@deftypevar {Target Hook} bool TARGET_UNWIND_TABLES_DEFAULT
+@deftypevr {Common Target Hook} bool TARGET_UNWIND_TABLES_DEFAULT
 @en This variable should be set to @code{true} if the target ABI requires 
unwinding
 @en tables even when exceptions are not used.
 该变量应该被设为@code{true},如果target ABI即使不使用异常的时候也要求展开表。
@@ -12315,6 +12377,14 @@
 True if the @code{.debug_pubtypes} and @code{.debug_pubnames} sections should 
be emitted.  These sections are not used on most platforms, and in particular 
GDB does not use them.
 @end deftypevr
 
+@deftypevr {Target Hook} bool TARGET_DELAY_SCHED2
+True if sched2 is not to be run at its normal place.  This usually means it 
will be run as part of machine-specific reorg.
+@end deftypevr
+
+@deftypevr {Target Hook} bool TARGET_DELAY_VARTRACK
+True if vartrack is not to be run at its normal place.  This usually means it 
will be run as part of machine-specific reorg.
+@end deftypevr
+
 @defmac ASM_OUTPUT_DWARF_DELTA (@var{stream}, @var{size}, @var{label1}, 
@var{label2})
 @en A C statement to issue assembly directives that create a difference
 @en @var{lab1} minus @var{lab2}, using an integer of the given @var{size}.
@@ -13216,6 +13286,10 @@
 使用该钩子来调整类(例如tweak可视性或者执行其它target需要的修改)。
 @end deftypefn
 
+@deftypefn {Target Hook} tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree 
@var{decl})
+Return target-specific mangling context of @var{decl} or @code{NULL_TREE}.
+@end deftypefn
+
 @node Named Address Spaces
 @section Adding support for named address spaces
 @cindex named address spaces
@@ -13294,7 +13368,7 @@
 except that it includes explicit named address space support.
 @end deftypefn
 
-@deftypefn {Target Hook} bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t 
@var{superset}, addr_space_t @var{subset})
+@deftypefn {Target Hook} bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t 
@var{subset}, addr_space_t @var{superset})
 Define this to return whether the @var{subset} named address space is
 contained within the @var{superset} named address space.  Pointers to
 a named address space that is a subset of another named address space

Other related posts:

  • » [hellogcc] [patch 5 tm.texi]: Update gccint-zh trunk to upstreams r179462 - Yao Qi