This is gccint.info, produced by makeinfo version 6.1 from gccint.texi.

Copyright (C) 1988-2016 Free Software Foundation, Inc.

 Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover Texts
being (a) (see below), and with the Back-Cover Texts being (b) (see
below).  A copy of the license is included in the section entitled "GNU
Free Documentation License".

 (a) The FSF's Front-Cover Text is:

 A GNU Manual

 (b) The FSF's Back-Cover Text is:

 You have freedom to copy and modify this GNU Manual, like GNU software.
Copies published by the Free Software Foundation raise funds for GNU
development.
INFO-DIR-SECTION Software development
START-INFO-DIR-ENTRY
* gccint: (gccint).            Internals of the GNU Compiler Collection.
END-INFO-DIR-ENTRY

 This file documents the internals of the GNU compilers.

 Copyright (C) 1988-2016 Free Software Foundation, Inc.

 Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover Texts
being (a) (see below), and with the Back-Cover Texts being (b) (see
below).  A copy of the license is included in the section entitled "GNU
Free Documentation License".

 (a) The FSF's Front-Cover Text is:

 A GNU Manual

 (b) The FSF's Back-Cover Text is:

 You have freedom to copy and modify this GNU Manual, like GNU software.
Copies published by the Free Software Foundation raise funds for GNU
development.


File: gccint.info,  Node: Top,  Next: Contributing,  Up: (DIR)

Introduction
************

This manual documents the internals of the GNU compilers, including how
to port them to new targets and some information about how to write
front ends for new languages.  It corresponds to the compilers
(Buildroot 2016.11-git-00391-g5eaa8ac) version 6.2.1.  The use of the
GNU compilers is documented in a separate manual.  *Note Introduction:
(gcc)Top.

 This manual is mainly a reference manual rather than a tutorial.  It
discusses how to contribute to GCC (*note Contributing::), the
characteristics of the machines supported by GCC as hosts and targets
(*note Portability::), how GCC relates to the ABIs on such systems
(*note Interface::), and the characteristics of the languages for which
GCC front ends are written (*note Languages::).  It then describes the
GCC source tree structure and build system, some of the interfaces to
GCC front ends, and how support for a target system is implemented in
GCC.

 Additional tutorial information is linked to from
<http://gcc.gnu.org/readings.html>.

* Menu:

* Contributing::    How to contribute to testing and developing GCC.
* Portability::     Goals of GCC's portability features.
* Interface::       Function-call interface of GCC output.
* Libgcc::          Low-level runtime library used by GCC.
* Languages::       Languages for which GCC front ends are written.
* Source Tree::     GCC source tree structure and build system.
* Testsuites::      GCC testsuites.
* Options::         Option specification files.
* Passes::          Order of passes, what they do, and what each file is for.
* GENERIC::         Language-independent representation generated by Front Ends
* GIMPLE::          Tuple representation used by Tree SSA optimizers
* Tree SSA::        Analysis and optimization of GIMPLE
* RTL::             Machine-dependent low-level intermediate representation.
* Control Flow::    Maintaining and manipulating the control flow graph.
* Loop Analysis and Representation:: Analysis and representation of loops
* Machine Desc::    How to write machine description instruction patterns.
* Target Macros::   How to write the machine description C macros and functions.
* Host Config::     Writing the 'xm-MACHINE.h' file.
* Fragments::       Writing the 't-TARGET' and 'x-HOST' files.
* Collect2::        How 'collect2' works; how it finds 'ld'.
* Header Dirs::     Understanding the standard header file directories.
* Type Information:: GCC's memory management; generating type information.
* Plugins::         Extending the compiler with plugins.
* LTO::             Using Link-Time Optimization.

* Match and Simplify:: How to write expression simplification patterns for GIMPLE and GENERIC
* Funding::         How to help assure funding for free software.
* GNU Project::     The GNU Project and GNU/Linux.

* Copying::         GNU General Public License says
                    how you can copy and share GCC.
* GNU Free Documentation License:: How you can copy and share this manual.
* Contributors::    People who have contributed to GCC.

* Option Index::    Index to command line options.
* Concept Index::   Index of concepts and symbol names.


File: gccint.info,  Node: Contributing,  Next: Portability,  Up: Top

1 Contributing to GCC Development
*********************************

If you would like to help pretest GCC releases to assure they work well,
current development sources are available by SVN (see
<http://gcc.gnu.org/svn.html>).  Source and binary snapshots are also
available for FTP; see <http://gcc.gnu.org/snapshots.html>.

 If you would like to work on improvements to GCC, please read the
advice at these URLs:

     <http://gcc.gnu.org/contribute.html>
     <http://gcc.gnu.org/contributewhy.html>

for information on how to make useful contributions and avoid
duplication of effort.  Suggested projects are listed at
<http://gcc.gnu.org/projects/>.


File: gccint.info,  Node: Portability,  Next: Interface,  Prev: Contributing,  Up: Top

2 GCC and Portability
*********************

GCC itself aims to be portable to any machine where 'int' is at least a
32-bit type.  It aims to target machines with a flat (non-segmented)
byte addressed data address space (the code address space can be
separate).  Target ABIs may have 8, 16, 32 or 64-bit 'int' type.  'char'
can be wider than 8 bits.

 GCC gets most of the information about the target machine from a
machine description which gives an algebraic formula for each of the
machine's instructions.  This is a very clean way to describe the
target.  But when the compiler needs information that is difficult to
express in this fashion, ad-hoc parameters have been defined for machine
descriptions.  The purpose of portability is to reduce the total work
needed on the compiler; it was not of interest for its own sake.

 GCC does not contain machine dependent code, but it does contain code
that depends on machine parameters such as endianness (whether the most
significant byte has the highest or lowest address of the bytes in a
word) and the availability of autoincrement addressing.  In the
RTL-generation pass, it is often necessary to have multiple strategies
for generating code for a particular kind of syntax tree, strategies
that are usable for different combinations of parameters.  Often, not
all possible cases have been addressed, but only the common ones or only
the ones that have been encountered.  As a result, a new target may
require additional strategies.  You will know if this happens because
the compiler will call 'abort'.  Fortunately, the new strategies can be
added in a machine-independent fashion, and will affect only the target
machines that need them.


File: gccint.info,  Node: Interface,  Next: Libgcc,  Prev: Portability,  Up: Top

3 Interfacing to GCC Output
***************************

GCC is normally configured to use the same function calling convention
normally in use on the target system.  This is done with the
machine-description macros described (*note Target Macros::).

 However, returning of structure and union values is done differently on
some target machines.  As a result, functions compiled with PCC
returning such types cannot be called from code compiled with GCC, and
vice versa.  This does not cause trouble often because few Unix library
routines return structures or unions.

 GCC code returns structures and unions that are 1, 2, 4 or 8 bytes long
in the same registers used for 'int' or 'double' return values.  (GCC
typically allocates variables of such types in registers also.)
Structures and unions of other sizes are returned by storing them into
an address passed by the caller (usually in a register).  The target
hook 'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.

 By contrast, PCC on most target machines returns structures and unions
of any size by copying the data into an area of static storage, and then
returning the address of that storage as if it were a pointer value.
The caller must copy the data from that memory area to the place where
the value is wanted.  This is slower than the method used by GCC, and
fails to be reentrant.

 On some target machines, such as RISC machines and the 80386, the
standard system convention is to pass to the subroutine the address of
where to return the value.  On these machines, GCC has been configured
to be compatible with the standard compiler, when this method is used.
It may not be compatible for structures of 1, 2, 4 or 8 bytes.

 GCC uses the system's standard convention for passing arguments.  On
some machines, the first few arguments are passed in registers; in
others, all are passed on the stack.  It would be possible to use
registers for argument passing on any machine, and this would probably
result in a significant speedup.  But the result would be complete
incompatibility with code that follows the standard convention.  So this
change is practical only if you are switching to GCC as the sole C
compiler for the system.  We may implement register argument passing on
certain machines once we have a complete GNU system so that we can
compile the libraries with GCC.

 On some machines (particularly the SPARC), certain types of arguments
are passed "by invisible reference".  This means that the value is
stored in memory, and the address of the memory location is passed to
the subroutine.

 If you use 'longjmp', beware of automatic variables.  ISO C says that
automatic variables that are not declared 'volatile' have undefined
values after a 'longjmp'.  And this is all GCC promises to do, because
it is very difficult to restore register variables correctly, and one of
GCC's features is that it can put variables in registers without your
asking it to.


File: gccint.info,  Node: Libgcc,  Next: Languages,  Prev: Interface,  Up: Top

4 The GCC low-level runtime library
***********************************

GCC provides a low-level runtime library, 'libgcc.a' or 'libgcc_s.so.1'
on some platforms.  GCC generates calls to routines in this library
automatically, whenever it needs to perform some operation that is too
complicated to emit inline code for.

 Most of the routines in 'libgcc' handle arithmetic operations that the
target processor cannot perform directly.  This includes integer
multiply and divide on some machines, and all floating-point and
fixed-point operations on other machines.  'libgcc' also includes
routines for exception handling, and a handful of miscellaneous
operations.

 Some of these routines can be defined in mostly machine-independent C.
Others must be hand-written in assembly language for each processor that
needs them.

 GCC will also generate calls to C library routines, such as 'memcpy'
and 'memset', in some cases.  The set of routines that GCC may possibly
use is documented in *note (gcc)Other Builtins::.

 These routines take arguments and return values of a specific machine
mode, not a specific C type.  *Note Machine Modes::, for an explanation
of this concept.  For illustrative purposes, in this chapter the
floating point type 'float' is assumed to correspond to 'SFmode';
'double' to 'DFmode'; and 'long double' to both 'TFmode' and 'XFmode'.
Similarly, the integer types 'int' and 'unsigned int' correspond to
'SImode'; 'long' and 'unsigned long' to 'DImode'; and 'long long' and
'unsigned long long' to 'TImode'.

* Menu:

* Integer library routines::
* Soft float library routines::
* Decimal float library routines::
* Fixed-point fractional library routines::
* Exception handling routines::
* Miscellaneous routines::


File: gccint.info,  Node: Integer library routines,  Next: Soft float library routines,  Up: Libgcc

4.1 Routines for integer arithmetic
===================================

The integer arithmetic routines are used on platforms that don't provide
hardware support for arithmetic operations on some modes.

4.1.1 Arithmetic functions
--------------------------

 -- Runtime Function: int __ashlsi3 (int A, int B)
 -- Runtime Function: long __ashldi3 (long A, int B)
 -- Runtime Function: long long __ashlti3 (long long A, int B)
     These functions return the result of shifting A left by B bits.

 -- Runtime Function: int __ashrsi3 (int A, int B)
 -- Runtime Function: long __ashrdi3 (long A, int B)
 -- Runtime Function: long long __ashrti3 (long long A, int B)
     These functions return the result of arithmetically shifting A
     right by B bits.

 -- Runtime Function: int __divsi3 (int A, int B)
 -- Runtime Function: long __divdi3 (long A, long B)
 -- Runtime Function: long long __divti3 (long long A, long long B)
     These functions return the quotient of the signed division of A and
     B.

 -- Runtime Function: int __lshrsi3 (int A, int B)
 -- Runtime Function: long __lshrdi3 (long A, int B)
 -- Runtime Function: long long __lshrti3 (long long A, int B)
     These functions return the result of logically shifting A right by
     B bits.

 -- Runtime Function: int __modsi3 (int A, int B)
 -- Runtime Function: long __moddi3 (long A, long B)
 -- Runtime Function: long long __modti3 (long long A, long long B)
     These functions return the remainder of the signed division of A
     and B.

 -- Runtime Function: int __mulsi3 (int A, int B)
 -- Runtime Function: long __muldi3 (long A, long B)
 -- Runtime Function: long long __multi3 (long long A, long long B)
     These functions return the product of A and B.

 -- Runtime Function: long __negdi2 (long A)
 -- Runtime Function: long long __negti2 (long long A)
     These functions return the negation of A.

 -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned
          int B)
 -- Runtime Function: unsigned long __udivdi3 (unsigned long A, unsigned
          long B)
 -- Runtime Function: unsigned long long __udivti3 (unsigned long long
          A, unsigned long long B)
     These functions return the quotient of the unsigned division of A
     and B.

 -- Runtime Function: unsigned long __udivmoddi4 (unsigned long A,
          unsigned long B, unsigned long *C)
 -- Runtime Function: unsigned long long __udivmodti4 (unsigned long
          long A, unsigned long long B, unsigned long long *C)
     These functions calculate both the quotient and remainder of the
     unsigned division of A and B.  The return value is the quotient,
     and the remainder is placed in variable pointed to by C.

 -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned
          int B)
 -- Runtime Function: unsigned long __umoddi3 (unsigned long A, unsigned
          long B)
 -- Runtime Function: unsigned long long __umodti3 (unsigned long long
          A, unsigned long long B)
     These functions return the remainder of the unsigned division of A
     and B.

4.1.2 Comparison functions
--------------------------

The following functions implement integral comparisons.  These functions
implement a low-level compare, upon which the higher level comparison
operators (such as less than and greater than or equal to) can be
constructed.  The returned values lie in the range zero to two, to allow
the high-level operators to be implemented by testing the returned
result using either signed or unsigned comparison.

 -- Runtime Function: int __cmpdi2 (long A, long B)
 -- Runtime Function: int __cmpti2 (long long A, long long B)
     These functions perform a signed comparison of A and B.  If A is
     less than B, they return 0; if A is greater than B, they return 2;
     and if A and B are equal they return 1.

 -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B)
 -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned long
          long B)
     These functions perform an unsigned comparison of A and B.  If A is
     less than B, they return 0; if A is greater than B, they return 2;
     and if A and B are equal they return 1.

4.1.3 Trapping arithmetic functions
-----------------------------------

The following functions implement trapping arithmetic.  These functions
call the libc function 'abort' upon signed arithmetic overflow.

 -- Runtime Function: int __absvsi2 (int A)
 -- Runtime Function: long __absvdi2 (long A)
     These functions return the absolute value of A.

 -- Runtime Function: int __addvsi3 (int A, int B)
 -- Runtime Function: long __addvdi3 (long A, long B)
     These functions return the sum of A and B; that is 'A + B'.

 -- Runtime Function: int __mulvsi3 (int A, int B)
 -- Runtime Function: long __mulvdi3 (long A, long B)
     The functions return the product of A and B; that is 'A * B'.

 -- Runtime Function: int __negvsi2 (int A)
 -- Runtime Function: long __negvdi2 (long A)
     These functions return the negation of A; that is '-A'.

 -- Runtime Function: int __subvsi3 (int A, int B)
 -- Runtime Function: long __subvdi3 (long A, long B)
     These functions return the difference between B and A; that is 'A -
     B'.

4.1.4 Bit operations
--------------------

 -- Runtime Function: int __clzsi2 (unsigned int A)
 -- Runtime Function: int __clzdi2 (unsigned long A)
 -- Runtime Function: int __clzti2 (unsigned long long A)
     These functions return the number of leading 0-bits in A, starting
     at the most significant bit position.  If A is zero, the result is
     undefined.

 -- Runtime Function: int __ctzsi2 (unsigned int A)
 -- Runtime Function: int __ctzdi2 (unsigned long A)
 -- Runtime Function: int __ctzti2 (unsigned long long A)
     These functions return the number of trailing 0-bits in A, starting
     at the least significant bit position.  If A is zero, the result is
     undefined.

 -- Runtime Function: int __ffsdi2 (unsigned long A)
 -- Runtime Function: int __ffsti2 (unsigned long long A)
     These functions return the index of the least significant 1-bit in
     A, or the value zero if A is zero.  The least significant bit is
     index one.

 -- Runtime Function: int __paritysi2 (unsigned int A)
 -- Runtime Function: int __paritydi2 (unsigned long A)
 -- Runtime Function: int __parityti2 (unsigned long long A)
     These functions return the value zero if the number of bits set in
     A is even, and the value one otherwise.

 -- Runtime Function: int __popcountsi2 (unsigned int A)
 -- Runtime Function: int __popcountdi2 (unsigned long A)
 -- Runtime Function: int __popcountti2 (unsigned long long A)
     These functions return the number of bits set in A.

 -- Runtime Function: int32_t __bswapsi2 (int32_t A)
 -- Runtime Function: int64_t __bswapdi2 (int64_t A)
     These functions return the A byteswapped.


File: gccint.info,  Node: Soft float library routines,  Next: Decimal float library routines,  Prev: Integer library routines,  Up: Libgcc

4.2 Routines for floating point emulation
=========================================

The software floating point library is used on machines which do not
have hardware support for floating point.  It is also used whenever
'-msoft-float' is used to disable generation of floating point
instructions.  (Not all targets support this switch.)

 For compatibility with other compilers, the floating point emulation
routines can be renamed with the 'DECLARE_LIBRARY_RENAMES' macro (*note
Library Calls::).  In this section, the default names are used.

 Presently the library does not support 'XFmode', which is used for
'long double' on some architectures.

4.2.1 Arithmetic functions
--------------------------

 -- Runtime Function: float __addsf3 (float A, float B)
 -- Runtime Function: double __adddf3 (double A, double B)
 -- Runtime Function: long double __addtf3 (long double A, long double
          B)
 -- Runtime Function: long double __addxf3 (long double A, long double
          B)
     These functions return the sum of A and B.

 -- Runtime Function: float __subsf3 (float A, float B)
 -- Runtime Function: double __subdf3 (double A, double B)
 -- Runtime Function: long double __subtf3 (long double A, long double
          B)
 -- Runtime Function: long double __subxf3 (long double A, long double
          B)
     These functions return the difference between B and A; that is,
     A - B.

 -- Runtime Function: float __mulsf3 (float A, float B)
 -- Runtime Function: double __muldf3 (double A, double B)
 -- Runtime Function: long double __multf3 (long double A, long double
          B)
 -- Runtime Function: long double __mulxf3 (long double A, long double
          B)
     These functions return the product of A and B.

 -- Runtime Function: float __divsf3 (float A, float B)
 -- Runtime Function: double __divdf3 (double A, double B)
 -- Runtime Function: long double __divtf3 (long double A, long double
          B)
 -- Runtime Function: long double __divxf3 (long double A, long double
          B)
     These functions return the quotient of A and B; that is, A / B.

 -- Runtime Function: float __negsf2 (float A)
 -- Runtime Function: double __negdf2 (double A)
 -- Runtime Function: long double __negtf2 (long double A)
 -- Runtime Function: long double __negxf2 (long double A)
     These functions return the negation of A.  They simply flip the
     sign bit, so they can produce negative zero and negative NaN.

4.2.2 Conversion functions
--------------------------

 -- Runtime Function: double __extendsfdf2 (float A)
 -- Runtime Function: long double __extendsftf2 (float A)
 -- Runtime Function: long double __extendsfxf2 (float A)
 -- Runtime Function: long double __extenddftf2 (double A)
 -- Runtime Function: long double __extenddfxf2 (double A)
     These functions extend A to the wider mode of their return type.

 -- Runtime Function: double __truncxfdf2 (long double A)
 -- Runtime Function: double __trunctfdf2 (long double A)
 -- Runtime Function: float __truncxfsf2 (long double A)
 -- Runtime Function: float __trunctfsf2 (long double A)
 -- Runtime Function: float __truncdfsf2 (double A)
     These functions truncate A to the narrower mode of their return
     type, rounding toward zero.

 -- Runtime Function: int __fixsfsi (float A)
 -- Runtime Function: int __fixdfsi (double A)
 -- Runtime Function: int __fixtfsi (long double A)
 -- Runtime Function: int __fixxfsi (long double A)
     These functions convert A to a signed integer, rounding toward
     zero.

 -- Runtime Function: long __fixsfdi (float A)
 -- Runtime Function: long __fixdfdi (double A)
 -- Runtime Function: long __fixtfdi (long double A)
 -- Runtime Function: long __fixxfdi (long double A)
     These functions convert A to a signed long, rounding toward zero.

 -- Runtime Function: long long __fixsfti (float A)
 -- Runtime Function: long long __fixdfti (double A)
 -- Runtime Function: long long __fixtfti (long double A)
 -- Runtime Function: long long __fixxfti (long double A)
     These functions convert A to a signed long long, rounding toward
     zero.

 -- Runtime Function: unsigned int __fixunssfsi (float A)
 -- Runtime Function: unsigned int __fixunsdfsi (double A)
 -- Runtime Function: unsigned int __fixunstfsi (long double A)
 -- Runtime Function: unsigned int __fixunsxfsi (long double A)
     These functions convert A to an unsigned integer, rounding toward
     zero.  Negative values all become zero.

 -- Runtime Function: unsigned long __fixunssfdi (float A)
 -- Runtime Function: unsigned long __fixunsdfdi (double A)
 -- Runtime Function: unsigned long __fixunstfdi (long double A)
 -- Runtime Function: unsigned long __fixunsxfdi (long double A)
     These functions convert A to an unsigned long, rounding toward
     zero.  Negative values all become zero.

 -- Runtime Function: unsigned long long __fixunssfti (float A)
 -- Runtime Function: unsigned long long __fixunsdfti (double A)
 -- Runtime Function: unsigned long long __fixunstfti (long double A)
 -- Runtime Function: unsigned long long __fixunsxfti (long double A)
     These functions convert A to an unsigned long long, rounding toward
     zero.  Negative values all become zero.

 -- Runtime Function: float __floatsisf (int I)
 -- Runtime Function: double __floatsidf (int I)
 -- Runtime Function: long double __floatsitf (int I)
 -- Runtime Function: long double __floatsixf (int I)
     These functions convert I, a signed integer, to floating point.

 -- Runtime Function: float __floatdisf (long I)
 -- Runtime Function: double __floatdidf (long I)
 -- Runtime Function: long double __floatditf (long I)
 -- Runtime Function: long double __floatdixf (long I)
     These functions convert I, a signed long, to floating point.

 -- Runtime Function: float __floattisf (long long I)
 -- Runtime Function: double __floattidf (long long I)
 -- Runtime Function: long double __floattitf (long long I)
 -- Runtime Function: long double __floattixf (long long I)
     These functions convert I, a signed long long, to floating point.

 -- Runtime Function: float __floatunsisf (unsigned int I)
 -- Runtime Function: double __floatunsidf (unsigned int I)
 -- Runtime Function: long double __floatunsitf (unsigned int I)
 -- Runtime Function: long double __floatunsixf (unsigned int I)
     These functions convert I, an unsigned integer, to floating point.

 -- Runtime Function: float __floatundisf (unsigned long I)
 -- Runtime Function: double __floatundidf (unsigned long I)
 -- Runtime Function: long double __floatunditf (unsigned long I)
 -- Runtime Function: long double __floatundixf (unsigned long I)
     These functions convert I, an unsigned long, to floating point.

 -- Runtime Function: float __floatuntisf (unsigned long long I)
 -- Runtime Function: double __floatuntidf (unsigned long long I)
 -- Runtime Function: long double __floatuntitf (unsigned long long I)
 -- Runtime Function: long double __floatuntixf (unsigned long long I)
     These functions convert I, an unsigned long long, to floating
     point.

4.2.3 Comparison functions
--------------------------

There are two sets of basic comparison functions.

 -- Runtime Function: int __cmpsf2 (float A, float B)
 -- Runtime Function: int __cmpdf2 (double A, double B)
 -- Runtime Function: int __cmptf2 (long double A, long double B)
     These functions calculate a <=> b.  That is, if A is less than B,
     they return -1; if A is greater than B, they return 1; and if A and
     B are equal they return 0.  If either argument is NaN they return
     1, but you should not rely on this; if NaN is a possibility, use
     one of the higher-level comparison functions.

 -- Runtime Function: int __unordsf2 (float A, float B)
 -- Runtime Function: int __unorddf2 (double A, double B)
 -- Runtime Function: int __unordtf2 (long double A, long double B)
     These functions return a nonzero value if either argument is NaN,
     otherwise 0.

 There is also a complete group of higher level functions which
correspond directly to comparison operators.  They implement the ISO C
semantics for floating-point comparisons, taking NaN into account.  Pay
careful attention to the return values defined for each set.  Under the
hood, all of these routines are implemented as

       if (__unordXf2 (a, b))
         return E;
       return __cmpXf2 (a, b);

where E is a constant chosen to give the proper behavior for NaN.  Thus,
the meaning of the return value is different for each set.  Do not rely
on this implementation; only the semantics documented below are
guaranteed.

 -- Runtime Function: int __eqsf2 (float A, float B)
 -- Runtime Function: int __eqdf2 (double A, double B)
 -- Runtime Function: int __eqtf2 (long double A, long double B)
     These functions return zero if neither argument is NaN, and A and B
     are equal.

 -- Runtime Function: int __nesf2 (float A, float B)
 -- Runtime Function: int __nedf2 (double A, double B)
 -- Runtime Function: int __netf2 (long double A, long double B)
     These functions return a nonzero value if either argument is NaN,
     or if A and B are unequal.

 -- Runtime Function: int __gesf2 (float A, float B)
 -- Runtime Function: int __gedf2 (double A, double B)
 -- Runtime Function: int __getf2 (long double A, long double B)
     These functions return a value greater than or equal to zero if
     neither argument is NaN, and A is greater than or equal to B.

 -- Runtime Function: int __ltsf2 (float A, float B)
 -- Runtime Function: int __ltdf2 (double A, double B)
 -- Runtime Function: int __lttf2 (long double A, long double B)
     These functions return a value less than zero if neither argument
     is NaN, and A is strictly less than B.

 -- Runtime Function: int __lesf2 (float A, float B)
 -- Runtime Function: int __ledf2 (double A, double B)
 -- Runtime Function: int __letf2 (long double A, long double B)
     These functions return a value less than or equal to zero if
     neither argument is NaN, and A is less than or equal to B.

 -- Runtime Function: int __gtsf2 (float A, float B)
 -- Runtime Function: int __gtdf2 (double A, double B)
 -- Runtime Function: int __gttf2 (long double A, long double B)
     These functions return a value greater than zero if neither
     argument is NaN, and A is strictly greater than B.

4.2.4 Other floating-point functions
------------------------------------

 -- Runtime Function: float __powisf2 (float A, int B)
 -- Runtime Function: double __powidf2 (double A, int B)
 -- Runtime Function: long double __powitf2 (long double A, int B)
 -- Runtime Function: long double __powixf2 (long double A, int B)
     These functions convert raise A to the power B.

 -- Runtime Function: complex float __mulsc3 (float A, float B, float C,
          float D)
 -- Runtime Function: complex double __muldc3 (double A, double B,
          double C, double D)
 -- Runtime Function: complex long double __multc3 (long double A, long
          double B, long double C, long double D)
 -- Runtime Function: complex long double __mulxc3 (long double A, long
          double B, long double C, long double D)
     These functions return the product of A + iB and C + iD, following
     the rules of C99 Annex G.

 -- Runtime Function: complex float __divsc3 (float A, float B, float C,
          float D)
 -- Runtime Function: complex double __divdc3 (double A, double B,
          double C, double D)
 -- Runtime Function: complex long double __divtc3 (long double A, long
          double B, long double C, long double D)
 -- Runtime Function: complex long double __divxc3 (long double A, long
          double B, long double C, long double D)
     These functions return the quotient of A + iB and C + iD (i.e., (A
     + iB) / (C + iD)), following the rules of C99 Annex G.


File: gccint.info,  Node: Decimal float library routines,  Next: Fixed-point fractional library routines,  Prev: Soft float library routines,  Up: Libgcc

4.3 Routines for decimal floating point emulation
=================================================

The software decimal floating point library implements IEEE 754-2008
decimal floating point arithmetic and is only activated on selected
targets.

 The software decimal floating point library supports either DPD
(Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as
selected at configure time.

4.3.1 Arithmetic functions
--------------------------

 -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32
          B)
 -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32
          B)
 -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64
          B)
 -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64
          B)
 -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A,
          _Decimal128 B)
 -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A,
          _Decimal128 B)
     These functions return the sum of A and B.

 -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32
          B)
 -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32
          B)
 -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64
          B)
 -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64
          B)
 -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A,
          _Decimal128 B)
 -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A,
          _Decimal128 B)
     These functions return the difference between B and A; that is,
     A - B.

 -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32
          B)
 -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32
          B)
 -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64
          B)
 -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64
          B)
 -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A,
          _Decimal128 B)
 -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A,
          _Decimal128 B)
     These functions return the product of A and B.

 -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32
          B)
 -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32
          B)
 -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64
          B)
 -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64
          B)
 -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A,
          _Decimal128 B)
 -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A,
          _Decimal128 B)
     These functions return the quotient of A and B; that is, A / B.

 -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A)
 -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A)
 -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A)
 -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A)
 -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A)
 -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A)
     These functions return the negation of A.  They simply flip the
     sign bit, so they can produce negative zero and negative NaN.

4.3.2 Conversion functions
--------------------------

 -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A)
 -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A)
 -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A)
 -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A)
 -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A)
 -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A)
 -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A)
 -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A)
 -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A)
 -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A)
 -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A)
 -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A)
     These functions convert the value A from one decimal floating type
     to another.

 -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A)
 -- Runtime Function: _Decimal64 __bid_extendsfdd (float A)
 -- Runtime Function: _Decimal128 __dpd_extendsftd (float A)
 -- Runtime Function: _Decimal128 __bid_extendsftd (float A)
 -- Runtime Function: _Decimal128 __dpd_extenddftd (double A)
 -- Runtime Function: _Decimal128 __bid_extenddftd (double A)
 -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A)
 -- Runtime Function: _Decimal128 __bid_extendxftd (long double A)
 -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A)
 -- Runtime Function: _Decimal32 __bid_truncdfsd (double A)
 -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A)
 -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A)
 -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A)
 -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A)
 -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A)
 -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A)
 -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A)
 -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A)
     These functions convert the value of A from a binary floating type
     to a decimal floating type of a different size.

 -- Runtime Function: float __dpd_truncddsf (_Decimal64 A)
 -- Runtime Function: float __bid_truncddsf (_Decimal64 A)
 -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A)
 -- Runtime Function: float __bid_trunctdsf (_Decimal128 A)
 -- Runtime Function: double __dpd_extendsddf (_Decimal32 A)
 -- Runtime Function: double __bid_extendsddf (_Decimal32 A)
 -- Runtime Function: double __dpd_trunctddf (_Decimal128 A)
 -- Runtime Function: double __bid_trunctddf (_Decimal128 A)
 -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A)
 -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A)
 -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A)
 -- Runtime Function: long double __bid_extendddxf (_Decimal64 A)
 -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A)
 -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A)
 -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A)
 -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A)
 -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A)
 -- Runtime Function: long double __bid_extendddtf (_Decimal64 A)
     These functions convert the value of A from a decimal floating type
     to a binary floating type of a different size.

 -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A)
 -- Runtime Function: _Decimal32 __bid_extendsfsd (float A)
 -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A)
 -- Runtime Function: _Decimal64 __bid_extenddfdd (double A)
 -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A)
 -- Runtime Function: _Decimal128 __bid_extendtftd (long double A)
 -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A)
 -- Runtime Function: float __bid_truncsdsf (_Decimal32 A)
 -- Runtime Function: double __dpd_truncdddf (_Decimal64 A)
 -- Runtime Function: double __bid_truncdddf (_Decimal64 A)
 -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A)
 -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A)
     These functions convert the value of A between decimal and binary
     floating types of the same size.

 -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A)
 -- Runtime Function: int __bid_fixsdsi (_Decimal32 A)
 -- Runtime Function: int __dpd_fixddsi (_Decimal64 A)
 -- Runtime Function: int __bid_fixddsi (_Decimal64 A)
 -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A)
 -- Runtime Function: int __bid_fixtdsi (_Decimal128 A)
     These functions convert A to a signed integer.

 -- Runtime Function: long __dpd_fixsddi (_Decimal32 A)
 -- Runtime Function: long __bid_fixsddi (_Decimal32 A)
 -- Runtime Function: long __dpd_fixdddi (_Decimal64 A)
 -- Runtime Function: long __bid_fixdddi (_Decimal64 A)
 -- Runtime Function: long __dpd_fixtddi (_Decimal128 A)
 -- Runtime Function: long __bid_fixtddi (_Decimal128 A)
     These functions convert A to a signed long.

 -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A)
 -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A)
 -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A)
 -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A)
 -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A)
 -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A)
     These functions convert A to an unsigned integer.  Negative values
     all become zero.

 -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A)
 -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A)
 -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A)
 -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A)
 -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A)
 -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A)
     These functions convert A to an unsigned long.  Negative values all
     become zero.

 -- Runtime Function: _Decimal32 __dpd_floatsisd (int I)
 -- Runtime Function: _Decimal32 __bid_floatsisd (int I)
 -- Runtime Function: _Decimal64 __dpd_floatsidd (int I)
 -- Runtime Function: _Decimal64 __bid_floatsidd (int I)
 -- Runtime Function: _Decimal128 __dpd_floatsitd (int I)
 -- Runtime Function: _Decimal128 __bid_floatsitd (int I)
     These functions convert I, a signed integer, to decimal floating
     point.

 -- Runtime Function: _Decimal32 __dpd_floatdisd (long I)
 -- Runtime Function: _Decimal32 __bid_floatdisd (long I)
 -- Runtime Function: _Decimal64 __dpd_floatdidd (long I)
 -- Runtime Function: _Decimal64 __bid_floatdidd (long I)
 -- Runtime Function: _Decimal128 __dpd_floatditd (long I)
 -- Runtime Function: _Decimal128 __bid_floatditd (long I)
     These functions convert I, a signed long, to decimal floating
     point.

 -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I)
 -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I)
 -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I)
 -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I)
 -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I)
 -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I)
     These functions convert I, an unsigned integer, to decimal floating
     point.

 -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I)
 -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I)
 -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I)
 -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I)
 -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I)
 -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I)
     These functions convert I, an unsigned long, to decimal floating
     point.

4.3.3 Comparison functions
--------------------------

 -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B)
 -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B)
     These functions return a nonzero value if either argument is NaN,
     otherwise 0.

 There is also a complete group of higher level functions which
correspond directly to comparison operators.  They implement the ISO C
semantics for floating-point comparisons, taking NaN into account.  Pay
careful attention to the return values defined for each set.  Under the
hood, all of these routines are implemented as

       if (__bid_unordXd2 (a, b))
         return E;
       return __bid_cmpXd2 (a, b);

where E is a constant chosen to give the proper behavior for NaN.  Thus,
the meaning of the return value is different for each set.  Do not rely
on this implementation; only the semantics documented below are
guaranteed.

 -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B)
 -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B)
     These functions return zero if neither argument is NaN, and A and B
     are equal.

 -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B)
 -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B)
     These functions return a nonzero value if either argument is NaN,
     or if A and B are unequal.

 -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B)
 -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B)
     These functions return a value greater than or equal to zero if
     neither argument is NaN, and A is greater than or equal to B.

 -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B)
 -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B)
     These functions return a value less than zero if neither argument
     is NaN, and A is strictly less than B.

 -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B)
 -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B)
     These functions return a value less than or equal to zero if
     neither argument is NaN, and A is less than or equal to B.

 -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B)
 -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B)
 -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B)
 -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B)
     These functions return a value greater than zero if neither
     argument is NaN, and A is strictly greater than B.


File: gccint.info,  Node: Fixed-point fractional library routines,  Next: Exception handling routines,  Prev: Decimal float library routines,  Up: Libgcc

4.4 Routines for fixed-point fractional emulation
=================================================

The software fixed-point library implements fixed-point fractional
arithmetic, and is only activated on selected targets.

 For ease of comprehension 'fract' is an alias for the '_Fract' type,
'accum' an alias for '_Accum', and 'sat' an alias for '_Sat'.

 For illustrative purposes, in this section the fixed-point fractional
type 'short fract' is assumed to correspond to machine mode 'QQmode';
'unsigned short fract' to 'UQQmode'; 'fract' to 'HQmode';
'unsigned fract' to 'UHQmode'; 'long fract' to 'SQmode';
'unsigned long fract' to 'USQmode'; 'long long fract' to 'DQmode'; and
'unsigned long long fract' to 'UDQmode'.  Similarly the fixed-point
accumulator type 'short accum' corresponds to 'HAmode';
'unsigned short accum' to 'UHAmode'; 'accum' to 'SAmode';
'unsigned accum' to 'USAmode'; 'long accum' to 'DAmode';
'unsigned long accum' to 'UDAmode'; 'long long accum' to 'TAmode'; and
'unsigned long long accum' to 'UTAmode'.

4.4.1 Arithmetic functions
--------------------------

 -- Runtime Function: short fract __addqq3 (short fract A, short fract
          B)
 -- Runtime Function: fract __addhq3 (fract A, fract B)
 -- Runtime Function: long fract __addsq3 (long fract A, long fract B)
 -- Runtime Function: long long fract __adddq3 (long long fract A, long
          long fract B)
 -- Runtime Function: unsigned short fract __adduqq3 (unsigned short
          fract A, unsigned short fract B)
 -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A,
          unsigned fract B)
 -- Runtime Function: unsigned long fract __addusq3 (unsigned long fract
          A, unsigned long fract B)
 -- Runtime Function: unsigned long long fract __addudq3 (unsigned long
          long fract A, unsigned long long fract B)
 -- Runtime Function: short accum __addha3 (short accum A, short accum
          B)
 -- Runtime Function: accum __addsa3 (accum A, accum B)
 -- Runtime Function: long accum __addda3 (long accum A, long accum B)
 -- Runtime Function: long long accum __addta3 (long long accum A, long
          long accum B)
 -- Runtime Function: unsigned short accum __adduha3 (unsigned short
          accum A, unsigned short accum B)
 -- Runtime Function: unsigned accum __addusa3 (unsigned accum A,
          unsigned accum B)
 -- Runtime Function: unsigned long accum __adduda3 (unsigned long accum
          A, unsigned long accum B)
 -- Runtime Function: unsigned long long accum __adduta3 (unsigned long
          long accum A, unsigned long long accum B)
     These functions return the sum of A and B.

 -- Runtime Function: short fract __ssaddqq3 (short fract A, short fract
          B)
 -- Runtime Function: fract __ssaddhq3 (fract A, fract B)
 -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B)
 -- Runtime Function: long long fract __ssadddq3 (long long fract A,
          long long fract B)
 -- Runtime Function: short accum __ssaddha3 (short accum A, short accum
          B)
 -- Runtime Function: accum __ssaddsa3 (accum A, accum B)
 -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B)
 -- Runtime Function: long long accum __ssaddta3 (long long accum A,
          long long accum B)
     These functions return the sum of A and B with signed saturation.

 -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short
          fract A, unsigned short fract B)
 -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A,
          unsigned fract B)
 -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long
          fract A, unsigned long fract B)
 -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned
          long long fract A, unsigned long long fract B)
 -- Runtime Function: unsigned short accum __usadduha3 (unsigned short
          accum A, unsigned short accum B)
 -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A,
          unsigned accum B)
 -- Runtime Function: unsigned long accum __usadduda3 (unsigned long
          accum A, unsigned long accum B)
 -- Runtime Function: unsigned long long accum __usadduta3 (unsigned
          long long accum A, unsigned long long accum B)
     These functions return the sum of A and B with unsigned saturation.

 -- Runtime Function: short fract __subqq3 (short fract A, short fract
          B)
 -- Runtime Function: fract __subhq3 (fract A, fract B)
 -- Runtime Function: long fract __subsq3 (long fract A, long fract B)
 -- Runtime Function: long long fract __subdq3 (long long fract A, long
          long fract B)
 -- Runtime Function: unsigned short fract __subuqq3 (unsigned short
          fract A, unsigned short fract B)
 -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A,
          unsigned fract B)
 -- Runtime Function: unsigned long fract __subusq3 (unsigned long fract
          A, unsigned long fract B)
 -- Runtime Function: unsigned long long fract __subudq3 (unsigned long
          long fract A, unsigned long long fract B)
 -- Runtime Function: short accum __subha3 (short accum A, short accum
          B)
 -- Runtime Function: accum __subsa3 (accum A, accum B)
 -- Runtime Function: long accum __subda3 (long accum A, long accum B)
 -- Runtime Function: long long accum __subta3 (long long accum A, long
          long accum B)
 -- Runtime Function: unsigned short accum __subuha3 (unsigned short
          accum A, unsigned short accum B)
 -- Runtime Function: unsigned accum __subusa3 (unsigned accum A,
          unsigned accum B)
 -- Runtime Function: unsigned long accum __subuda3 (unsigned long accum
          A, unsigned long accum B)
 -- Runtime Function: unsigned long long accum __subuta3 (unsigned long
          long accum A, unsigned long long accum B)
     These functions return the difference of A and B; that is, 'A - B'.

 -- Runtime Function: short fract __sssubqq3 (short fract A, short fract
          B)
 -- Runtime Function: fract __sssubhq3 (fract A, fract B)
 -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B)
 -- Runtime Function: long long fract __sssubdq3 (long long fract A,
          long long fract B)
 -- Runtime Function: short accum __sssubha3 (short accum A, short accum
          B)
 -- Runtime Function: accum __sssubsa3 (accum A, accum B)
 -- Runtime Function: long accum __sssubda3 (long accum A, long accum B)
 -- Runtime Function: long long accum __sssubta3 (long long accum A,
          long long accum B)
     These functions return the difference of A and B with signed
     saturation; that is, 'A - B'.

 -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short
          fract A, unsigned short fract B)
 -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A,
          unsigned fract B)
 -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long
          fract A, unsigned long fract B)
 -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned
          long long fract A, unsigned long long fract B)
 -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short
          accum A, unsigned short accum B)
 -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A,
          unsigned accum B)
 -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long
          accum A, unsigned long accum B)
 -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned
          long long accum A, unsigned long long accum B)
     These functions return the difference of A and B with unsigned
     saturation; that is, 'A - B'.

 -- Runtime Function: short fract __mulqq3 (short fract A, short fract
          B)
 -- Runtime Function: fract __mulhq3 (fract A, fract B)
 -- Runtime Function: long fract __mulsq3 (long fract A, long fract B)
 -- Runtime Function: long long fract __muldq3 (long long fract A, long
          long fract B)
 -- Runtime Function: unsigned short fract __muluqq3 (unsigned short
          fract A, unsigned short fract B)
 -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A,
          unsigned fract B)
 -- Runtime Function: unsigned long fract __mulusq3 (unsigned long fract
          A, unsigned long fract B)
 -- Runtime Function: unsigned long long fract __muludq3 (unsigned long
          long fract A, unsigned long long fract B)
 -- Runtime Function: short accum __mulha3 (short accum A, short accum
          B)
 -- Runtime Function: accum __mulsa3 (accum A, accum B)
 -- Runtime Function: long accum __mulda3 (long accum A, long accum B)
 -- Runtime Function: long long accum __multa3 (long long accum A, long
          long accum B)
 -- Runtime Function: unsigned short accum __muluha3 (unsigned short
          accum A, unsigned short accum B)
 -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A,
          unsigned accum B)
 -- Runtime Function: unsigned long accum __muluda3 (unsigned long accum
          A, unsigned long accum B)
 -- Runtime Function: unsigned long long accum __muluta3 (unsigned long
          long accum A, unsigned long long accum B)
     These functions return the product of A and B.

 -- Runtime Function: short fract __ssmulqq3 (short fract A, short fract
          B)
 -- Runtime Function: fract __ssmulhq3 (fract A, fract B)
 -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B)
 -- Runtime Function: long long fract __ssmuldq3 (long long fract A,
          long long fract B)
 -- Runtime Function: short accum __ssmulha3 (short accum A, short accum
          B)
 -- Runtime Function: accum __ssmulsa3 (accum A, accum B)
 -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B)
 -- Runtime Function: long long accum __ssmulta3 (long long accum A,
          long long accum B)
     These functions return the product of A and B with signed
     saturation.

 -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short
          fract A, unsigned short fract B)
 -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A,
          unsigned fract B)
 -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long
          fract A, unsigned long fract B)
 -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned
          long long fract A, unsigned long long fract B)
 -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short
          accum A, unsigned short accum B)
 -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A,
          unsigned accum B)
 -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long
          accum A, unsigned long accum B)
 -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned
          long long accum A, unsigned long long accum B)
     These functions return the product of A and B with unsigned
     saturation.

 -- Runtime Function: short fract __divqq3 (short fract A, short fract
          B)
 -- Runtime Function: fract __divhq3 (fract A, fract B)
 -- Runtime Function: long fract __divsq3 (long fract A, long fract B)
 -- Runtime Function: long long fract __divdq3 (long long fract A, long
          long fract B)
 -- Runtime Function: short accum __divha3 (short accum A, short accum
          B)
 -- Runtime Function: accum __divsa3 (accum A, accum B)
 -- Runtime Function: long accum __divda3 (long accum A, long accum B)
 -- Runtime Function: long long accum __divta3 (long long accum A, long
          long accum B)
     These functions return the quotient of the signed division of A and
     B.

 -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short
          fract A, unsigned short fract B)
 -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A,
          unsigned fract B)
 -- Runtime Function: unsigned long fract __udivusq3 (unsigned long
          fract A, unsigned long fract B)
 -- Runtime Function: unsigned long long fract __udivudq3 (unsigned long
          long fract A, unsigned long long fract B)
 -- Runtime Function: unsigned short accum __udivuha3 (unsigned short
          accum A, unsigned short accum B)
 -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A,
          unsigned accum B)
 -- Runtime Function: unsigned long accum __udivuda3 (unsigned long
          accum A, unsigned long accum B)
 -- Runtime Function: unsigned long long accum __udivuta3 (unsigned long
          long accum A, unsigned long long accum B)
     These functions return the quotient of the unsigned division of A
     and B.

 -- Runtime Function: short fract __ssdivqq3 (short fract A, short fract
          B)
 -- Runtime Function: fract __ssdivhq3 (fract A, fract B)
 -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B)
 -- Runtime Function: long long fract __ssdivdq3 (long long fract A,
          long long fract B)
 -- Runtime Function: short accum __ssdivha3 (short accum A, short accum
          B)
 -- Runtime Function: accum __ssdivsa3 (accum A, accum B)
 -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B)
 -- Runtime Function: long long accum __ssdivta3 (long long accum A,
          long long accum B)
     These functions return the quotient of the signed division of A and
     B with signed saturation.

 -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short
          fract A, unsigned short fract B)
 -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A,
          unsigned fract B)
 -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long
          fract A, unsigned long fract B)
 -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned
          long long fract A, unsigned long long fract B)
 -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short
          accum A, unsigned short accum B)
 -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A,
          unsigned accum B)
 -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long
          accum A, unsigned long accum B)
 -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned
          long long accum A, unsigned long long accum B)
     These functions return the quotient of the unsigned division of A
     and B with unsigned saturation.

 -- Runtime Function: short fract __negqq2 (short fract A)
 -- Runtime Function: fract __neghq2 (fract A)
 -- Runtime Function: long fract __negsq2 (long fract A)
 -- Runtime Function: long long fract __negdq2 (long long fract A)
 -- Runtime Function: unsigned short fract __neguqq2 (unsigned short
          fract A)
 -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A)
 -- Runtime Function: unsigned long fract __negusq2 (unsigned long fract
          A)
 -- Runtime Function: unsigned long long fract __negudq2 (unsigned long
          long fract A)
 -- Runtime Function: short accum __negha2 (short accum A)
 -- Runtime Function: accum __negsa2 (accum A)
 -- Runtime Function: long accum __negda2 (long accum A)
 -- Runtime Function: long long accum __negta2 (long long accum A)
 -- Runtime Function: unsigned short accum __neguha2 (unsigned short
          accum A)
 -- Runtime Function: unsigned accum __negusa2 (unsigned accum A)
 -- Runtime Function: unsigned long accum __neguda2 (unsigned long accum
          A)
 -- Runtime Function: unsigned long long accum __neguta2 (unsigned long
          long accum A)
     These functions return the negation of A.

 -- Runtime Function: short fract __ssnegqq2 (short fract A)
 -- Runtime Function: fract __ssneghq2 (fract A)
 -- Runtime Function: long fract __ssnegsq2 (long fract A)
 -- Runtime Function: long long fract __ssnegdq2 (long long fract A)
 -- Runtime Function: short accum __ssnegha2 (short accum A)
 -- Runtime Function: accum __ssnegsa2 (accum A)
 -- Runtime Function: long accum __ssnegda2 (long accum A)
 -- Runtime Function: long long accum __ssnegta2 (long long accum A)
     These functions return the negation of A with signed saturation.

 -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short
          fract A)
 -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A)
 -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long
          fract A)
 -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned
          long long fract A)
 -- Runtime Function: unsigned short accum __usneguha2 (unsigned short
          accum A)
 -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A)
 -- Runtime Function: unsigned long accum __usneguda2 (unsigned long
          accum A)
 -- Runtime Function: unsigned long long accum __usneguta2 (unsigned
          long long accum A)
     These functions return the negation of A with unsigned saturation.

 -- Runtime Function: short fract __ashlqq3 (short fract A, int B)
 -- Runtime Function: fract __ashlhq3 (fract A, int B)
 -- Runtime Function: long fract __ashlsq3 (long fract A, int B)
 -- Runtime Function: long long fract __ashldq3 (long long fract A, int
          B)
 -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short
          fract A, int B)
 -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int
          B)
 -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long
          fract A, int B)
 -- Runtime Function: unsigned long long fract __ashludq3 (unsigned long
          long fract A, int B)
 -- Runtime Function: short accum __ashlha3 (short accum A, int B)
 -- Runtime Function: accum __ashlsa3 (accum A, int B)
 -- Runtime Function: long accum __ashlda3 (long accum A, int B)
 -- Runtime Function: long long accum __ashlta3 (long long accum A, int
          B)
 -- Runtime Function: unsigned short accum __ashluha3 (unsigned short
          accum A, int B)
 -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int
          B)
 -- Runtime Function: unsigned long accum __ashluda3 (unsigned long
          accum A, int B)
 -- Runtime Function: unsigned long long accum __ashluta3 (unsigned long
          long accum A, int B)
     These functions return the result of shifting A left by B bits.

 -- Runtime Function: short fract __ashrqq3 (short fract A, int B)
 -- Runtime Function: fract __ashrhq3 (fract A, int B)
 -- Runtime Function: long fract __ashrsq3 (long fract A, int B)
 -- Runtime Function: long long fract __ashrdq3 (long long fract A, int
          B)
 -- Runtime Function: short accum __ashrha3 (short accum A, int B)
 -- Runtime Function: accum __ashrsa3 (accum A, int B)
 -- Runtime Function: long accum __ashrda3 (long accum A, int B)
 -- Runtime Function: long long accum __ashrta3 (long long accum A, int
          B)
     These functions return the result of arithmetically shifting A
     right by B bits.

 -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short
          fract A, int B)
 -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int
          B)
 -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long
          fract A, int B)
 -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned long
          long fract A, int B)
 -- Runtime Function: unsigned short accum __lshruha3 (unsigned short
          accum A, int B)
 -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int
          B)
 -- Runtime Function: unsigned long accum __lshruda3 (unsigned long
          accum A, int B)
 -- Runtime Function: unsigned long long accum __lshruta3 (unsigned long
          long accum A, int B)
     These functions return the result of logically shifting A right by
     B bits.

 -- Runtime Function: fract __ssashlhq3 (fract A, int B)
 -- Runtime Function: long fract __ssashlsq3 (long fract A, int B)
 -- Runtime Function: long long fract __ssashldq3 (long long fract A,
          int B)
 -- Runtime Function: short accum __ssashlha3 (short accum A, int B)
 -- Runtime Function: accum __ssashlsa3 (accum A, int B)
 -- Runtime Function: long accum __ssashlda3 (long accum A, int B)
 -- Runtime Function: long long accum __ssashlta3 (long long accum A,
          int B)
     These functions return the result of shifting A left by B bits with
     signed saturation.

 -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short
          fract A, int B)
 -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A, int
          B)
 -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long
          fract A, int B)
 -- Runtime Function: unsigned long long fract __usashludq3 (unsigned
          long long fract A, int B)
 -- Runtime Function: unsigned short accum __usashluha3 (unsigned short
          accum A, int B)
 -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A, int
          B)
 -- Runtime Function: unsigned long accum __usashluda3 (unsigned long
          accum A, int B)
 -- Runtime Function: unsigned long long accum __usashluta3 (unsigned
          long long accum A, int B)
     These functions return the result of shifting A left by B bits with
     unsigned saturation.

4.4.2 Comparison functions
--------------------------

The following functions implement fixed-point comparisons.  These
functions implement a low-level compare, upon which the higher level
comparison operators (such as less than and greater than or equal to)
can be constructed.  The returned values lie in the range zero to two,
to allow the high-level operators to be implemented by testing the
returned result using either signed or unsigned comparison.

 -- Runtime Function: int __cmpqq2 (short fract A, short fract B)
 -- Runtime Function: int __cmphq2 (fract A, fract B)
 -- Runtime Function: int __cmpsq2 (long fract A, long fract B)
 -- Runtime Function: int __cmpdq2 (long long fract A, long long fract
          B)
 -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned
          short fract B)
 -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B)
 -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned
          long fract B)
 -- Runtime Function: int __cmpudq2 (unsigned long long fract A,
          unsigned long long fract B)
 -- Runtime Function: int __cmpha2 (short accum A, short accum B)
 -- Runtime Function: int __cmpsa2 (accum A, accum B)
 -- Runtime Function: int __cmpda2 (long accum A, long accum B)
 -- Runtime Function: int __cmpta2 (long long accum A, long long accum
          B)
 -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned
          short accum B)
 -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B)
 -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned
          long accum B)
 -- Runtime Function: int __cmputa2 (unsigned long long accum A,
          unsigned long long accum B)
     These functions perform a signed or unsigned comparison of A and B
     (depending on the selected machine mode).  If A is less than B,
     they return 0; if A is greater than B, they return 2; and if A and
     B are equal they return 1.

4.4.3 Conversion functions
--------------------------

 -- Runtime Function: fract __fractqqhq2 (short fract A)
 -- Runtime Function: long fract __fractqqsq2 (short fract A)
 -- Runtime Function: long long fract __fractqqdq2 (short fract A)
 -- Runtime Function: short accum __fractqqha (short fract A)
 -- Runtime Function: accum __fractqqsa (short fract A)
 -- Runtime Function: long accum __fractqqda (short fract A)
 -- Runtime Function: long long accum __fractqqta (short fract A)
 -- Runtime Function: unsigned short fract __fractqquqq (short fract A)
 -- Runtime Function: unsigned fract __fractqquhq (short fract A)
 -- Runtime Function: unsigned long fract __fractqqusq (short fract A)
 -- Runtime Function: unsigned long long fract __fractqqudq (short fract
          A)
 -- Runtime Function: unsigned short accum __fractqquha (short fract A)
 -- Runtime Function: unsigned accum __fractqqusa (short fract A)
 -- Runtime Function: unsigned long accum __fractqquda (short fract A)
 -- Runtime Function: unsigned long long accum __fractqquta (short fract
          A)
 -- Runtime Function: signed char __fractqqqi (short fract A)
 -- Runtime Function: short __fractqqhi (short fract A)
 -- Runtime Function: int __fractqqsi (short fract A)
 -- Runtime Function: long __fractqqdi (short fract A)
 -- Runtime Function: long long __fractqqti (short fract A)
 -- Runtime Function: float __fractqqsf (short fract A)
 -- Runtime Function: double __fractqqdf (short fract A)
 -- Runtime Function: short fract __fracthqqq2 (fract A)
 -- Runtime Function: long fract __fracthqsq2 (fract A)
 -- Runtime Function: long long fract __fracthqdq2 (fract A)
 -- Runtime Function: short accum __fracthqha (fract A)
 -- Runtime Function: accum __fracthqsa (fract A)
 -- Runtime Function: long accum __fracthqda (fract A)
 -- Runtime Function: long long accum __fracthqta (fract A)
 -- Runtime Function: unsigned short fract __fracthquqq (fract A)
 -- Runtime Function: unsigned fract __fracthquhq (fract A)
 -- Runtime Function: unsigned long fract __fracthqusq (fract A)
 -- Runtime Function: unsigned long long fract __fracthqudq (fract A)
 -- Runtime Function: unsigned short accum __fracthquha (fract A)
 -- Runtime Function: unsigned accum __fracthqusa (fract A)
 -- Runtime Function: unsigned long accum __fracthquda (fract A)
 -- Runtime Function: unsigned long long accum __fracthquta (fract A)
 -- Runtime Function: signed char __fracthqqi (fract A)
 -- Runtime Function: short __fracthqhi (fract A)
 -- Runtime Function: int __fracthqsi (fract A)
 -- Runtime Function: long __fracthqdi (fract A)
 -- Runtime Function: long long __fracthqti (fract A)
 -- Runtime Function: float __fracthqsf (fract A)
 -- Runtime Function: double __fracthqdf (fract A)
 -- Runtime Function: short fract __fractsqqq2 (long fract A)
 -- Runtime Function: fract __fractsqhq2 (long fract A)
 -- Runtime Function: long long fract __fractsqdq2 (long fract A)
 -- Runtime Function: short accum __fractsqha (long fract A)
 -- Runtime Function: accum __fractsqsa (long fract A)
 -- Runtime Function: long accum __fractsqda (long fract A)
 -- Runtime Function: long long accum __fractsqta (long fract A)
 -- Runtime Function: unsigned short fract __fractsquqq (long fract A)
 -- Runtime Function: unsigned fract __fractsquhq (long fract A)
 -- Runtime Function: unsigned long fract __fractsqusq (long fract A)
 -- Runtime Function: unsigned long long fract __fractsqudq (long fract
          A)
 -- Runtime Function: unsigned short accum __fractsquha (long fract A)
 -- Runtime Function: unsigned accum __fractsqusa (long fract A)
 -- Runtime Function: unsigned long accum __fractsquda (long fract A)
 -- Runtime Function: unsigned long long accum __fractsquta (long fract
          A)
 -- Runtime Function: signed char __fractsqqi (long fract A)
 -- Runtime Function: short __fractsqhi (long fract A)
 -- Runtime Function: int __fractsqsi (long fract A)
 -- Runtime Function: long __fractsqdi (long fract A)
 -- Runtime Function: long long __fractsqti (long fract A)
 -- Runtime Function: float __fractsqsf (long fract A)
 -- Runtime Function: double __fractsqdf (long fract A)
 -- Runtime Function: short fract __fractdqqq2 (long long fract A)
 -- Runtime Function: fract __fractdqhq2 (long long fract A)
 -- Runtime Function: long fract __fractdqsq2 (long long fract A)
 -- Runtime Function: short accum __fractdqha (long long fract A)
 -- Runtime Function: accum __fractdqsa (long long fract A)
 -- Runtime Function: long accum __fractdqda (long long fract A)
 -- Runtime Function: long long accum __fractdqta (long long fract A)
 -- Runtime Function: unsigned short fract __fractdquqq (long long fract
          A)
 -- Runtime Function: unsigned fract __fractdquhq (long long fract A)
 -- Runtime Function: unsigned long fract __fractdqusq (long long fract
          A)
 -- Runtime Function: unsigned long long fract __fractdqudq (long long
          fract A)
 -- Runtime Function: unsigned short accum __fractdquha (long long fract
          A)
 -- Runtime Function: unsigned accum __fractdqusa (long long fract A)
 -- Runtime Function: unsigned long accum __fractdquda (long long fract
          A)
 -- Runtime Function: unsigned long long accum __fractdquta (long long
          fract A)
 -- Runtime Function: signed char __fractdqqi (long long fract A)
 -- Runtime Function: short __fractdqhi (long long fract A)
 -- Runtime Function: int __fractdqsi (long long fract A)
 -- Runtime Function: long __fractdqdi (long long fract A)
 -- Runtime Function: long long __fractdqti (long long fract A)
 -- Runtime Function: float __fractdqsf (long long fract A)
 -- Runtime Function: double __fractdqdf (long long fract A)
 -- Runtime Function: short fract __fracthaqq (short accum A)
 -- Runtime Function: fract __fracthahq (short accum A)
 -- Runtime Function: long fract __fracthasq (short accum A)
 -- Runtime Function: long long fract __fracthadq (short accum A)
 -- Runtime Function: accum __fracthasa2 (short accum A)
 -- Runtime Function: long accum __fracthada2 (short accum A)
 -- Runtime Function: long long accum __fracthata2 (short accum A)
 -- Runtime Function: unsigned short fract __fracthauqq (short accum A)
 -- Runtime Function: unsigned fract __fracthauhq (short accum A)
 -- Runtime Function: unsigned long fract __fracthausq (short accum A)
 -- Runtime Function: unsigned long long fract __fracthaudq (short accum
          A)
 -- Runtime Function: unsigned short accum __fracthauha (short accum A)
 -- Runtime Function: unsigned accum __fracthausa (short accum A)
 -- Runtime Function: unsigned long accum __fracthauda (short accum A)
 -- Runtime Function: unsigned long long accum __fracthauta (short accum
          A)
 -- Runtime Function: signed char __fracthaqi (short accum A)
 -- Runtime Function: short __fracthahi (short accum A)
 -- Runtime Function: int __fracthasi (short accum A)
 -- Runtime Function: long __fracthadi (short accum A)
 -- Runtime Function: long long __fracthati (short accum A)
 -- Runtime Function: float __fracthasf (short accum A)
 -- Runtime Function: double __fracthadf (short accum A)
 -- Runtime Function: short fract __fractsaqq (accum A)
 -- Runtime Function: fract __fractsahq (accum A)
 -- Runtime Function: long fract __fractsasq (accum A)
 -- Runtime Function: long long fract __fractsadq (accum A)
 -- Runtime Function: short accum __fractsaha2 (accum A)
 -- Runtime Function: long accum __fractsada2 (accum A)
 -- Runtime Function: long long accum __fractsata2 (accum A)
 -- Runtime Function: unsigned short fract __fractsauqq (accum A)
 -- Runtime Function: unsigned fract __fractsauhq (accum A)
 -- Runtime Function: unsigned long fract __fractsausq (accum A)
 -- Runtime Function: unsigned long long fract __fractsaudq (accum A)
 -- Runtime Function: unsigned short accum __fractsauha (accum A)
 -- Runtime Function: unsigned accum __fractsausa (accum A)
 -- Runtime Function: unsigned long accum __fractsauda (accum A)
 -- Runtime Function: unsigned long long accum __fractsauta (accum A)
 -- Runtime Function: signed char __fractsaqi (accum A)
 -- Runtime Function: short __fractsahi (accum A)
 -- Runtime Function: int __fractsasi (accum A)
 -- Runtime Function: long __fractsadi (accum A)
 -- Runtime Function: long long __fractsati (accum A)
 -- Runtime Function: float __fractsasf (accum A)
 -- Runtime Function: double __fractsadf (accum A)
 -- Runtime Function: short fract __fractdaqq (long accum A)
 -- Runtime Function: fract __fractdahq (long accum A)
 -- Runtime Function: long fract __fractdasq (long accum A)
 -- Runtime Function: long long fract __fractdadq (long accum A)
 -- Runtime Function: short accum __fractdaha2 (long accum A)
 -- Runtime Function: accum __fractdasa2 (long accum A)
 -- Runtime Function: long long accum __fractdata2 (long accum A)
 -- Runtime Function: unsigned short fract __fractdauqq (long accum A)
 -- Runtime Function: unsigned fract __fractdauhq (long accum A)
 -- Runtime Function: unsigned long fract __fractdausq (long accum A)
 -- Runtime Function: unsigned long long fract __fractdaudq (long accum
          A)
 -- Runtime Function: unsigned short accum __fractdauha (long accum A)
 -- Runtime Function: unsigned accum __fractdausa (long accum A)
 -- Runtime Function: unsigned long accum __fractdauda (long accum A)
 -- Runtime Function: unsigned long long accum __fractdauta (long accum
          A)
 -- Runtime Function: signed char __fractdaqi (long accum A)
 -- Runtime Function: short __fractdahi (long accum A)
 -- Runtime Function: int __fractdasi (long accum A)
 -- Runtime Function: long __fractdadi (long accum A)
 -- Runtime Function: long long __fractdati (long accum A)
 -- Runtime Function: float __fractdasf (long accum A)
 -- Runtime Function: double __fractdadf (long accum A)
 -- Runtime Function: short fract __fracttaqq (long long accum A)
 -- Runtime Function: fract __fracttahq (long long accum A)
 -- Runtime Function: long fract __fracttasq (long long accum A)
 -- Runtime Function: long long fract __fracttadq (long long accum A)
 -- Runtime Function: short accum __fracttaha2 (long long accum A)
 -- Runtime Function: accum __fracttasa2 (long long accum A)
 -- Runtime Function: long accum __fracttada2 (long long accum A)
 -- Runtime Function: unsigned short fract __fracttauqq (long long accum
          A)
 -- Runtime Function: unsigned fract __fracttauhq (long long accum A)
 -- Runtime Function: unsigned long fract __fracttausq (long long accum
          A)
 -- Runtime Function: unsigned long long fract __fracttaudq (long long
          accum A)
 -- Runtime Function: unsigned short accum __fracttauha (long long accum
          A)
 -- Runtime Function: unsigned accum __fracttausa (long long accum A)
 -- Runtime Function: unsigned long accum __fracttauda (long long accum
          A)
 -- Runtime Function: unsigned long long accum __fracttauta (long long
          accum A)
 -- Runtime Function: signed char __fracttaqi (long long accum A)
 -- Runtime Function: short __fracttahi (long long accum A)
 -- Runtime Function: int __fracttasi (long long accum A)
 -- Runtime Function: long __fracttadi (long long accum A)
 -- Runtime Function: long long __fracttati (long long accum A)
 -- Runtime Function: float __fracttasf (long long accum A)
 -- Runtime Function: double __fracttadf (long long accum A)
 -- Runtime Function: short fract __fractuqqqq (unsigned short fract A)
 -- Runtime Function: fract __fractuqqhq (unsigned short fract A)
 -- Runtime Function: long fract __fractuqqsq (unsigned short fract A)
 -- Runtime Function: long long fract __fractuqqdq (unsigned short fract
          A)
 -- Runtime Function: short accum __fractuqqha (unsigned short fract A)
 -- Runtime Function: accum __fractuqqsa (unsigned short fract A)
 -- Runtime Function: long accum __fractuqqda (unsigned short fract A)
 -- Runtime Function: long long accum __fractuqqta (unsigned short fract
          A)
 -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short
          fract A)
 -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned short
          fract A)
 -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned
          short fract A)
 -- Runtime Function: unsigned short accum __fractuqquha (unsigned short
          fract A)
 -- Runtime Function: unsigned accum __fractuqqusa (unsigned short fract
          A)
 -- Runtime Function: unsigned long accum __fractuqquda (unsigned short
          fract A)
 -- Runtime Function: unsigned long long accum __fractuqquta (unsigned
          short fract A)
 -- Runtime Function: signed char __fractuqqqi (unsigned short fract A)
 -- Runtime Function: short __fractuqqhi (unsigned short fract A)
 -- Runtime Function: int __fractuqqsi (unsigned short fract A)
 -- Runtime Function: long __fractuqqdi (unsigned short fract A)
 -- Runtime Function: long long __fractuqqti (unsigned short fract A)
 -- Runtime Function: float __fractuqqsf (unsigned short fract A)
 -- Runtime Function: double __fractuqqdf (unsigned short fract A)
 -- Runtime Function: short fract __fractuhqqq (unsigned fract A)
 -- Runtime Function: fract __fractuhqhq (unsigned fract A)
 -- Runtime Function: long fract __fractuhqsq (unsigned fract A)
 -- Runtime Function: long long fract __fractuhqdq (unsigned fract A)
 -- Runtime Function: short accum __fractuhqha (unsigned fract A)
 -- Runtime Function: accum __fractuhqsa (unsigned fract A)
 -- Runtime Function: long accum __fractuhqda (unsigned fract A)
 -- Runtime Function: long long accum __fractuhqta (unsigned fract A)
 -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned
          fract A)
 -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned fract
          A)
 -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned
          fract A)
 -- Runtime Function: unsigned short accum __fractuhquha (unsigned fract
          A)
 -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A)
 -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract
          A)
 -- Runtime Function: unsigned long long accum __fractuhquta (unsigned
          fract A)
 -- Runtime Function: signed char __fractuhqqi (unsigned fract A)
 -- Runtime Function: short __fractuhqhi (unsigned fract A)
 -- Runtime Function: int __fractuhqsi (unsigned fract A)
 -- Runtime Function: long __fractuhqdi (unsigned fract A)
 -- Runtime Function: long long __fractuhqti (unsigned fract A)
 -- Runtime Function: float __fractuhqsf (unsigned fract A)
 -- Runtime Function: double __fractuhqdf (unsigned fract A)
 -- Runtime Function: short fract __fractusqqq (unsigned long fract A)
 -- Runtime Function: fract __fractusqhq (unsigned long fract A)
 -- Runtime Function: long fract __fractusqsq (unsigned long fract A)
 -- Runtime Function: long long fract __fractusqdq (unsigned long fract
          A)
 -- Runtime Function: short accum __fractusqha (unsigned long fract A)
 -- Runtime Function: accum __fractusqsa (unsigned long fract A)
 -- Runtime Function: long accum __fractusqda (unsigned long fract A)
 -- Runtime Function: long long accum __fractusqta (unsigned long fract
          A)
 -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned long
          fract A)
 -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long fract
          A)
 -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned
          long fract A)
 -- Runtime Function: unsigned short accum __fractusquha (unsigned long
          fract A)
 -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract
          A)
 -- Runtime Function: unsigned long accum __fractusquda (unsigned long
          fract A)
 -- Runtime Function: unsigned long long accum __fractusquta (unsigned
          long fract A)
 -- Runtime Function: signed char __fractusqqi (unsigned long fract A)
 -- Runtime Function: short __fractusqhi (unsigned long fract A)
 -- Runtime Function: int __fractusqsi (unsigned long fract A)
 -- Runtime Function: long __fractusqdi (unsigned long fract A)
 -- Runtime Function: long long __fractusqti (unsigned long fract A)
 -- Runtime Function: float __fractusqsf (unsigned long fract A)
 -- Runtime Function: double __fractusqdf (unsigned long fract A)
 -- Runtime Function: short fract __fractudqqq (unsigned long long fract
          A)
 -- Runtime Function: fract __fractudqhq (unsigned long long fract A)
 -- Runtime Function: long fract __fractudqsq (unsigned long long fract
          A)
 -- Runtime Function: long long fract __fractudqdq (unsigned long long
          fract A)
 -- Runtime Function: short accum __fractudqha (unsigned long long fract
          A)
 -- Runtime Function: accum __fractudqsa (unsigned long long fract A)
 -- Runtime Function: long accum __fractudqda (unsigned long long fract
          A)
 -- Runtime Function: long long accum __fractudqta (unsigned long long
          fract A)
 -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned long
          long fract A)
 -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long
          fract A)
 -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long
          long fract A)
 -- Runtime Function: unsigned short accum __fractudquha (unsigned long
          long fract A)
 -- Runtime Function: unsigned accum __fractudqusa (unsigned long long
          fract A)
 -- Runtime Function: unsigned long accum __fractudquda (unsigned long
          long fract A)
 -- Runtime Function: unsigned long long accum __fractudquta (unsigned
          long long fract A)
 -- Runtime Function: signed char __fractudqqi (unsigned long long fract
          A)
 -- Runtime Function: short __fractudqhi (unsigned long long fract A)
 -- Runtime Function: int __fractudqsi (unsigned long long fract A)
 -- Runtime Function: long __fractudqdi (unsigned long long fract A)
 -- Runtime Function: long long __fractudqti (unsigned long long fract
          A)
 -- Runtime Function: float __fractudqsf (unsigned long long fract A)
 -- Runtime Function: double __fractudqdf (unsigned long long fract A)
 -- Runtime Function: short fract __fractuhaqq (unsigned short accum A)
 -- Runtime Function: fract __fractuhahq (unsigned short accum A)
 -- Runtime Function: long fract __fractuhasq (unsigned short accum A)
 -- Runtime Function: long long fract __fractuhadq (unsigned short accum
          A)
 -- Runtime Function: short accum __fractuhaha (unsigned short accum A)
 -- Runtime Function: accum __fractuhasa (unsigned short accum A)
 -- Runtime Function: long accum __fractuhada (unsigned short accum A)
 -- Runtime Function: long long accum __fractuhata (unsigned short accum
          A)
 -- Runtime Function: unsigned short fract __fractuhauqq (unsigned short
          accum A)
 -- Runtime Function: unsigned fract __fractuhauhq (unsigned short accum
          A)
 -- Runtime Function: unsigned long fract __fractuhausq (unsigned short
          accum A)
 -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned
          short accum A)
 -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short
          accum A)
 -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned short
          accum A)
 -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned
          short accum A)
 -- Runtime Function: signed char __fractuhaqi (unsigned short accum A)
 -- Runtime Function: short __fractuhahi (unsigned short accum A)
 -- Runtime Function: int __fractuhasi (unsigned short accum A)
 -- Runtime Function: long __fractuhadi (unsigned short accum A)
 -- Runtime Function: long long __fractuhati (unsigned short accum A)
 -- Runtime Function: float __fractuhasf (unsigned short accum A)
 -- Runtime Function: double __fractuhadf (unsigned short accum A)
 -- Runtime Function: short fract __fractusaqq (unsigned accum A)
 -- Runtime Function: fract __fractusahq (unsigned accum A)
 -- Runtime Function: long fract __fractusasq (unsigned accum A)
 -- Runtime Function: long long fract __fractusadq (unsigned accum A)
 -- Runtime Function: short accum __fractusaha (unsigned accum A)
 -- Runtime Function: accum __fractusasa (unsigned accum A)
 -- Runtime Function: long accum __fractusada (unsigned accum A)
 -- Runtime Function: long long accum __fractusata (unsigned accum A)
 -- Runtime Function: unsigned short fract __fractusauqq (unsigned accum
          A)
 -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A)
 -- Runtime Function: unsigned long fract __fractusausq (unsigned accum
          A)
 -- Runtime Function: unsigned long long fract __fractusaudq (unsigned
          accum A)
 -- Runtime Function: unsigned short accum __fractusauha2 (unsigned
          accum A)
 -- Runtime Function: unsigned long accum __fractusauda2 (unsigned accum
          A)
 -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned
          accum A)
 -- Runtime Function: signed char __fractusaqi (unsigned accum A)
 -- Runtime Function: short __fractusahi (unsigned accum A)
 -- Runtime Function: int __fractusasi (unsigned accum A)
 -- Runtime Function: long __fractusadi (unsigned accum A)
 -- Runtime Function: long long __fractusati (unsigned accum A)
 -- Runtime Function: float __fractusasf (unsigned accum A)
 -- Runtime Function: double __fractusadf (unsigned accum A)
 -- Runtime Function: short fract __fractudaqq (unsigned long accum A)
 -- Runtime Function: fract __fractudahq (unsigned long accum A)
 -- Runtime Function: long fract __fractudasq (unsigned long accum A)
 -- Runtime Function: long long fract __fractudadq (unsigned long accum
          A)
 -- Runtime Function: short accum __fractudaha (unsigned long accum A)
 -- Runtime Function: accum __fractudasa (unsigned long accum A)
 -- Runtime Function: long accum __fractudada (unsigned long accum A)
 -- Runtime Function: long long accum __fractudata (unsigned long accum
          A)
 -- Runtime Function: unsigned short fract __fractudauqq (unsigned long
          accum A)
 -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum
          A)
 -- Runtime Function: unsigned long fract __fractudausq (unsigned long
          accum A)
 -- Runtime Function: unsigned long long fract __fractudaudq (unsigned
          long accum A)
 -- Runtime Function: unsigned short accum __fractudauha2 (unsigned long
          accum A)
 -- Runtime Function: unsigned accum __fractudausa2 (unsigned long accum
          A)
 -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned
          long accum A)
 -- Runtime Function: signed char __fractudaqi (unsigned long accum A)
 -- Runtime Function: short __fractudahi (unsigned long accum A)
 -- Runtime Function: int __fractudasi (unsigned long accum A)
 -- Runtime Function: long __fractudadi (unsigned long accum A)
 -- Runtime Function: long long __fractudati (unsigned long accum A)
 -- Runtime Function: float __fractudasf (unsigned long accum A)
 -- Runtime Function: double __fractudadf (unsigned long accum A)
 -- Runtime Function: short fract __fractutaqq (unsigned long long accum
          A)
 -- Runtime Function: fract __fractutahq (unsigned long long accum A)
 -- Runtime Function: long fract __fractutasq (unsigned long long accum
          A)
 -- Runtime Function: long long fract __fractutadq (unsigned long long
          accum A)
 -- Runtime Function: short accum __fractutaha (unsigned long long accum
          A)
 -- Runtime Function: accum __fractutasa (unsigned long long accum A)
 -- Runtime Function: long accum __fractutada (unsigned long long accum
          A)
 -- Runtime Function: long long accum __fractutata (unsigned long long
          accum A)
 -- Runtime Function: unsigned short fract __fractutauqq (unsigned long
          long accum A)
 -- Runtime Function: unsigned fract __fractutauhq (unsigned long long
          accum A)
 -- Runtime Function: unsigned long fract __fractutausq (unsigned long
          long accum A)
 -- Runtime Function: unsigned long long fract __fractutaudq (unsigned
          long long accum A)
 -- Runtime Function: unsigned short accum __fractutauha2 (unsigned long
          long accum A)
 -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long
          accum A)
 -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long
          long accum A)
 -- Runtime Function: signed char __fractutaqi (unsigned long long accum
          A)
 -- Runtime Function: short __fractutahi (unsigned long long accum A)
 -- Runtime Function: int __fractutasi (unsigned long long accum A)
 -- Runtime Function: long __fractutadi (unsigned long long accum A)
 -- Runtime Function: long long __fractutati (unsigned long long accum
          A)
 -- Runtime Function: float __fractutasf (unsigned long long accum A)
 -- Runtime Function: double __fractutadf (unsigned long long accum A)
 -- Runtime Function: short fract __fractqiqq (signed char A)
 -- Runtime Function: fract __fractqihq (signed char A)
 -- Runtime Function: long fract __fractqisq (signed char A)
 -- Runtime Function: long long fract __fractqidq (signed char A)
 -- Runtime Function: short accum __fractqiha (signed char A)
 -- Runtime Function: accum __fractqisa (signed char A)
 -- Runtime Function: long accum __fractqida (signed char A)
 -- Runtime Function: long long accum __fractqita (signed char A)
 -- Runtime Function: unsigned short fract __fractqiuqq (signed char A)
 -- Runtime Function: unsigned fract __fractqiuhq (signed char A)
 -- Runtime Function: unsigned long fract __fractqiusq (signed char A)
 -- Runtime Function: unsigned long long fract __fractqiudq (signed char
          A)
 -- Runtime Function: unsigned short accum __fractqiuha (signed char A)
 -- Runtime Function: unsigned accum __fractqiusa (signed char A)
 -- Runtime Function: unsigned long accum __fractqiuda (signed char A)
 -- Runtime Function: unsigned long long accum __fractqiuta (signed char
          A)
 -- Runtime Function: short fract __fracthiqq (short A)
 -- Runtime Function: fract __fracthihq (short A)
 -- Runtime Function: long fract __fracthisq (short A)
 -- Runtime Function: long long fract __fracthidq (short A)
 -- Runtime Function: short accum __fracthiha (short A)
 -- Runtime Function: accum __fracthisa (short A)
 -- Runtime Function: long accum __fracthida (short A)
 -- Runtime Function: long long accum __fracthita (short A)
 -- Runtime Function: unsigned short fract __fracthiuqq (short A)
 -- Runtime Function: unsigned fract __fracthiuhq (short A)
 -- Runtime Function: unsigned long fract __fracthiusq (short A)
 -- Runtime Function: unsigned long long fract __fracthiudq (short A)
 -- Runtime Function: unsigned short accum __fracthiuha (short A)
 -- Runtime Function: unsigned accum __fracthiusa (short A)
 -- Runtime Function: unsigned long accum __fracthiuda (short A)
 -- Runtime Function: unsigned long long accum __fracthiuta (short A)
 -- Runtime Function: short fract __fractsiqq (int A)
 -- Runtime Function: fract __fractsihq (int A)
 -- Runtime Function: long fract __fractsisq (int A)
 -- Runtime Function: long long fract __fractsidq (int A)
 -- Runtime Function: short accum __fractsiha (int A)
 -- Runtime Function: accum __fractsisa (int A)
 -- Runtime Function: long accum __fractsida (int A)
 -- Runtime Function: long long accum __fractsita (int A)
 -- Runtime Function: unsigned short fract __fractsiuqq (int A)
 -- Runtime Function: unsigned fract __fractsiuhq (int A)
 -- Runtime Function: unsigned long fract __fractsiusq (int A)
 -- Runtime Function: unsigned long long fract __fractsiudq (int A)
 -- Runtime Function: unsigned short accum __fractsiuha (int A)
 -- Runtime Function: unsigned accum __fractsiusa (int A)
 -- Runtime Function: unsigned long accum __fractsiuda (int A)
 -- Runtime Function: unsigned long long accum __fractsiuta (int A)
 -- Runtime Function: short fract __fractdiqq (long A)
 -- Runtime Function: fract __fractdihq (long A)
 -- Runtime Function: long fract __fractdisq (long A)
 -- Runtime Function: long long fract __fractdidq (long A)
 -- Runtime Function: short accum __fractdiha (long A)
 -- Runtime Function: accum __fractdisa (long A)
 -- Runtime Function: long accum __fractdida (long A)
 -- Runtime Function: long long accum __fractdita (long A)
 -- Runtime Function: unsigned short fract __fractdiuqq (long A)
 -- Runtime Function: unsigned fract __fractdiuhq (long A)
 -- Runtime Function: unsigned long fract __fractdiusq (long A)
 -- Runtime Function: unsigned long long fract __fractdiudq (long A)
 -- Runtime Function: unsigned short accum __fractdiuha (long A)
 -- Runtime Function: unsigned accum __fractdiusa (long A)
 -- Runtime Function: unsigned long accum __fractdiuda (long A)
 -- Runtime Function: unsigned long long accum __fractdiuta (long A)
 -- Runtime Function: short fract __fracttiqq (long long A)
 -- Runtime Function: fract __fracttihq (long long A)
 -- Runtime Function: long fract __fracttisq (long long A)
 -- Runtime Function: long long fract __fracttidq (long long A)
 -- Runtime Function: short accum __fracttiha (long long A)
 -- Runtime Function: accum __fracttisa (long long A)
 -- Runtime Function: long accum __fracttida (long long A)
 -- Runtime Function: long long accum __fracttita (long long A)
 -- Runtime Function: unsigned short fract __fracttiuqq (long long A)
 -- Runtime Function: unsigned fract __fracttiuhq (long long A)
 -- Runtime Function: unsigned long fract __fracttiusq (long long A)
 -- Runtime Function: unsigned long long fract __fracttiudq (long long
          A)
 -- Runtime Function: unsigned short accum __fracttiuha (long long A)
 -- Runtime Function: unsigned accum __fracttiusa (long long A)
 -- Runtime Function: unsigned long accum __fracttiuda (long long A)
 -- Runtime Function: unsigned long long accum __fracttiuta (long long
          A)
 -- Runtime Function: short fract __fractsfqq (float A)
 -- Runtime Function: fract __fractsfhq (float A)
 -- Runtime Function: long fract __fractsfsq (float A)
 -- Runtime Function: long long fract __fractsfdq (float A)
 -- Runtime Function: short accum __fractsfha (float A)
 -- Runtime Function: accum __fractsfsa (float A)
 -- Runtime Function: long accum __fractsfda (float A)
 -- Runtime Function: long long accum __fractsfta (float A)
 -- Runtime Function: unsigned short fract __fractsfuqq (float A)
 -- Runtime Function: unsigned fract __fractsfuhq (float A)
 -- Runtime Function: unsigned long fract __fractsfusq (float A)
 -- Runtime Function: unsigned long long fract __fractsfudq (float A)
 -- Runtime Function: unsigned short accum __fractsfuha (float A)
 -- Runtime Function: unsigned accum __fractsfusa (float A)
 -- Runtime Function: unsigned long accum __fractsfuda (float A)
 -- Runtime Function: unsigned long long accum __fractsfuta (float A)
 -- Runtime Function: short fract __fractdfqq (double A)
 -- Runtime Function: fract __fractdfhq (double A)
 -- Runtime Function: long fract __fractdfsq (double A)
 -- Runtime Function: long long fract __fractdfdq (double A)
 -- Runtime Function: short accum __fractdfha (double A)
 -- Runtime Function: accum __fractdfsa (double A)
 -- Runtime Function: long accum __fractdfda (double A)
 -- Runtime Function: long long accum __fractdfta (double A)
 -- Runtime Function: unsigned short fract __fractdfuqq (double A)
 -- Runtime Function: unsigned fract __fractdfuhq (double A)
 -- Runtime Function: unsigned long fract __fractdfusq (double A)
 -- Runtime Function: unsigned long long fract __fractdfudq (double A)
 -- Runtime Function: unsigned short accum __fractdfuha (double A)
 -- Runtime Function: unsigned accum __fractdfusa (double A)
 -- Runtime Function: unsigned long accum __fractdfuda (double A)
 -- Runtime Function: unsigned long long accum __fractdfuta (double A)
     These functions convert from fractional and signed non-fractionals
     to fractionals and signed non-fractionals, without saturation.

 -- Runtime Function: fract __satfractqqhq2 (short fract A)
 -- Runtime Function: long fract __satfractqqsq2 (short fract A)
 -- Runtime Function: long long fract __satfractqqdq2 (short fract A)
 -- Runtime Function: short accum __satfractqqha (short fract A)
 -- Runtime Function: accum __satfractqqsa (short fract A)
 -- Runtime Function: long accum __satfractqqda (short fract A)
 -- Runtime Function: long long accum __satfractqqta (short fract A)
 -- Runtime Function: unsigned short fract __satfractqquqq (short fract
          A)
 -- Runtime Function: unsigned fract __satfractqquhq (short fract A)
 -- Runtime Function: unsigned long fract __satfractqqusq (short fract
          A)
 -- Runtime Function: unsigned long long fract __satfractqqudq (short
          fract A)
 -- Runtime Function: unsigned short accum __satfractqquha (short fract
          A)
 -- Runtime Function: unsigned accum __satfractqqusa (short fract A)
 -- Runtime Function: unsigned long accum __satfractqquda (short fract
          A)
 -- Runtime Function: unsigned long long accum __satfractqquta (short
          fract A)
 -- Runtime Function: short fract __satfracthqqq2 (fract A)
 -- Runtime Function: long fract __satfracthqsq2 (fract A)
 -- Runtime Function: long long fract __satfracthqdq2 (fract A)
 -- Runtime Function: short accum __satfracthqha (fract A)
 -- Runtime Function: accum __satfracthqsa (fract A)
 -- Runtime Function: long accum __satfracthqda (fract A)
 -- Runtime Function: long long accum __satfracthqta (fract A)
 -- Runtime Function: unsigned short fract __satfracthquqq (fract A)
 -- Runtime Function: unsigned fract __satfracthquhq (fract A)
 -- Runtime Function: unsigned long fract __satfracthqusq (fract A)
 -- Runtime Function: unsigned long long fract __satfracthqudq (fract A)
 -- Runtime Function: unsigned short accum __satfracthquha (fract A)
 -- Runtime Function: unsigned accum __satfracthqusa (fract A)
 -- Runtime Function: unsigned long accum __satfracthquda (fract A)
 -- Runtime Function: unsigned long long accum __satfracthquta (fract A)
 -- Runtime Function: short fract __satfractsqqq2 (long fract A)
 -- Runtime Function: fract __satfractsqhq2 (long fract A)
 -- Runtime Function: long long fract __satfractsqdq2 (long fract A)
 -- Runtime Function: short accum __satfractsqha (long fract A)
 -- Runtime Function: accum __satfractsqsa (long fract A)
 -- Runtime Function: long accum __satfractsqda (long fract A)
 -- Runtime Function: long long accum __satfractsqta (long fract A)
 -- Runtime Function: unsigned short fract __satfractsquqq (long fract
          A)
 -- Runtime Function: unsigned fract __satfractsquhq (long fract A)
 -- Runtime Function: unsigned long fract __satfractsqusq (long fract A)
 -- Runtime Function: unsigned long long fract __satfractsqudq (long
          fract A)
 -- Runtime Function: unsigned short accum __satfractsquha (long fract
          A)
 -- Runtime Function: unsigned accum __satfractsqusa (long fract A)
 -- Runtime Function: unsigned long accum __satfractsquda (long fract A)
 -- Runtime Function: unsigned long long accum __satfractsquta (long
          fract A)
 -- Runtime Function: short fract __satfractdqqq2 (long long fract A)
 -- Runtime Function: fract __satfractdqhq2 (long long fract A)
 -- Runtime Function: long fract __satfractdqsq2 (long long fract A)
 -- Runtime Function: short accum __satfractdqha (long long fract A)
 -- Runtime Function: accum __satfractdqsa (long long fract A)
 -- Runtime Function: long accum __satfractdqda (long long fract A)
 -- Runtime Function: long long accum __satfractdqta (long long fract A)
 -- Runtime Function: unsigned short fract __satfractdquqq (long long
          fract A)
 -- Runtime Function: unsigned fract __satfractdquhq (long long fract A)
 -- Runtime Function: unsigned long fract __satfractdqusq (long long
          fract A)
 -- Runtime Function: unsigned long long fract __satfractdqudq (long
          long fract A)
 -- Runtime Function: unsigned short accum __satfractdquha (long long
          fract A)
 -- Runtime Function: unsigned accum __satfractdqusa (long long fract A)
 -- Runtime Function: unsigned long accum __satfractdquda (long long
          fract A)
 -- Runtime Function: unsigned long long accum __satfractdquta (long
          long fract A)
 -- Runtime Function: short fract __satfracthaqq (short accum A)
 -- Runtime Function: fract __satfracthahq (short accum A)
 -- Runtime Function: long fract __satfracthasq (short accum A)
 -- Runtime Function: long long fract __satfracthadq (short accum A)
 -- Runtime Function: accum __satfracthasa2 (short accum A)
 -- Runtime Function: long accum __satfracthada2 (short accum A)
 -- Runtime Function: long long accum __satfracthata2 (short accum A)
 -- Runtime Function: unsigned short fract __satfracthauqq (short accum
          A)
 -- Runtime Function: unsigned fract __satfracthauhq (short accum A)
 -- Runtime Function: unsigned long fract __satfracthausq (short accum
          A)
 -- Runtime Function: unsigned long long fract __satfracthaudq (short
          accum A)
 -- Runtime Function: unsigned short accum __satfracthauha (short accum
          A)
 -- Runtime Function: unsigned accum __satfracthausa (short accum A)
 -- Runtime Function: unsigned long accum __satfracthauda (short accum
          A)
 -- Runtime Function: unsigned long long accum __satfracthauta (short
          accum A)
 -- Runtime Function: short fract __satfractsaqq (accum A)
 -- Runtime Function: fract __satfractsahq (accum A)
 -- Runtime Function: long fract __satfractsasq (accum A)
 -- Runtime Function: long long fract __satfractsadq (accum A)
 -- Runtime Function: short accum __satfractsaha2 (accum A)
 -- Runtime Function: long accum __satfractsada2 (accum A)
 -- Runtime Function: long long accum __satfractsata2 (accum A)
 -- Runtime Function: unsigned short fract __satfractsauqq (accum A)
 -- Runtime Function: unsigned fract __satfractsauhq (accum A)
 -- Runtime Function: unsigned long fract __satfractsausq (accum A)
 -- Runtime Function: unsigned long long fract __satfractsaudq (accum A)
 -- Runtime Function: unsigned short accum __satfractsauha (accum A)
 -- Runtime Function: unsigned accum __satfractsausa (accum A)
 -- Runtime Function: unsigned long accum __satfractsauda (accum A)
 -- Runtime Function: unsigned long long accum __satfractsauta (accum A)
 -- Runtime Function: short fract __satfractdaqq (long accum A)
 -- Runtime Function: fract __satfractdahq (long accum A)
 -- Runtime Function: long fract __satfractdasq (long accum A)
 -- Runtime Function: long long fract __satfractdadq (long accum A)
 -- Runtime Function: short accum __satfractdaha2 (long accum A)
 -- Runtime Function: accum __satfractdasa2 (long accum A)
 -- Runtime Function: long long accum __satfractdata2 (long accum A)
 -- Runtime Function: unsigned short fract __satfractdauqq (long accum
          A)
 -- Runtime Function: unsigned fract __satfractdauhq (long accum A)
 -- Runtime Function: unsigned long fract __satfractdausq (long accum A)
 -- Runtime Function: unsigned long long fract __satfractdaudq (long
          accum A)
 -- Runtime Function: unsigned short accum __satfractdauha (long accum
          A)
 -- Runtime Function: unsigned accum __satfractdausa (long accum A)
 -- Runtime Function: unsigned long accum __satfractdauda (long accum A)
 -- Runtime Function: unsigned long long accum __satfractdauta (long
          accum A)
 -- Runtime Function: short fract __satfracttaqq (long long accum A)
 -- Runtime Function: fract __satfracttahq (long long accum A)
 -- Runtime Function: long fract __satfracttasq (long long accum A)
 -- Runtime Function: long long fract __satfracttadq (long long accum A)
 -- Runtime Function: short accum __satfracttaha2 (long long accum A)
 -- Runtime Function: accum __satfracttasa2 (long long accum A)
 -- Runtime Function: long accum __satfracttada2 (long long accum A)
 -- Runtime Function: unsigned short fract __satfracttauqq (long long
          accum A)
 -- Runtime Function: unsigned fract __satfracttauhq (long long accum A)
 -- Runtime Function: unsigned long fract __satfracttausq (long long
          accum A)
 -- Runtime Function: unsigned long long fract __satfracttaudq (long
          long accum A)
 -- Runtime Function: unsigned short accum __satfracttauha (long long
          accum A)
 -- Runtime Function: unsigned accum __satfracttausa (long long accum A)
 -- Runtime Function: unsigned long accum __satfracttauda (long long
          accum A)
 -- Runtime Function: unsigned long long accum __satfracttauta (long
          long accum A)
 -- Runtime Function: short fract __satfractuqqqq (unsigned short fract
          A)
 -- Runtime Function: fract __satfractuqqhq (unsigned short fract A)
 -- Runtime Function: long fract __satfractuqqsq (unsigned short fract
          A)
 -- Runtime Function: long long fract __satfractuqqdq (unsigned short
          fract A)
 -- Runtime Function: short accum __satfractuqqha (unsigned short fract
          A)
 -- Runtime Function: accum __satfractuqqsa (unsigned short fract A)
 -- Runtime Function: long accum __satfractuqqda (unsigned short fract
          A)
 -- Runtime Function: long long accum __satfractuqqta (unsigned short
          fract A)
 -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short
          fract A)
 -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned
          short fract A)
 -- Runtime Function: unsigned long long fract __satfractuqqudq2
          (unsigned short fract A)
 -- Runtime Function: unsigned short accum __satfractuqquha (unsigned
          short fract A)
 -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short
          fract A)
 -- Runtime Function: unsigned long accum __satfractuqquda (unsigned
          short fract A)
 -- Runtime Function: unsigned long long accum __satfractuqquta
          (unsigned short fract A)
 -- Runtime Function: short fract __satfractuhqqq (unsigned fract A)
 -- Runtime Function: fract __satfractuhqhq (unsigned fract A)
 -- Runtime Function: long fract __satfractuhqsq (unsigned fract A)
 -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A)
 -- Runtime Function: short accum __satfractuhqha (unsigned fract A)
 -- Runtime Function: accum __satfractuhqsa (unsigned fract A)
 -- Runtime Function: long accum __satfractuhqda (unsigned fract A)
 -- Runtime Function: long long accum __satfractuhqta (unsigned fract A)
 -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned
          fract A)
 -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned
          fract A)
 -- Runtime Function: unsigned long long fract __satfractuhqudq2
          (unsigned fract A)
 -- Runtime Function: unsigned short accum __satfractuhquha (unsigned
          fract A)
 -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A)
 -- Runtime Function: unsigned long accum __satfractuhquda (unsigned
          fract A)
 -- Runtime Function: unsigned long long accum __satfractuhquta
          (unsigned fract A)
 -- Runtime Function: short fract __satfractusqqq (unsigned long fract
          A)
 -- Runtime Function: fract __satfractusqhq (unsigned long fract A)
 -- Runtime Function: long fract __satfractusqsq (unsigned long fract A)
 -- Runtime Function: long long fract __satfractusqdq (unsigned long
          fract A)
 -- Runtime Function: short accum __satfractusqha (unsigned long fract
          A)
 -- Runtime Function: accum __satfractusqsa (unsigned long fract A)
 -- Runtime Function: long accum __satfractusqda (unsigned long fract A)
 -- Runtime Function: long long accum __satfractusqta (unsigned long
          fract A)
 -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned
          long fract A)
 -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long
          fract A)
 -- Runtime Function: unsigned long long fract __satfractusqudq2
          (unsigned long fract A)
 -- Runtime Function: unsigned short accum __satfractusquha (unsigned
          long fract A)
 -- Runtime Function: unsigned accum __satfractusqusa (unsigned long
          fract A)
 -- Runtime Function: unsigned long accum __satfractusquda (unsigned
          long fract A)
 -- Runtime Function: unsigned long long accum __satfractusquta
          (unsigned long fract A)
 -- Runtime Function: short fract __satfractudqqq (unsigned long long
          fract A)
 -- Runtime Function: fract __satfractudqhq (unsigned long long fract A)
 -- Runtime Function: long fract __satfractudqsq (unsigned long long
          fract A)
 -- Runtime Function: long long fract __satfractudqdq (unsigned long
          long fract A)
 -- Runtime Function: short accum __satfractudqha (unsigned long long
          fract A)
 -- Runtime Function: accum __satfractudqsa (unsigned long long fract A)
 -- Runtime Function: long accum __satfractudqda (unsigned long long
          fract A)
 -- Runtime Function: long long accum __satfractudqta (unsigned long
          long fract A)
 -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned
          long long fract A)
 -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long
          long fract A)
 -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned
          long long fract A)
 -- Runtime Function: unsigned short accum __satfractudquha (unsigned
          long long fract A)
 -- Runtime Function: unsigned accum __satfractudqusa (unsigned long
          long fract A)
 -- Runtime Function: unsigned long accum __satfractudquda (unsigned
          long long fract A)
 -- Runtime Function: unsigned long long accum __satfractudquta
          (unsigned long long fract A)
 -- Runtime Function: short fract __satfractuhaqq (unsigned short accum
          A)
 -- Runtime Function: fract __satfractuhahq (unsigned short accum A)
 -- Runtime Function: long fract __satfractuhasq (unsigned short accum
          A)
 -- Runtime Function: long long fract __satfractuhadq (unsigned short
          accum A)
 -- Runtime Function: short accum __satfractuhaha (unsigned short accum
          A)
 -- Runtime Function: accum __satfractuhasa (unsigned short accum A)
 -- Runtime Function: long accum __satfractuhada (unsigned short accum
          A)
 -- Runtime Function: long long accum __satfractuhata (unsigned short
          accum A)
 -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned
          short accum A)
 -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short
          accum A)
 -- Runtime Function: unsigned long fract __satfractuhausq (unsigned
          short accum A)
 -- Runtime Function: unsigned long long fract __satfractuhaudq
          (unsigned short accum A)
 -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short
          accum A)
 -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned
          short accum A)
 -- Runtime Function: unsigned long long accum __satfractuhauta2
          (unsigned short accum A)
 -- Runtime Function: short fract __satfractusaqq (unsigned accum A)
 -- Runtime Function: fract __satfractusahq (unsigned accum A)
 -- Runtime Function: long fract __satfractusasq (unsigned accum A)
 -- Runtime Function: long long fract __satfractusadq (unsigned accum A)
 -- Runtime Function: short accum __satfractusaha (unsigned accum A)
 -- Runtime Function: accum __satfractusasa (unsigned accum A)
 -- Runtime Function: long accum __satfractusada (unsigned accum A)
 -- Runtime Function: long long accum __satfractusata (unsigned accum A)
 -- Runtime Function: unsigned short fract __satfractusauqq (unsigned
          accum A)
 -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A)
 -- Runtime Function: unsigned long fract __satfractusausq (unsigned
          accum A)
 -- Runtime Function: unsigned long long fract __satfractusaudq
          (unsigned accum A)
 -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned
          accum A)
 -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned
          accum A)
 -- Runtime Function: unsigned long long accum __satfractusauta2
          (unsigned accum A)
 -- Runtime Function: short fract __satfractudaqq (unsigned long accum
          A)
 -- Runtime Function: fract __satfractudahq (unsigned long accum A)
 -- Runtime Function: long fract __satfractudasq (unsigned long accum A)
 -- Runtime Function: long long fract __satfractudadq (unsigned long
          accum A)
 -- Runtime Function: short accum __satfractudaha (unsigned long accum
          A)
 -- Runtime Function: accum __satfractudasa (unsigned long accum A)
 -- Runtime Function: long accum __satfractudada (unsigned long accum A)
 -- Runtime Function: long long accum __satfractudata (unsigned long
          accum A)
 -- Runtime Function: unsigned short fract __satfractudauqq (unsigned
          long accum A)
 -- Runtime Function: unsigned fract __satfractudauhq (unsigned long
          accum A)
 -- Runtime Function: unsigned long fract __satfractudausq (unsigned
          long accum A)
 -- Runtime Function: unsigned long long fract __satfractudaudq
          (unsigned long accum A)
 -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned
          long accum A)
 -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long
          accum A)
 -- Runtime Function: unsigned long long accum __satfractudauta2
          (unsigned long accum A)
 -- Runtime Function: short fract __satfractutaqq (unsigned long long
          accum A)
 -- Runtime Function: fract __satfractutahq (unsigned long long accum A)
 -- Runtime Function: long fract __satfractutasq (unsigned long long
          accum A)
 -- Runtime Function: long long fract __satfractutadq (unsigned long
          long accum A)
 -- Runtime Function: short accum __satfractutaha (unsigned long long
          accum A)
 -- Runtime Function: accum __satfractutasa (unsigned long long accum A)
 -- Runtime Function: long accum __satfractutada (unsigned long long
          accum A)
 -- Runtime Function: long long accum __satfractutata (unsigned long
          long accum A)
 -- Runtime Function: unsigned short fract __satfractutauqq (unsigned
          long long accum A)
 -- Runtime Function: unsigned fract __satfractutauhq (unsigned long
          long accum A)
 -- Runtime Function: unsigned long fract __satfractutausq (unsigned
          long long accum A)
 -- Runtime Function: unsigned long long fract __satfractutaudq
          (unsigned long long accum A)
 -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned
          long long accum A)
 -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long
          long accum A)
 -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned
          long long accum A)
 -- Runtime Function: short fract __satfractqiqq (signed char A)
 -- Runtime Function: fract __satfractqihq (signed char A)
 -- Runtime Function: long fract __satfractqisq (signed char A)
 -- Runtime Function: long long fract __satfractqidq (signed char A)
 -- Runtime Function: short accum __satfractqiha (signed char A)
 -- Runtime Function: accum __satfractqisa (signed char A)
 -- Runtime Function: long accum __satfractqida (signed char A)
 -- Runtime Function: long long accum __satfractqita (signed char A)
 -- Runtime Function: unsigned short fract __satfractqiuqq (signed char
          A)
 -- Runtime Function: unsigned fract __satfractqiuhq (signed char A)
 -- Runtime Function: unsigned long fract __satfractqiusq (signed char
          A)
 -- Runtime Function: unsigned long long fract __satfractqiudq (signed
          char A)
 -- Runtime Function: unsigned short accum __satfractqiuha (signed char
          A)
 -- Runtime Function: unsigned accum __satfractqiusa (signed char A)
 -- Runtime Function: unsigned long accum __satfractqiuda (signed char
          A)
 -- Runtime Function: unsigned long long accum __satfractqiuta (signed
          char A)
 -- Runtime Function: short fract __satfracthiqq (short A)
 -- Runtime Function: fract __satfracthihq (short A)
 -- Runtime Function: long fract __satfracthisq (short A)
 -- Runtime Function: long long fract __satfracthidq (short A)
 -- Runtime Function: short accum __satfracthiha (short A)
 -- Runtime Function: accum __satfracthisa (short A)
 -- Runtime Function: long accum __satfracthida (short A)
 -- Runtime Function: long long accum __satfracthita (short A)
 -- Runtime Function: unsigned short fract __satfracthiuqq (short A)
 -- Runtime Function: unsigned fract __satfracthiuhq (short A)
 -- Runtime Function: unsigned long fract __satfracthiusq (short A)
 -- Runtime Function: unsigned long long fract __satfracthiudq (short A)
 -- Runtime Function: unsigned short accum __satfracthiuha (short A)
 -- Runtime Function: unsigned accum __satfracthiusa (short A)
 -- Runtime Function: unsigned long accum __satfracthiuda (short A)
 -- Runtime Function: unsigned long long accum __satfracthiuta (short A)
 -- Runtime Function: short fract __satfractsiqq (int A)
 -- Runtime Function: fract __satfractsihq (int A)
 -- Runtime Function: long fract __satfractsisq (int A)
 -- Runtime Function: long long fract __satfractsidq (int A)
 -- Runtime Function: short accum __satfractsiha (int A)
 -- Runtime Function: accum __satfractsisa (int A)
 -- Runtime Function: long accum __satfractsida (int A)
 -- Runtime Function: long long accum __satfractsita (int A)
 -- Runtime Function: unsigned short fract __satfractsiuqq (int A)
 -- Runtime Function: unsigned fract __satfractsiuhq (int A)
 -- Runtime Function: unsigned long fract __satfractsiusq (int A)
 -- Runtime Function: unsigned long long fract __satfractsiudq (int A)
 -- Runtime Function: unsigned short accum __satfractsiuha (int A)
 -- Runtime Function: unsigned accum __satfractsiusa (int A)
 -- Runtime Function: unsigned long accum __satfractsiuda (int A)
 -- Runtime Function: unsigned long long accum __satfractsiuta (int A)
 -- Runtime Function: short fract __satfractdiqq (long A)
 -- Runtime Function: fract __satfractdihq (long A)
 -- Runtime Function: long fract __satfractdisq (long A)
 -- Runtime Function: long long fract __satfractdidq (long A)
 -- Runtime Function: short accum __satfractdiha (long A)
 -- Runtime Function: accum __satfractdisa (long A)
 -- Runtime Function: long accum __satfractdida (long A)
 -- Runtime Function: long long accum __satfractdita (long A)
 -- Runtime Function: unsigned short fract __satfractdiuqq (long A)
 -- Runtime Function: unsigned fract __satfractdiuhq (long A)
 -- Runtime Function: unsigned long fract __satfractdiusq (long A)
 -- Runtime Function: unsigned long long fract __satfractdiudq (long A)
 -- Runtime Function: unsigned short accum __satfractdiuha (long A)
 -- Runtime Function: unsigned accum __satfractdiusa (long A)
 -- Runtime Function: unsigned long accum __satfractdiuda (long A)
 -- Runtime Function: unsigned long long accum __satfractdiuta (long A)
 -- Runtime Function: short fract __satfracttiqq (long long A)
 -- Runtime Function: fract __satfracttihq (long long A)
 -- Runtime Function: long fract __satfracttisq (long long A)
 -- Runtime Function: long long fract __satfracttidq (long long A)
 -- Runtime Function: short accum __satfracttiha (long long A)
 -- Runtime Function: accum __satfracttisa (long long A)
 -- Runtime Function: long accum __satfracttida (long long A)
 -- Runtime Function: long long accum __satfracttita (long long A)
 -- Runtime Function: unsigned short fract __satfracttiuqq (long long A)
 -- Runtime Function: unsigned fract __satfracttiuhq (long long A)
 -- Runtime Function: unsigned long fract __satfracttiusq (long long A)
 -- Runtime Function: unsigned long long fract __satfracttiudq (long
          long A)
 -- Runtime Function: unsigned short accum __satfracttiuha (long long A)
 -- Runtime Function: unsigned accum __satfracttiusa (long long A)
 -- Runtime Function: unsigned long accum __satfracttiuda (long long A)
 -- Runtime Function: unsigned long long accum __satfracttiuta (long
          long A)
 -- Runtime Function: short fract __satfractsfqq (float A)
 -- Runtime Function: fract __satfractsfhq (float A)
 -- Runtime Function: long fract __satfractsfsq (float A)
 -- Runtime Function: long long fract __satfractsfdq (float A)
 -- Runtime Function: short accum __satfractsfha (float A)
 -- Runtime Function: accum __satfractsfsa (float A)
 -- Runtime Function: long accum __satfractsfda (float A)
 -- Runtime Function: long long accum __satfractsfta (float A)
 -- Runtime Function: unsigned short fract __satfractsfuqq (float A)
 -- Runtime Function: unsigned fract __satfractsfuhq (float A)
 -- Runtime Function: unsigned long fract __satfractsfusq (float A)
 -- Runtime Function: unsigned long long fract __satfractsfudq (float A)
 -- Runtime Function: unsigned short accum __satfractsfuha (float A)
 -- Runtime Function: unsigned accum __satfractsfusa (float A)
 -- Runtime Function: unsigned long accum __satfractsfuda (float A)
 -- Runtime Function: unsigned long long accum __satfractsfuta (float A)
 -- Runtime Function: short fract __satfractdfqq (double A)
 -- Runtime Function: fract __satfractdfhq (double A)
 -- Runtime Function: long fract __satfractdfsq (double A)
 -- Runtime Function: long long fract __satfractdfdq (double A)
 -- Runtime Function: short accum __satfractdfha (double A)
 -- Runtime Function: accum __satfractdfsa (double A)
 -- Runtime Function: long accum __satfractdfda (double A)
 -- Runtime Function: long long accum __satfractdfta (double A)
 -- Runtime Function: unsigned short fract __satfractdfuqq (double A)
 -- Runtime Function: unsigned fract __satfractdfuhq (double A)
 -- Runtime Function: unsigned long fract __satfractdfusq (double A)
 -- Runtime Function: unsigned long long fract __satfractdfudq (double
          A)
 -- Runtime Function: unsigned short accum __satfractdfuha (double A)
 -- Runtime Function: unsigned accum __satfractdfusa (double A)
 -- Runtime Function: unsigned long accum __satfractdfuda (double A)
 -- Runtime Function: unsigned long long accum __satfractdfuta (double
          A)
     The functions convert from fractional and signed non-fractionals to
     fractionals, with saturation.

 -- Runtime Function: unsigned char __fractunsqqqi (short fract A)
 -- Runtime Function: unsigned short __fractunsqqhi (short fract A)
 -- Runtime Function: unsigned int __fractunsqqsi (short fract A)
 -- Runtime Function: unsigned long __fractunsqqdi (short fract A)
 -- Runtime Function: unsigned long long __fractunsqqti (short fract A)
 -- Runtime Function: unsigned char __fractunshqqi (fract A)
 -- Runtime Function: unsigned short __fractunshqhi (fract A)
 -- Runtime Function: unsigned int __fractunshqsi (fract A)
 -- Runtime Function: unsigned long __fractunshqdi (fract A)
 -- Runtime Function: unsigned long long __fractunshqti (fract A)
 -- Runtime Function: unsigned char __fractunssqqi (long fract A)
 -- Runtime Function: unsigned short __fractunssqhi (long fract A)
 -- Runtime Function: unsigned int __fractunssqsi (long fract A)
 -- Runtime Function: unsigned long __fractunssqdi (long fract A)
 -- Runtime Function: unsigned long long __fractunssqti (long fract A)
 -- Runtime Function: unsigned char __fractunsdqqi (long long fract A)
 -- Runtime Function: unsigned short __fractunsdqhi (long long fract A)
 -- Runtime Function: unsigned int __fractunsdqsi (long long fract A)
 -- Runtime Function: unsigned long __fractunsdqdi (long long fract A)
 -- Runtime Function: unsigned long long __fractunsdqti (long long fract
          A)
 -- Runtime Function: unsigned char __fractunshaqi (short accum A)
 -- Runtime Function: unsigned short __fractunshahi (short accum A)
 -- Runtime Function: unsigned int __fractunshasi (short accum A)
 -- Runtime Function: unsigned long __fractunshadi (short accum A)
 -- Runtime Function: unsigned long long __fractunshati (short accum A)
 -- Runtime Function: unsigned char __fractunssaqi (accum A)
 -- Runtime Function: unsigned short __fractunssahi (accum A)
 -- Runtime Function: unsigned int __fractunssasi (accum A)
 -- Runtime Function: unsigned long __fractunssadi (accum A)
 -- Runtime Function: unsigned long long __fractunssati (accum A)
 -- Runtime Function: unsigned char __fractunsdaqi (long accum A)
 -- Runtime Function: unsigned short __fractunsdahi (long accum A)
 -- Runtime Function: unsigned int __fractunsdasi (long accum A)
 -- Runtime Function: unsigned long __fractunsdadi (long accum A)
 -- Runtime Function: unsigned long long __fractunsdati (long accum A)
 -- Runtime Function: unsigned char __fractunstaqi (long long accum A)
 -- Runtime Function: unsigned short __fractunstahi (long long accum A)
 -- Runtime Function: unsigned int __fractunstasi (long long accum A)
 -- Runtime Function: unsigned long __fractunstadi (long long accum A)
 -- Runtime Function: unsigned long long __fractunstati (long long accum
          A)
 -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short
          fract A)
 -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short
          fract A)
 -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short fract
          A)
 -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short
          fract A)
 -- Runtime Function: unsigned long long __fractunsuqqti (unsigned short
          fract A)
 -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A)
 -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A)
 -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A)
 -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A)
 -- Runtime Function: unsigned long long __fractunsuhqti (unsigned fract
          A)
 -- Runtime Function: unsigned char __fractunsusqqi (unsigned long fract
          A)
 -- Runtime Function: unsigned short __fractunsusqhi (unsigned long
          fract A)
 -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract
          A)
 -- Runtime Function: unsigned long __fractunsusqdi (unsigned long fract
          A)
 -- Runtime Function: unsigned long long __fractunsusqti (unsigned long
          fract A)
 -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long
          fract A)
 -- Runtime Function: unsigned short __fractunsudqhi (unsigned long long
          fract A)
 -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long
          fract A)
 -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long
          fract A)
 -- Runtime Function: unsigned long long __fractunsudqti (unsigned long
          long fract A)
 -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short
          accum A)
 -- Runtime Function: unsigned short __fractunsuhahi (unsigned short
          accum A)
 -- Runtime Function: unsigned int __fractunsuhasi (unsigned short accum
          A)
 -- Runtime Function: unsigned long __fractunsuhadi (unsigned short
          accum A)
 -- Runtime Function: unsigned long long __fractunsuhati (unsigned short
          accum A)
 -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A)
 -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A)
 -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A)
 -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A)
 -- Runtime Function: unsigned long long __fractunsusati (unsigned accum
          A)
 -- Runtime Function: unsigned char __fractunsudaqi (unsigned long accum
          A)
 -- Runtime Function: unsigned short __fractunsudahi (unsigned long
          accum A)
 -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum
          A)
 -- Runtime Function: unsigned long __fractunsudadi (unsigned long accum
          A)
 -- Runtime Function: unsigned long long __fractunsudati (unsigned long
          accum A)
 -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long
          accum A)
 -- Runtime Function: unsigned short __fractunsutahi (unsigned long long
          accum A)
 -- Runtime Function: unsigned int __fractunsutasi (unsigned long long
          accum A)
 -- Runtime Function: unsigned long __fractunsutadi (unsigned long long
          accum A)
 -- Runtime Function: unsigned long long __fractunsutati (unsigned long
          long accum A)
 -- Runtime Function: short fract __fractunsqiqq (unsigned char A)
 -- Runtime Function: fract __fractunsqihq (unsigned char A)
 -- Runtime Function: long fract __fractunsqisq (unsigned char A)
 -- Runtime Function: long long fract __fractunsqidq (unsigned char A)
 -- Runtime Function: short accum __fractunsqiha (unsigned char A)
 -- Runtime Function: accum __fractunsqisa (unsigned char A)
 -- Runtime Function: long accum __fractunsqida (unsigned char A)
 -- Runtime Function: long long accum __fractunsqita (unsigned char A)
 -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned
          char A)
 -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A)
 -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned char
          A)
 -- Runtime Function: unsigned long long fract __fractunsqiudq (unsigned
          char A)
 -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned
          char A)
 -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A)
 -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned char
          A)
 -- Runtime Function: unsigned long long accum __fractunsqiuta (unsigned
          char A)
 -- Runtime Function: short fract __fractunshiqq (unsigned short A)
 -- Runtime Function: fract __fractunshihq (unsigned short A)
 -- Runtime Function: long fract __fractunshisq (unsigned short A)
 -- Runtime Function: long long fract __fractunshidq (unsigned short A)
 -- Runtime Function: short accum __fractunshiha (unsigned short A)
 -- Runtime Function: accum __fractunshisa (unsigned short A)
 -- Runtime Function: long accum __fractunshida (unsigned short A)
 -- Runtime Function: long long accum __fractunshita (unsigned short A)
 -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned
          short A)
 -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A)
 -- Runtime Function: unsigned long fract __fractunshiusq (unsigned
          short A)
 -- Runtime Function: unsigned long long fract __fractunshiudq (unsigned
          short A)
 -- Runtime Function: unsigned short accum __fractunshiuha (unsigned
          short A)
 -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A)
 -- Runtime Function: unsigned long accum __fractunshiuda (unsigned
          short A)
 -- Runtime Function: unsigned long long accum __fractunshiuta (unsigned
          short A)
 -- Runtime Function: short fract __fractunssiqq (unsigned int A)
 -- Runtime Function: fract __fractunssihq (unsigned int A)
 -- Runtime Function: long fract __fractunssisq (unsigned int A)
 -- Runtime Function: long long fract __fractunssidq (unsigned int A)
 -- Runtime Function: short accum __fractunssiha (unsigned int A)
 -- Runtime Function: accum __fractunssisa (unsigned int A)
 -- Runtime Function: long accum __fractunssida (unsigned int A)
 -- Runtime Function: long long accum __fractunssita (unsigned int A)
 -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned int
          A)
 -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A)
 -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int
          A)
 -- Runtime Function: unsigned long long fract __fractunssiudq (unsigned
          int A)
 -- Runtime Function: unsigned short accum __fractunssiuha (unsigned int
          A)
 -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A)
 -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int
          A)
 -- Runtime Function: unsigned long long accum __fractunssiuta (unsigned
          int A)
 -- Runtime Function: short fract __fractunsdiqq (unsigned long A)
 -- Runtime Function: fract __fractunsdihq (unsigned long A)
 -- Runtime Function: long fract __fractunsdisq (unsigned long A)
 -- Runtime Function: long long fract __fractunsdidq (unsigned long A)
 -- Runtime Function: short accum __fractunsdiha (unsigned long A)
 -- Runtime Function: accum __fractunsdisa (unsigned long A)
 -- Runtime Function: long accum __fractunsdida (unsigned long A)
 -- Runtime Function: long long accum __fractunsdita (unsigned long A)
 -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned
          long A)
 -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A)
 -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned long
          A)
 -- Runtime Function: unsigned long long fract __fractunsdiudq (unsigned
          long A)
 -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned
          long A)
 -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A)
 -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned long
          A)
 -- Runtime Function: unsigned long long accum __fractunsdiuta (unsigned
          long A)
 -- Runtime Function: short fract __fractunstiqq (unsigned long long A)
 -- Runtime Function: fract __fractunstihq (unsigned long long A)
 -- Runtime Function: long fract __fractunstisq (unsigned long long A)
 -- Runtime Function: long long fract __fractunstidq (unsigned long long
          A)
 -- Runtime Function: short accum __fractunstiha (unsigned long long A)
 -- Runtime Function: accum __fractunstisa (unsigned long long A)
 -- Runtime Function: long accum __fractunstida (unsigned long long A)
 -- Runtime Function: long long accum __fractunstita (unsigned long long
          A)
 -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned
          long long A)
 -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long long
          A)
 -- Runtime Function: unsigned long fract __fractunstiusq (unsigned long
          long A)
 -- Runtime Function: unsigned long long fract __fractunstiudq (unsigned
          long long A)
 -- Runtime Function: unsigned short accum __fractunstiuha (unsigned
          long long A)
 -- Runtime Function: unsigned accum __fractunstiusa (unsigned long long
          A)
 -- Runtime Function: unsigned long accum __fractunstiuda (unsigned long
          long A)
 -- Runtime Function: unsigned long long accum __fractunstiuta (unsigned
          long long A)
     These functions convert from fractionals to unsigned
     non-fractionals; and from unsigned non-fractionals to fractionals,
     without saturation.

 -- Runtime Function: short fract __satfractunsqiqq (unsigned char A)
 -- Runtime Function: fract __satfractunsqihq (unsigned char A)
 -- Runtime Function: long fract __satfractunsqisq (unsigned char A)
 -- Runtime Function: long long fract __satfractunsqidq (unsigned char
          A)
 -- Runtime Function: short accum __satfractunsqiha (unsigned char A)
 -- Runtime Function: accum __satfractunsqisa (unsigned char A)
 -- Runtime Function: long accum __satfractunsqida (unsigned char A)
 -- Runtime Function: long long accum __satfractunsqita (unsigned char
          A)
 -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned
          char A)
 -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char
          A)
 -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned
          char A)
 -- Runtime Function: unsigned long long fract __satfractunsqiudq
          (unsigned char A)
 -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned
          char A)
 -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char
          A)
 -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned
          char A)
 -- Runtime Function: unsigned long long accum __satfractunsqiuta
          (unsigned char A)
 -- Runtime Function: short fract __satfractunshiqq (unsigned short A)
 -- Runtime Function: fract __satfractunshihq (unsigned short A)
 -- Runtime Function: long fract __satfractunshisq (unsigned short A)
 -- Runtime Function: long long fract __satfractunshidq (unsigned short
          A)
 -- Runtime Function: short accum __satfractunshiha (unsigned short A)
 -- Runtime Function: accum __satfractunshisa (unsigned short A)
 -- Runtime Function: long accum __satfractunshida (unsigned short A)
 -- Runtime Function: long long accum __satfractunshita (unsigned short
          A)
 -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned
          short A)
 -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short
          A)
 -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned
          short A)
 -- Runtime Function: unsigned long long fract __satfractunshiudq
          (unsigned short A)
 -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned
          short A)
 -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short
          A)
 -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned
          short A)
 -- Runtime Function: unsigned long long accum __satfractunshiuta
          (unsigned short A)
 -- Runtime Function: short fract __satfractunssiqq (unsigned int A)
 -- Runtime Function: fract __satfractunssihq (unsigned int A)
 -- Runtime Function: long fract __satfractunssisq (unsigned int A)
 -- Runtime Function: long long fract __satfractunssidq (unsigned int A)
 -- Runtime Function: short accum __satfractunssiha (unsigned int A)
 -- Runtime Function: accum __satfractunssisa (unsigned int A)
 -- Runtime Function: long accum __satfractunssida (unsigned int A)
 -- Runtime Function: long long accum __satfractunssita (unsigned int A)
 -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned
          int A)
 -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A)
 -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned
          int A)
 -- Runtime Function: unsigned long long fract __satfractunssiudq
          (unsigned int A)
 -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned
          int A)
 -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A)
 -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned
          int A)
 -- Runtime Function: unsigned long long accum __satfractunssiuta
          (unsigned int A)
 -- Runtime Function: short fract __satfractunsdiqq (unsigned long A)
 -- Runtime Function: fract __satfractunsdihq (unsigned long A)
 -- Runtime Function: long fract __satfractunsdisq (unsigned long A)
 -- Runtime Function: long long fract __satfractunsdidq (unsigned long
          A)
 -- Runtime Function: short accum __satfractunsdiha (unsigned long A)
 -- Runtime Function: accum __satfractunsdisa (unsigned long A)
 -- Runtime Function: long accum __satfractunsdida (unsigned long A)
 -- Runtime Function: long long accum __satfractunsdita (unsigned long
          A)
 -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned
          long A)
 -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long
          A)
 -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned
          long A)
 -- Runtime Function: unsigned long long fract __satfractunsdiudq
          (unsigned long A)
 -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned
          long A)
 -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long
          A)
 -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned
          long A)
 -- Runtime Function: unsigned long long accum __satfractunsdiuta
          (unsigned long A)
 -- Runtime Function: short fract __satfractunstiqq (unsigned long long
          A)
 -- Runtime Function: fract __satfractunstihq (unsigned long long A)
 -- Runtime Function: long fract __satfractunstisq (unsigned long long
          A)
 -- Runtime Function: long long fract __satfractunstidq (unsigned long
          long A)
 -- Runtime Function: short accum __satfractunstiha (unsigned long long
          A)
 -- Runtime Function: accum __satfractunstisa (unsigned long long A)
 -- Runtime Function: long accum __satfractunstida (unsigned long long
          A)
 -- Runtime Function: long long accum __satfractunstita (unsigned long
          long A)
 -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned
          long long A)
 -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long
          long A)
 -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned
          long long A)
 -- Runtime Function: unsigned long long fract __satfractunstiudq
          (unsigned long long A)
 -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned
          long long A)
 -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long
          long A)
 -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned
          long long A)
 -- Runtime Function: unsigned long long accum __satfractunstiuta
          (unsigned long long A)
     These functions convert from unsigned non-fractionals to
     fractionals, with saturation.


File: gccint.info,  Node: Exception handling routines,  Next: Miscellaneous routines,  Prev: Fixed-point fractional library routines,  Up: Libgcc

4.5 Language-independent routines for exception handling
========================================================

document me!

       _Unwind_DeleteException
       _Unwind_Find_FDE
       _Unwind_ForcedUnwind
       _Unwind_GetGR
       _Unwind_GetIP
       _Unwind_GetLanguageSpecificData
       _Unwind_GetRegionStart
       _Unwind_GetTextRelBase
       _Unwind_GetDataRelBase
       _Unwind_RaiseException
       _Unwind_Resume
       _Unwind_SetGR
       _Unwind_SetIP
       _Unwind_FindEnclosingFunction
       _Unwind_SjLj_Register
       _Unwind_SjLj_Unregister
       _Unwind_SjLj_RaiseException
       _Unwind_SjLj_ForcedUnwind
       _Unwind_SjLj_Resume
       __deregister_frame
       __deregister_frame_info
       __deregister_frame_info_bases
       __register_frame
       __register_frame_info
       __register_frame_info_bases
       __register_frame_info_table
       __register_frame_info_table_bases
       __register_frame_table


File: gccint.info,  Node: Miscellaneous routines,  Prev: Exception handling routines,  Up: Libgcc

4.6 Miscellaneous runtime library routines
==========================================

4.6.1 Cache control functions
-----------------------------

 -- Runtime Function: void __clear_cache (char *BEG, char *END)
     This function clears the instruction cache between BEG and END.

4.6.2 Split stack functions and variables
-----------------------------------------

 -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void
          *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void
          **INITIAL_SP)
     When using '-fsplit-stack', this call may be used to iterate over
     the stack segments.  It may be called like this:
            void *next_segment = NULL;
            void *next_sp = NULL;
            void *initial_sp = NULL;
            void *stack;
            size_t stack_size;
            while ((stack = __splitstack_find (next_segment, next_sp,
                                               &stack_size, &next_segment,
                                               &next_sp, &initial_sp))
                   != NULL)
              {
                /* Stack segment starts at stack and is
                   stack_size bytes long.  */
              }

     There is no way to iterate over the stack segments of a different
     thread.  However, what is permitted is for one thread to call this
     with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT,
     NEXT_SP, and INITIAL_SP to a different thread, and then to suspend
     one way or another.  A different thread may run the subsequent
     '__splitstack_find' iterations.  Of course, this will only work if
     the first thread is suspended while the second thread is calling
     '__splitstack_find'.  If not, the second thread could be looking at
     the stack while it is changing, and anything could happen.

 -- Variable: __morestack_segments
 -- Variable: __morestack_current_segment
 -- Variable: __morestack_initial_sp
     Internal variables used by the '-fsplit-stack' implementation.


File: gccint.info,  Node: Languages,  Next: Source Tree,  Prev: Libgcc,  Up: Top

5 Language Front Ends in GCC
****************************

The interface to front ends for languages in GCC, and in particular the
'tree' structure (*note GENERIC::), was initially designed for C, and
many aspects of it are still somewhat biased towards C and C-like
languages.  It is, however, reasonably well suited to other procedural
languages, and front ends for many such languages have been written for
GCC.

 Writing a compiler as a front end for GCC, rather than compiling
directly to assembler or generating C code which is then compiled by
GCC, has several advantages:

   * GCC front ends benefit from the support for many different target
     machines already present in GCC.
   * GCC front ends benefit from all the optimizations in GCC.  Some of
     these, such as alias analysis, may work better when GCC is
     compiling directly from source code then when it is compiling from
     generated C code.
   * Better debugging information is generated when compiling directly
     from source code than when going via intermediate generated C code.

 Because of the advantages of writing a compiler as a GCC front end, GCC
front ends have also been created for languages very different from
those for which GCC was designed, such as the declarative
logic/functional language Mercury.  For these reasons, it may also be
useful to implement compilers created for specialized purposes (for
example, as part of a research project) as GCC front ends.


File: gccint.info,  Node: Source Tree,  Next: Testsuites,  Prev: Languages,  Up: Top

6 Source Tree Structure and Build System
****************************************

This chapter describes the structure of the GCC source tree, and how GCC
is built.  The user documentation for building and installing GCC is in
a separate manual (<http://gcc.gnu.org/install/>), with which it is
presumed that you are familiar.

* Menu:

* Configure Terms:: Configuration terminology and history.
* Top Level::       The top level source directory.
* gcc Directory::   The 'gcc' subdirectory.


File: gccint.info,  Node: Configure Terms,  Next: Top Level,  Up: Source Tree

6.1 Configure Terms and History
===============================

The configure and build process has a long and colorful history, and can
be confusing to anyone who doesn't know why things are the way they are.
While there are other documents which describe the configuration process
in detail, here are a few things that everyone working on GCC should
know.

 There are three system names that the build knows about: the machine
you are building on ("build"), the machine that you are building for
("host"), and the machine that GCC will produce code for ("target").
When you configure GCC, you specify these with '--build=', '--host=',
and '--target='.

 Specifying the host without specifying the build should be avoided, as
'configure' may (and once did) assume that the host you specify is also
the build, which may not be true.

 If build, host, and target are all the same, this is called a "native".
If build and host are the same but target is different, this is called a
"cross".  If build, host, and target are all different this is called a
"canadian" (for obscure reasons dealing with Canada's political party
and the background of the person working on the build at that time).  If
host and target are the same, but build is different, you are using a
cross-compiler to build a native for a different system.  Some people
call this a "host-x-host", "crossed native", or "cross-built native".
If build and target are the same, but host is different, you are using a
cross compiler to build a cross compiler that produces code for the
machine you're building on.  This is rare, so there is no common way of
describing it.  There is a proposal to call this a "crossback".

 If build and host are the same, the GCC you are building will also be
used to build the target libraries (like 'libstdc++').  If build and
host are different, you must have already built and installed a cross
compiler that will be used to build the target libraries (if you
configured with '--target=foo-bar', this compiler will be called
'foo-bar-gcc').

 In the case of target libraries, the machine you're building for is the
machine you specified with '--target'.  So, build is the machine you're
building on (no change there), host is the machine you're building for
(the target libraries are built for the target, so host is the target
you specified), and target doesn't apply (because you're not building a
compiler, you're building libraries).  The configure/make process will
adjust these variables as needed.  It also sets '$with_cross_host' to
the original '--host' value in case you need it.

 The 'libiberty' support library is built up to three times: once for
the host, once for the target (even if they are the same), and once for
the build if build and host are different.  This allows it to be used by
all programs which are generated in the course of the build process.


File: gccint.info,  Node: Top Level,  Next: gcc Directory,  Prev: Configure Terms,  Up: Source Tree

6.2 Top Level Source Directory
==============================

The top level source directory in a GCC distribution contains several
files and directories that are shared with other software distributions
such as that of GNU Binutils.  It also contains several subdirectories
that contain parts of GCC and its runtime libraries:

'boehm-gc'
     The Boehm conservative garbage collector, used as part of the Java
     runtime library.

'config'
     Autoconf macros and Makefile fragments used throughout the tree.

'contrib'
     Contributed scripts that may be found useful in conjunction with
     GCC.  One of these, 'contrib/texi2pod.pl', is used to generate man
     pages from Texinfo manuals as part of the GCC build process.

'fixincludes'
     The support for fixing system headers to work with GCC.  See
     'fixincludes/README' for more information.  The headers fixed by
     this mechanism are installed in 'LIBSUBDIR/include-fixed'.  Along
     with those headers, 'README-fixinc' is also installed, as
     'LIBSUBDIR/include-fixed/README'.

'gcc'
     The main sources of GCC itself (except for runtime libraries),
     including optimizers, support for different target architectures,
     language front ends, and testsuites.  *Note The 'gcc' Subdirectory:
     gcc Directory, for details.

'gnattools'
     Support tools for GNAT.

'include'
     Headers for the 'libiberty' library.

'intl'
     GNU 'libintl', from GNU 'gettext', for systems which do not include
     it in 'libc'.

'libada'
     The Ada runtime library.

'libatomic'
     The runtime support library for atomic operations (e.g.  for
     '__sync' and '__atomic').

'libcpp'
     The C preprocessor library.

'libdecnumber'
     The Decimal Float support library.

'libffi'
     The 'libffi' library, used as part of the Java runtime library.

'libgcc'
     The GCC runtime library.

'libgfortran'
     The Fortran runtime library.

'libgo'
     The Go runtime library.  The bulk of this library is mirrored from
     the master Go repository (http://code.google.com/p/go/).

'libgomp'
     The GNU Offloading and Multi Processing Runtime Library.

'libiberty'
     The 'libiberty' library, used for portability and for some
     generally useful data structures and algorithms.  *Note
     Introduction: (libiberty)Top, for more information about this
     library.

'libitm'
     The runtime support library for transactional memory.

'libjava'
     The Java runtime library.

'libobjc'
     The Objective-C and Objective-C++ runtime library.

'libquadmath'
     The runtime support library for quad-precision math operations.

'libssp'
     The Stack protector runtime library.

'libstdc++-v3'
     The C++ runtime library.

'lto-plugin'
     Plugin used by the linker if link-time optimizations are enabled.

'maintainer-scripts'
     Scripts used by the 'gccadmin' account on 'gcc.gnu.org'.

'zlib'
     The 'zlib' compression library, used by the Java front end, as part
     of the Java runtime library, and for compressing and uncompressing
     GCC's intermediate language in LTO object files.

 The build system in the top level directory, including how recursion
into subdirectories works and how building runtime libraries for
multilibs is handled, is documented in a separate manual, included with
GNU Binutils.  *Note GNU configure and build system: (configure)Top, for
details.


File: gccint.info,  Node: gcc Directory,  Prev: Top Level,  Up: Source Tree

6.3 The 'gcc' Subdirectory
==========================

The 'gcc' directory contains many files that are part of the C sources
of GCC, other files used as part of the configuration and build process,
and subdirectories including documentation and a testsuite.  The files
that are sources of GCC are documented in a separate chapter.  *Note
Passes and Files of the Compiler: Passes.

* Menu:

* Subdirectories:: Subdirectories of 'gcc'.
* Configuration::  The configuration process, and the files it uses.
* Build::          The build system in the 'gcc' directory.
* Makefile::       Targets in 'gcc/Makefile'.
* Library Files::  Library source files and headers under 'gcc/'.
* Headers::        Headers installed by GCC.
* Documentation::  Building documentation in GCC.
* Front End::      Anatomy of a language front end.
* Back End::       Anatomy of a target back end.


File: gccint.info,  Node: Subdirectories,  Next: Configuration,  Up: gcc Directory

6.3.1 Subdirectories of 'gcc'
-----------------------------

The 'gcc' directory contains the following subdirectories:

'LANGUAGE'
     Subdirectories for various languages.  Directories containing a
     file 'config-lang.in' are language subdirectories.  The contents of
     the subdirectories 'c' (for C), 'cp' (for C++), 'objc' (for
     Objective-C), 'objcp' (for Objective-C++), and 'lto' (for LTO) are
     documented in this manual (*note Passes and Files of the Compiler:
     Passes.); those for other languages are not.  *Note Anatomy of a
     Language Front End: Front End, for details of the files in these
     directories.

'common'
     Source files shared between the compiler drivers (such as 'gcc')
     and the compilers proper (such as 'cc1').  If an architecture
     defines target hooks shared between those places, it also has a
     subdirectory in 'common/config'.  *Note Target Structure::.

'config'
     Configuration files for supported architectures and operating
     systems.  *Note Anatomy of a Target Back End: Back End, for details
     of the files in this directory.

'doc'
     Texinfo documentation for GCC, together with automatically
     generated man pages and support for converting the installation
     manual to HTML.  *Note Documentation::.

'ginclude'
     System headers installed by GCC, mainly those required by the C
     standard of freestanding implementations.  *Note Headers Installed
     by GCC: Headers, for details of when these and other headers are
     installed.

'po'
     Message catalogs with translations of messages produced by GCC into
     various languages, 'LANGUAGE.po'.  This directory also contains
     'gcc.pot', the template for these message catalogues, 'exgettext',
     a wrapper around 'gettext' to extract the messages from the GCC
     sources and create 'gcc.pot', which is run by 'make gcc.pot', and
     'EXCLUDES', a list of files from which messages should not be
     extracted.

'testsuite'
     The GCC testsuites (except for those for runtime libraries).  *Note
     Testsuites::.


File: gccint.info,  Node: Configuration,  Next: Build,  Prev: Subdirectories,  Up: gcc Directory

6.3.2 Configuration in the 'gcc' Directory
------------------------------------------

The 'gcc' directory is configured with an Autoconf-generated script
'configure'.  The 'configure' script is generated from 'configure.ac'
and 'aclocal.m4'.  From the files 'configure.ac' and 'acconfig.h',
Autoheader generates the file 'config.in'.  The file 'cstamp-h.in' is
used as a timestamp.

* Menu:

* Config Fragments::     Scripts used by 'configure'.
* System Config::        The 'config.build', 'config.host', and
                         'config.gcc' files.
* Configuration Files::  Files created by running 'configure'.


File: gccint.info,  Node: Config Fragments,  Next: System Config,  Up: Configuration

6.3.2.1 Scripts Used by 'configure'
...................................

'configure' uses some other scripts to help in its work:

   * The standard GNU 'config.sub' and 'config.guess' files, kept in the
     top level directory, are used.

   * The file 'config.gcc' is used to handle configuration specific to
     the particular target machine.  The file 'config.build' is used to
     handle configuration specific to the particular build machine.  The
     file 'config.host' is used to handle configuration specific to the
     particular host machine.  (In general, these should only be used
     for features that cannot reasonably be tested in Autoconf feature
     tests.)  *Note The 'config.build'; 'config.host'; and 'config.gcc'
     Files: System Config, for details of the contents of these files.

   * Each language subdirectory has a file 'LANGUAGE/config-lang.in'
     that is used for front-end-specific configuration.  *Note The Front
     End 'config-lang.in' File: Front End Config, for details of this
     file.

   * A helper script 'configure.frag' is used as part of creating the
     output of 'configure'.


File: gccint.info,  Node: System Config,  Next: Configuration Files,  Prev: Config Fragments,  Up: Configuration

6.3.2.2 The 'config.build'; 'config.host'; and 'config.gcc' Files
.................................................................

The 'config.build' file contains specific rules for particular systems
which GCC is built on.  This should be used as rarely as possible, as
the behavior of the build system can always be detected by autoconf.

 The 'config.host' file contains specific rules for particular systems
which GCC will run on.  This is rarely needed.

 The 'config.gcc' file contains specific rules for particular systems
which GCC will generate code for.  This is usually needed.

 Each file has a list of the shell variables it sets, with descriptions,
at the top of the file.

 FIXME: document the contents of these files, and what variables should
be set to control build, host and target configuration.


File: gccint.info,  Node: Configuration Files,  Prev: System Config,  Up: Configuration

6.3.2.3 Files Created by 'configure'
....................................

Here we spell out what files will be set up by 'configure' in the 'gcc'
directory.  Some other files are created as temporary files in the
configuration process, and are not used in the subsequent build; these
are not documented.

   * 'Makefile' is constructed from 'Makefile.in', together with the
     host and target fragments (*note Makefile Fragments: Fragments.)
     't-TARGET' and 'x-HOST' from 'config', if any, and language
     Makefile fragments 'LANGUAGE/Make-lang.in'.
   * 'auto-host.h' contains information about the host machine
     determined by 'configure'.  If the host machine is different from
     the build machine, then 'auto-build.h' is also created, containing
     such information about the build machine.
   * 'config.status' is a script that may be run to recreate the current
     configuration.
   * 'configargs.h' is a header containing details of the arguments
     passed to 'configure' to configure GCC, and of the thread model
     used.
   * 'cstamp-h' is used as a timestamp.
   * If a language 'config-lang.in' file (*note The Front End
     'config-lang.in' File: Front End Config.) sets 'outputs', then the
     files listed in 'outputs' there are also generated.

 The following configuration headers are created from the Makefile,
using 'mkconfig.sh', rather than directly by 'configure'.  'config.h',
'bconfig.h' and 'tconfig.h' all contain the 'xm-MACHINE.h' header, if
any, appropriate to the host, build and target machines respectively,
the configuration headers for the target, and some definitions; for the
host and build machines, these include the autoconfigured headers
generated by 'configure'.  The other configuration headers are
determined by 'config.gcc'.  They also contain the typedefs for 'rtx',
'rtvec' and 'tree'.

   * 'config.h', for use in programs that run on the host machine.
   * 'bconfig.h', for use in programs that run on the build machine.
   * 'tconfig.h', for use in programs and libraries for the target
     machine.
   * 'tm_p.h', which includes the header 'MACHINE-protos.h' that
     contains prototypes for functions in the target 'MACHINE.c' file.
     The header 'MACHINE-protos.h' can include prototypes of functions
     that use rtl and tree data structures inside appropriate '#ifdef
     RTX_CODE' and '#ifdef TREE_CODE' conditional code segements.  The
     'MACHINE-protos.h' is included after the 'rtl.h' and/or 'tree.h'
     would have been included.  The 'tm_p.h' also includes the header
     'tm-preds.h' which is generated by 'genpreds' program during the
     build to define the declarations and inline functions for the
     predicate functions.


File: gccint.info,  Node: Build,  Next: Makefile,  Prev: Configuration,  Up: gcc Directory

6.3.3 Build System in the 'gcc' Directory
-----------------------------------------

FIXME: describe the build system, including what is built in what
stages.  Also list the various source files that are used in the build
process but aren't source files of GCC itself and so aren't documented
below (*note Passes::).


File: gccint.info,  Node: Makefile,  Next: Library Files,  Prev: Build,  Up: gcc Directory

6.3.4 Makefile Targets
----------------------

These targets are available from the 'gcc' directory:

'all'
     This is the default target.  Depending on what your
     build/host/target configuration is, it coordinates all the things
     that need to be built.

'doc'
     Produce info-formatted documentation and man pages.  Essentially it
     calls 'make man' and 'make info'.

'dvi'
     Produce DVI-formatted documentation.

'pdf'
     Produce PDF-formatted documentation.

'html'
     Produce HTML-formatted documentation.

'man'
     Generate man pages.

'info'
     Generate info-formatted pages.

'mostlyclean'
     Delete the files made while building the compiler.

'clean'
     That, and all the other files built by 'make all'.

'distclean'
     That, and all the files created by 'configure'.

'maintainer-clean'
     Distclean plus any file that can be generated from other files.
     Note that additional tools may be required beyond what is normally
     needed to build GCC.

'srcextra'
     Generates files in the source directory that are not
     version-controlled but should go into a release tarball.

'srcinfo'
'srcman'
     Copies the info-formatted and manpage documentation into the source
     directory usually for the purpose of generating a release tarball.

'install'
     Installs GCC.

'uninstall'
     Deletes installed files, though this is not supported.

'check'
     Run the testsuite.  This creates a 'testsuite' subdirectory that
     has various '.sum' and '.log' files containing the results of the
     testing.  You can run subsets with, for example, 'make check-gcc'.
     You can specify specific tests by setting 'RUNTESTFLAGS' to be the
     name of the '.exp' file, optionally followed by (for some tests) an
     equals and a file wildcard, like:

          make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"

     Note that running the testsuite may require additional tools be
     installed, such as Tcl or DejaGnu.

 The toplevel tree from which you start GCC compilation is not the GCC
directory, but rather a complex Makefile that coordinates the various
steps of the build, including bootstrapping the compiler and using the
new compiler to build target libraries.

 When GCC is configured for a native configuration, the default action
for 'make' is to do a full three-stage bootstrap.  This means that GCC
is built three times--once with the native compiler, once with the
native-built compiler it just built, and once with the compiler it built
the second time.  In theory, the last two should produce the same
results, which 'make compare' can check.  Each stage is configured
separately and compiled into a separate directory, to minimize problems
due to ABI incompatibilities between the native compiler and GCC.

 If you do a change, rebuilding will also start from the first stage and
"bubble" up the change through the three stages.  Each stage is taken
from its build directory (if it had been built previously), rebuilt, and
copied to its subdirectory.  This will allow you to, for example,
continue a bootstrap after fixing a bug which causes the stage2 build to
crash.  It does not provide as good coverage of the compiler as
bootstrapping from scratch, but it ensures that the new code is
syntactically correct (e.g., that you did not use GCC extensions by
mistake), and avoids spurious bootstrap comparison failures(1).

 Other targets available from the top level include:

'bootstrap-lean'
     Like 'bootstrap', except that the various stages are removed once
     they're no longer needed.  This saves disk space.

'bootstrap2'
'bootstrap2-lean'
     Performs only the first two stages of bootstrap.  Unlike a
     three-stage bootstrap, this does not perform a comparison to test
     that the compiler is running properly.  Note that the disk space
     required by a "lean" bootstrap is approximately independent of the
     number of stages.

'stageN-bubble (N = 1...4, profile, feedback)'
     Rebuild all the stages up to N, with the appropriate flags,
     "bubbling" the changes as described above.

'all-stageN (N = 1...4, profile, feedback)'
     Assuming that stage N has already been built, rebuild it with the
     appropriate flags.  This is rarely needed.

'cleanstrap'
     Remove everything ('make clean') and rebuilds ('make bootstrap').

'compare'
     Compares the results of stages 2 and 3.  This ensures that the
     compiler is running properly, since it should produce the same
     object files regardless of how it itself was compiled.

'profiledbootstrap'
     Builds a compiler with profiling feedback information.  In this
     case, the second and third stages are named 'profile' and
     'feedback', respectively.  For more information, see *note Building
     with profile feedback: (gccinstall)Building.

'restrap'
     Restart a bootstrap, so that everything that was not built with the
     system compiler is rebuilt.

'stageN-start (N = 1...4, profile, feedback)'
     For each package that is bootstrapped, rename directories so that,
     for example, 'gcc' points to the stageN GCC, compiled with the
     stageN-1 GCC(2).

     You will invoke this target if you need to test or debug the stageN
     GCC.  If you only need to execute GCC (but you need not run 'make'
     either to rebuild it or to run test suites), you should be able to
     work directly in the 'stageN-gcc' directory.  This makes it easier
     to debug multiple stages in parallel.

'stage'
     For each package that is bootstrapped, relocate its build directory
     to indicate its stage.  For example, if the 'gcc' directory points
     to the stage2 GCC, after invoking this target it will be renamed to
     'stage2-gcc'.

 If you wish to use non-default GCC flags when compiling the stage2 and
stage3 compilers, set 'BOOT_CFLAGS' on the command line when doing
'make'.

 Usually, the first stage only builds the languages that the compiler is
written in: typically, C and maybe Ada.  If you are debugging a
miscompilation of a different stage2 front-end (for example, of the
Fortran front-end), you may want to have front-ends for other languages
in the first stage as well.  To do so, set 'STAGE1_LANGUAGES' on the
command line when doing 'make'.

 For example, in the aforementioned scenario of debugging a Fortran
front-end miscompilation caused by the stage1 compiler, you may need a
command like

     make stage2-bubble STAGE1_LANGUAGES=c,fortran

 Alternatively, you can use per-language targets to build and test
languages that are not enabled by default in stage1.  For example, 'make
f951' will build a Fortran compiler even in the stage1 build directory.

   ---------- Footnotes ----------

   (1) Except if the compiler was buggy and miscompiled some of the
files that were not modified.  In this case, it's best to use 'make
restrap'.

   (2) Customarily, the system compiler is also termed the 'stage0' GCC.


File: gccint.info,  Node: Library Files,  Next: Headers,  Prev: Makefile,  Up: gcc Directory

6.3.5 Library Source Files and Headers under the 'gcc' Directory
----------------------------------------------------------------

FIXME: list here, with explanation, all the C source files and headers
under the 'gcc' directory that aren't built into the GCC executable but
rather are part of runtime libraries and object files, such as
'crtstuff.c' and 'unwind-dw2.c'.  *Note Headers Installed by GCC:
Headers, for more information about the 'ginclude' directory.


File: gccint.info,  Node: Headers,  Next: Documentation,  Prev: Library Files,  Up: gcc Directory

6.3.6 Headers Installed by GCC
------------------------------

In general, GCC expects the system C library to provide most of the
headers to be used with it.  However, GCC will fix those headers if
necessary to make them work with GCC, and will install some headers
required of freestanding implementations.  These headers are installed
in 'LIBSUBDIR/include'.  Headers for non-C runtime libraries are also
installed by GCC; these are not documented here.  (FIXME: document them
somewhere.)

 Several of the headers GCC installs are in the 'ginclude' directory.
These headers, 'iso646.h', 'stdarg.h', 'stdbool.h', and 'stddef.h', are
installed in 'LIBSUBDIR/include', unless the target Makefile fragment
(*note Target Fragment::) overrides this by setting 'USER_H'.

 In addition to these headers and those generated by fixing system
headers to work with GCC, some other headers may also be installed in
'LIBSUBDIR/include'.  'config.gcc' may set 'extra_headers'; this
specifies additional headers under 'config' to be installed on some
systems.

 GCC installs its own version of '<float.h>', from 'ginclude/float.h'.
This is done to cope with command-line options that change the
representation of floating point numbers.

 GCC also installs its own version of '<limits.h>'; this is generated
from 'glimits.h', together with 'limitx.h' and 'limity.h' if the system
also has its own version of '<limits.h>'.  (GCC provides its own header
because it is required of ISO C freestanding implementations, but needs
to include the system header from its own header as well because other
standards such as POSIX specify additional values to be defined in
'<limits.h>'.)  The system's '<limits.h>' header is used via
'LIBSUBDIR/include/syslimits.h', which is copied from 'gsyslimits.h' if
it does not need fixing to work with GCC; if it needs fixing,
'syslimits.h' is the fixed copy.

 GCC can also install '<tgmath.h>'.  It will do this when 'config.gcc'
sets 'use_gcc_tgmath' to 'yes'.


File: gccint.info,  Node: Documentation,  Next: Front End,  Prev: Headers,  Up: gcc Directory

6.3.7 Building Documentation
----------------------------

The main GCC documentation is in the form of manuals in Texinfo format.
These are installed in Info format; DVI versions may be generated by
'make dvi', PDF versions by 'make pdf', and HTML versions by 'make
html'.  In addition, some man pages are generated from the Texinfo
manuals, there are some other text files with miscellaneous
documentation, and runtime libraries have their own documentation
outside the 'gcc' directory.  FIXME: document the documentation for
runtime libraries somewhere.

* Menu:

* Texinfo Manuals::      GCC manuals in Texinfo format.
* Man Page Generation::  Generating man pages from Texinfo manuals.
* Miscellaneous Docs::   Miscellaneous text files with documentation.


File: gccint.info,  Node: Texinfo Manuals,  Next: Man Page Generation,  Up: Documentation

6.3.7.1 Texinfo Manuals
.......................

The manuals for GCC as a whole, and the C and C++ front ends, are in
files 'doc/*.texi'.  Other front ends have their own manuals in files
'LANGUAGE/*.texi'.  Common files 'doc/include/*.texi' are provided which
may be included in multiple manuals; the following files are in
'doc/include':

'fdl.texi'
     The GNU Free Documentation License.
'funding.texi'
     The section "Funding Free Software".
'gcc-common.texi'
     Common definitions for manuals.
'gpl_v3.texi'
     The GNU General Public License.
'texinfo.tex'
     A copy of 'texinfo.tex' known to work with the GCC manuals.

 DVI-formatted manuals are generated by 'make dvi', which uses
'texi2dvi' (via the Makefile macro '$(TEXI2DVI)').  PDF-formatted
manuals are generated by 'make pdf', which uses 'texi2pdf' (via the
Makefile macro '$(TEXI2PDF)').  HTML formatted manuals are generated by
'make html'.  Info manuals are generated by 'make info' (which is run as
part of a bootstrap); this generates the manuals in the source
directory, using 'makeinfo' via the Makefile macro '$(MAKEINFO)', and
they are included in release distributions.

 Manuals are also provided on the GCC web site, in both HTML and
PostScript forms.  This is done via the script
'maintainer-scripts/update_web_docs_svn'.  Each manual to be provided
online must be listed in the definition of 'MANUALS' in that file; a
file 'NAME.texi' must only appear once in the source tree, and the
output manual must have the same name as the source file.  (However,
other Texinfo files, included in manuals but not themselves the root
files of manuals, may have names that appear more than once in the
source tree.)  The manual file 'NAME.texi' should only include other
files in its own directory or in 'doc/include'.  HTML manuals will be
generated by 'makeinfo --html', PostScript manuals by 'texi2dvi' and
'dvips', and PDF manuals by 'texi2pdf'.  All Texinfo files that are
parts of manuals must be version-controlled, even if they are generated
files, for the generation of online manuals to work.

 The installation manual, 'doc/install.texi', is also provided on the
GCC web site.  The HTML version is generated by the script
'doc/install.texi2html'.


File: gccint.info,  Node: Man Page Generation,  Next: Miscellaneous Docs,  Prev: Texinfo Manuals,  Up: Documentation

6.3.7.2 Man Page Generation
...........................

Because of user demand, in addition to full Texinfo manuals, man pages
are provided which contain extracts from those manuals.  These man pages
are generated from the Texinfo manuals using 'contrib/texi2pod.pl' and
'pod2man'.  (The man page for 'g++', 'cp/g++.1', just contains a '.so'
reference to 'gcc.1', but all the other man pages are generated from
Texinfo manuals.)

 Because many systems may not have the necessary tools installed to
generate the man pages, they are only generated if the 'configure'
script detects that recent enough tools are installed, and the Makefiles
allow generating man pages to fail without aborting the build.  Man
pages are also included in release distributions.  They are generated in
the source directory.

 Magic comments in Texinfo files starting '@c man' control what parts of
a Texinfo file go into a man page.  Only a subset of Texinfo is
supported by 'texi2pod.pl', and it may be necessary to add support for
more Texinfo features to this script when generating new man pages.  To
improve the man page output, some special Texinfo macros are provided in
'doc/include/gcc-common.texi' which 'texi2pod.pl' understands:

'@gcctabopt'
     Use in the form '@table @gcctabopt' for tables of options, where
     for printed output the effect of '@code' is better than that of
     '@option' but for man page output a different effect is wanted.
'@gccoptlist'
     Use for summary lists of options in manuals.
'@gol'
     Use at the end of each line inside '@gccoptlist'.  This is
     necessary to avoid problems with differences in how the
     '@gccoptlist' macro is handled by different Texinfo formatters.

 FIXME: describe the 'texi2pod.pl' input language and magic comments in
more detail.


File: gccint.info,  Node: Miscellaneous Docs,  Prev: Man Page Generation,  Up: Documentation

6.3.7.3 Miscellaneous Documentation
...................................

In addition to the formal documentation that is installed by GCC, there
are several other text files in the 'gcc' subdirectory with
miscellaneous documentation:

'ABOUT-GCC-NLS'
     Notes on GCC's Native Language Support.  FIXME: this should be part
     of this manual rather than a separate file.
'ABOUT-NLS'
     Notes on the Free Translation Project.
'COPYING'
'COPYING3'
     The GNU General Public License, Versions 2 and 3.
'COPYING.LIB'
'COPYING3.LIB'
     The GNU Lesser General Public License, Versions 2.1 and 3.
'*ChangeLog*'
'*/ChangeLog*'
     Change log files for various parts of GCC.
'LANGUAGES'
     Details of a few changes to the GCC front-end interface.  FIXME:
     the information in this file should be part of general
     documentation of the front-end interface in this manual.
'ONEWS'
     Information about new features in old versions of GCC.  (For recent
     versions, the information is on the GCC web site.)
'README.Portability'
     Information about portability issues when writing code in GCC.
     FIXME: why isn't this part of this manual or of the GCC Coding
     Conventions?

 FIXME: document such files in subdirectories, at least 'config', 'c',
'cp', 'objc', 'testsuite'.


File: gccint.info,  Node: Front End,  Next: Back End,  Prev: Documentation,  Up: gcc Directory

6.3.8 Anatomy of a Language Front End
-------------------------------------

A front end for a language in GCC has the following parts:

   * A directory 'LANGUAGE' under 'gcc' containing source files for that
     front end.  *Note The Front End 'LANGUAGE' Directory: Front End
     Directory, for details.
   * A mention of the language in the list of supported languages in
     'gcc/doc/install.texi'.
   * A mention of the name under which the language's runtime library is
     recognized by '--enable-shared=PACKAGE' in the documentation of
     that option in 'gcc/doc/install.texi'.
   * A mention of any special prerequisites for building the front end
     in the documentation of prerequisites in 'gcc/doc/install.texi'.
   * Details of contributors to that front end in
     'gcc/doc/contrib.texi'.  If the details are in that front end's own
     manual then there should be a link to that manual's list in
     'contrib.texi'.
   * Information about support for that language in
     'gcc/doc/frontends.texi'.
   * Information about standards for that language, and the front end's
     support for them, in 'gcc/doc/standards.texi'.  This may be a link
     to such information in the front end's own manual.
   * Details of source file suffixes for that language and '-x LANG'
     options supported, in 'gcc/doc/invoke.texi'.
   * Entries in 'default_compilers' in 'gcc.c' for source file suffixes
     for that language.
   * Preferably testsuites, which may be under 'gcc/testsuite' or
     runtime library directories.  FIXME: document somewhere how to
     write testsuite harnesses.
   * Probably a runtime library for the language, outside the 'gcc'
     directory.  FIXME: document this further.
   * Details of the directories of any runtime libraries in
     'gcc/doc/sourcebuild.texi'.
   * Check targets in 'Makefile.def' for the top-level 'Makefile' to
     check just the compiler or the compiler and runtime library for the
     language.

 If the front end is added to the official GCC source repository, the
following are also necessary:

   * At least one Bugzilla component for bugs in that front end and
     runtime libraries.  This category needs to be added to the Bugzilla
     database.
   * Normally, one or more maintainers of that front end listed in
     'MAINTAINERS'.
   * Mentions on the GCC web site in 'index.html' and 'frontends.html',
     with any relevant links on 'readings.html'.  (Front ends that are
     not an official part of GCC may also be listed on 'frontends.html',
     with relevant links.)
   * A news item on 'index.html', and possibly an announcement on the
     <gcc-announce@gcc.gnu.org> mailing list.
   * The front end's manuals should be mentioned in
     'maintainer-scripts/update_web_docs_svn' (*note Texinfo Manuals::)
     and the online manuals should be linked to from
     'onlinedocs/index.html'.
   * Any old releases or CVS repositories of the front end, before its
     inclusion in GCC, should be made available on the GCC FTP site
     <ftp://gcc.gnu.org/pub/gcc/old-releases/>.
   * The release and snapshot script 'maintainer-scripts/gcc_release'
     should be updated to generate appropriate tarballs for this front
     end.
   * If this front end includes its own version files that include the
     current date, 'maintainer-scripts/update_version' should be updated
     accordingly.

* Menu:

* Front End Directory::  The front end 'LANGUAGE' directory.
* Front End Config::     The front end 'config-lang.in' file.
* Front End Makefile::   The front end 'Make-lang.in' file.


File: gccint.info,  Node: Front End Directory,  Next: Front End Config,  Up: Front End

6.3.8.1 The Front End 'LANGUAGE' Directory
..........................................

A front end 'LANGUAGE' directory contains the source files of that front
end (but not of any runtime libraries, which should be outside the 'gcc'
directory).  This includes documentation, and possibly some subsidiary
programs built alongside the front end.  Certain files are special and
other parts of the compiler depend on their names:

'config-lang.in'
     This file is required in all language subdirectories.  *Note The
     Front End 'config-lang.in' File: Front End Config, for details of
     its contents
'Make-lang.in'
     This file is required in all language subdirectories.  *Note The
     Front End 'Make-lang.in' File: Front End Makefile, for details of
     its contents.
'lang.opt'
     This file registers the set of switches that the front end accepts
     on the command line, and their '--help' text.  *Note Options::.
'lang-specs.h'
     This file provides entries for 'default_compilers' in 'gcc.c' which
     override the default of giving an error that a compiler for that
     language is not installed.
'LANGUAGE-tree.def'
     This file, which need not exist, defines any language-specific tree
     codes.


File: gccint.info,  Node: Front End Config,  Next: Front End Makefile,  Prev: Front End Directory,  Up: Front End

6.3.8.2 The Front End 'config-lang.in' File
...........................................

Each language subdirectory contains a 'config-lang.in' file.  This file
is a shell script that may define some variables describing the
language:

'language'
     This definition must be present, and gives the name of the language
     for some purposes such as arguments to '--enable-languages'.
'lang_requires'
     If defined, this variable lists (space-separated) language front
     ends other than C that this front end requires to be enabled (with
     the names given being their 'language' settings).  For example, the
     Java front end depends on the C++ front end, so sets
     'lang_requires=c++'.
'subdir_requires'
     If defined, this variable lists (space-separated) front end
     directories other than C that this front end requires to be
     present.  For example, the Objective-C++ front end uses source
     files from the C++ and Objective-C front ends, so sets
     'subdir_requires="cp objc"'.
'target_libs'
     If defined, this variable lists (space-separated) targets in the
     top level 'Makefile' to build the runtime libraries for this
     language, such as 'target-libobjc'.
'lang_dirs'
     If defined, this variable lists (space-separated) top level
     directories (parallel to 'gcc'), apart from the runtime libraries,
     that should not be configured if this front end is not built.
'build_by_default'
     If defined to 'no', this language front end is not built unless
     enabled in a '--enable-languages' argument.  Otherwise, front ends
     are built by default, subject to any special logic in
     'configure.ac' (as is present to disable the Ada front end if the
     Ada compiler is not already installed).
'boot_language'
     If defined to 'yes', this front end is built in stage1 of the
     bootstrap.  This is only relevant to front ends written in their
     own languages.
'compilers'
     If defined, a space-separated list of compiler executables that
     will be run by the driver.  The names here will each end with
     '\$(exeext)'.
'outputs'
     If defined, a space-separated list of files that should be
     generated by 'configure' substituting values in them.  This
     mechanism can be used to create a file 'LANGUAGE/Makefile' from
     'LANGUAGE/Makefile.in', but this is deprecated, building everything
     from the single 'gcc/Makefile' is preferred.
'gtfiles'
     If defined, a space-separated list of files that should be scanned
     by 'gengtype.c' to generate the garbage collection tables and
     routines for this language.  This excludes the files that are
     common to all front ends.  *Note Type Information::.


File: gccint.info,  Node: Front End Makefile,  Prev: Front End Config,  Up: Front End

6.3.8.3 The Front End 'Make-lang.in' File
.........................................

Each language subdirectory contains a 'Make-lang.in' file.  It contains
targets 'LANG.HOOK' (where 'LANG' is the setting of 'language' in
'config-lang.in') for the following values of 'HOOK', and any other
Makefile rules required to build those targets (which may if necessary
use other Makefiles specified in 'outputs' in 'config-lang.in', although
this is deprecated).  It also adds any testsuite targets that can use
the standard rule in 'gcc/Makefile.in' to the variable 'lang_checks'.

'all.cross'
'start.encap'
'rest.encap'
     FIXME: exactly what goes in each of these targets?
'tags'
     Build an 'etags' 'TAGS' file in the language subdirectory in the
     source tree.
'info'
     Build info documentation for the front end, in the build directory.
     This target is only called by 'make bootstrap' if a suitable
     version of 'makeinfo' is available, so does not need to check for
     this, and should fail if an error occurs.
'dvi'
     Build DVI documentation for the front end, in the build directory.
     This should be done using '$(TEXI2DVI)', with appropriate '-I'
     arguments pointing to directories of included files.
'pdf'
     Build PDF documentation for the front end, in the build directory.
     This should be done using '$(TEXI2PDF)', with appropriate '-I'
     arguments pointing to directories of included files.
'html'
     Build HTML documentation for the front end, in the build directory.
'man'
     Build generated man pages for the front end from Texinfo manuals
     (*note Man Page Generation::), in the build directory.  This target
     is only called if the necessary tools are available, but should
     ignore errors so as not to stop the build if errors occur; man
     pages are optional and the tools involved may be installed in a
     broken way.
'install-common'
     Install everything that is part of the front end, apart from the
     compiler executables listed in 'compilers' in 'config-lang.in'.
'install-info'
     Install info documentation for the front end, if it is present in
     the source directory.  This target should have dependencies on info
     files that should be installed.
'install-man'
     Install man pages for the front end.  This target should ignore
     errors.
'install-plugin'
     Install headers needed for plugins.
'srcextra'
     Copies its dependencies into the source directory.  This generally
     should be used for generated files such as Bison output files which
     are not version-controlled, but should be included in any release
     tarballs.  This target will be executed during a bootstrap if
     '--enable-generated-files-in-srcdir' was specified as a 'configure'
     option.
'srcinfo'
'srcman'
     Copies its dependencies into the source directory.  These targets
     will be executed during a bootstrap if
     '--enable-generated-files-in-srcdir' was specified as a 'configure'
     option.
'uninstall'
     Uninstall files installed by installing the compiler.  This is
     currently documented not to be supported, so the hook need not do
     anything.
'mostlyclean'
'clean'
'distclean'
'maintainer-clean'
     The language parts of the standard GNU '*clean' targets.  *Note
     Standard Targets for Users: (standards)Standard Targets, for
     details of the standard targets.  For GCC, 'maintainer-clean'
     should delete all generated files in the source directory that are
     not version-controlled, but should not delete anything that is.

 'Make-lang.in' must also define a variable 'LANG_OBJS' to a list of
host object files that are used by that language.


File: gccint.info,  Node: Back End,  Prev: Front End,  Up: gcc Directory

6.3.9 Anatomy of a Target Back End
----------------------------------

A back end for a target architecture in GCC has the following parts:

   * A directory 'MACHINE' under 'gcc/config', containing a machine
     description 'MACHINE.md' file (*note Machine Descriptions: Machine
     Desc.), header files 'MACHINE.h' and 'MACHINE-protos.h' and a
     source file 'MACHINE.c' (*note Target Description Macros and
     Functions: Target Macros.), possibly a target Makefile fragment
     't-MACHINE' (*note The Target Makefile Fragment: Target Fragment.),
     and maybe some other files.  The names of these files may be
     changed from the defaults given by explicit specifications in
     'config.gcc'.
   * If necessary, a file 'MACHINE-modes.def' in the 'MACHINE'
     directory, containing additional machine modes to represent
     condition codes.  *Note Condition Code::, for further details.
   * An optional 'MACHINE.opt' file in the 'MACHINE' directory,
     containing a list of target-specific options.  You can also add
     other option files using the 'extra_options' variable in
     'config.gcc'.  *Note Options::.
   * Entries in 'config.gcc' (*note The 'config.gcc' File: System
     Config.) for the systems with this target architecture.
   * Documentation in 'gcc/doc/invoke.texi' for any command-line options
     supported by this target (*note Run-time Target Specification:
     Run-time Target.).  This means both entries in the summary table of
     options and details of the individual options.
   * Documentation in 'gcc/doc/extend.texi' for any target-specific
     attributes supported (*note Defining target-specific uses of
     '__attribute__': Target Attributes.), including where the same
     attribute is already supported on some targets, which are
     enumerated in the manual.
   * Documentation in 'gcc/doc/extend.texi' for any target-specific
     pragmas supported.
   * Documentation in 'gcc/doc/extend.texi' of any target-specific
     built-in functions supported.
   * Documentation in 'gcc/doc/extend.texi' of any target-specific
     format checking styles supported.
   * Documentation in 'gcc/doc/md.texi' of any target-specific
     constraint letters (*note Constraints for Particular Machines:
     Machine Constraints.).
   * A note in 'gcc/doc/contrib.texi' under the person or people who
     contributed the target support.
   * Entries in 'gcc/doc/install.texi' for all target triplets supported
     with this target architecture, giving details of any special notes
     about installation for this target, or saying that there are no
     special notes if there are none.
   * Possibly other support outside the 'gcc' directory for runtime
     libraries.  FIXME: reference docs for this.  The 'libstdc++'
     porting manual needs to be installed as info for this to work, or
     to be a chapter of this manual.

 If the back end is added to the official GCC source repository, the
following are also necessary:

   * An entry for the target architecture in 'readings.html' on the GCC
     web site, with any relevant links.
   * Details of the properties of the back end and target architecture
     in 'backends.html' on the GCC web site.
   * A news item about the contribution of support for that target
     architecture, in 'index.html' on the GCC web site.
   * Normally, one or more maintainers of that target listed in
     'MAINTAINERS'.  Some existing architectures may be unmaintained,
     but it would be unusual to add support for a target that does not
     have a maintainer when support is added.
   * Target triplets covering all 'config.gcc' stanzas for the target,
     in the list in 'contrib/config-list.mk'.


File: gccint.info,  Node: Testsuites,  Next: Options,  Prev: Source Tree,  Up: Top

7 Testsuites
************

GCC contains several testsuites to help maintain compiler quality.  Most
of the runtime libraries and language front ends in GCC have testsuites.
Currently only the C language testsuites are documented here; FIXME:
document the others.

* Menu:

* Test Idioms::     Idioms used in testsuite code.
* Test Directives:: Directives used within DejaGnu tests.
* Ada Tests::       The Ada language testsuites.
* C Tests::         The C language testsuites.
* libgcj Tests::    The Java library testsuites.
* LTO Testing::     Support for testing link-time optimizations.
* gcov Testing::    Support for testing gcov.
* profopt Testing:: Support for testing profile-directed optimizations.
* compat Testing::  Support for testing binary compatibility.
* Torture Tests::   Support for torture testing using multiple options.


File: gccint.info,  Node: Test Idioms,  Next: Test Directives,  Up: Testsuites

7.1 Idioms Used in Testsuite Code
=================================

In general, C testcases have a trailing '-N.c', starting with '-1.c', in
case other testcases with similar names are added later.  If the test is
a test of some well-defined feature, it should have a name referring to
that feature such as 'FEATURE-1.c'.  If it does not test a well-defined
feature but just happens to exercise a bug somewhere in the compiler,
and a bug report has been filed for this bug in the GCC bug database,
'prBUG-NUMBER-1.c' is the appropriate form of name.  Otherwise (for
miscellaneous bugs not filed in the GCC bug database), and previously
more generally, test cases are named after the date on which they were
added.  This allows people to tell at a glance whether a test failure is
because of a recently found bug that has not yet been fixed, or whether
it may be a regression, but does not give any other information about
the bug or where discussion of it may be found.  Some other language
testsuites follow similar conventions.

 In the 'gcc.dg' testsuite, it is often necessary to test that an error
is indeed a hard error and not just a warning--for example, where it is
a constraint violation in the C standard, which must become an error
with '-pedantic-errors'.  The following idiom, where the first line
shown is line LINE of the file and the line that generates the error, is
used for this:

     /* { dg-bogus "warning" "warning in place of error" } */
     /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */

 It may be necessary to check that an expression is an integer constant
expression and has a certain value.  To check that 'E' has value 'V', an
idiom similar to the following is used:

     char x[((E) == (V) ? 1 : -1)];

 In 'gcc.dg' tests, '__typeof__' is sometimes used to make assertions
about the types of expressions.  See, for example,
'gcc.dg/c99-condexpr-1.c'.  The more subtle uses depend on the exact
rules for the types of conditional expressions in the C standard; see,
for example, 'gcc.dg/c99-intconst-1.c'.

 It is useful to be able to test that optimizations are being made
properly.  This cannot be done in all cases, but it can be done where
the optimization will lead to code being optimized away (for example,
where flow analysis or alias analysis should show that certain code
cannot be called) or to functions not being called because they have
been expanded as built-in functions.  Such tests go in
'gcc.c-torture/execute'.  Where code should be optimized away, a call to
a nonexistent function such as 'link_failure ()' may be inserted; a
definition

     #ifndef __OPTIMIZE__
     void
     link_failure (void)
     {
       abort ();
     }
     #endif

will also be needed so that linking still succeeds when the test is run
without optimization.  When all calls to a built-in function should have
been optimized and no calls to the non-built-in version of the function
should remain, that function may be defined as 'static' to call 'abort
()' (although redeclaring a function as static may not work on all
targets).

 All testcases must be portable.  Target-specific testcases must have
appropriate code to avoid causing failures on unsupported systems;
unfortunately, the mechanisms for this differ by directory.

 FIXME: discuss non-C testsuites here.


File: gccint.info,  Node: Test Directives,  Next: Ada Tests,  Prev: Test Idioms,  Up: Testsuites

7.2 Directives used within DejaGnu tests
========================================

* Menu:

* Directives::  Syntax and descriptions of test directives.
* Selectors:: Selecting targets to which a test applies.
* Effective-Target Keywords:: Keywords describing target attributes.
* Add Options:: Features for 'dg-add-options'
* Require Support:: Variants of 'dg-require-SUPPORT'
* Final Actions:: Commands for use in 'dg-final'


File: gccint.info,  Node: Directives,  Next: Selectors,  Up: Test Directives

7.2.1 Syntax and Descriptions of test directives
------------------------------------------------

Test directives appear within comments in a test source file and begin
with 'dg-'.  Some of these are defined within DejaGnu and others are
local to the GCC testsuite.

 The order in which test directives appear in a test can be important:
directives local to GCC sometimes override information used by the
DejaGnu directives, which know nothing about the GCC directives, so the
DejaGnu directives must precede GCC directives.

 Several test directives include selectors (*note Selectors::) which are
usually preceded by the keyword 'target' or 'xfail'.

7.2.1.1 Specify how to build the test
.....................................

'{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }'
     DO-WHAT-KEYWORD specifies how the test is compiled and whether it
     is executed.  It is one of:

     'preprocess'
          Compile with '-E' to run only the preprocessor.
     'compile'
          Compile with '-S' to produce an assembly code file.
     'assemble'
          Compile with '-c' to produce a relocatable object file.
     'link'
          Compile, assemble, and link to produce an executable file.
     'run'
          Produce and run an executable file, which is expected to
          return an exit code of 0.

     The default is 'compile'.  That can be overridden for a set of
     tests by redefining 'dg-do-what-default' within the '.exp' file for
     those tests.

     If the directive includes the optional '{ target SELECTOR }' then
     the test is skipped unless the target system matches the SELECTOR.

     If DO-WHAT-KEYWORD is 'run' and the directive includes the optional
     '{ xfail SELECTOR }' and the selector is met then the test is
     expected to fail.  The 'xfail' clause is ignored for other values
     of DO-WHAT-KEYWORD; those tests can use directive 'dg-xfail-if'.

7.2.1.2 Specify additional compiler options
...........................................

'{ dg-options OPTIONS [{ target SELECTOR }] }'
     This DejaGnu directive provides a list of compiler options, to be
     used if the target system matches SELECTOR, that replace the
     default options used for this set of tests.

'{ dg-add-options FEATURE ... }'
     Add any compiler options that are needed to access certain
     features.  This directive does nothing on targets that enable the
     features by default, or that don't provide them at all.  It must
     come after all 'dg-options' directives.  For supported values of
     FEATURE see *note Add Options::.

'{ dg-additional-options OPTIONS [{ target SELECTOR }] }'
     This directive provides a list of compiler options, to be used if
     the target system matches SELECTOR, that are added to the default
     options used for this set of tests.

7.2.1.3 Modify the test timeout value
.....................................

The normal timeout limit, in seconds, is found by searching the
following in order:

   * the value defined by an earlier 'dg-timeout' directive in the test

   * variable TOOL_TIMEOUT defined by the set of tests

   * GCC,TIMEOUT set in the target board

   * 300

'{ dg-timeout N [{target SELECTOR }] }'
     Set the time limit for the compilation and for the execution of the
     test to the specified number of seconds.

'{ dg-timeout-factor X [{ target SELECTOR }] }'
     Multiply the normal time limit for compilation and execution of the
     test by the specified floating-point factor.

7.2.1.4 Skip a test for some targets
....................................

'{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
     Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each
     element is a string of zero or more GCC options.  Skip the test if
     all of the following conditions are met:
        * the test system is included in SELECTOR

        * for at least one of the option strings in INCLUDE-OPTS, every
          option from that string is in the set of options with which
          the test would be compiled; use '"*"' for an INCLUDE-OPTS list
          that matches any options; that is the default if INCLUDE-OPTS
          is not specified

        * for each of the option strings in EXCLUDE-OPTS, at least one
          option from that string is not in the set of options with
          which the test would be compiled; use '""' for an empty
          EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not
          specified

     For example, to skip a test if option '-Os' is present:

          /* { dg-skip-if "" { *-*-* }  { "-Os" } { "" } } */

     To skip a test if both options '-O2' and '-g' are present:

          /* { dg-skip-if "" { *-*-* }  { "-O2 -g" } { "" } } */

     To skip a test if either '-O2' or '-O3' is present:

          /* { dg-skip-if "" { *-*-* }  { "-O2" "-O3" } { "" } } */

     To skip a test unless option '-Os' is present:

          /* { dg-skip-if "" { *-*-* }  { "*" } { "-Os" } } */

     To skip a test if either '-O2' or '-O3' is used with '-g' but not
     if '-fpic' is also present:

          /* { dg-skip-if "" { *-*-* }  { "-O2 -g" "-O3 -g" } { "-fpic" } } */

'{ dg-require-effective-target KEYWORD [{ SELECTOR }] }'
     Skip the test if the test target, including current multilib flags,
     is not covered by the effective-target keyword.  If the directive
     includes the optional '{ SELECTOR }' then the effective-target test
     is only performed if the target system matches the SELECTOR.  This
     directive must appear after any 'dg-do' directive in the test and
     before any 'dg-additional-sources' directive.  *Note
     Effective-Target Keywords::.

'{ dg-require-SUPPORT args }'
     Skip the test if the target does not provide the required support.
     These directives must appear after any 'dg-do' directive in the
     test and before any 'dg-additional-sources' directive.  They
     require at least one argument, which can be an empty string if the
     specific procedure does not examine the argument.  *Note Require
     Support::, for a complete list of these directives.

7.2.1.5 Expect a test to fail for some targets
..............................................

'{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
     Expect the test to fail if the conditions (which are the same as
     for 'dg-skip-if') are met.  This does not affect the execute step.

'{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
     Expect the execute step of a test to fail if the conditions (which
     are the same as for 'dg-skip-if') are met.

7.2.1.6 Expect the test executable to fail
..........................................

'{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }'
     Expect the test executable to return a nonzero exit status if the
     conditions (which are the same as for 'dg-skip-if') are met.

7.2.1.7 Verify compiler messages
................................

'{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
     This DejaGnu directive appears on a source line that is expected to
     get an error message, or else specifies the source line associated
     with the message.  If there is no message for that line or if the
     text of that message is not matched by REGEXP then the check fails
     and COMMENT is included in the 'FAIL' message.  The check does not
     look for the string 'error' unless it is part of REGEXP.

'{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
     This DejaGnu directive appears on a source line that is expected to
     get a warning message, or else specifies the source line associated
     with the message.  If there is no message for that line or if the
     text of that message is not matched by REGEXP then the check fails
     and COMMENT is included in the 'FAIL' message.  The check does not
     look for the string 'warning' unless it is part of REGEXP.

'{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
     The line is expected to get a message other than an error or
     warning.  If there is no message for that line or if the text of
     that message is not matched by REGEXP then the check fails and
     COMMENT is included in the 'FAIL' message.

'{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
     This DejaGnu directive appears on a source line that should not get
     a message matching REGEXP, or else specifies the source line
     associated with the bogus message.  It is usually used with 'xfail'
     to indicate that the message is a known problem for a particular
     set of targets.

'{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }'
     This DejaGnu directive indicates that the test is expected to fail
     due to compiler messages that are not handled by 'dg-error',
     'dg-warning' or 'dg-bogus'.  For this directive 'xfail' has the
     same effect as 'target'.

'{ dg-prune-output REGEXP }'
     Prune messages matching REGEXP from the test output.

7.2.1.8 Verify output of the test executable
............................................

'{ dg-output REGEXP [{ target/xfail SELECTOR }] }'
     This DejaGnu directive compares REGEXP to the combined output that
     the test executable writes to 'stdout' and 'stderr'.

7.2.1.9 Specify additional files for a test
...........................................

'{ dg-additional-files "FILELIST" }'
     Specify additional files, other than source files, that must be
     copied to the system where the compiler runs.

'{ dg-additional-sources "FILELIST" }'
     Specify additional source files to appear in the compile line
     following the main test file.

7.2.1.10 Add checks at the end of a test
........................................

'{ dg-final { LOCAL-DIRECTIVE } }'
     This DejaGnu directive is placed within a comment anywhere in the
     source file and is processed after the test has been compiled and
     run.  Multiple 'dg-final' commands are processed in the order in
     which they appear in the source file.  *Note Final Actions::, for a
     list of directives that can be used within 'dg-final'.


File: gccint.info,  Node: Selectors,  Next: Effective-Target Keywords,  Prev: Directives,  Up: Test Directives

7.2.2 Selecting targets to which a test applies
-----------------------------------------------

Several test directives include SELECTORs to limit the targets for which
a test is run or to declare that a test is expected to fail on
particular targets.

 A selector is:
   * one or more target triplets, possibly including wildcard
     characters; use '*-*-*' to match any target
   * a single effective-target keyword (*note Effective-Target
     Keywords::)
   * a logical expression

 Depending on the context, the selector specifies whether a test is
skipped and reported as unsupported or is expected to fail.  A context
that allows either 'target' or 'xfail' also allows '{ target SELECTOR1
xfail SELECTOR2 }' to skip the test for targets that don't match
SELECTOR1 and the test to fail for targets that match SELECTOR2.

 A selector expression appears within curly braces and uses a single
logical operator: one of '!', '&&', or '||'.  An operand is another
selector expression, an effective-target keyword, a single target
triplet, or a list of target triplets within quotes or curly braces.
For example:

     { target { ! "hppa*-*-* ia64*-*-*" } }
     { target { powerpc*-*-* && lp64 } }
     { xfail { lp64 || vect_no_align } }


File: gccint.info,  Node: Effective-Target Keywords,  Next: Add Options,  Prev: Selectors,  Up: Test Directives

7.2.3 Keywords describing target attributes
-------------------------------------------

Effective-target keywords identify sets of targets that support
particular functionality.  They are used to limit tests to be run only
for particular targets, or to specify that particular sets of targets
are expected to fail some tests.

 Effective-target keywords are defined in 'lib/target-supports.exp' in
the GCC testsuite, with the exception of those that are documented as
being local to a particular test directory.

 The 'effective target' takes into account all of the compiler options
with which the test will be compiled, including the multilib options.
By convention, keywords ending in '_nocache' can also include options
specified for the particular test in an earlier 'dg-options' or
'dg-add-options' directive.

7.2.3.1 Data type sizes
.......................

'ilp32'
     Target has 32-bit 'int', 'long', and pointers.

'lp64'
     Target has 32-bit 'int', 64-bit 'long' and pointers.

'llp64'
     Target has 32-bit 'int' and 'long', 64-bit 'long long' and
     pointers.

'double64'
     Target has 64-bit 'double'.

'double64plus'
     Target has 'double' that is 64 bits or longer.

'longdouble128'
     Target has 128-bit 'long double'.

'int32plus'
     Target has 'int' that is at 32 bits or longer.

'int16'
     Target has 'int' that is 16 bits or shorter.

'long_neq_int'
     Target has 'int' and 'long' with different sizes.

'large_double'
     Target supports 'double' that is longer than 'float'.

'large_long_double'
     Target supports 'long double' that is longer than 'double'.

'ptr32plus'
     Target has pointers that are 32 bits or longer.

'size32plus'
     Target supports array and structure sizes that are 32 bits or
     longer.

'4byte_wchar_t'
     Target has 'wchar_t' that is at least 4 bytes.

7.2.3.2 Fortran-specific attributes
...................................

'fortran_integer_16'
     Target supports Fortran 'integer' that is 16 bytes or longer.

'fortran_large_int'
     Target supports Fortran 'integer' kinds larger than 'integer(8)'.

'fortran_large_real'
     Target supports Fortran 'real' kinds larger than 'real(8)'.

7.2.3.3 Vector-specific attributes
..................................

'vect_condition'
     Target supports vector conditional operations.

'vect_double'
     Target supports hardware vectors of 'double'.

'vect_float'
     Target supports hardware vectors of 'float'.

'vect_int'
     Target supports hardware vectors of 'int'.

'vect_long'
     Target supports hardware vectors of 'long'.

'vect_long_long'
     Target supports hardware vectors of 'long long'.

'vect_aligned_arrays'
     Target aligns arrays to vector alignment boundary.

'vect_hw_misalign'
     Target supports a vector misalign access.

'vect_no_align'
     Target does not support a vector alignment mechanism.

'vect_no_int_min_max'
     Target does not support a vector min and max instruction on 'int'.

'vect_no_int_add'
     Target does not support a vector add instruction on 'int'.

'vect_no_bitwise'
     Target does not support vector bitwise instructions.

'vect_char_mult'
     Target supports 'vector char' multiplication.

'vect_short_mult'
     Target supports 'vector short' multiplication.

'vect_int_mult'
     Target supports 'vector int' multiplication.

'vect_extract_even_odd'
     Target supports vector even/odd element extraction.

'vect_extract_even_odd_wide'
     Target supports vector even/odd element extraction of vectors with
     elements 'SImode' or larger.

'vect_interleave'
     Target supports vector interleaving.

'vect_strided'
     Target supports vector interleaving and extract even/odd.

'vect_strided_wide'
     Target supports vector interleaving and extract even/odd for wide
     element types.

'vect_perm'
     Target supports vector permutation.

'vect_shift'
     Target supports a hardware vector shift operation.

'vect_widen_sum_hi_to_si'
     Target supports a vector widening summation of 'short' operands
     into 'int' results, or can promote (unpack) from 'short' to 'int'.

'vect_widen_sum_qi_to_hi'
     Target supports a vector widening summation of 'char' operands into
     'short' results, or can promote (unpack) from 'char' to 'short'.

'vect_widen_sum_qi_to_si'
     Target supports a vector widening summation of 'char' operands into
     'int' results.

'vect_widen_mult_qi_to_hi'
     Target supports a vector widening multiplication of 'char' operands
     into 'short' results, or can promote (unpack) from 'char' to
     'short' and perform non-widening multiplication of 'short'.

'vect_widen_mult_hi_to_si'
     Target supports a vector widening multiplication of 'short'
     operands into 'int' results, or can promote (unpack) from 'short'
     to 'int' and perform non-widening multiplication of 'int'.

'vect_widen_mult_si_to_di_pattern'
     Target supports a vector widening multiplication of 'int' operands
     into 'long' results.

'vect_sdot_qi'
     Target supports a vector dot-product of 'signed char'.

'vect_udot_qi'
     Target supports a vector dot-product of 'unsigned char'.

'vect_sdot_hi'
     Target supports a vector dot-product of 'signed short'.

'vect_udot_hi'
     Target supports a vector dot-product of 'unsigned short'.

'vect_pack_trunc'
     Target supports a vector demotion (packing) of 'short' to 'char'
     and from 'int' to 'short' using modulo arithmetic.

'vect_unpack'
     Target supports a vector promotion (unpacking) of 'char' to 'short'
     and from 'char' to 'int'.

'vect_intfloat_cvt'
     Target supports conversion from 'signed int' to 'float'.

'vect_uintfloat_cvt'
     Target supports conversion from 'unsigned int' to 'float'.

'vect_floatint_cvt'
     Target supports conversion from 'float' to 'signed int'.

'vect_floatuint_cvt'
     Target supports conversion from 'float' to 'unsigned int'.

'vect_max_reduc'
     Target supports max reduction for vectors.

7.2.3.4 Thread Local Storage attributes
.......................................

'tls'
     Target supports thread-local storage.

'tls_native'
     Target supports native (rather than emulated) thread-local storage.

'tls_runtime'
     Test system supports executing TLS executables.

7.2.3.5 Decimal floating point attributes
.........................................

'dfp'
     Targets supports compiling decimal floating point extension to C.

'dfp_nocache'
     Including the options used to compile this particular test, the
     target supports compiling decimal floating point extension to C.

'dfprt'
     Test system can execute decimal floating point tests.

'dfprt_nocache'
     Including the options used to compile this particular test, the
     test system can execute decimal floating point tests.

'hard_dfp'
     Target generates decimal floating point instructions with current
     options.

7.2.3.6 ARM-specific attributes
...............................

'arm32'
     ARM target generates 32-bit code.

'arm_eabi'
     ARM target adheres to the ABI for the ARM Architecture.

'arm_fp_ok'
     ARM target defines '__ARM_FP' using '-mfloat-abi=softfp' or
     equivalent options.  Some multilibs may be incompatible with these
     options.

'arm_hf_eabi'
     ARM target adheres to the VFP and Advanced SIMD Register Arguments
     variant of the ABI for the ARM Architecture (as selected with
     '-mfloat-abi=hard').

'arm_hard_vfp_ok'
     ARM target supports '-mfpu=vfp -mfloat-abi=hard'.  Some multilibs
     may be incompatible with these options.

'arm_iwmmxt_ok'
     ARM target supports '-mcpu=iwmmxt'.  Some multilibs may be
     incompatible with this option.

'arm_neon'
     ARM target supports generating NEON instructions.

'arm_tune_string_ops_prefer_neon'
     Test CPU tune supports inlining string operations with NEON
     instructions.

'arm_neon_hw'
     Test system supports executing NEON instructions.

'arm_neonv2_hw'
     Test system supports executing NEON v2 instructions.

'arm_neon_ok'
     ARM Target supports '-mfpu=neon -mfloat-abi=softfp' or compatible
     options.  Some multilibs may be incompatible with these options.

'arm_neonv2_ok'
     ARM Target supports '-mfpu=neon-vfpv4 -mfloat-abi=softfp' or
     compatible options.  Some multilibs may be incompatible with these
     options.

'arm_neon_fp16_ok'
     ARM Target supports '-mfpu=neon-fp16 -mfloat-abi=softfp' or
     compatible options, including '-mfp16-format=ieee' if necessary to
     obtain the '__fp16' type.  Some multilibs may be incompatible with
     these options.

'arm_neon_fp16_hw'
     Test system supports executing Neon half-precision float
     instructions.  (Implies previous.)

'arm_thumb1_ok'
     ARM target generates Thumb-1 code for '-mthumb'.

'arm_thumb2_ok'
     ARM target generates Thumb-2 code for '-mthumb'.

'arm_vfp_ok'
     ARM target supports '-mfpu=vfp -mfloat-abi=softfp'.  Some multilibs
     may be incompatible with these options.

'arm_vfp3_ok'
     ARM target supports '-mfpu=vfp3 -mfloat-abi=softfp'.  Some
     multilibs may be incompatible with these options.

'arm_v8_vfp_ok'
     ARM target supports '-mfpu=fp-armv8 -mfloat-abi=softfp'.  Some
     multilibs may be incompatible with these options.

'arm_v8_neon_ok'
     ARM target supports '-mfpu=neon-fp-armv8 -mfloat-abi=softfp'.  Some
     multilibs may be incompatible with these options.

'arm_v8_1a_neon_ok'
     ARM target supports options to generate ARMv8.1 Adv.SIMD
     instructions.  Some multilibs may be incompatible with these
     options.

'arm_v8_1a_neon_hw'
     ARM target supports executing ARMv8.1 Adv.SIMD instructions.  Some
     multilibs may be incompatible with the options needed.  Implies
     arm_v8_1a_neon_ok.

'arm_prefer_ldrd_strd'
     ARM target prefers 'LDRD' and 'STRD' instructions over 'LDM' and
     'STM' instructions.

7.2.3.7 AArch64-specific attributes
...................................

'aarch64_asm_<ext>_ok'
     AArch64 assembler supports the architecture extension 'ext' via the
     '.arch_extension' pseudo-op.
'aarch64_tiny'
     AArch64 target which generates instruction sequences for tiny
     memory model.
'aarch64_small'
     AArch64 target which generates instruction sequences for small
     memory model.
'aarch64_large'
     AArch64 target which generates instruction sequences for large
     memory model.
'aarch64_little_endian'
     AArch64 target which generates instruction sequences for little
     endian.
'aarch64_big_endian'
     AArch64 target which generates instruction sequences for big
     endian.
'aarch64_small_fpic'
     Binutils installed on test system supports relocation types
     required by -fpic for AArch64 small memory model.

7.2.3.8 MIPS-specific attributes
................................

'mips64'
     MIPS target supports 64-bit instructions.

'nomips16'
     MIPS target does not produce MIPS16 code.

'mips16_attribute'
     MIPS target can generate MIPS16 code.

'mips_loongson'
     MIPS target is a Loongson-2E or -2F target using an ABI that
     supports the Loongson vector modes.

'mips_newabi_large_long_double'
     MIPS target supports 'long double' larger than 'double' when using
     the new ABI.

'mpaired_single'
     MIPS target supports '-mpaired-single'.

7.2.3.9 PowerPC-specific attributes
...................................

'dfp_hw'
     PowerPC target supports executing hardware DFP instructions.

'p8vector_hw'
     PowerPC target supports executing VSX instructions (ISA 2.07).

'powerpc64'
     Test system supports executing 64-bit instructions.

'powerpc_altivec'
     PowerPC target supports AltiVec.

'powerpc_altivec_ok'
     PowerPC target supports '-maltivec'.

'powerpc_eabi_ok'
     PowerPC target supports '-meabi'.

'powerpc_elfv2'
     PowerPC target supports '-mabi=elfv2'.

'powerpc_fprs'
     PowerPC target supports floating-point registers.

'powerpc_hard_double'
     PowerPC target supports hardware double-precision floating-point.

'powerpc_htm_ok'
     PowerPC target supports '-mhtm'

'powerpc_p8vector_ok'
     PowerPC target supports '-mpower8-vector'

'powerpc_ppu_ok'
     PowerPC target supports '-mcpu=cell'.

'powerpc_spe'
     PowerPC target supports PowerPC SPE.

'powerpc_spe_nocache'
     Including the options used to compile this particular test, the
     PowerPC target supports PowerPC SPE.

'powerpc_spu'
     PowerPC target supports PowerPC SPU.

'powerpc_vsx_ok'
     PowerPC target supports '-mvsx'.

'powerpc_405_nocache'
     Including the options used to compile this particular test, the
     PowerPC target supports PowerPC 405.

'ppc_recip_hw'
     PowerPC target supports executing reciprocal estimate instructions.

'spu_auto_overlay'
     SPU target has toolchain that supports automatic overlay
     generation.

'vmx_hw'
     PowerPC target supports executing AltiVec instructions.

'vsx_hw'
     PowerPC target supports executing VSX instructions (ISA 2.06).

7.2.3.10 Other hardware attributes
..................................

'avx'
     Target supports compiling 'avx' instructions.

'avx_runtime'
     Target supports the execution of 'avx' instructions.

'cell_hw'
     Test system can execute AltiVec and Cell PPU instructions.

'coldfire_fpu'
     Target uses a ColdFire FPU.

'hard_float'
     Target supports FPU instructions.

'non_strict_align'
     Target does not require strict alignment.

'sqrt_insn'
     Target has a square root instruction that the compiler can
     generate.

'sse'
     Target supports compiling 'sse' instructions.

'sse_runtime'
     Target supports the execution of 'sse' instructions.

'sse2'
     Target supports compiling 'sse2' instructions.

'sse2_runtime'
     Target supports the execution of 'sse2' instructions.

'sync_char_short'
     Target supports atomic operations on 'char' and 'short'.

'sync_int_long'
     Target supports atomic operations on 'int' and 'long'.

'ultrasparc_hw'
     Test environment appears to run executables on a simulator that
     accepts only 'EM_SPARC' executables and chokes on 'EM_SPARC32PLUS'
     or 'EM_SPARCV9' executables.

'vect_cmdline_needed'
     Target requires a command line argument to enable a SIMD
     instruction set.

'pie_copyreloc'
     The x86-64 target linker supports PIE with copy reloc.

7.2.3.11 Environment attributes
...............................

'c'
     The language for the compiler under test is C.

'c++'
     The language for the compiler under test is C++.

'c99_runtime'
     Target provides a full C99 runtime.

'correct_iso_cpp_string_wchar_protos'
     Target 'string.h' and 'wchar.h' headers provide C++ required
     overloads for 'strchr' etc.  functions.

'dummy_wcsftime'
     Target uses a dummy 'wcsftime' function that always returns zero.

'fd_truncate'
     Target can truncate a file from a file descriptor, as used by
     'libgfortran/io/unix.c:fd_truncate'; i.e.  'ftruncate' or 'chsize'.

'freestanding'
     Target is 'freestanding' as defined in section 4 of the C99
     standard.  Effectively, it is a target which supports no extra
     headers or libraries other than what is considered essential.

'init_priority'
     Target supports constructors with initialization priority
     arguments.

'inttypes_types'
     Target has the basic signed and unsigned types in 'inttypes.h'.
     This is for tests that GCC's notions of these types agree with
     those in the header, as some systems have only 'inttypes.h'.

'lax_strtofp'
     Target might have errors of a few ULP in string to floating-point
     conversion functions and overflow is not always detected correctly
     by those functions.

'mempcpy'
     Target provides 'mempcpy' function.

'mmap'
     Target supports 'mmap'.

'newlib'
     Target supports Newlib.

'pow10'
     Target provides 'pow10' function.

'pthread'
     Target can compile using 'pthread.h' with no errors or warnings.

'pthread_h'
     Target has 'pthread.h'.

'run_expensive_tests'
     Expensive testcases (usually those that consume excessive amounts
     of CPU time) should be run on this target.  This can be enabled by
     setting the 'GCC_TEST_RUN_EXPENSIVE' environment variable to a
     non-empty string.

'simulator'
     Test system runs executables on a simulator (i.e.  slowly) rather
     than hardware (i.e.  fast).

'stabs'
     Target supports the stabs debugging format.

'stdint_types'
     Target has the basic signed and unsigned C types in 'stdint.h'.
     This will be obsolete when GCC ensures a working 'stdint.h' for all
     targets.

'stpcpy'
     Target provides 'stpcpy' function.

'trampolines'
     Target supports trampolines.

'uclibc'
     Target supports uClibc.

'unwrapped'
     Target does not use a status wrapper.

'vxworks_kernel'
     Target is a VxWorks kernel.

'vxworks_rtp'
     Target is a VxWorks RTP.

'wchar'
     Target supports wide characters.

7.2.3.12 Other attributes
.........................

'automatic_stack_alignment'
     Target supports automatic stack alignment.

'cxa_atexit'
     Target uses '__cxa_atexit'.

'default_packed'
     Target has packed layout of structure members by default.

'fgraphite'
     Target supports Graphite optimizations.

'fixed_point'
     Target supports fixed-point extension to C.

'fopenacc'
     Target supports OpenACC via '-fopenacc'.

'fopenmp'
     Target supports OpenMP via '-fopenmp'.

'fpic'
     Target supports '-fpic' and '-fPIC'.

'freorder'
     Target supports '-freorder-blocks-and-partition'.

'fstack_protector'
     Target supports '-fstack-protector'.

'gas'
     Target uses GNU 'as'.

'gc_sections'
     Target supports '--gc-sections'.

'gld'
     Target uses GNU 'ld'.

'keeps_null_pointer_checks'
     Target keeps null pointer checks, either due to the use of
     '-fno-delete-null-pointer-checks' or hardwired into the target.

'lto'
     Compiler has been configured to support link-time optimization
     (LTO).

'naked_functions'
     Target supports the 'naked' function attribute.

'named_sections'
     Target supports named sections.

'natural_alignment_32'
     Target uses natural alignment (aligned to type size) for types of
     32 bits or less.

'target_natural_alignment_64'
     Target uses natural alignment (aligned to type size) for types of
     64 bits or less.

'nonpic'
     Target does not generate PIC by default.

'pie_enabled'
     Target generates PIE by default.

'pcc_bitfield_type_matters'
     Target defines 'PCC_BITFIELD_TYPE_MATTERS'.

'pe_aligned_commons'
     Target supports '-mpe-aligned-commons'.

'pie'
     Target supports '-pie', '-fpie' and '-fPIE'.

'section_anchors'
     Target supports section anchors.

'short_enums'
     Target defaults to short enums.

'static'
     Target supports '-static'.

'static_libgfortran'
     Target supports statically linking 'libgfortran'.

'string_merging'
     Target supports merging string constants at link time.

'ucn'
     Target supports compiling and assembling UCN.

'ucn_nocache'
     Including the options used to compile this particular test, the
     target supports compiling and assembling UCN.

'unaligned_stack'
     Target does not guarantee that its 'STACK_BOUNDARY' is greater than
     or equal to the required vector alignment.

'vector_alignment_reachable'
     Vector alignment is reachable for types of 32 bits or less.

'vector_alignment_reachable_for_64bit'
     Vector alignment is reachable for types of 64 bits or less.

'wchar_t_char16_t_compatible'
     Target supports 'wchar_t' that is compatible with 'char16_t'.

'wchar_t_char32_t_compatible'
     Target supports 'wchar_t' that is compatible with 'char32_t'.

'comdat_group'
     Target uses comdat groups.

7.2.3.13 Local to tests in 'gcc.target/i386'
............................................

'3dnow'
     Target supports compiling '3dnow' instructions.

'aes'
     Target supports compiling 'aes' instructions.

'fma4'
     Target supports compiling 'fma4' instructions.

'ms_hook_prologue'
     Target supports attribute 'ms_hook_prologue'.

'pclmul'
     Target supports compiling 'pclmul' instructions.

'sse3'
     Target supports compiling 'sse3' instructions.

'sse4'
     Target supports compiling 'sse4' instructions.

'sse4a'
     Target supports compiling 'sse4a' instructions.

'ssse3'
     Target supports compiling 'ssse3' instructions.

'vaes'
     Target supports compiling 'vaes' instructions.

'vpclmul'
     Target supports compiling 'vpclmul' instructions.

'xop'
     Target supports compiling 'xop' instructions.

7.2.3.14 Local to tests in 'gcc.target/spu/ea'
..............................................

'ealib'
     Target '__ea' library functions are available.

7.2.3.15 Local to tests in 'gcc.test-framework'
...............................................

'no'
     Always returns 0.

'yes'
     Always returns 1.


File: gccint.info,  Node: Add Options,  Next: Require Support,  Prev: Effective-Target Keywords,  Up: Test Directives

7.2.4 Features for 'dg-add-options'
-----------------------------------

The supported values of FEATURE for directive 'dg-add-options' are:

'arm_fp'
     '__ARM_FP' definition.  Only ARM targets support this feature, and
     only then in certain modes; see the *note arm_fp_ok effective
     target keyword: arm_fp_ok.

'arm_neon'
     NEON support.  Only ARM targets support this feature, and only then
     in certain modes; see the *note arm_neon_ok effective target
     keyword: arm_neon_ok.

'arm_neon_fp16'
     NEON and half-precision floating point support.  Only ARM targets
     support this feature, and only then in certain modes; see the *note
     arm_neon_fp16_ok effective target keyword: arm_neon_fp16_ok.

'arm_vfp3'
     arm vfp3 floating point support; see the *note arm_vfp3_ok
     effective target keyword: arm_vfp3_ok.

'bind_pic_locally'
     Add the target-specific flags needed to enable functions to bind
     locally when using pic/PIC passes in the testsuite.

'c99_runtime'
     Add the target-specific flags needed to access the C99 runtime.

'ieee'
     Add the target-specific flags needed to enable full IEEE compliance
     mode.

'mips16_attribute'
     'mips16' function attributes.  Only MIPS targets support this
     feature, and only then in certain modes.

'tls'
     Add the target-specific flags needed to use thread-local storage.


File: gccint.info,  Node: Require Support,  Next: Final Actions,  Prev: Add Options,  Up: Test Directives

7.2.5 Variants of 'dg-require-SUPPORT'
--------------------------------------

A few of the 'dg-require' directives take arguments.

'dg-require-iconv CODESET'
     Skip the test if the target does not support iconv.  CODESET is the
     codeset to convert to.

'dg-require-profiling PROFOPT'
     Skip the test if the target does not support profiling with option
     PROFOPT.

'dg-require-visibility VIS'
     Skip the test if the target does not support the 'visibility'
     attribute.  If VIS is '""', support for 'visibility("hidden")' is
     checked, for 'visibility("VIS")' otherwise.

 The original 'dg-require' directives were defined before there was
support for effective-target keywords.  The directives that do not take
arguments could be replaced with effective-target keywords.

'dg-require-alias ""'
     Skip the test if the target does not support the 'alias' attribute.

'dg-require-ascii-locale ""'
     Skip the test if the host does not support an ASCII locale.

'dg-require-compat-dfp ""'
     Skip this test unless both compilers in a 'compat' testsuite
     support decimal floating point.

'dg-require-cxa-atexit ""'
     Skip the test if the target does not support '__cxa_atexit'.  This
     is equivalent to 'dg-require-effective-target cxa_atexit'.

'dg-require-dll ""'
     Skip the test if the target does not support DLL attributes.

'dg-require-fork ""'
     Skip the test if the target does not support 'fork'.

'dg-require-gc-sections ""'
     Skip the test if the target's linker does not support the
     '--gc-sections' flags.  This is equivalent to
     'dg-require-effective-target gc-sections'.

'dg-require-host-local ""'
     Skip the test if the host is remote, rather than the same as the
     build system.  Some tests are incompatible with DejaGnu's handling
     of remote hosts, which involves copying the source file to the host
     and compiling it with a relative path and "'-o a.out'".

'dg-require-mkfifo ""'
     Skip the test if the target does not support 'mkfifo'.

'dg-require-named-sections ""'
     Skip the test is the target does not support named sections.  This
     is equivalent to 'dg-require-effective-target named_sections'.

'dg-require-weak ""'
     Skip the test if the target does not support weak symbols.

'dg-require-weak-override ""'
     Skip the test if the target does not support overriding weak
     symbols.


File: gccint.info,  Node: Final Actions,  Prev: Require Support,  Up: Test Directives

7.2.6 Commands for use in 'dg-final'
------------------------------------

The GCC testsuite defines the following directives to be used within
'dg-final'.

7.2.6.1 Scan a particular file
..............................

'scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]'
     Passes if REGEXP matches text in FILENAME.
'scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]'
     Passes if REGEXP does not match text in FILENAME.
'scan-module MODULE REGEXP [{ target/xfail SELECTOR }]'
     Passes if REGEXP matches in Fortran module MODULE.

7.2.6.2 Scan the assembly output
................................

'scan-assembler REGEX [{ target/xfail SELECTOR }]'
     Passes if REGEX matches text in the test's assembler output.

'scan-assembler-not REGEX [{ target/xfail SELECTOR }]'
     Passes if REGEX does not match text in the test's assembler output.

'scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]'
     Passes if REGEX is matched exactly NUM times in the test's
     assembler output.

'scan-assembler-dem REGEX [{ target/xfail SELECTOR }]'
     Passes if REGEX matches text in the test's demangled assembler
     output.

'scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]'
     Passes if REGEX does not match text in the test's demangled
     assembler output.

'scan-hidden SYMBOL [{ target/xfail SELECTOR }]'
     Passes if SYMBOL is defined as a hidden symbol in the test's
     assembly output.

'scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]'
     Passes if SYMBOL is not defined as a hidden symbol in the test's
     assembly output.

7.2.6.3 Scan optimization dump files
....................................

These commands are available for KIND of 'tree', 'rtl', and 'ipa'.

'scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]'
     Passes if REGEX matches text in the dump file with suffix SUFFIX.

'scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
     Passes if REGEX does not match text in the dump file with suffix
     SUFFIX.

'scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]'
     Passes if REGEX is found exactly NUM times in the dump file with
     suffix SUFFIX.

'scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]'
     Passes if REGEX matches demangled text in the dump file with suffix
     SUFFIX.

'scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
     Passes if REGEX does not match demangled text in the dump file with
     suffix SUFFIX.

7.2.6.4 Verify that an output files exists or not
.................................................

'output-exists [{ target/xfail SELECTOR }]'
     Passes if compiler output file exists.

'output-exists-not [{ target/xfail SELECTOR }]'
     Passes if compiler output file does not exist.

7.2.6.5 Check for LTO tests
...........................

'scan-symbol REGEXP [{ target/xfail SELECTOR }]'
     Passes if the pattern is present in the final executable.

7.2.6.6 Checks for 'gcov' tests
...............................

'run-gcov SOURCEFILE'
     Check line counts in 'gcov' tests.

'run-gcov [branches] [calls] { OPTS SOURCEFILE }'
     Check branch and/or call counts, in addition to line counts, in
     'gcov' tests.

7.2.6.7 Clean up generated test files
.....................................

Usually the test-framework removes files that were generated during
testing.  If a testcase, for example, uses any dumping mechanism to
inspect a passes dump file, the testsuite recognized the dump option
passed to the tool and schedules a final cleanup to remove these files.

 There are, however, following additional cleanup directives that can be
used to annotate a testcase "manually".
'cleanup-coverage-files'
     Removes coverage data files generated for this test.

'cleanup-modules "LIST-OF-EXTRA-MODULES"'
     Removes Fortran module files generated for this test, excluding the
     module names listed in keep-modules.  Cleaning up module files is
     usually done automatically by the testsuite by looking at the
     source files and removing the modules after the test has been
     executed.
          module MoD1
          end module MoD1
          module Mod2
          end module Mod2
          module moD3
          end module moD3
          module mod4
          end module mod4
          ! { dg-final { cleanup-modules "mod1 mod2" } } ! redundant
          ! { dg-final { keep-modules "mod3 mod4" } }

'keep-modules "LIST-OF-MODULES-NOT-TO-DELETE"'
     Whitespace separated list of module names that should not be
     deleted by cleanup-modules.  If the list of modules is empty, all
     modules defined in this file are kept.
          module maybe_unneeded
          end module maybe_unneeded
          module keep1
          end module keep1
          module keep2
          end module keep2
          ! { dg-final { keep-modules "keep1 keep2" } } ! just keep these two
          ! { dg-final { keep-modules "" } } ! keep all

'dg-keep-saved-temps "LIST-OF-SUFFIXES-NOT-TO-DELETE"'
     Whitespace separated list of suffixes that should not be deleted
     automatically in a testcase that uses '-save-temps'.
          // { dg-options "-save-temps -fpch-preprocess -I." }
          int main() { return 0; }
          // { dg-keep-saved-temps ".s" } ! just keep assembler file
          // { dg-keep-saved-temps ".s" ".i" } ! ... and .i
          // { dg-keep-saved-temps ".ii" ".o" } ! or just .ii and .o

'cleanup-profile-file'
     Removes profiling files generated for this test.

'cleanup-repo-files'
     Removes files generated for this test for '-frepo'.


File: gccint.info,  Node: Ada Tests,  Next: C Tests,  Prev: Test Directives,  Up: Testsuites

7.3 Ada Language Testsuites
===========================

The Ada testsuite includes executable tests from the ACATS testsuite,
publicly available at <http://www.ada-auth.org/acats.html>.

 These tests are integrated in the GCC testsuite in the 'ada/acats'
directory, and enabled automatically when running 'make check', assuming
the Ada language has been enabled when configuring GCC.

 You can also run the Ada testsuite independently, using 'make
check-ada', or run a subset of the tests by specifying which chapter to
run, e.g.:

     $ make check-ada CHAPTERS="c3 c9"

 The tests are organized by directory, each directory corresponding to a
chapter of the Ada Reference Manual.  So for example, 'c9' corresponds
to chapter 9, which deals with tasking features of the language.

 There is also an extra chapter called 'gcc' containing a template for
creating new executable tests, although this is deprecated in favor of
the 'gnat.dg' testsuite.

 The tests are run using two 'sh' scripts: 'run_acats' and 'run_all.sh'.
To run the tests using a simulator or a cross target, see the small
customization section at the top of 'run_all.sh'.

 These tests are run using the build tree: they can be run without doing
a 'make install'.


File: gccint.info,  Node: C Tests,  Next: libgcj Tests,  Prev: Ada Tests,  Up: Testsuites

7.4 C Language Testsuites
=========================

GCC contains the following C language testsuites, in the 'gcc/testsuite'
directory:

'gcc.dg'
     This contains tests of particular features of the C compiler, using
     the more modern 'dg' harness.  Correctness tests for various
     compiler features should go here if possible.

     Magic comments determine whether the file is preprocessed,
     compiled, linked or run.  In these tests, error and warning message
     texts are compared against expected texts or regular expressions
     given in comments.  These tests are run with the options '-ansi
     -pedantic' unless other options are given in the test.  Except as
     noted below they are not run with multiple optimization options.
'gcc.dg/compat'
     This subdirectory contains tests for binary compatibility using
     'lib/compat.exp', which in turn uses the language-independent
     support (*note Support for testing binary compatibility: compat
     Testing.).
'gcc.dg/cpp'
     This subdirectory contains tests of the preprocessor.
'gcc.dg/debug'
     This subdirectory contains tests for debug formats.  Tests in this
     subdirectory are run for each debug format that the compiler
     supports.
'gcc.dg/format'
     This subdirectory contains tests of the '-Wformat' format checking.
     Tests in this directory are run with and without '-DWIDE'.
'gcc.dg/noncompile'
     This subdirectory contains tests of code that should not compile
     and does not need any special compilation options.  They are run
     with multiple optimization options, since sometimes invalid code
     crashes the compiler with optimization.
'gcc.dg/special'
     FIXME: describe this.

'gcc.c-torture'
     This contains particular code fragments which have historically
     broken easily.  These tests are run with multiple optimization
     options, so tests for features which only break at some
     optimization levels belong here.  This also contains tests to check
     that certain optimizations occur.  It might be worthwhile to
     separate the correctness tests cleanly from the code quality tests,
     but it hasn't been done yet.

'gcc.c-torture/compat'
     FIXME: describe this.

     This directory should probably not be used for new tests.
'gcc.c-torture/compile'
     This testsuite contains test cases that should compile, but do not
     need to link or run.  These test cases are compiled with several
     different combinations of optimization options.  All warnings are
     disabled for these test cases, so this directory is not suitable if
     you wish to test for the presence or absence of compiler warnings.
     While special options can be set, and tests disabled on specific
     platforms, by the use of '.x' files, mostly these test cases should
     not contain platform dependencies.  FIXME: discuss how defines such
     as 'NO_LABEL_VALUES' and 'STACK_SIZE' are used.
'gcc.c-torture/execute'
     This testsuite contains test cases that should compile, link and
     run; otherwise the same comments as for 'gcc.c-torture/compile'
     apply.
'gcc.c-torture/execute/ieee'
     This contains tests which are specific to IEEE floating point.
'gcc.c-torture/unsorted'
     FIXME: describe this.

     This directory should probably not be used for new tests.
'gcc.misc-tests'
     This directory contains C tests that require special handling.
     Some of these tests have individual expect files, and others share
     special-purpose expect files:

     'bprob*.c'
          Test '-fbranch-probabilities' using
          'gcc.misc-tests/bprob.exp', which in turn uses the generic,
          language-independent framework (*note Support for testing
          profile-directed optimizations: profopt Testing.).

     'gcov*.c'
          Test 'gcov' output using 'gcov.exp', which in turn uses the
          language-independent support (*note Support for testing gcov:
          gcov Testing.).

     'i386-pf-*.c'
          Test i386-specific support for data prefetch using
          'i386-prefetch.exp'.

'gcc.test-framework'
     'dg-*.c'
          Test the testsuite itself using
          'gcc.test-framework/test-framework.exp'.

 FIXME: merge in 'testsuite/README.gcc' and discuss the format of test
cases and magic comments more.


File: gccint.info,  Node: libgcj Tests,  Next: LTO Testing,  Prev: C Tests,  Up: Testsuites

7.5 The Java library testsuites.
================================

Runtime tests are executed via 'make check' in the
'TARGET/libjava/testsuite' directory in the build tree.  Additional
runtime tests can be checked into this testsuite.

 Regression testing of the core packages in libgcj is also covered by
the Mauve testsuite.  The Mauve Project develops tests for the Java
Class Libraries.  These tests are run as part of libgcj testing by
placing the Mauve tree within the libjava testsuite sources at
'libjava/testsuite/libjava.mauve/mauve', or by specifying the location
of that tree when invoking 'make', as in 'make MAUVEDIR=~/mauve check'.

 To detect regressions, a mechanism in 'mauve.exp' compares the failures
for a test run against the list of expected failures in
'libjava/testsuite/libjava.mauve/xfails' from the source hierarchy.
Update this file when adding new failing tests to Mauve, or when fixing
bugs in libgcj that had caused Mauve test failures.

 We encourage developers to contribute test cases to Mauve.


File: gccint.info,  Node: LTO Testing,  Next: gcov Testing,  Prev: libgcj Tests,  Up: Testsuites

7.6 Support for testing link-time optimizations
===============================================

Tests for link-time optimizations usually require multiple source files
that are compiled separately, perhaps with different sets of options.
There are several special-purpose test directives used for these tests.

'{ dg-lto-do DO-WHAT-KEYWORD }'
     DO-WHAT-KEYWORD specifies how the test is compiled and whether it
     is executed.  It is one of:

     'assemble'
          Compile with '-c' to produce a relocatable object file.
     'link'
          Compile, assemble, and link to produce an executable file.
     'run'
          Produce and run an executable file, which is expected to
          return an exit code of 0.

     The default is 'assemble'.  That can be overridden for a set of
     tests by redefining 'dg-do-what-default' within the '.exp' file for
     those tests.

     Unlike 'dg-do', 'dg-lto-do' does not support an optional 'target'
     or 'xfail' list.  Use 'dg-skip-if', 'dg-xfail-if', or
     'dg-xfail-run-if'.

'{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}'
     This directive provides a list of one or more sets of compiler
     options to override LTO_OPTIONS.  Each test will be compiled and
     run with each of these sets of options.

'{ dg-extra-ld-options OPTIONS [{ target SELECTOR }]}'
     This directive adds OPTIONS to the linker options used.

'{ dg-suppress-ld-options OPTIONS [{ target SELECTOR }]}'
     This directive removes OPTIONS from the set of linker options used.


File: gccint.info,  Node: gcov Testing,  Next: profopt Testing,  Prev: LTO Testing,  Up: Testsuites

7.7 Support for testing 'gcov'
==============================

Language-independent support for testing 'gcov', and for checking that
branch profiling produces expected values, is provided by the expect
file 'lib/gcov.exp'.  'gcov' tests also rely on procedures in
'lib/gcc-dg.exp' to compile and run the test program.  A typical 'gcov'
test contains the following DejaGnu commands within comments:

     { dg-options "-fprofile-arcs -ftest-coverage" }
     { dg-do run { target native } }
     { dg-final { run-gcov sourcefile } }

 Checks of 'gcov' output can include line counts, branch percentages,
and call return percentages.  All of these checks are requested via
commands that appear in comments in the test's source file.  Commands to
check line counts are processed by default.  Commands to check branch
percentages and call return percentages are processed if the 'run-gcov'
command has arguments 'branches' or 'calls', respectively.  For example,
the following specifies checking both, as well as passing '-b' to
'gcov':

     { dg-final { run-gcov branches calls { -b sourcefile } } }

 A line count command appears within a comment on the source line that
is expected to get the specified count and has the form 'count(CNT)'.  A
test should only check line counts for lines that will get the same
count for any architecture.

 Commands to check branch percentages ('branch') and call return
percentages ('returns') are very similar to each other.  A beginning
command appears on or before the first of a range of lines that will
report the percentage, and the ending command follows that range of
lines.  The beginning command can include a list of percentages, all of
which are expected to be found within the range.  A range is terminated
by the next command of the same kind.  A command 'branch(end)' or
'returns(end)' marks the end of a range without starting a new one.  For
example:

     if (i > 10 && j > i && j < 20)  /* branch(27 50 75) */
                                     /* branch(end) */
       foo (i, j);

 For a call return percentage, the value specified is the percentage of
calls reported to return.  For a branch percentage, the value is either
the expected percentage or 100 minus that value, since the direction of
a branch can differ depending on the target or the optimization level.

 Not all branches and calls need to be checked.  A test should not check
for branches that might be optimized away or replaced with predicated
instructions.  Don't check for calls inserted by the compiler or ones
that might be inlined or optimized away.

 A single test can check for combinations of line counts, branch
percentages, and call return percentages.  The command to check a line
count must appear on the line that will report that count, but commands
to check branch percentages and call return percentages can bracket the
lines that report them.


File: gccint.info,  Node: profopt Testing,  Next: compat Testing,  Prev: gcov Testing,  Up: Testsuites

7.8 Support for testing profile-directed optimizations
======================================================

The file 'profopt.exp' provides language-independent support for
checking correct execution of a test built with profile-directed
optimization.  This testing requires that a test program be built and
executed twice.  The first time it is compiled to generate profile data,
and the second time it is compiled to use the data that was generated
during the first execution.  The second execution is to verify that the
test produces the expected results.

 To check that the optimization actually generated better code, a test
can be built and run a third time with normal optimizations to verify
that the performance is better with the profile-directed optimizations.
'profopt.exp' has the beginnings of this kind of support.

 'profopt.exp' provides generic support for profile-directed
optimizations.  Each set of tests that uses it provides information
about a specific optimization:

'tool'
     tool being tested, e.g., 'gcc'

'profile_option'
     options used to generate profile data

'feedback_option'
     options used to optimize using that profile data

'prof_ext'
     suffix of profile data files

'PROFOPT_OPTIONS'
     list of options with which to run each test, similar to the lists
     for torture tests

'{ dg-final-generate { LOCAL-DIRECTIVE } }'
     This directive is similar to 'dg-final', but the LOCAL-DIRECTIVE is
     run after the generation of profile data.

'{ dg-final-use { LOCAL-DIRECTIVE } }'
     The LOCAL-DIRECTIVE is run after the profile data have been used.


File: gccint.info,  Node: compat Testing,  Next: Torture Tests,  Prev: profopt Testing,  Up: Testsuites

7.9 Support for testing binary compatibility
============================================

The file 'compat.exp' provides language-independent support for binary
compatibility testing.  It supports testing interoperability of two
compilers that follow the same ABI, or of multiple sets of compiler
options that should not affect binary compatibility.  It is intended to
be used for testsuites that complement ABI testsuites.

 A test supported by this framework has three parts, each in a separate
source file: a main program and two pieces that interact with each other
to split up the functionality being tested.

'TESTNAME_main.SUFFIX'
     Contains the main program, which calls a function in file
     'TESTNAME_x.SUFFIX'.

'TESTNAME_x.SUFFIX'
     Contains at least one call to a function in 'TESTNAME_y.SUFFIX'.

'TESTNAME_y.SUFFIX'
     Shares data with, or gets arguments from, 'TESTNAME_x.SUFFIX'.

 Within each test, the main program and one functional piece are
compiled by the GCC under test.  The other piece can be compiled by an
alternate compiler.  If no alternate compiler is specified, then all
three source files are all compiled by the GCC under test.  You can
specify pairs of sets of compiler options.  The first element of such a
pair specifies options used with the GCC under test, and the second
element of the pair specifies options used with the alternate compiler.
Each test is compiled with each pair of options.

 'compat.exp' defines default pairs of compiler options.  These can be
overridden by defining the environment variable 'COMPAT_OPTIONS' as:

     COMPAT_OPTIONS="[list [list {TST1} {ALT1}]
       ...[list {TSTN} {ALTN}]]"

 where TSTI and ALTI are lists of options, with TSTI used by the
compiler under test and ALTI used by the alternate compiler.  For
example, with '[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]',
the test is first built with '-g -O0' by the compiler under test and
with '-O3' by the alternate compiler.  The test is built a second time
using '-fpic' by the compiler under test and '-fPIC -O2' by the
alternate compiler.

 An alternate compiler is specified by defining an environment variable
to be the full pathname of an installed compiler; for C define
'ALT_CC_UNDER_TEST', and for C++ define 'ALT_CXX_UNDER_TEST'.  These
will be written to the 'site.exp' file used by DejaGnu.  The default is
to build each test with the compiler under test using the first of each
pair of compiler options from 'COMPAT_OPTIONS'.  When
'ALT_CC_UNDER_TEST' or 'ALT_CXX_UNDER_TEST' is 'same', each test is
built using the compiler under test but with combinations of the options
from 'COMPAT_OPTIONS'.

 To run only the C++ compatibility suite using the compiler under test
and another version of GCC using specific compiler options, do the
following from 'OBJDIR/gcc':

     rm site.exp
     make -k \
       ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \
       COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \
       check-c++ \
       RUNTESTFLAGS="compat.exp"

 A test that fails when the source files are compiled with different
compilers, but passes when the files are compiled with the same
compiler, demonstrates incompatibility of the generated code or runtime
support.  A test that fails for the alternate compiler but passes for
the compiler under test probably tests for a bug that was fixed in the
compiler under test but is present in the alternate compiler.

 The binary compatibility tests support a small number of test framework
commands that appear within comments in a test file.

'dg-require-*'
     These commands can be used in 'TESTNAME_main.SUFFIX' to skip the
     test if specific support is not available on the target.

'dg-options'
     The specified options are used for compiling this particular source
     file, appended to the options from 'COMPAT_OPTIONS'.  When this
     command appears in 'TESTNAME_main.SUFFIX' the options are also used
     to link the test program.

'dg-xfail-if'
     This command can be used in a secondary source file to specify that
     compilation is expected to fail for particular options on
     particular targets.


File: gccint.info,  Node: Torture Tests,  Prev: compat Testing,  Up: Testsuites

7.10 Support for torture testing using multiple options
=======================================================

Throughout the compiler testsuite there are several directories whose
tests are run multiple times, each with a different set of options.
These are known as torture tests.  'lib/torture-options.exp' defines
procedures to set up these lists:

'torture-init'
     Initialize use of torture lists.
'set-torture-options'
     Set lists of torture options to use for tests with and without
     loops.  Optionally combine a set of torture options with a set of
     other options, as is done with Objective-C runtime options.
'torture-finish'
     Finalize use of torture lists.

 The '.exp' file for a set of tests that use torture options must
include calls to these three procedures if:

   * It calls 'gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS.

   * It calls ${TOOL}'-torture' or ${TOOL}'-torture-execute', where TOOL
     is 'c', 'fortran', or 'objc'.

   * It calls 'dg-pch'.

 It is not necessary for a '.exp' file that calls 'gcc-dg-runtest' to
call the torture procedures if the tests should use the list in
DG_TORTURE_OPTIONS defined in 'gcc-dg.exp'.

 Most uses of torture options can override the default lists by defining
TORTURE_OPTIONS or add to the default list by defining
ADDITIONAL_TORTURE_OPTIONS.  Define these in a '.dejagnurc' file or add
them to the 'site.exp' file; for example

     set ADDITIONAL_TORTURE_OPTIONS  [list \
       { -O2 -ftree-loop-linear } \
       { -O2 -fpeel-loops } ]


File: gccint.info,  Node: Options,  Next: Passes,  Prev: Testsuites,  Up: Top

8 Option specification files
****************************

Most GCC command-line options are described by special option definition
files, the names of which conventionally end in '.opt'.  This chapter
describes the format of these files.

* Menu:

* Option file format::   The general layout of the files
* Option properties::    Supported option properties


File: gccint.info,  Node: Option file format,  Next: Option properties,  Up: Options

8.1 Option file format
======================

Option files are a simple list of records in which each field occupies
its own line and in which the records themselves are separated by blank
lines.  Comments may appear on their own line anywhere within the file
and are preceded by semicolons.  Whitespace is allowed before the
semicolon.

 The files can contain the following types of record:

   * A language definition record.  These records have two fields: the
     string 'Language' and the name of the language.  Once a language
     has been declared in this way, it can be used as an option
     property.  *Note Option properties::.

   * A target specific save record to save additional information.
     These records have two fields: the string 'TargetSave', and a
     declaration type to go in the 'cl_target_option' structure.

   * A variable record to define a variable used to store option
     information.  These records have two fields: the string 'Variable',
     and a declaration of the type and name of the variable, optionally
     with an initializer (but without any trailing ';').  These records
     may be used for variables used for many options where declaring the
     initializer in a single option definition record, or duplicating it
     in many records, would be inappropriate, or for variables set in
     option handlers rather than referenced by 'Var' properties.

   * A variable record to define a variable used to store option
     information.  These records have two fields: the string
     'TargetVariable', and a declaration of the type and name of the
     variable, optionally with an initializer (but without any trailing
     ';').  'TargetVariable' is a combination of 'Variable' and
     'TargetSave' records in that the variable is defined in the
     'gcc_options' structure, but these variables are also stored in the
     'cl_target_option' structure.  The variables are saved in the
     target save code and restored in the target restore code.

   * A variable record to record any additional files that the
     'options.h' file should include.  This is useful to provide
     enumeration or structure definitions needed for target variables.
     These records have two fields: the string 'HeaderInclude' and the
     name of the include file.

   * A variable record to record any additional files that the
     'options.c' or 'options-save.c' file should include.  This is
     useful to provide inline functions needed for target variables
     and/or '#ifdef' sequences to properly set up the initialization.
     These records have two fields: the string 'SourceInclude' and the
     name of the include file.

   * An enumeration record to define a set of strings that may be used
     as arguments to an option or options.  These records have three
     fields: the string 'Enum', a space-separated list of properties and
     help text used to describe the set of strings in '--help' output.
     Properties use the same format as option properties; the following
     are valid:
     'Name(NAME)'
          This property is required; NAME must be a name (suitable for
          use in C identifiers) used to identify the set of strings in
          'Enum' option properties.

     'Type(TYPE)'
          This property is required; TYPE is the C type for variables
          set by options using this enumeration together with 'Var'.

     'UnknownError(MESSAGE)'
          The message MESSAGE will be used as an error message if the
          argument is invalid; for enumerations without 'UnknownError',
          a generic error message is used.  MESSAGE should contain a
          single '%qs' format, which will be used to format the invalid
          argument.

   * An enumeration value record to define one of the strings in a set
     given in an 'Enum' record.  These records have two fields: the
     string 'EnumValue' and a space-separated list of properties.
     Properties use the same format as option properties; the following
     are valid:
     'Enum(NAME)'
          This property is required; NAME says which 'Enum' record this
          'EnumValue' record corresponds to.

     'String(STRING)'
          This property is required; STRING is the string option
          argument being described by this record.

     'Value(VALUE)'
          This property is required; it says what value (representable
          as 'int') should be used for the given string.

     'Canonical'
          This property is optional.  If present, it says the present
          string is the canonical one among all those with the given
          value.  Other strings yielding that value will be mapped to
          this one so specs do not need to handle them.

     'DriverOnly'
          This property is optional.  If present, the present string
          will only be accepted by the driver.  This is used for cases
          such as '-march=native' that are processed by the driver so
          that 'gcc -v' shows how the options chosen depended on the
          system on which the compiler was run.

   * An option definition record.  These records have the following
     fields:
       1. the name of the option, with the leading "-" removed
       2. a space-separated list of option properties (*note Option
          properties::)
       3. the help text to use for '--help' (omitted if the second field
          contains the 'Undocumented' property).

     By default, all options beginning with "f", "W" or "m" are
     implicitly assumed to take a "no-" form.  This form should not be
     listed separately.  If an option beginning with one of these
     letters does not have a "no-" form, you can use the
     'RejectNegative' property to reject it.

     The help text is automatically line-wrapped before being displayed.
     Normally the name of the option is printed on the left-hand side of
     the output and the help text is printed on the right.  However, if
     the help text contains a tab character, the text to the left of the
     tab is used instead of the option's name and the text to the right
     of the tab forms the help text.  This allows you to elaborate on
     what type of argument the option takes.

   * A target mask record.  These records have one field of the form
     'Mask(X)'.  The options-processing script will automatically
     allocate a bit in 'target_flags' (*note Run-time Target::) for each
     mask name X and set the macro 'MASK_X' to the appropriate bitmask.
     It will also declare a 'TARGET_X' macro that has the value 1 when
     bit 'MASK_X' is set and 0 otherwise.

     They are primarily intended to declare target masks that are not
     associated with user options, either because these masks represent
     internal switches or because the options are not available on all
     configurations and yet the masks always need to be defined.


File: gccint.info,  Node: Option properties,  Prev: Option file format,  Up: Options

8.2 Option properties
=====================

The second field of an option record can specify any of the following
properties.  When an option takes an argument, it is enclosed in
parentheses following the option property name.  The parser that handles
option files is quite simplistic, and will be tricked by any nested
parentheses within the argument text itself; in this case, the entire
option argument can be wrapped in curly braces within the parentheses to
demarcate it, e.g.:

     Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)})

'Common'
     The option is available for all languages and targets.

'Target'
     The option is available for all languages but is target-specific.

'Driver'
     The option is handled by the compiler driver using code not shared
     with the compilers proper ('cc1' etc.).

'LANGUAGE'
     The option is available when compiling for the given language.

     It is possible to specify several different languages for the same
     option.  Each LANGUAGE must have been declared by an earlier
     'Language' record.  *Note Option file format::.

'RejectDriver'
     The option is only handled by the compilers proper ('cc1' etc.) and
     should not be accepted by the driver.

'RejectNegative'
     The option does not have a "no-" form.  All options beginning with
     "f", "W" or "m" are assumed to have a "no-" form unless this
     property is used.

'Negative(OTHERNAME)'
     The option will turn off another option OTHERNAME, which is the
     option name with the leading "-" removed.  This chain action will
     propagate through the 'Negative' property of the option to be
     turned off.

     As a consequence, if you have a group of mutually-exclusive
     options, their 'Negative' properties should form a circular chain.
     For example, if options '-A', '-B' and '-C' are mutually exclusive,
     their respective 'Negative' properties should be 'Negative(B)',
     'Negative(C)' and 'Negative(A)'.

'Joined'
'Separate'
     The option takes a mandatory argument.  'Joined' indicates that the
     option and argument can be included in the same 'argv' entry (as
     with '-mflush-func=NAME', for example).  'Separate' indicates that
     the option and argument can be separate 'argv' entries (as with
     '-o').  An option is allowed to have both of these properties.

'JoinedOrMissing'
     The option takes an optional argument.  If the argument is given,
     it will be part of the same 'argv' entry as the option itself.

     This property cannot be used alongside 'Joined' or 'Separate'.

'MissingArgError(MESSAGE)'
     For an option marked 'Joined' or 'Separate', the message MESSAGE
     will be used as an error message if the mandatory argument is
     missing; for options without 'MissingArgError', a generic error
     message is used.  MESSAGE should contain a single '%qs' format,
     which will be used to format the name of the option passed.

'Args(N)'
     For an option marked 'Separate', indicate that it takes N
     arguments.  The default is 1.

'UInteger'
     The option's argument is a non-negative integer.  The option parser
     will check and convert the argument before passing it to the
     relevant option handler.  'UInteger' should also be used on options
     like '-falign-loops' where both '-falign-loops' and
     '-falign-loops'=N are supported to make sure the saved options are
     given a full integer.

'ToLower'
     The option's argument should be converted to lowercase as part of
     putting it in canonical form, and before comparing with the strings
     indicated by any 'Enum' property.

'NoDriverArg'
     For an option marked 'Separate', the option only takes an argument
     in the compiler proper, not in the driver.  This is for
     compatibility with existing options that are used both directly and
     via '-Wp,'; new options should not have this property.

'Var(VAR)'
     The state of this option should be stored in variable VAR (actually
     a macro for 'global_options.x_VAR').  The way that the state is
     stored depends on the type of option:

        * If the option uses the 'Mask' or 'InverseMask' properties, VAR
          is the integer variable that contains the mask.

        * If the option is a normal on/off switch, VAR is an integer
          variable that is nonzero when the option is enabled.  The
          options parser will set the variable to 1 when the positive
          form of the option is used and 0 when the "no-" form is used.

        * If the option takes an argument and has the 'UInteger'
          property, VAR is an integer variable that stores the value of
          the argument.

        * If the option takes an argument and has the 'Enum' property,
          VAR is a variable (type given in the 'Type' property of the
          'Enum' record whose 'Name' property has the same argument as
          the 'Enum' property of this option) that stores the value of
          the argument.

        * If the option has the 'Defer' property, VAR is a pointer to a
          'VEC(cl_deferred_option,heap)' that stores the option for
          later processing.  (VAR is declared with type 'void *' and
          needs to be cast to 'VEC(cl_deferred_option,heap)' before
          use.)

        * Otherwise, if the option takes an argument, VAR is a pointer
          to the argument string.  The pointer will be null if the
          argument is optional and wasn't given.

     The option-processing script will usually zero-initialize VAR.  You
     can modify this behavior using 'Init'.

'Var(VAR, SET)'
     The option controls an integer variable VAR and is active when VAR
     equals SET.  The option parser will set VAR to SET when the
     positive form of the option is used and '!SET' when the "no-" form
     is used.

     VAR is declared in the same way as for the single-argument form
     described above.

'Init(VALUE)'
     The variable specified by the 'Var' property should be statically
     initialized to VALUE.  If more than one option using the same
     variable specifies 'Init', all must specify the same initializer.

'Mask(NAME)'
     The option is associated with a bit in the 'target_flags' variable
     (*note Run-time Target::) and is active when that bit is set.  You
     may also specify 'Var' to select a variable other than
     'target_flags'.

     The options-processing script will automatically allocate a unique
     bit for the option.  If the option is attached to 'target_flags',
     the script will set the macro 'MASK_NAME' to the appropriate
     bitmask.  It will also declare a 'TARGET_NAME' macro that has the
     value 1 when the option is active and 0 otherwise.  If you use
     'Var' to attach the option to a different variable, the bitmask
     macro with be called 'OPTION_MASK_NAME'.

'InverseMask(OTHERNAME)'
'InverseMask(OTHERNAME, THISNAME)'
     The option is the inverse of another option that has the
     'Mask(OTHERNAME)' property.  If THISNAME is given, the
     options-processing script will declare a 'TARGET_THISNAME' macro
     that is 1 when the option is active and 0 otherwise.

'Enum(NAME)'
     The option's argument is a string from the set of strings
     associated with the corresponding 'Enum' record.  The string is
     checked and converted to the integer specified in the corresponding
     'EnumValue' record before being passed to option handlers.

'Defer'
     The option should be stored in a vector, specified with 'Var', for
     later processing.

'Alias(OPT)'
'Alias(OPT, ARG)'
'Alias(OPT, POSARG, NEGARG)'
     The option is an alias for '-OPT' (or the negative form of that
     option, depending on 'NegativeAlias').  In the first form, any
     argument passed to the alias is considered to be passed to '-OPT',
     and '-OPT' is considered to be negated if the alias is used in
     negated form.  In the second form, the alias may not be negated or
     have an argument, and POSARG is considered to be passed as an
     argument to '-OPT'.  In the third form, the alias may not have an
     argument, if the alias is used in the positive form then POSARG is
     considered to be passed to '-OPT', and if the alias is used in the
     negative form then NEGARG is considered to be passed to '-OPT'.

     Aliases should not specify 'Var' or 'Mask' or 'UInteger'.  Aliases
     should normally specify the same languages as the target of the
     alias; the flags on the target will be used to determine any
     diagnostic for use of an option for the wrong language, while those
     on the alias will be used to identify what command-line text is the
     option and what text is any argument to that option.

     When an 'Alias' definition is used for an option, driver specs do
     not need to handle it and no 'OPT_' enumeration value is defined
     for it; only the canonical form of the option will be seen in those
     places.

'NegativeAlias'
     For an option marked with 'Alias(OPT)', the option is considered to
     be an alias for the positive form of '-OPT' if negated and for the
     negative form of '-OPT' if not negated.  'NegativeAlias' may not be
     used with the forms of 'Alias' taking more than one argument.

'Ignore'
     This option is ignored apart from printing any warning specified
     using 'Warn'.  The option will not be seen by specs and no 'OPT_'
     enumeration value is defined for it.

'SeparateAlias'
     For an option marked with 'Joined', 'Separate' and 'Alias', the
     option only acts as an alias when passed a separate argument; with
     a joined argument it acts as a normal option, with an 'OPT_'
     enumeration value.  This is for compatibility with the Java '-d'
     option and should not be used for new options.

'Warn(MESSAGE)'
     If this option is used, output the warning MESSAGE.  MESSAGE is a
     format string, either taking a single operand with a '%qs' format
     which is the option name, or not taking any operands, which is
     passed to the 'warning' function.  If an alias is marked 'Warn',
     the target of the alias must not also be marked 'Warn'.

'Report'
     The state of the option should be printed by '-fverbose-asm'.

'Warning'
     This is a warning option and should be shown as such in '--help'
     output.  This flag does not currently affect anything other than
     '--help'.

'Optimization'
     This is an optimization option.  It should be shown as such in
     '--help' output, and any associated variable named using 'Var'
     should be saved and restored when the optimization level is changed
     with 'optimize' attributes.

'Undocumented'
     The option is deliberately missing documentation and should not be
     included in the '--help' output.

'Condition(COND)'
     The option should only be accepted if preprocessor condition COND
     is true.  Note that any C declarations associated with the option
     will be present even if COND is false; COND simply controls whether
     the option is accepted and whether it is printed in the '--help'
     output.

'Save'
     Build the 'cl_target_option' structure to hold a copy of the
     option, add the functions 'cl_target_option_save' and
     'cl_target_option_restore' to save and restore the options.

'SetByCombined'
     The option may also be set by a combined option such as
     '-ffast-math'.  This causes the 'gcc_options' struct to have a
     field 'frontend_set_NAME', where 'NAME' is the name of the field
     holding the value of this option (without the leading 'x_').  This
     gives the front end a way to indicate that the value has been set
     explicitly and should not be changed by the combined option.  For
     example, some front ends use this to prevent '-ffast-math' and
     '-fno-fast-math' from changing the value of '-fmath-errno' for
     languages that do not use 'errno'.

'EnabledBy(OPT)'
'EnabledBy(OPT || OPT2)'
'EnabledBy(OPT && OPT2)'
     If not explicitly set, the option is set to the value of '-OPT';
     multiple options can be given, separated by '||'.  The third form
     using '&&' specifies that the option is only set if both OPT and
     OPT2 are set.  The options OPT and OPT2 must have the 'Common'
     property; otherwise, use 'LangEnabledBy'.

'LangEnabledBy(LANGUAGE, OPT)'
'LangEnabledBy(LANGUAGE, OPT, POSARG, NEGARG)'
     When compiling for the given language, the option is set to the
     value of '-OPT', if not explicitly set.  OPT can be also a list of
     '||' separated options.  In the second form, if OPT is used in the
     positive form then POSARG is considered to be passed to the option,
     and if OPT is used in the negative form then NEGARG is considered
     to be passed to the option.  It is possible to specify several
     different languages.  Each LANGUAGE must have been declared by an
     earlier 'Language' record.  *Note Option file format::.

'NoDWARFRecord'
     The option is omitted from the producer string written by
     '-grecord-gcc-switches'.

'PchIgnore'
     Even if this is a target option, this option will not be recorded /
     compared to determine if a precompiled header file matches.

'CPP(VAR)'
     The state of this option should be kept in sync with the
     preprocessor option VAR.  If this property is set, then properties
     'Var' and 'Init' must be set as well.

'CppReason(CPP_W_ENUM)'
     This warning option corresponds to 'cpplib.h' warning reason code
     CPP_W_ENUM.  This should only be used for warning options of the
     C-family front-ends.


File: gccint.info,  Node: Passes,  Next: GENERIC,  Prev: Options,  Up: Top

9 Passes and Files of the Compiler
**********************************

This chapter is dedicated to giving an overview of the optimization and
code generation passes of the compiler.  In the process, it describes
some of the language front end interface, though this description is no
where near complete.

* Menu:

* Parsing pass::         The language front end turns text into bits.
* Cilk Plus Transformation:: Transform Cilk Plus Code to equivalent C/C++.
* Gimplification pass::  The bits are turned into something we can optimize.
* Pass manager::         Sequencing the optimization passes.
* Tree SSA passes::      Optimizations on a high-level representation.
* RTL passes::           Optimizations on a low-level representation.
* Optimization info::    Dumping optimization information from passes.


File: gccint.info,  Node: Parsing pass,  Next: Cilk Plus Transformation,  Up: Passes

9.1 Parsing pass
================

The language front end is invoked only once, via
'lang_hooks.parse_file', to parse the entire input.  The language front
end may use any intermediate language representation deemed appropriate.
The C front end uses GENERIC trees (*note GENERIC::), plus a double
handful of language specific tree codes defined in 'c-common.def'.  The
Fortran front end uses a completely different private representation.

 At some point the front end must translate the representation used in
the front end to a representation understood by the language-independent
portions of the compiler.  Current practice takes one of two forms.  The
C front end manually invokes the gimplifier (*note GIMPLE::) on each
function, and uses the gimplifier callbacks to convert the
language-specific tree nodes directly to GIMPLE before passing the
function off to be compiled.  The Fortran front end converts from a
private representation to GENERIC, which is later lowered to GIMPLE when
the function is compiled.  Which route to choose probably depends on how
well GENERIC (plus extensions) can be made to match up with the source
language and necessary parsing data structures.

 BUG: Gimplification must occur before nested function lowering, and
nested function lowering must be done by the front end before passing
the data off to cgraph.

 TODO: Cgraph should control nested function lowering.  It would only be
invoked when it is certain that the outer-most function is used.

 TODO: Cgraph needs a gimplify_function callback.  It should be invoked
when (1) it is certain that the function is used, (2) warning flags
specified by the user require some amount of compilation in order to
honor, (3) the language indicates that semantic analysis is not complete
until gimplification occurs.  Hum... this sounds overly complicated.
Perhaps we should just have the front end gimplify always; in most cases
it's only one function call.

 The front end needs to pass all function definitions and top level
declarations off to the middle-end so that they can be compiled and
emitted to the object file.  For a simple procedural language, it is
usually most convenient to do this as each top level declaration or
definition is seen.  There is also a distinction to be made between
generating functional code and generating complete debug information.
The only thing that is absolutely required for functional code is that
function and data _definitions_ be passed to the middle-end.  For
complete debug information, function, data and type declarations should
all be passed as well.

 In any case, the front end needs each complete top-level function or
data declaration, and each data definition should be passed to
'rest_of_decl_compilation'.  Each complete type definition should be
passed to 'rest_of_type_compilation'.  Each function definition should
be passed to 'cgraph_finalize_function'.

 TODO: I know rest_of_compilation currently has all sorts of RTL
generation semantics.  I plan to move all code generation bits (both
Tree and RTL) to compile_function.  Should we hide cgraph from the front
ends and move back to rest_of_compilation as the official interface?
Possibly we should rename all three interfaces such that the names match
in some meaningful way and that is more descriptive than "rest_of".

 The middle-end will, at its option, emit the function and data
definitions immediately or queue them for later processing.


File: gccint.info,  Node: Cilk Plus Transformation,  Next: Gimplification pass,  Prev: Parsing pass,  Up: Passes

9.2 Cilk Plus Transformation
============================

If Cilk Plus generation (flag '-fcilkplus') is enabled, all the Cilk
Plus code is transformed into equivalent C and C++ functions.  Majority
of this transformation occurs toward the end of the parsing and right
before the gimplification pass.

 These are the major components to the Cilk Plus language extension:
   * Array Notations: During parsing phase, all the array notation
     specific information is stored in 'ARRAY_NOTATION_REF' tree using
     the function 'c_parser_array_notation'.  During the end of parsing,
     we check the entire function to see if there are any array notation
     specific code (using the function 'contains_array_notation_expr').
     If this function returns true, then we expand them using either
     'expand_array_notation_exprs' or 'build_array_notation_expr'.  For
     the cases where array notations are inside conditions, they are
     transformed using the function 'fix_conditional_array_notations'.
     The C language-specific routines are located in
     'c/c-array-notation.c' and the equivalent C++ routines are in the
     file 'cp/cp-array-notation.c'.  Common routines such as functions
     to initialize built-in functions are stored in
     'array-notation-common.c'.

   * Cilk keywords:
        * '_Cilk_spawn': The '_Cilk_spawn' keyword is parsed and the
          function it contains is marked as a spawning function.  The
          spawning function is called the spawner.  At the end of the
          parsing phase, appropriate built-in functions are added to the
          spawner that are defined in the Cilk runtime.  The appropriate
          locations of these functions, and the internal structures are
          detailed in 'cilk_init_builtins' in the file 'cilk-common.c'.
          The pointers to Cilk functions and fields of internal
          structures are described in 'cilk.h'.  The built-in functions
          are described in 'cilk-builtins.def'.

          During gimplification, a new "spawn-helper" function is
          created.  The spawned function is replaced with a spawn helper
          function in the spawner.  The spawned function-call is moved
          into the spawn helper.  The main function that does these
          transformations is 'gimplify_cilk_spawn' in 'c-family/cilk.c'.
          In the spawn-helper, the gimplification function
          'gimplify_call_expr', inserts a function call
          '__cilkrts_detach'.  This function is expanded by
          'builtin_expand_cilk_detach' located in 'c-family/cilk.c'.

        * '_Cilk_sync': '_Cilk_sync' is parsed like a keyword.  During
          gimplification, the function 'gimplify_cilk_sync' in
          'c-family/cilk.c', will replace this keyword with a set of
          functions that are stored in the Cilk runtime.  One of the
          internal functions inserted during gimplification,
          '__cilkrts_pop_frame' must be expanded by the compiler and is
          done by 'builtin_expand_cilk_pop_frame' in 'cilk-common.c'.

 Documentation about Cilk Plus and language specification is provided
under the "Learn" section in <http://www.cilkplus.org/>.  It is worth
mentioning that the current implementation follows ABI 1.1.


File: gccint.info,  Node: Gimplification pass,  Next: Pass manager,  Prev: Cilk Plus Transformation,  Up: Passes

9.3 Gimplification pass
=======================

"Gimplification" is a whimsical term for the process of converting the
intermediate representation of a function into the GIMPLE language
(*note GIMPLE::).  The term stuck, and so words like "gimplification",
"gimplify", "gimplifier" and the like are sprinkled throughout this
section of code.

 While a front end may certainly choose to generate GIMPLE directly if
it chooses, this can be a moderately complex process unless the
intermediate language used by the front end is already fairly simple.
Usually it is easier to generate GENERIC trees plus extensions and let
the language-independent gimplifier do most of the work.

 The main entry point to this pass is 'gimplify_function_tree' located
in 'gimplify.c'.  From here we process the entire function gimplifying
each statement in turn.  The main workhorse for this pass is
'gimplify_expr'.  Approximately everything passes through here at least
once, and it is from here that we invoke the 'lang_hooks.gimplify_expr'
callback.

 The callback should examine the expression in question and return
'GS_UNHANDLED' if the expression is not a language specific construct
that requires attention.  Otherwise it should alter the expression in
some way to such that forward progress is made toward producing valid
GIMPLE.  If the callback is certain that the transformation is complete
and the expression is valid GIMPLE, it should return 'GS_ALL_DONE'.
Otherwise it should return 'GS_OK', which will cause the expression to
be processed again.  If the callback encounters an error during the
transformation (because the front end is relying on the gimplification
process to finish semantic checks), it should return 'GS_ERROR'.


File: gccint.info,  Node: Pass manager,  Next: Tree SSA passes,  Prev: Gimplification pass,  Up: Passes

9.4 Pass manager
================

The pass manager is located in 'passes.c', 'tree-optimize.c' and
'tree-pass.h'.  It processes passes as described in 'passes.def'.  Its
job is to run all of the individual passes in the correct order, and
take care of standard bookkeeping that applies to every pass.

 The theory of operation is that each pass defines a structure that
represents everything we need to know about that pass--when it should be
run, how it should be run, what intermediate language form or
on-the-side data structures it needs.  We register the pass to be run in
some particular order, and the pass manager arranges for everything to
happen in the correct order.

 The actuality doesn't completely live up to the theory at present.
Command-line switches and 'timevar_id_t' enumerations must still be
defined elsewhere.  The pass manager validates constraints but does not
attempt to (re-)generate data structures or lower intermediate language
form based on the requirements of the next pass.  Nevertheless, what is
present is useful, and a far sight better than nothing at all.

 Each pass should have a unique name.  Each pass may have its own dump
file (for GCC debugging purposes).  Passes with a name starting with a
star do not dump anything.  Sometimes passes are supposed to share a
dump file / option name.  To still give these unique names, you can use
a prefix that is delimited by a space from the part that is used for the
dump file / option name.  E.g.  When the pass name is "ud dce", the name
used for dump file/options is "dce".

 TODO: describe the global variables set up by the pass manager, and a
brief description of how a new pass should use it.  I need to look at
what info RTL passes use first...


File: gccint.info,  Node: Tree SSA passes,  Next: RTL passes,  Prev: Pass manager,  Up: Passes

9.5 Tree SSA passes
===================

The following briefly describes the Tree optimization passes that are
run after gimplification and what source files they are located in.

   * Remove useless statements

     This pass is an extremely simple sweep across the gimple code in
     which we identify obviously dead code and remove it.  Here we do
     things like simplify 'if' statements with constant conditions,
     remove exception handling constructs surrounding code that
     obviously cannot throw, remove lexical bindings that contain no
     variables, and other assorted simplistic cleanups.  The idea is to
     get rid of the obvious stuff quickly rather than wait until later
     when it's more work to get rid of it.  This pass is located in
     'tree-cfg.c' and described by 'pass_remove_useless_stmts'.

   * OpenMP lowering

     If OpenMP generation ('-fopenmp') is enabled, this pass lowers
     OpenMP constructs into GIMPLE.

     Lowering of OpenMP constructs involves creating replacement
     expressions for local variables that have been mapped using data
     sharing clauses, exposing the control flow of most synchronization
     directives and adding region markers to facilitate the creation of
     the control flow graph.  The pass is located in 'omp-low.c' and is
     described by 'pass_lower_omp'.

   * OpenMP expansion

     If OpenMP generation ('-fopenmp') is enabled, this pass expands
     parallel regions into their own functions to be invoked by the
     thread library.  The pass is located in 'omp-low.c' and is
     described by 'pass_expand_omp'.

   * Lower control flow

     This pass flattens 'if' statements ('COND_EXPR') and moves lexical
     bindings ('BIND_EXPR') out of line.  After this pass, all 'if'
     statements will have exactly two 'goto' statements in its 'then'
     and 'else' arms.  Lexical binding information for each statement
     will be found in 'TREE_BLOCK' rather than being inferred from its
     position under a 'BIND_EXPR'.  This pass is found in 'gimple-low.c'
     and is described by 'pass_lower_cf'.

   * Lower exception handling control flow

     This pass decomposes high-level exception handling constructs
     ('TRY_FINALLY_EXPR' and 'TRY_CATCH_EXPR') into a form that
     explicitly represents the control flow involved.  After this pass,
     'lookup_stmt_eh_region' will return a non-negative number for any
     statement that may have EH control flow semantics; examine
     'tree_can_throw_internal' or 'tree_can_throw_external' for exact
     semantics.  Exact control flow may be extracted from
     'foreach_reachable_handler'.  The EH region nesting tree is defined
     in 'except.h' and built in 'except.c'.  The lowering pass itself is
     in 'tree-eh.c' and is described by 'pass_lower_eh'.

   * Build the control flow graph

     This pass decomposes a function into basic blocks and creates all
     of the edges that connect them.  It is located in 'tree-cfg.c' and
     is described by 'pass_build_cfg'.

   * Find all referenced variables

     This pass walks the entire function and collects an array of all
     variables referenced in the function, 'referenced_vars'.  The index
     at which a variable is found in the array is used as a UID for the
     variable within this function.  This data is needed by the SSA
     rewriting routines.  The pass is located in 'tree-dfa.c' and is
     described by 'pass_referenced_vars'.

   * Enter static single assignment form

     This pass rewrites the function such that it is in SSA form.  After
     this pass, all 'is_gimple_reg' variables will be referenced by
     'SSA_NAME', and all occurrences of other variables will be
     annotated with 'VDEFS' and 'VUSES'; PHI nodes will have been
     inserted as necessary for each basic block.  This pass is located
     in 'tree-ssa.c' and is described by 'pass_build_ssa'.

   * Warn for uninitialized variables

     This pass scans the function for uses of 'SSA_NAME's that are fed
     by default definition.  For non-parameter variables, such uses are
     uninitialized.  The pass is run twice, before and after
     optimization (if turned on).  In the first pass we only warn for
     uses that are positively uninitialized; in the second pass we warn
     for uses that are possibly uninitialized.  The pass is located in
     'tree-ssa.c' and is defined by 'pass_early_warn_uninitialized' and
     'pass_late_warn_uninitialized'.

   * Dead code elimination

     This pass scans the function for statements without side effects
     whose result is unused.  It does not do memory life analysis, so
     any value that is stored in memory is considered used.  The pass is
     run multiple times throughout the optimization process.  It is
     located in 'tree-ssa-dce.c' and is described by 'pass_dce'.

   * Dominator optimizations

     This pass performs trivial dominator-based copy and constant
     propagation, expression simplification, and jump threading.  It is
     run multiple times throughout the optimization process.  It is
     located in 'tree-ssa-dom.c' and is described by 'pass_dominator'.

   * Forward propagation of single-use variables

     This pass attempts to remove redundant computation by substituting
     variables that are used once into the expression that uses them and
     seeing if the result can be simplified.  It is located in
     'tree-ssa-forwprop.c' and is described by 'pass_forwprop'.

   * Copy Renaming

     This pass attempts to change the name of compiler temporaries
     involved in copy operations such that SSA->normal can coalesce the
     copy away.  When compiler temporaries are copies of user variables,
     it also renames the compiler temporary to the user variable
     resulting in better use of user symbols.  It is located in
     'tree-ssa-copyrename.c' and is described by 'pass_copyrename'.

   * PHI node optimizations

     This pass recognizes forms of PHI inputs that can be represented as
     conditional expressions and rewrites them into straight line code.
     It is located in 'tree-ssa-phiopt.c' and is described by
     'pass_phiopt'.

   * May-alias optimization

     This pass performs a flow sensitive SSA-based points-to analysis.
     The resulting may-alias, must-alias, and escape analysis
     information is used to promote variables from in-memory addressable
     objects to non-aliased variables that can be renamed into SSA form.
     We also update the 'VDEF'/'VUSE' memory tags for non-renameable
     aggregates so that we get fewer false kills.  The pass is located
     in 'tree-ssa-alias.c' and is described by 'pass_may_alias'.

     Interprocedural points-to information is located in
     'tree-ssa-structalias.c' and described by 'pass_ipa_pta'.

   * Profiling

     This pass instruments the function in order to collect runtime
     block and value profiling data.  Such data may be fed back into the
     compiler on a subsequent run so as to allow optimization based on
     expected execution frequencies.  The pass is located in
     'tree-profile.c' and is described by 'pass_ipa_tree_profile'.

   * Static profile estimation

     This pass implements series of heuristics to guess propababilities
     of branches.  The resulting predictions are turned into edge
     profile by propagating branches across the control flow graphs.
     The pass is located in 'tree-profile.c' and is described by
     'pass_profile'.

   * Lower complex arithmetic

     This pass rewrites complex arithmetic operations into their
     component scalar arithmetic operations.  The pass is located in
     'tree-complex.c' and is described by 'pass_lower_complex'.

   * Scalar replacement of aggregates

     This pass rewrites suitable non-aliased local aggregate variables
     into a set of scalar variables.  The resulting scalar variables are
     rewritten into SSA form, which allows subsequent optimization
     passes to do a significantly better job with them.  The pass is
     located in 'tree-sra.c' and is described by 'pass_sra'.

   * Dead store elimination

     This pass eliminates stores to memory that are subsequently
     overwritten by another store, without any intervening loads.  The
     pass is located in 'tree-ssa-dse.c' and is described by 'pass_dse'.

   * Tail recursion elimination

     This pass transforms tail recursion into a loop.  It is located in
     'tree-tailcall.c' and is described by 'pass_tail_recursion'.

   * Forward store motion

     This pass sinks stores and assignments down the flowgraph closer to
     their use point.  The pass is located in 'tree-ssa-sink.c' and is
     described by 'pass_sink_code'.

   * Partial redundancy elimination

     This pass eliminates partially redundant computations, as well as
     performing load motion.  The pass is located in 'tree-ssa-pre.c'
     and is described by 'pass_pre'.

     Just before partial redundancy elimination, if
     '-funsafe-math-optimizations' is on, GCC tries to convert divisions
     to multiplications by the reciprocal.  The pass is located in
     'tree-ssa-math-opts.c' and is described by 'pass_cse_reciprocal'.

   * Full redundancy elimination

     This is a simpler form of PRE that only eliminates redundancies
     that occur on all paths.  It is located in 'tree-ssa-pre.c' and
     described by 'pass_fre'.

   * Loop optimization

     The main driver of the pass is placed in 'tree-ssa-loop.c' and
     described by 'pass_loop'.

     The optimizations performed by this pass are:

     Loop invariant motion.  This pass moves only invariants that would
     be hard to handle on RTL level (function calls, operations that
     expand to nontrivial sequences of insns).  With '-funswitch-loops'
     it also moves operands of conditions that are invariant out of the
     loop, so that we can use just trivial invariantness analysis in
     loop unswitching.  The pass also includes store motion.  The pass
     is implemented in 'tree-ssa-loop-im.c'.

     Canonical induction variable creation.  This pass creates a simple
     counter for number of iterations of the loop and replaces the exit
     condition of the loop using it, in case when a complicated analysis
     is necessary to determine the number of iterations.  Later
     optimizations then may determine the number easily.  The pass is
     implemented in 'tree-ssa-loop-ivcanon.c'.

     Induction variable optimizations.  This pass performs standard
     induction variable optimizations, including strength reduction,
     induction variable merging and induction variable elimination.  The
     pass is implemented in 'tree-ssa-loop-ivopts.c'.

     Loop unswitching.  This pass moves the conditional jumps that are
     invariant out of the loops.  To achieve this, a duplicate of the
     loop is created for each possible outcome of conditional jump(s).
     The pass is implemented in 'tree-ssa-loop-unswitch.c'.

     The optimizations also use various utility functions contained in
     'tree-ssa-loop-manip.c', 'cfgloop.c', 'cfgloopanal.c' and
     'cfgloopmanip.c'.

     Vectorization.  This pass transforms loops to operate on vector
     types instead of scalar types.  Data parallelism across loop
     iterations is exploited to group data elements from consecutive
     iterations into a vector and operate on them in parallel.
     Depending on available target support the loop is conceptually
     unrolled by a factor 'VF' (vectorization factor), which is the
     number of elements operated upon in parallel in each iteration, and
     the 'VF' copies of each scalar operation are fused to form a vector
     operation.  Additional loop transformations such as peeling and
     versioning may take place to align the number of iterations, and to
     align the memory accesses in the loop.  The pass is implemented in
     'tree-vectorizer.c' (the main driver), 'tree-vect-loop.c' and
     'tree-vect-loop-manip.c' (loop specific parts and general loop
     utilities), 'tree-vect-slp' (loop-aware SLP functionality),
     'tree-vect-stmts.c' and 'tree-vect-data-refs.c'.  Analysis of data
     references is in 'tree-data-ref.c'.

     SLP Vectorization.  This pass performs vectorization of
     straight-line code.  The pass is implemented in 'tree-vectorizer.c'
     (the main driver), 'tree-vect-slp.c', 'tree-vect-stmts.c' and
     'tree-vect-data-refs.c'.

     Autoparallelization.  This pass splits the loop iteration space to
     run into several threads.  The pass is implemented in
     'tree-parloops.c'.

     Graphite is a loop transformation framework based on the polyhedral
     model.  Graphite stands for Gimple Represented as Polyhedra.  The
     internals of this infrastructure are documented in
     <http://gcc.gnu.org/wiki/Graphite>.  The passes working on this
     representation are implemented in the various 'graphite-*' files.

   * Tree level if-conversion for vectorizer

     This pass applies if-conversion to simple loops to help vectorizer.
     We identify if convertible loops, if-convert statements and merge
     basic blocks in one big block.  The idea is to present loop in such
     form so that vectorizer can have one to one mapping between
     statements and available vector operations.  This pass is located
     in 'tree-if-conv.c' and is described by 'pass_if_conversion'.

   * Conditional constant propagation

     This pass relaxes a lattice of values in order to identify those
     that must be constant even in the presence of conditional branches.
     The pass is located in 'tree-ssa-ccp.c' and is described by
     'pass_ccp'.

     A related pass that works on memory loads and stores, and not just
     register values, is located in 'tree-ssa-ccp.c' and described by
     'pass_store_ccp'.

   * Conditional copy propagation

     This is similar to constant propagation but the lattice of values
     is the "copy-of" relation.  It eliminates redundant copies from the
     code.  The pass is located in 'tree-ssa-copy.c' and described by
     'pass_copy_prop'.

     A related pass that works on memory copies, and not just register
     copies, is located in 'tree-ssa-copy.c' and described by
     'pass_store_copy_prop'.

   * Value range propagation

     This transformation is similar to constant propagation but instead
     of propagating single constant values, it propagates known value
     ranges.  The implementation is based on Patterson's range
     propagation algorithm (Accurate Static Branch Prediction by Value
     Range Propagation, J. R. C. Patterson, PLDI '95).  In contrast to
     Patterson's algorithm, this implementation does not propagate
     branch probabilities nor it uses more than a single range per SSA
     name.  This means that the current implementation cannot be used
     for branch prediction (though adapting it would not be difficult).
     The pass is located in 'tree-vrp.c' and is described by 'pass_vrp'.

   * Folding built-in functions

     This pass simplifies built-in functions, as applicable, with
     constant arguments or with inferable string lengths.  It is located
     in 'tree-ssa-ccp.c' and is described by 'pass_fold_builtins'.

   * Split critical edges

     This pass identifies critical edges and inserts empty basic blocks
     such that the edge is no longer critical.  The pass is located in
     'tree-cfg.c' and is described by 'pass_split_crit_edges'.

   * Control dependence dead code elimination

     This pass is a stronger form of dead code elimination that can
     eliminate unnecessary control flow statements.  It is located in
     'tree-ssa-dce.c' and is described by 'pass_cd_dce'.

   * Tail call elimination

     This pass identifies function calls that may be rewritten into
     jumps.  No code transformation is actually applied here, but the
     data and control flow problem is solved.  The code transformation
     requires target support, and so is delayed until RTL.  In the
     meantime 'CALL_EXPR_TAILCALL' is set indicating the possibility.
     The pass is located in 'tree-tailcall.c' and is described by
     'pass_tail_calls'.  The RTL transformation is handled by
     'fixup_tail_calls' in 'calls.c'.

   * Warn for function return without value

     For non-void functions, this pass locates return statements that do
     not specify a value and issues a warning.  Such a statement may
     have been injected by falling off the end of the function.  This
     pass is run last so that we have as much time as possible to prove
     that the statement is not reachable.  It is located in 'tree-cfg.c'
     and is described by 'pass_warn_function_return'.

   * Leave static single assignment form

     This pass rewrites the function such that it is in normal form.  At
     the same time, we eliminate as many single-use temporaries as
     possible, so the intermediate language is no longer GIMPLE, but
     GENERIC.  The pass is located in 'tree-outof-ssa.c' and is
     described by 'pass_del_ssa'.

   * Merge PHI nodes that feed into one another

     This is part of the CFG cleanup passes.  It attempts to join PHI
     nodes from a forwarder CFG block into another block with PHI nodes.
     The pass is located in 'tree-cfgcleanup.c' and is described by
     'pass_merge_phi'.

   * Return value optimization

     If a function always returns the same local variable, and that
     local variable is an aggregate type, then the variable is replaced
     with the return value for the function (i.e., the function's
     DECL_RESULT). This is equivalent to the C++ named return value
     optimization applied to GIMPLE.  The pass is located in
     'tree-nrv.c' and is described by 'pass_nrv'.

   * Return slot optimization

     If a function returns a memory object and is called as 'var =
     foo()', this pass tries to change the call so that the address of
     'var' is sent to the caller to avoid an extra memory copy.  This
     pass is located in 'tree-nrv.c' and is described by
     'pass_return_slot'.

   * Optimize calls to '__builtin_object_size'

     This is a propagation pass similar to CCP that tries to remove
     calls to '__builtin_object_size' when the size of the object can be
     computed at compile-time.  This pass is located in
     'tree-object-size.c' and is described by 'pass_object_sizes'.

   * Loop invariant motion

     This pass removes expensive loop-invariant computations out of
     loops.  The pass is located in 'tree-ssa-loop.c' and described by
     'pass_lim'.

   * Loop nest optimizations

     This is a family of loop transformations that works on loop nests.
     It includes loop interchange, scaling, skewing and reversal and
     they are all geared to the optimization of data locality in array
     traversals and the removal of dependencies that hamper
     optimizations such as loop parallelization and vectorization.  The
     pass is located in 'tree-loop-linear.c' and described by
     'pass_linear_transform'.

   * Removal of empty loops

     This pass removes loops with no code in them.  The pass is located
     in 'tree-ssa-loop-ivcanon.c' and described by 'pass_empty_loop'.

   * Unrolling of small loops

     This pass completely unrolls loops with few iterations.  The pass
     is located in 'tree-ssa-loop-ivcanon.c' and described by
     'pass_complete_unroll'.

   * Predictive commoning

     This pass makes the code reuse the computations from the previous
     iterations of the loops, especially loads and stores to memory.  It
     does so by storing the values of these computations to a bank of
     temporary variables that are rotated at the end of loop.  To avoid
     the need for this rotation, the loop is then unrolled and the
     copies of the loop body are rewritten to use the appropriate
     version of the temporary variable.  This pass is located in
     'tree-predcom.c' and described by 'pass_predcom'.

   * Array prefetching

     This pass issues prefetch instructions for array references inside
     loops.  The pass is located in 'tree-ssa-loop-prefetch.c' and
     described by 'pass_loop_prefetch'.

   * Reassociation

     This pass rewrites arithmetic expressions to enable optimizations
     that operate on them, like redundancy elimination and
     vectorization.  The pass is located in 'tree-ssa-reassoc.c' and
     described by 'pass_reassoc'.

   * Optimization of 'stdarg' functions

     This pass tries to avoid the saving of register arguments into the
     stack on entry to 'stdarg' functions.  If the function doesn't use
     any 'va_start' macros, no registers need to be saved.  If
     'va_start' macros are used, the 'va_list' variables don't escape
     the function, it is only necessary to save registers that will be
     used in 'va_arg' macros.  For instance, if 'va_arg' is only used
     with integral types in the function, floating point registers don't
     need to be saved.  This pass is located in 'tree-stdarg.c' and
     described by 'pass_stdarg'.


File: gccint.info,  Node: RTL passes,  Next: Optimization info,  Prev: Tree SSA passes,  Up: Passes

9.6 RTL passes
==============

The following briefly describes the RTL generation and optimization
passes that are run after the Tree optimization passes.

   * RTL generation

     The source files for RTL generation include 'stmt.c', 'calls.c',
     'expr.c', 'explow.c', 'expmed.c', 'function.c', 'optabs.c' and
     'emit-rtl.c'.  Also, the file 'insn-emit.c', generated from the
     machine description by the program 'genemit', is used in this pass.
     The header file 'expr.h' is used for communication within this
     pass.

     The header files 'insn-flags.h' and 'insn-codes.h', generated from
     the machine description by the programs 'genflags' and 'gencodes',
     tell this pass which standard names are available for use and which
     patterns correspond to them.

   * Generation of exception landing pads

     This pass generates the glue that handles communication between the
     exception handling library routines and the exception handlers
     within the function.  Entry points in the function that are invoked
     by the exception handling library are called "landing pads".  The
     code for this pass is located in 'except.c'.

   * Control flow graph cleanup

     This pass removes unreachable code, simplifies jumps to next, jumps
     to jump, jumps across jumps, etc.  The pass is run multiple times.
     For historical reasons, it is occasionally referred to as the "jump
     optimization pass".  The bulk of the code for this pass is in
     'cfgcleanup.c', and there are support routines in 'cfgrtl.c' and
     'jump.c'.

   * Forward propagation of single-def values

     This pass attempts to remove redundant computation by substituting
     variables that come from a single definition, and seeing if the
     result can be simplified.  It performs copy propagation and
     addressing mode selection.  The pass is run twice, with values
     being propagated into loops only on the second run.  The code is
     located in 'fwprop.c'.

   * Common subexpression elimination

     This pass removes redundant computation within basic blocks, and
     optimizes addressing modes based on cost.  The pass is run twice.
     The code for this pass is located in 'cse.c'.

   * Global common subexpression elimination

     This pass performs two different types of GCSE depending on whether
     you are optimizing for size or not (LCM based GCSE tends to
     increase code size for a gain in speed, while Morel-Renvoise based
     GCSE does not).  When optimizing for size, GCSE is done using
     Morel-Renvoise Partial Redundancy Elimination, with the exception
     that it does not try to move invariants out of loops--that is left
     to the loop optimization pass.  If MR PRE GCSE is done, code
     hoisting (aka unification) is also done, as well as load motion.
     If you are optimizing for speed, LCM (lazy code motion) based GCSE
     is done.  LCM is based on the work of Knoop, Ruthing, and Steffen.
     LCM based GCSE also does loop invariant code motion.  We also
     perform load and store motion when optimizing for speed.
     Regardless of which type of GCSE is used, the GCSE pass also
     performs global constant and copy propagation.  The source file for
     this pass is 'gcse.c', and the LCM routines are in 'lcm.c'.

   * Loop optimization

     This pass performs several loop related optimizations.  The source
     files 'cfgloopanal.c' and 'cfgloopmanip.c' contain generic loop
     analysis and manipulation code.  Initialization and finalization of
     loop structures is handled by 'loop-init.c'.  A loop invariant
     motion pass is implemented in 'loop-invariant.c'.  Basic block
     level optimizations--unrolling, and peeling loops-- are implemented
     in 'loop-unroll.c'.  Replacing of the exit condition of loops by
     special machine-dependent instructions is handled by
     'loop-doloop.c'.

   * Jump bypassing

     This pass is an aggressive form of GCSE that transforms the control
     flow graph of a function by propagating constants into conditional
     branch instructions.  The source file for this pass is 'gcse.c'.

   * If conversion

     This pass attempts to replace conditional branches and surrounding
     assignments with arithmetic, boolean value producing comparison
     instructions, and conditional move instructions.  In the very last
     invocation after reload/LRA, it will generate predicated
     instructions when supported by the target.  The code is located in
     'ifcvt.c'.

   * Web construction

     This pass splits independent uses of each pseudo-register.  This
     can improve effect of the other transformation, such as CSE or
     register allocation.  The code for this pass is located in 'web.c'.

   * Instruction combination

     This pass attempts to combine groups of two or three instructions
     that are related by data flow into single instructions.  It
     combines the RTL expressions for the instructions by substitution,
     simplifies the result using algebra, and then attempts to match the
     result against the machine description.  The code is located in
     'combine.c'.

   * Mode switching optimization

     This pass looks for instructions that require the processor to be
     in a specific "mode" and minimizes the number of mode changes
     required to satisfy all users.  What these modes are, and what they
     apply to are completely target-specific.  The code for this pass is
     located in 'mode-switching.c'.

   * Modulo scheduling

     This pass looks at innermost loops and reorders their instructions
     by overlapping different iterations.  Modulo scheduling is
     performed immediately before instruction scheduling.  The code for
     this pass is located in 'modulo-sched.c'.

   * Instruction scheduling

     This pass looks for instructions whose output will not be available
     by the time that it is used in subsequent instructions.  Memory
     loads and floating point instructions often have this behavior on
     RISC machines.  It re-orders instructions within a basic block to
     try to separate the definition and use of items that otherwise
     would cause pipeline stalls.  This pass is performed twice, before
     and after register allocation.  The code for this pass is located
     in 'haifa-sched.c', 'sched-deps.c', 'sched-ebb.c', 'sched-rgn.c'
     and 'sched-vis.c'.

   * Register allocation

     These passes make sure that all occurrences of pseudo registers are
     eliminated, either by allocating them to a hard register, replacing
     them by an equivalent expression (e.g. a constant) or by placing
     them on the stack.  This is done in several subpasses:

        * The integrated register allocator (IRA).  It is called
          integrated because coalescing, register live range splitting,
          and hard register preferencing are done on-the-fly during
          coloring.  It also has better integration with the reload/LRA
          pass.  Pseudo-registers spilled by the allocator or the
          reload/LRA have still a chance to get hard-registers if the
          reload/LRA evicts some pseudo-registers from hard-registers.
          The allocator helps to choose better pseudos for spilling
          based on their live ranges and to coalesce stack slots
          allocated for the spilled pseudo-registers.  IRA is a regional
          register allocator which is transformed into Chaitin-Briggs
          allocator if there is one region.  By default, IRA chooses
          regions using register pressure but the user can force it to
          use one region or regions corresponding to all loops.

          Source files of the allocator are 'ira.c', 'ira-build.c',
          'ira-costs.c', 'ira-conflicts.c', 'ira-color.c', 'ira-emit.c',
          'ira-lives', plus header files 'ira.h' and 'ira-int.h' used
          for the communication between the allocator and the rest of
          the compiler and between the IRA files.

        * Reloading.  This pass renumbers pseudo registers with the
          hardware registers numbers they were allocated.  Pseudo
          registers that did not get hard registers are replaced with
          stack slots.  Then it finds instructions that are invalid
          because a value has failed to end up in a register, or has
          ended up in a register of the wrong kind.  It fixes up these
          instructions by reloading the problematical values temporarily
          into registers.  Additional instructions are generated to do
          the copying.

          The reload pass also optionally eliminates the frame pointer
          and inserts instructions to save and restore call-clobbered
          registers around calls.

          Source files are 'reload.c' and 'reload1.c', plus the header
          'reload.h' used for communication between them.

        * This pass is a modern replacement of the reload pass.  Source
          files are 'lra.c', 'lra-assign.c', 'lra-coalesce.c',
          'lra-constraints.c', 'lra-eliminations.c', 'lra-lives.c',
          'lra-remat.c', 'lra-spills.c', the header 'lra-int.h' used for
          communication between them, and the header 'lra.h' used for
          communication between LRA and the rest of compiler.

          Unlike the reload pass, intermediate LRA decisions are
          reflected in RTL as much as possible.  This reduces the number
          of target-dependent macros and hooks, leaving instruction
          constraints as the primary source of control.

          LRA is run on targets for which TARGET_LRA_P returns true.

   * Basic block reordering

     This pass implements profile guided code positioning.  If profile
     information is not available, various types of static analysis are
     performed to make the predictions normally coming from the profile
     feedback (IE execution frequency, branch probability, etc).  It is
     implemented in the file 'bb-reorder.c', and the various prediction
     routines are in 'predict.c'.

   * Variable tracking

     This pass computes where the variables are stored at each position
     in code and generates notes describing the variable locations to
     RTL code.  The location lists are then generated according to these
     notes to debug information if the debugging information format
     supports location lists.  The code is located in 'var-tracking.c'.

   * Delayed branch scheduling

     This optional pass attempts to find instructions that can go into
     the delay slots of other instructions, usually jumps and calls.
     The code for this pass is located in 'reorg.c'.

   * Branch shortening

     On many RISC machines, branch instructions have a limited range.
     Thus, longer sequences of instructions must be used for long
     branches.  In this pass, the compiler figures out what how far each
     instruction will be from each other instruction, and therefore
     whether the usual instructions, or the longer sequences, must be
     used for each branch.  The code for this pass is located in
     'final.c'.

   * Register-to-stack conversion

     Conversion from usage of some hard registers to usage of a register
     stack may be done at this point.  Currently, this is supported only
     for the floating-point registers of the Intel 80387 coprocessor.
     The code for this pass is located in 'reg-stack.c'.

   * Final

     This pass outputs the assembler code for the function.  The source
     files are 'final.c' plus 'insn-output.c'; the latter is generated
     automatically from the machine description by the tool 'genoutput'.
     The header file 'conditions.h' is used for communication between
     these files.

   * Debugging information output

     This is run after final because it must output the stack slot
     offsets for pseudo registers that did not get hard registers.
     Source files are 'dbxout.c' for DBX symbol table format, 'sdbout.c'
     for SDB symbol table format, 'dwarfout.c' for DWARF symbol table
     format, files 'dwarf2out.c' and 'dwarf2asm.c' for DWARF2 symbol
     table format, and 'vmsdbgout.c' for VMS debug symbol table format.


File: gccint.info,  Node: Optimization info,  Prev: RTL passes,  Up: Passes

9.7 Optimization info
=====================

This section is describes dump infrastructure which is common to both
pass dumps as well as optimization dumps.  The goal for this
infrastructure is to provide both gcc developers and users detailed
information about various compiler transformations and optimizations.

* Menu:

* Dump setup::                         Setup of optimization dumps.
* Optimization groups::                Groups made up of optimization passes.
* Dump files and streams::             Dump output file names and streams.
* Dump output verbosity::              How much information to dump.
* Dump types::                         Various types of dump functions.
* Dump examples::                      Sample usage.


File: gccint.info,  Node: Dump setup,  Next: Optimization groups,  Up: Optimization info

9.7.1 Dump setup
----------------

A dump_manager class is defined in 'dumpfile.h'.  Various passes
register dumping pass-specific information via 'dump_register' in
'passes.c'.  During the registration, an optimization pass can select
its optimization group (*note Optimization groups::).  After that
optimization information corresponding to the entire group (presumably
from multiple passes) can be output via command-line switches.  Note
that if a pass does not fit into any of the pre-defined groups, it can
select 'OPTGROUP_NONE'.

 Note that in general, a pass need not know its dump output file name,
whether certain flags are enabled, etc.  However, for legacy reasons,
passes could also call 'dump_begin' which returns a stream in case the
particular pass has optimization dumps enabled.  A pass could call
'dump_end' when the dump has ended.  These methods should go away once
all the passes are converted to use the new dump infrastructure.

 The recommended way to setup the dump output is via 'dump_start' and
'dump_end'.


File: gccint.info,  Node: Optimization groups,  Next: Dump files and streams,  Prev: Dump setup,  Up: Optimization info

9.7.2 Optimization groups
-------------------------

The optimization passes are grouped into several categories.  Currently
defined categories in 'dumpfile.h' are

'OPTGROUP_IPA'
     IPA optimization passes.  Enabled by '-ipa'

'OPTGROUP_LOOP'
     Loop optimization passes.  Enabled by '-loop'.

'OPTGROUP_INLINE'
     Inlining passes.  Enabled by '-inline'.

'OPTGROUP_VEC'
     Vectorization passes.  Enabled by '-vec'.

'OPTGROUP_OTHER'
     All other optimization passes which do not fall into one of the
     above.

'OPTGROUP_ALL'
     All optimization passes.  Enabled by '-all'.

 By using groups a user could selectively enable optimization
information only for a group of passes.  By default, the optimization
information for all the passes is dumped.


File: gccint.info,  Node: Dump files and streams,  Next: Dump output verbosity,  Prev: Optimization groups,  Up: Optimization info

9.7.3 Dump files and streams
----------------------------

There are two separate output streams available for outputting
optimization information from passes.  Note that both these streams
accept 'stderr' and 'stdout' as valid streams and thus it is possible to
dump output to standard output or error.  This is specially handy for
outputting all available information in a single file by redirecting
'stderr'.

'pstream'
     This stream is for pass-specific dump output.  For example,
     '-fdump-tree-vect=foo.v' dumps tree vectorization pass output into
     the given file name 'foo.v'.  If the file name is not provided, the
     default file name is based on the source file and pass number.
     Note that one could also use special file names 'stdout' and
     'stderr' for dumping to standard output and standard error
     respectively.

'alt_stream'
     This steam is used for printing optimization specific output in
     response to the '-fopt-info'.  Again a file name can be given.  If
     the file name is not given, it defaults to 'stderr'.


File: gccint.info,  Node: Dump output verbosity,  Next: Dump types,  Prev: Dump files and streams,  Up: Optimization info

9.7.4 Dump output verbosity
---------------------------

The dump verbosity has the following options

'optimized'
     Print information when an optimization is successfully applied.  It
     is up to a pass to decide which information is relevant.  For
     example, the vectorizer passes print the source location of loops
     which got successfully vectorized.

'missed'
     Print information about missed optimizations.  Individual passes
     control which information to include in the output.  For example,

          gcc -O2 -ftree-vectorize -fopt-info-vec-missed

     will print information about missed optimization opportunities from
     vectorization passes on stderr.

'note'
     Print verbose information about optimizations, such as certain
     transformations, more detailed messages about decisions etc.

'all'
     Print detailed optimization information.  This includes OPTIMIZED,
     MISSED, and NOTE.


File: gccint.info,  Node: Dump types,  Next: Dump examples,  Prev: Dump output verbosity,  Up: Optimization info

9.7.5 Dump types
----------------

'dump_printf'

     This is a generic method for doing formatted output.  It takes an
     additional argument 'dump_kind' which signifies the type of dump.
     This method outputs information only when the dumps are enabled for
     this particular 'dump_kind'.  Note that the caller doesn't need to
     know if the particular dump is enabled or not, or even the file
     name.  The caller only needs to decide which dump output
     information is relevant, and under what conditions.  This
     determines the associated flags.

     Consider the following example from 'loop-unroll.c' where an
     informative message about a loop (along with its location) is
     printed when any of the following flags is enabled

        - optimization messages
        - RTL dumps
        - detailed dumps

          int report_flags = MSG_OPTIMIZED_LOCATIONS | TDF_RTL | TDF_DETAILS;
          dump_printf_loc (report_flags, locus,
                           "loop turned into non-loop; it never loops.\n");

'dump_basic_block'
     Output basic block.
'dump_generic_expr'
     Output generic expression.
'dump_gimple_stmt'
     Output gimple statement.

     Note that the above methods also have variants prefixed with
     '_loc', such as 'dump_printf_loc', which are similar except they
     also output the source location information.


File: gccint.info,  Node: Dump examples,  Prev: Dump types,  Up: Optimization info

9.7.6 Dump examples
-------------------

     gcc -O3 -fopt-info-missed=missed.all

 outputs missed optimization report from all the passes into
'missed.all'.

 As another example,
     gcc -O3 -fopt-info-inline-optimized-missed=inline.txt

 will output information about missed optimizations as well as optimized
locations from all the inlining passes into 'inline.txt'.

 If the FILENAME is provided, then the dumps from all the applicable
optimizations are concatenated into the 'filename'.  Otherwise the dump
is output onto 'stderr'.  If OPTIONS is omitted, it defaults to
'all-all', which means dump all available optimization info from all the
passes.  In the following example, all optimization info is output on to
'stderr'.

     gcc -O3 -fopt-info

 Note that '-fopt-info-vec-missed' behaves the same as
'-fopt-info-missed-vec'.

 As another example, consider

     gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt

 Here the two output file names 'vec.miss' and 'loop.opt' are in
conflict since only one output file is allowed.  In this case, only the
first option takes effect and the subsequent options are ignored.  Thus
only the 'vec.miss' is produced which containts dumps from the
vectorizer about missed opportunities.


File: gccint.info,  Node: GENERIC,  Next: GIMPLE,  Prev: Passes,  Up: Top

10 GENERIC
**********

The purpose of GENERIC is simply to provide a language-independent way
of representing an entire function in trees.  To this end, it was
necessary to add a few new tree codes to the back end, but almost
everything was already there.  If you can express it with the codes in
'gcc/tree.def', it's GENERIC.

 Early on, there was a great deal of debate about how to think about
statements in a tree IL.  In GENERIC, a statement is defined as any
expression whose value, if any, is ignored.  A statement will always
have 'TREE_SIDE_EFFECTS' set (or it will be discarded), but a
non-statement expression may also have side effects.  A 'CALL_EXPR', for
instance.

 It would be possible for some local optimizations to work on the
GENERIC form of a function; indeed, the adapted tree inliner works fine
on GENERIC, but the current compiler performs inlining after lowering to
GIMPLE (a restricted form described in the next section).  Indeed,
currently the frontends perform this lowering before handing off to
'tree_rest_of_compilation', but this seems inelegant.

* Menu:

* Deficiencies::                Topics net yet covered in this document.
* Tree overview::               All about 'tree's.
* Types::                       Fundamental and aggregate types.
* Declarations::                Type declarations and variables.
* Attributes::                  Declaration and type attributes.
* Expressions: Expression trees.            Operating on data.
* Statements::                  Control flow and related trees.
* Functions::           	Function bodies, linkage, and other aspects.
* Language-dependent trees::    Topics and trees specific to language front ends.
* C and C++ Trees::     	Trees specific to C and C++.
* Java Trees:: 	                Trees specific to Java.


File: gccint.info,  Node: Deficiencies,  Next: Tree overview,  Up: GENERIC

10.1 Deficiencies
=================

There are many places in which this document is incomplet and incorrekt.
It is, as of yet, only _preliminary_ documentation.


File: gccint.info,  Node: Tree overview,  Next: Types,  Prev: Deficiencies,  Up: GENERIC

10.2 Overview
=============

The central data structure used by the internal representation is the
'tree'.  These nodes, while all of the C type 'tree', are of many
varieties.  A 'tree' is a pointer type, but the object to which it
points may be of a variety of types.  From this point forward, we will
refer to trees in ordinary type, rather than in 'this font', except when
talking about the actual C type 'tree'.

 You can tell what kind of node a particular tree is by using the
'TREE_CODE' macro.  Many, many macros take trees as input and return
trees as output.  However, most macros require a certain kind of tree
node as input.  In other words, there is a type-system for trees, but it
is not reflected in the C type-system.

 For safety, it is useful to configure GCC with '--enable-checking'.
Although this results in a significant performance penalty (since all
tree types are checked at run-time), and is therefore inappropriate in a
release version, it is extremely helpful during the development process.

 Many macros behave as predicates.  Many, although not all, of these
predicates end in '_P'.  Do not rely on the result type of these macros
being of any particular type.  You may, however, rely on the fact that
the type can be compared to '0', so that statements like
     if (TEST_P (t) && !TEST_P (y))
       x = 1;
and
     int i = (TEST_P (t) != 0);
are legal.  Macros that return 'int' values now may be changed to return
'tree' values, or other pointers in the future.  Even those that
continue to return 'int' may return multiple nonzero codes where
previously they returned only zero and one.  Therefore, you should not
write code like
     if (TEST_P (t) == 1)
as this code is not guaranteed to work correctly in the future.

 You should not take the address of values returned by the macros or
functions described here.  In particular, no guarantee is given that the
values are lvalues.

 In general, the names of macros are all in uppercase, while the names
of functions are entirely in lowercase.  There are rare exceptions to
this rule.  You should assume that any macro or function whose name is
made up entirely of uppercase letters may evaluate its arguments more
than once.  You may assume that a macro or function whose name is made
up entirely of lowercase letters will evaluate its arguments only once.

 The 'error_mark_node' is a special tree.  Its tree code is
'ERROR_MARK', but since there is only ever one node with that code, the
usual practice is to compare the tree against 'error_mark_node'.  (This
test is just a test for pointer equality.)  If an error has occurred
during front-end processing the flag 'errorcount' will be set.  If the
front end has encountered code it cannot handle, it will issue a message
to the user and set 'sorrycount'.  When these flags are set, any macro
or function which normally returns a tree of a particular kind may
instead return the 'error_mark_node'.  Thus, if you intend to do any
processing of erroneous code, you must be prepared to deal with the
'error_mark_node'.

 Occasionally, a particular tree slot (like an operand to an expression,
or a particular field in a declaration) will be referred to as "reserved
for the back end".  These slots are used to store RTL when the tree is
converted to RTL for use by the GCC back end.  However, if that process
is not taking place (e.g., if the front end is being hooked up to an
intelligent editor), then those slots may be used by the back end
presently in use.

 If you encounter situations that do not match this documentation, such
as tree nodes of types not mentioned here, or macros documented to
return entities of a particular kind that instead return entities of
some different kind, you have found a bug, either in the front end or in
the documentation.  Please report these bugs as you would any other bug.

* Menu:

* Macros and Functions::Macros and functions that can be used with all trees.
* Identifiers::         The names of things.
* Containers::          Lists and vectors.


File: gccint.info,  Node: Macros and Functions,  Next: Identifiers,  Up: Tree overview

10.2.1 Trees
------------

All GENERIC trees have two fields in common.  First, 'TREE_CHAIN' is a
pointer that can be used as a singly-linked list to other trees.  The
other is 'TREE_TYPE'.  Many trees store the type of an expression or
declaration in this field.

 These are some other functions for handling trees:

'tree_size'
     Return the number of bytes a tree takes.

'build0'
'build1'
'build2'
'build3'
'build4'
'build5'
'build6'

     These functions build a tree and supply values to put in each
     parameter.  The basic signature is 'code, type, [operands]'.
     'code' is the 'TREE_CODE', and 'type' is a tree representing the
     'TREE_TYPE'.  These are followed by the operands, each of which is
     also a tree.


File: gccint.info,  Node: Identifiers,  Next: Containers,  Prev: Macros and Functions,  Up: Tree overview

10.2.2 Identifiers
------------------

An 'IDENTIFIER_NODE' represents a slightly more general concept than the
standard C or C++ concept of identifier.  In particular, an
'IDENTIFIER_NODE' may contain a '$', or other extraordinary characters.

 There are never two distinct 'IDENTIFIER_NODE's representing the same
identifier.  Therefore, you may use pointer equality to compare
'IDENTIFIER_NODE's, rather than using a routine like 'strcmp'.  Use
'get_identifier' to obtain the unique 'IDENTIFIER_NODE' for a supplied
string.

 You can use the following macros to access identifiers:
'IDENTIFIER_POINTER'
     The string represented by the identifier, represented as a 'char*'.
     This string is always 'NUL'-terminated, and contains no embedded
     'NUL' characters.

'IDENTIFIER_LENGTH'
     The length of the string returned by 'IDENTIFIER_POINTER', not
     including the trailing 'NUL'.  This value of 'IDENTIFIER_LENGTH
     (x)' is always the same as 'strlen (IDENTIFIER_POINTER (x))'.

'IDENTIFIER_OPNAME_P'
     This predicate holds if the identifier represents the name of an
     overloaded operator.  In this case, you should not depend on the
     contents of either the 'IDENTIFIER_POINTER' or the
     'IDENTIFIER_LENGTH'.

'IDENTIFIER_TYPENAME_P'
     This predicate holds if the identifier represents the name of a
     user-defined conversion operator.  In this case, the 'TREE_TYPE' of
     the 'IDENTIFIER_NODE' holds the type to which the conversion
     operator converts.


File: gccint.info,  Node: Containers,  Prev: Identifiers,  Up: Tree overview

10.2.3 Containers
-----------------

Two common container data structures can be represented directly with
tree nodes.  A 'TREE_LIST' is a singly linked list containing two trees
per node.  These are the 'TREE_PURPOSE' and 'TREE_VALUE' of each node.
(Often, the 'TREE_PURPOSE' contains some kind of tag, or additional
information, while the 'TREE_VALUE' contains the majority of the
payload.  In other cases, the 'TREE_PURPOSE' is simply 'NULL_TREE',
while in still others both the 'TREE_PURPOSE' and 'TREE_VALUE' are of
equal stature.)  Given one 'TREE_LIST' node, the next node is found by
following the 'TREE_CHAIN'.  If the 'TREE_CHAIN' is 'NULL_TREE', then
you have reached the end of the list.

 A 'TREE_VEC' is a simple vector.  The 'TREE_VEC_LENGTH' is an integer
(not a tree) giving the number of nodes in the vector.  The nodes
themselves are accessed using the 'TREE_VEC_ELT' macro, which takes two
arguments.  The first is the 'TREE_VEC' in question; the second is an
integer indicating which element in the vector is desired.  The elements
are indexed from zero.


File: gccint.info,  Node: Types,  Next: Declarations,  Prev: Tree overview,  Up: GENERIC

10.3 Types
==========

All types have corresponding tree nodes.  However, you should not assume
that there is exactly one tree node corresponding to each type.  There
are often multiple nodes corresponding to the same type.

 For the most part, different kinds of types have different tree codes.
(For example, pointer types use a 'POINTER_TYPE' code while arrays use
an 'ARRAY_TYPE' code.)  However, pointers to member functions use the
'RECORD_TYPE' code.  Therefore, when writing a 'switch' statement that
depends on the code associated with a particular type, you should take
care to handle pointers to member functions under the 'RECORD_TYPE' case
label.

 The following functions and macros deal with cv-qualification of types:
'TYPE_MAIN_VARIANT'
     This macro returns the unqualified version of a type.  It may be
     applied to an unqualified type, but it is not always the identity
     function in that case.

 A few other macros and functions are usable with all types:
'TYPE_SIZE'
     The number of bits required to represent the type, represented as
     an 'INTEGER_CST'.  For an incomplete type, 'TYPE_SIZE' will be
     'NULL_TREE'.

'TYPE_ALIGN'
     The alignment of the type, in bits, represented as an 'int'.

'TYPE_NAME'
     This macro returns a declaration (in the form of a 'TYPE_DECL') for
     the type.  (Note this macro does _not_ return an 'IDENTIFIER_NODE',
     as you might expect, given its name!)  You can look at the
     'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the
     type.  The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a
     built-in type, the result of a typedef, or a named class type.

'TYPE_CANONICAL'
     This macro returns the "canonical" type for the given type node.
     Canonical types are used to improve performance in the C++ and
     Objective-C++ front ends by allowing efficient comparison between
     two type nodes in 'same_type_p': if the 'TYPE_CANONICAL' values of
     the types are equal, the types are equivalent; otherwise, the types
     are not equivalent.  The notion of equivalence for canonical types
     is the same as the notion of type equivalence in the language
     itself.  For instance,

     When 'TYPE_CANONICAL' is 'NULL_TREE', there is no canonical type
     for the given type node.  In this case, comparison between this
     type and any other type requires the compiler to perform a deep,
     "structural" comparison to see if the two type nodes have the same
     form and properties.

     The canonical type for a node is always the most fundamental type
     in the equivalence class of types.  For instance, 'int' is its own
     canonical type.  A typedef 'I' of 'int' will have 'int' as its
     canonical type.  Similarly, 'I*' and a typedef 'IP' (defined to
     'I*') will has 'int*' as their canonical type.  When building a new
     type node, be sure to set 'TYPE_CANONICAL' to the appropriate
     canonical type.  If the new type is a compound type (built from
     other types), and any of those other types require structural
     equality, use 'SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the new
     type also requires structural equality.  Finally, if for some
     reason you cannot guarantee that 'TYPE_CANONICAL' will point to the
     canonical type, use 'SET_TYPE_STRUCTURAL_EQUALITY' to make sure
     that the new type-and any type constructed based on it-requires
     structural equality.  If you suspect that the canonical type system
     is miscomparing types, pass '--param verify-canonical-types=1' to
     the compiler or configure with '--enable-checking' to force the
     compiler to verify its canonical-type comparisons against the
     structural comparisons; the compiler will then print any warnings
     if the canonical types miscompare.

'TYPE_STRUCTURAL_EQUALITY_P'
     This predicate holds when the node requires structural equality
     checks, e.g., when 'TYPE_CANONICAL' is 'NULL_TREE'.

'SET_TYPE_STRUCTURAL_EQUALITY'
     This macro states that the type node it is given requires
     structural equality checks, e.g., it sets 'TYPE_CANONICAL' to
     'NULL_TREE'.

'same_type_p'
     This predicate takes two types as input, and holds if they are the
     same type.  For example, if one type is a 'typedef' for the other,
     or both are 'typedef's for the same type.  This predicate also
     holds if the two trees given as input are simply copies of one
     another; i.e., there is no difference between them at the source
     level, but, for whatever reason, a duplicate has been made in the
     representation.  You should never use '==' (pointer equality) to
     compare types; always use 'same_type_p' instead.

 Detailed below are the various kinds of types, and the macros that can
be used to access them.  Although other kinds of types are used
elsewhere in G++, the types described here are the only ones that you
will encounter while examining the intermediate representation.

'VOID_TYPE'
     Used to represent the 'void' type.

'INTEGER_TYPE'
     Used to represent the various integral types, including 'char',
     'short', 'int', 'long', and 'long long'.  This code is not used for
     enumeration types, nor for the 'bool' type.  The 'TYPE_PRECISION'
     is the number of bits used in the representation, represented as an
     'unsigned int'.  (Note that in the general case this is not the
     same value as 'TYPE_SIZE'; suppose that there were a 24-bit integer
     type, but that alignment requirements for the ABI required 32-bit
     alignment.  Then, 'TYPE_SIZE' would be an 'INTEGER_CST' for 32,
     while 'TYPE_PRECISION' would be 24.)  The integer type is unsigned
     if 'TYPE_UNSIGNED' holds; otherwise, it is signed.

     The 'TYPE_MIN_VALUE' is an 'INTEGER_CST' for the smallest integer
     that may be represented by this type.  Similarly, the
     'TYPE_MAX_VALUE' is an 'INTEGER_CST' for the largest integer that
     may be represented by this type.

'REAL_TYPE'
     Used to represent the 'float', 'double', and 'long double' types.
     The number of bits in the floating-point representation is given by
     'TYPE_PRECISION', as in the 'INTEGER_TYPE' case.

'FIXED_POINT_TYPE'
     Used to represent the 'short _Fract', '_Fract', 'long _Fract',
     'long long _Fract', 'short _Accum', '_Accum', 'long _Accum', and
     'long long _Accum' types.  The number of bits in the fixed-point
     representation is given by 'TYPE_PRECISION', as in the
     'INTEGER_TYPE' case.  There may be padding bits, fractional bits
     and integral bits.  The number of fractional bits is given by
     'TYPE_FBIT', and the number of integral bits is given by
     'TYPE_IBIT'.  The fixed-point type is unsigned if 'TYPE_UNSIGNED'
     holds; otherwise, it is signed.  The fixed-point type is saturating
     if 'TYPE_SATURATING' holds; otherwise, it is not saturating.

'COMPLEX_TYPE'
     Used to represent GCC built-in '__complex__' data types.  The
     'TREE_TYPE' is the type of the real and imaginary parts.

'ENUMERAL_TYPE'
     Used to represent an enumeration type.  The 'TYPE_PRECISION' gives
     (as an 'int'), the number of bits used to represent the type.  If
     there are no negative enumeration constants, 'TYPE_UNSIGNED' will
     hold.  The minimum and maximum enumeration constants may be
     obtained with 'TYPE_MIN_VALUE' and 'TYPE_MAX_VALUE', respectively;
     each of these macros returns an 'INTEGER_CST'.

     The actual enumeration constants themselves may be obtained by
     looking at the 'TYPE_VALUES'.  This macro will return a
     'TREE_LIST', containing the constants.  The 'TREE_PURPOSE' of each
     node will be an 'IDENTIFIER_NODE' giving the name of the constant;
     the 'TREE_VALUE' will be an 'INTEGER_CST' giving the value assigned
     to that constant.  These constants will appear in the order in
     which they were declared.  The 'TREE_TYPE' of each of these
     constants will be the type of enumeration type itself.

'BOOLEAN_TYPE'
     Used to represent the 'bool' type.

'POINTER_TYPE'
     Used to represent pointer types, and pointer to data member types.
     The 'TREE_TYPE' gives the type to which this type points.

'REFERENCE_TYPE'
     Used to represent reference types.  The 'TREE_TYPE' gives the type
     to which this type refers.

'FUNCTION_TYPE'
     Used to represent the type of non-member functions and of static
     member functions.  The 'TREE_TYPE' gives the return type of the
     function.  The 'TYPE_ARG_TYPES' are a 'TREE_LIST' of the argument
     types.  The 'TREE_VALUE' of each node in this list is the type of
     the corresponding argument; the 'TREE_PURPOSE' is an expression for
     the default argument value, if any.  If the last node in the list
     is 'void_list_node' (a 'TREE_LIST' node whose 'TREE_VALUE' is the
     'void_type_node'), then functions of this type do not take variable
     arguments.  Otherwise, they do take a variable number of arguments.

     Note that in C (but not in C++) a function declared like 'void f()'
     is an unprototyped function taking a variable number of arguments;
     the 'TYPE_ARG_TYPES' of such a function will be 'NULL'.

'METHOD_TYPE'
     Used to represent the type of a non-static member function.  Like a
     'FUNCTION_TYPE', the return type is given by the 'TREE_TYPE'.  The
     type of '*this', i.e., the class of which functions of this type
     are a member, is given by the 'TYPE_METHOD_BASETYPE'.  The
     'TYPE_ARG_TYPES' is the parameter list, as for a 'FUNCTION_TYPE',
     and includes the 'this' argument.

'ARRAY_TYPE'
     Used to represent array types.  The 'TREE_TYPE' gives the type of
     the elements in the array.  If the array-bound is present in the
     type, the 'TYPE_DOMAIN' is an 'INTEGER_TYPE' whose 'TYPE_MIN_VALUE'
     and 'TYPE_MAX_VALUE' will be the lower and upper bounds of the
     array, respectively.  The 'TYPE_MIN_VALUE' will always be an
     'INTEGER_CST' for zero, while the 'TYPE_MAX_VALUE' will be one less
     than the number of elements in the array, i.e., the highest value
     which may be used to index an element in the array.

'RECORD_TYPE'
     Used to represent 'struct' and 'class' types, as well as pointers
     to member functions and similar constructs in other languages.
     'TYPE_FIELDS' contains the items contained in this type, each of
     which can be a 'FIELD_DECL', 'VAR_DECL', 'CONST_DECL', or
     'TYPE_DECL'.  You may not make any assumptions about the ordering
     of the fields in the type or whether one or more of them overlap.

'UNION_TYPE'
     Used to represent 'union' types.  Similar to 'RECORD_TYPE' except
     that all 'FIELD_DECL' nodes in 'TYPE_FIELD' start at bit position
     zero.

'QUAL_UNION_TYPE'
     Used to represent part of a variant record in Ada.  Similar to
     'UNION_TYPE' except that each 'FIELD_DECL' has a 'DECL_QUALIFIER'
     field, which contains a boolean expression that indicates whether
     the field is present in the object.  The type will only have one
     field, so each field's 'DECL_QUALIFIER' is only evaluated if none
     of the expressions in the previous fields in 'TYPE_FIELDS' are
     nonzero.  Normally these expressions will reference a field in the
     outer object using a 'PLACEHOLDER_EXPR'.

'LANG_TYPE'
     This node is used to represent a language-specific type.  The front
     end must handle it.

'OFFSET_TYPE'
     This node is used to represent a pointer-to-data member.  For a
     data member 'X::m' the 'TYPE_OFFSET_BASETYPE' is 'X' and the
     'TREE_TYPE' is the type of 'm'.

 There are variables whose values represent some of the basic types.
These include:
'void_type_node'
     A node for 'void'.

'integer_type_node'
     A node for 'int'.

'unsigned_type_node.'
     A node for 'unsigned int'.

'char_type_node.'
     A node for 'char'.
It may sometimes be useful to compare one of these variables with a type
in hand, using 'same_type_p'.


File: gccint.info,  Node: Declarations,  Next: Attributes,  Prev: Types,  Up: GENERIC

10.4 Declarations
=================

This section covers the various kinds of declarations that appear in the
internal representation, except for declarations of functions
(represented by 'FUNCTION_DECL' nodes), which are described in *note
Functions::.

* Menu:

* Working with declarations::  Macros and functions that work on
declarations.
* Internal structure:: How declaration nodes are represented.


File: gccint.info,  Node: Working with declarations,  Next: Internal structure,  Up: Declarations

10.4.1 Working with declarations
--------------------------------

Some macros can be used with any kind of declaration.  These include:
'DECL_NAME'
     This macro returns an 'IDENTIFIER_NODE' giving the name of the
     entity.

'TREE_TYPE'
     This macro returns the type of the entity declared.

'EXPR_FILENAME'
     This macro returns the name of the file in which the entity was
     declared, as a 'char*'.  For an entity declared implicitly by the
     compiler (like '__builtin_memcpy'), this will be the string
     '"<internal>"'.

'EXPR_LINENO'
     This macro returns the line number at which the entity was
     declared, as an 'int'.

'DECL_ARTIFICIAL'
     This predicate holds if the declaration was implicitly generated by
     the compiler.  For example, this predicate will hold of an
     implicitly declared member function, or of the 'TYPE_DECL'
     implicitly generated for a class type.  Recall that in C++ code
     like:
          struct S {};
     is roughly equivalent to C code like:
          struct S {};
          typedef struct S S;
     The implicitly generated 'typedef' declaration is represented by a
     'TYPE_DECL' for which 'DECL_ARTIFICIAL' holds.

 The various kinds of declarations include:
'LABEL_DECL'
     These nodes are used to represent labels in function bodies.  For
     more information, see *note Functions::.  These nodes only appear
     in block scopes.

'CONST_DECL'
     These nodes are used to represent enumeration constants.  The value
     of the constant is given by 'DECL_INITIAL' which will be an
     'INTEGER_CST' with the same type as the 'TREE_TYPE' of the
     'CONST_DECL', i.e., an 'ENUMERAL_TYPE'.

'RESULT_DECL'
     These nodes represent the value returned by a function.  When a
     value is assigned to a 'RESULT_DECL', that indicates that the value
     should be returned, via bitwise copy, by the function.  You can use
     'DECL_SIZE' and 'DECL_ALIGN' on a 'RESULT_DECL', just as with a
     'VAR_DECL'.

'TYPE_DECL'
     These nodes represent 'typedef' declarations.  The 'TREE_TYPE' is
     the type declared to have the name given by 'DECL_NAME'.  In some
     cases, there is no associated name.

'VAR_DECL'
     These nodes represent variables with namespace or block scope, as
     well as static data members.  The 'DECL_SIZE' and 'DECL_ALIGN' are
     analogous to 'TYPE_SIZE' and 'TYPE_ALIGN'.  For a declaration, you
     should always use the 'DECL_SIZE' and 'DECL_ALIGN' rather than the
     'TYPE_SIZE' and 'TYPE_ALIGN' given by the 'TREE_TYPE', since
     special attributes may have been applied to the variable to give it
     a particular size and alignment.  You may use the predicates
     'DECL_THIS_STATIC' or 'DECL_THIS_EXTERN' to test whether the
     storage class specifiers 'static' or 'extern' were used to declare
     a variable.

     If this variable is initialized (but does not require a
     constructor), the 'DECL_INITIAL' will be an expression for the
     initializer.  The initializer should be evaluated, and a bitwise
     copy into the variable performed.  If the 'DECL_INITIAL' is the
     'error_mark_node', there is an initializer, but it is given by an
     explicit statement later in the code; no bitwise copy is required.

     GCC provides an extension that allows either automatic variables,
     or global variables, to be placed in particular registers.  This
     extension is being used for a particular 'VAR_DECL' if
     'DECL_REGISTER' holds for the 'VAR_DECL', and if
     'DECL_ASSEMBLER_NAME' is not equal to 'DECL_NAME'.  In that case,
     'DECL_ASSEMBLER_NAME' is the name of the register into which the
     variable will be placed.

'PARM_DECL'
     Used to represent a parameter to a function.  Treat these nodes
     similarly to 'VAR_DECL' nodes.  These nodes only appear in the
     'DECL_ARGUMENTS' for a 'FUNCTION_DECL'.

     The 'DECL_ARG_TYPE' for a 'PARM_DECL' is the type that will
     actually be used when a value is passed to this function.  It may
     be a wider type than the 'TREE_TYPE' of the parameter; for example,
     the ordinary type might be 'short' while the 'DECL_ARG_TYPE' is
     'int'.

'DEBUG_EXPR_DECL'
     Used to represent an anonymous debug-information temporary created
     to hold an expression as it is optimized away, so that its value
     can be referenced in debug bind statements.

'FIELD_DECL'
     These nodes represent non-static data members.  The 'DECL_SIZE' and
     'DECL_ALIGN' behave as for 'VAR_DECL' nodes.  The position of the
     field within the parent record is specified by a combination of
     three attributes.  'DECL_FIELD_OFFSET' is the position, counting in
     bytes, of the 'DECL_OFFSET_ALIGN'-bit sized word containing the bit
     of the field closest to the beginning of the structure.
     'DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the
     field within this word; this may be nonzero even for fields that
     are not bit-fields, since 'DECL_OFFSET_ALIGN' may be greater than
     the natural alignment of the field's type.

     If 'DECL_C_BIT_FIELD' holds, this field is a bit-field.  In a
     bit-field, 'DECL_BIT_FIELD_TYPE' also contains the type that was
     originally specified for it, while DECL_TYPE may be a modified type
     with lesser precision, according to the size of the bit field.

'NAMESPACE_DECL'
     Namespaces provide a name hierarchy for other declarations.  They
     appear in the 'DECL_CONTEXT' of other '_DECL' nodes.


File: gccint.info,  Node: Internal structure,  Prev: Working with declarations,  Up: Declarations

10.4.2 Internal structure
-------------------------

'DECL' nodes are represented internally as a hierarchy of structures.

* Menu:

* Current structure hierarchy::  The current DECL node structure
hierarchy.
* Adding new DECL node types:: How to add a new DECL node to a
frontend.


File: gccint.info,  Node: Current structure hierarchy,  Next: Adding new DECL node types,  Up: Internal structure

10.4.2.1 Current structure hierarchy
....................................

'struct tree_decl_minimal'
     This is the minimal structure to inherit from in order for common
     'DECL' macros to work.  The fields it contains are a unique ID,
     source location, context, and name.

'struct tree_decl_common'
     This structure inherits from 'struct tree_decl_minimal'.  It
     contains fields that most 'DECL' nodes need, such as a field to
     store alignment, machine mode, size, and attributes.

'struct tree_field_decl'
     This structure inherits from 'struct tree_decl_common'.  It is used
     to represent 'FIELD_DECL'.

'struct tree_label_decl'
     This structure inherits from 'struct tree_decl_common'.  It is used
     to represent 'LABEL_DECL'.

'struct tree_translation_unit_decl'
     This structure inherits from 'struct tree_decl_common'.  It is used
     to represent 'TRANSLATION_UNIT_DECL'.

'struct tree_decl_with_rtl'
     This structure inherits from 'struct tree_decl_common'.  It
     contains a field to store the low-level RTL associated with a
     'DECL' node.

'struct tree_result_decl'
     This structure inherits from 'struct tree_decl_with_rtl'.  It is
     used to represent 'RESULT_DECL'.

'struct tree_const_decl'
     This structure inherits from 'struct tree_decl_with_rtl'.  It is
     used to represent 'CONST_DECL'.

'struct tree_parm_decl'
     This structure inherits from 'struct tree_decl_with_rtl'.  It is
     used to represent 'PARM_DECL'.

'struct tree_decl_with_vis'
     This structure inherits from 'struct tree_decl_with_rtl'.  It
     contains fields necessary to store visibility information, as well
     as a section name and assembler name.

'struct tree_var_decl'
     This structure inherits from 'struct tree_decl_with_vis'.  It is
     used to represent 'VAR_DECL'.

'struct tree_function_decl'
     This structure inherits from 'struct tree_decl_with_vis'.  It is
     used to represent 'FUNCTION_DECL'.


File: gccint.info,  Node: Adding new DECL node types,  Prev: Current structure hierarchy,  Up: Internal structure

10.4.2.2 Adding new DECL node types
...................................

Adding a new 'DECL' tree consists of the following steps

Add a new tree code for the 'DECL' node
     For language specific 'DECL' nodes, there is a '.def' file in each
     frontend directory where the tree code should be added.  For 'DECL'
     nodes that are part of the middle-end, the code should be added to
     'tree.def'.

Create a new structure type for the 'DECL' node
     These structures should inherit from one of the existing structures
     in the language hierarchy by using that structure as the first
     member.

          struct tree_foo_decl
          {
             struct tree_decl_with_vis common;
          }

     Would create a structure name 'tree_foo_decl' that inherits from
     'struct tree_decl_with_vis'.

     For language specific 'DECL' nodes, this new structure type should
     go in the appropriate '.h' file.  For 'DECL' nodes that are part of
     the middle-end, the structure type should go in 'tree.h'.

Add a member to the tree structure enumerator for the node
     For garbage collection and dynamic checking purposes, each 'DECL'
     node structure type is required to have a unique enumerator value
     specified with it.  For language specific 'DECL' nodes, this new
     enumerator value should go in the appropriate '.def' file.  For
     'DECL' nodes that are part of the middle-end, the enumerator values
     are specified in 'treestruct.def'.

Update 'union tree_node'
     In order to make your new structure type usable, it must be added
     to 'union tree_node'.  For language specific 'DECL' nodes, a new
     entry should be added to the appropriate '.h' file of the form
            struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl;
     For 'DECL' nodes that are part of the middle-end, the additional
     member goes directly into 'union tree_node' in 'tree.h'.

Update dynamic checking info
     In order to be able to check whether accessing a named portion of
     'union tree_node' is legal, and whether a certain 'DECL' node
     contains one of the enumerated 'DECL' node structures in the
     hierarchy, a simple lookup table is used.  This lookup table needs
     to be kept up to date with the tree structure hierarchy, or else
     checking and containment macros will fail inappropriately.

     For language specific 'DECL' nodes, their is an 'init_ts' function
     in an appropriate '.c' file, which initializes the lookup table.
     Code setting up the table for new 'DECL' nodes should be added
     there.  For each 'DECL' tree code and enumerator value representing
     a member of the inheritance hierarchy, the table should contain 1
     if that tree code inherits (directly or indirectly) from that
     member.  Thus, a 'FOO_DECL' node derived from 'struct
     decl_with_rtl', and enumerator value 'TS_FOO_DECL', would be set up
     as follows
          tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1;
          tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1;
          tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1;
          tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1;

     For 'DECL' nodes that are part of the middle-end, the setup code
     goes into 'tree.c'.

Add macros to access any new fields and flags

     Each added field or flag should have a macro that is used to access
     it, that performs appropriate checking to ensure only the right
     type of 'DECL' nodes access the field.

     These macros generally take the following form
          #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname
     However, if the structure is simply a base class for further
     structures, something like the following should be used
          #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT)
          #define BASE_STRUCT_FIELDNAME(NODE) \
             (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname

     Reading them from the generated 'all-tree.def' file (which in turn
     includes all the 'tree.def' files), 'gencheck.c' is used during
     GCC's build to generate the '*_CHECK' macros for all tree codes.


File: gccint.info,  Node: Attributes,  Next: Expression trees,  Prev: Declarations,  Up: GENERIC

10.5 Attributes in trees
========================

Attributes, as specified using the '__attribute__' keyword, are
represented internally as a 'TREE_LIST'.  The 'TREE_PURPOSE' is the name
of the attribute, as an 'IDENTIFIER_NODE'.  The 'TREE_VALUE' is a
'TREE_LIST' of the arguments of the attribute, if any, or 'NULL_TREE' if
there are no arguments; the arguments are stored as the 'TREE_VALUE' of
successive entries in the list, and may be identifiers or expressions.
The 'TREE_CHAIN' of the attribute is the next attribute in a list of
attributes applying to the same declaration or type, or 'NULL_TREE' if
there are no further attributes in the list.

 Attributes may be attached to declarations and to types; these
attributes may be accessed with the following macros.  All attributes
are stored in this way, and many also cause other changes to the
declaration or type or to other internal compiler data structures.

 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL)
     This macro returns the attributes on the declaration DECL.

 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE)
     This macro returns the attributes on the type TYPE.


File: gccint.info,  Node: Expression trees,  Next: Statements,  Prev: Attributes,  Up: GENERIC

10.6 Expressions
================

The internal representation for expressions is for the most part quite
straightforward.  However, there are a few facts that one must bear in
mind.  In particular, the expression "tree" is actually a directed
acyclic graph.  (For example there may be many references to the integer
constant zero throughout the source program; many of these will be
represented by the same expression node.)  You should not rely on
certain kinds of node being shared, nor should you rely on certain kinds
of nodes being unshared.

 The following macros can be used with all expression nodes:

'TREE_TYPE'
     Returns the type of the expression.  This value may not be
     precisely the same type that would be given the expression in the
     original program.

 In what follows, some nodes that one might expect to always have type
'bool' are documented to have either integral or boolean type.  At some
point in the future, the C front end may also make use of this same
intermediate representation, and at this point these nodes will
certainly have integral type.  The previous sentence is not meant to
imply that the C++ front end does not or will not give these nodes
integral type.

 Below, we list the various kinds of expression nodes.  Except where
noted otherwise, the operands to an expression are accessed using the
'TREE_OPERAND' macro.  For example, to access the first operand to a
binary plus expression 'expr', use:

     TREE_OPERAND (expr, 0)

 As this example indicates, the operands are zero-indexed.

* Menu:

* Constants: Constant expressions.
* Storage References::
* Unary and Binary Expressions::
* Vectors::


File: gccint.info,  Node: Constant expressions,  Next: Storage References,  Up: Expression trees

10.6.1 Constant expressions
---------------------------

The table below begins with constants, moves on to unary expressions,
then proceeds to binary expressions, and concludes with various other
kinds of expressions:

'INTEGER_CST'
     These nodes represent integer constants.  Note that the type of
     these constants is obtained with 'TREE_TYPE'; they are not always
     of type 'int'.  In particular, 'char' constants are represented
     with 'INTEGER_CST' nodes.  The value of the integer constant 'e' is
     represented in an array of HOST_WIDE_INT. There are enough elements
     in the array to represent the value without taking extra elements
     for redundant 0s or -1.  The number of elements used to represent
     'e' is available via 'TREE_INT_CST_NUNITS'.  Element 'i' can be
     extracted by using 'TREE_INT_CST_ELT (e, i)'.  'TREE_INT_CST_LOW'
     is a shorthand for 'TREE_INT_CST_ELT (e, 0)'.

     The functions 'tree_fits_shwi_p' and 'tree_fits_uhwi_p' can be used
     to tell if the value is small enough to fit in a signed
     HOST_WIDE_INT or an unsigned HOST_WIDE_INT respectively.  The value
     can then be extracted using 'tree_to_shwi' and 'tree_to_uhwi'.

'REAL_CST'

     FIXME: Talk about how to obtain representations of this constant,
     do comparisons, and so forth.

'FIXED_CST'

     These nodes represent fixed-point constants.  The type of these
     constants is obtained with 'TREE_TYPE'.  'TREE_FIXED_CST_PTR'
     points to a 'struct fixed_value'; 'TREE_FIXED_CST' returns the
     structure itself.  'struct fixed_value' contains 'data' with the
     size of two 'HOST_BITS_PER_WIDE_INT' and 'mode' as the associated
     fixed-point machine mode for 'data'.

'COMPLEX_CST'
     These nodes are used to represent complex number constants, that is
     a '__complex__' whose parts are constant nodes.  The
     'TREE_REALPART' and 'TREE_IMAGPART' return the real and the
     imaginary parts respectively.

'VECTOR_CST'
     These nodes are used to represent vector constants, whose parts are
     constant nodes.  Each individual constant node is either an integer
     or a double constant node.  The first operand is a 'TREE_LIST' of
     the constant nodes and is accessed through 'TREE_VECTOR_CST_ELTS'.

'STRING_CST'
     These nodes represent string-constants.  The 'TREE_STRING_LENGTH'
     returns the length of the string, as an 'int'.  The
     'TREE_STRING_POINTER' is a 'char*' containing the string itself.
     The string may not be 'NUL'-terminated, and it may contain embedded
     'NUL' characters.  Therefore, the 'TREE_STRING_LENGTH' includes the
     trailing 'NUL' if it is present.

     For wide string constants, the 'TREE_STRING_LENGTH' is the number
     of bytes in the string, and the 'TREE_STRING_POINTER' points to an
     array of the bytes of the string, as represented on the target
     system (that is, as integers in the target endianness).  Wide and
     non-wide string constants are distinguished only by the 'TREE_TYPE'
     of the 'STRING_CST'.

     FIXME: The formats of string constants are not well-defined when
     the target system bytes are not the same width as host system
     bytes.


File: gccint.info,  Node: Storage References,  Next: Unary and Binary Expressions,  Prev: Constant expressions,  Up: Expression trees

10.6.2 References to storage
----------------------------

'ARRAY_REF'
     These nodes represent array accesses.  The first operand is the
     array; the second is the index.  To calculate the address of the
     memory accessed, you must scale the index by the size of the type
     of the array elements.  The type of these expressions must be the
     type of a component of the array.  The third and fourth operands
     are used after gimplification to represent the lower bound and
     component size but should not be used directly; call
     'array_ref_low_bound' and 'array_ref_element_size' instead.

'ARRAY_RANGE_REF'
     These nodes represent access to a range (or "slice") of an array.
     The operands are the same as that for 'ARRAY_REF' and have the same
     meanings.  The type of these expressions must be an array whose
     component type is the same as that of the first operand.  The range
     of that array type determines the amount of data these expressions
     access.

'TARGET_MEM_REF'
     These nodes represent memory accesses whose address directly map to
     an addressing mode of the target architecture.  The first argument
     is 'TMR_SYMBOL' and must be a 'VAR_DECL' of an object with a fixed
     address.  The second argument is 'TMR_BASE' and the third one is
     'TMR_INDEX'.  The fourth argument is 'TMR_STEP' and must be an
     'INTEGER_CST'.  The fifth argument is 'TMR_OFFSET' and must be an
     'INTEGER_CST'.  Any of the arguments may be NULL if the appropriate
     component does not appear in the address.  Address of the
     'TARGET_MEM_REF' is determined in the following way.

          &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET

     The sixth argument is the reference to the original memory access,
     which is preserved for the purposes of the RTL alias analysis.  The
     seventh argument is a tag representing the results of tree level
     alias analysis.

'ADDR_EXPR'
     These nodes are used to represent the address of an object.  (These
     expressions will always have pointer or reference type.)  The
     operand may be another expression, or it may be a declaration.

     As an extension, GCC allows users to take the address of a label.
     In this case, the operand of the 'ADDR_EXPR' will be a
     'LABEL_DECL'.  The type of such an expression is 'void*'.

     If the object addressed is not an lvalue, a temporary is created,
     and the address of the temporary is used.

'INDIRECT_REF'
     These nodes are used to represent the object pointed to by a
     pointer.  The operand is the pointer being dereferenced; it will
     always have pointer or reference type.

'MEM_REF'
     These nodes are used to represent the object pointed to by a
     pointer offset by a constant.  The first operand is the pointer
     being dereferenced; it will always have pointer or reference type.
     The second operand is a pointer constant.  Its type is specifying
     the type to be used for type-based alias analysis.

'COMPONENT_REF'
     These nodes represent non-static data member accesses.  The first
     operand is the object (rather than a pointer to it); the second
     operand is the 'FIELD_DECL' for the data member.  The third operand
     represents the byte offset of the field, but should not be used
     directly; call 'component_ref_field_offset' instead.


File: gccint.info,  Node: Unary and Binary Expressions,  Next: Vectors,  Prev: Storage References,  Up: Expression trees

10.6.3 Unary and Binary Expressions
-----------------------------------

'NEGATE_EXPR'
     These nodes represent unary negation of the single operand, for
     both integer and floating-point types.  The type of negation can be
     determined by looking at the type of the expression.

     The behavior of this operation on signed arithmetic overflow is
     controlled by the 'flag_wrapv' and 'flag_trapv' variables.

'ABS_EXPR'
     These nodes represent the absolute value of the single operand, for
     both integer and floating-point types.  This is typically used to
     implement the 'abs', 'labs' and 'llabs' builtins for integer types,
     and the 'fabs', 'fabsf' and 'fabsl' builtins for floating point
     types.  The type of abs operation can be determined by looking at
     the type of the expression.

     This node is not used for complex types.  To represent the modulus
     or complex abs of a complex value, use the 'BUILT_IN_CABS',
     'BUILT_IN_CABSF' or 'BUILT_IN_CABSL' builtins, as used to implement
     the C99 'cabs', 'cabsf' and 'cabsl' built-in functions.

'BIT_NOT_EXPR'
     These nodes represent bitwise complement, and will always have
     integral type.  The only operand is the value to be complemented.

'TRUTH_NOT_EXPR'
     These nodes represent logical negation, and will always have
     integral (or boolean) type.  The operand is the value being
     negated.  The type of the operand and that of the result are always
     of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'.

'PREDECREMENT_EXPR'
'PREINCREMENT_EXPR'
'POSTDECREMENT_EXPR'
'POSTINCREMENT_EXPR'
     These nodes represent increment and decrement expressions.  The
     value of the single operand is computed, and the operand
     incremented or decremented.  In the case of 'PREDECREMENT_EXPR' and
     'PREINCREMENT_EXPR', the value of the expression is the value
     resulting after the increment or decrement; in the case of
     'POSTDECREMENT_EXPR' and 'POSTINCREMENT_EXPR' is the value before
     the increment or decrement occurs.  The type of the operand, like
     that of the result, will be either integral, boolean, or
     floating-point.

'FIX_TRUNC_EXPR'
     These nodes represent conversion of a floating-point value to an
     integer.  The single operand will have a floating-point type, while
     the complete expression will have an integral (or boolean) type.
     The operand is rounded towards zero.

'FLOAT_EXPR'
     These nodes represent conversion of an integral (or boolean) value
     to a floating-point value.  The single operand will have integral
     type, while the complete expression will have a floating-point
     type.

     FIXME: How is the operand supposed to be rounded?  Is this
     dependent on '-mieee'?

'COMPLEX_EXPR'
     These nodes are used to represent complex numbers constructed from
     two expressions of the same (integer or real) type.  The first
     operand is the real part and the second operand is the imaginary
     part.

'CONJ_EXPR'
     These nodes represent the conjugate of their operand.

'REALPART_EXPR'
'IMAGPART_EXPR'
     These nodes represent respectively the real and the imaginary parts
     of complex numbers (their sole argument).

'NON_LVALUE_EXPR'
     These nodes indicate that their one and only operand is not an
     lvalue.  A back end can treat these identically to the single
     operand.

'NOP_EXPR'
     These nodes are used to represent conversions that do not require
     any code-generation.  For example, conversion of a 'char*' to an
     'int*' does not require any code be generated; such a conversion is
     represented by a 'NOP_EXPR'.  The single operand is the expression
     to be converted.  The conversion from a pointer to a reference is
     also represented with a 'NOP_EXPR'.

'CONVERT_EXPR'
     These nodes are similar to 'NOP_EXPR's, but are used in those
     situations where code may need to be generated.  For example, if an
     'int*' is converted to an 'int' code may need to be generated on
     some platforms.  These nodes are never used for C++-specific
     conversions, like conversions between pointers to different classes
     in an inheritance hierarchy.  Any adjustments that need to be made
     in such cases are always indicated explicitly.  Similarly, a
     user-defined conversion is never represented by a 'CONVERT_EXPR';
     instead, the function calls are made explicit.

'FIXED_CONVERT_EXPR'
     These nodes are used to represent conversions that involve
     fixed-point values.  For example, from a fixed-point value to
     another fixed-point value, from an integer to a fixed-point value,
     from a fixed-point value to an integer, from a floating-point value
     to a fixed-point value, or from a fixed-point value to a
     floating-point value.

'LSHIFT_EXPR'
'RSHIFT_EXPR'
     These nodes represent left and right shifts, respectively.  The
     first operand is the value to shift; it will always be of integral
     type.  The second operand is an expression for the number of bits
     by which to shift.  Right shift should be treated as arithmetic,
     i.e., the high-order bits should be zero-filled when the expression
     has unsigned type and filled with the sign bit when the expression
     has signed type.  Note that the result is undefined if the second
     operand is larger than or equal to the first operand's type size.
     Unlike most nodes, these can have a vector as first operand and a
     scalar as second operand.

'BIT_IOR_EXPR'
'BIT_XOR_EXPR'
'BIT_AND_EXPR'
     These nodes represent bitwise inclusive or, bitwise exclusive or,
     and bitwise and, respectively.  Both operands will always have
     integral type.

'TRUTH_ANDIF_EXPR'
'TRUTH_ORIF_EXPR'
     These nodes represent logical "and" and logical "or", respectively.
     These operators are not strict; i.e., the second operand is
     evaluated only if the value of the expression is not determined by
     evaluation of the first operand.  The type of the operands and that
     of the result are always of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'.

'TRUTH_AND_EXPR'
'TRUTH_OR_EXPR'
'TRUTH_XOR_EXPR'
     These nodes represent logical and, logical or, and logical
     exclusive or.  They are strict; both arguments are always
     evaluated.  There are no corresponding operators in C or C++, but
     the front end will sometimes generate these expressions anyhow, if
     it can tell that strictness does not matter.  The type of the
     operands and that of the result are always of 'BOOLEAN_TYPE' or
     'INTEGER_TYPE'.

'POINTER_PLUS_EXPR'
     This node represents pointer arithmetic.  The first operand is
     always a pointer/reference type.  The second operand is always an
     unsigned integer type compatible with sizetype.  This is the only
     binary arithmetic operand that can operate on pointer types.

'PLUS_EXPR'
'MINUS_EXPR'
'MULT_EXPR'
     These nodes represent various binary arithmetic operations.
     Respectively, these operations are addition, subtraction (of the
     second operand from the first) and multiplication.  Their operands
     may have either integral or floating type, but there will never be
     case in which one operand is of floating type and the other is of
     integral type.

     The behavior of these operations on signed arithmetic overflow is
     controlled by the 'flag_wrapv' and 'flag_trapv' variables.

'MULT_HIGHPART_EXPR'
     This node represents the "high-part" of a widening multiplication.
     For an integral type with B bits of precision, the result is the
     most significant B bits of the full 2B product.

'RDIV_EXPR'
     This node represents a floating point division operation.

'TRUNC_DIV_EXPR'
'FLOOR_DIV_EXPR'
'CEIL_DIV_EXPR'
'ROUND_DIV_EXPR'
     These nodes represent integer division operations that return an
     integer result.  'TRUNC_DIV_EXPR' rounds towards zero,
     'FLOOR_DIV_EXPR' rounds towards negative infinity, 'CEIL_DIV_EXPR'
     rounds towards positive infinity and 'ROUND_DIV_EXPR' rounds to the
     closest integer.  Integer division in C and C++ is truncating, i.e.
     'TRUNC_DIV_EXPR'.

     The behavior of these operations on signed arithmetic overflow,
     when dividing the minimum signed integer by minus one, is
     controlled by the 'flag_wrapv' and 'flag_trapv' variables.

'TRUNC_MOD_EXPR'
'FLOOR_MOD_EXPR'
'CEIL_MOD_EXPR'
'ROUND_MOD_EXPR'
     These nodes represent the integer remainder or modulus operation.
     The integer modulus of two operands 'a' and 'b' is defined as 'a -
     (a/b)*b' where the division calculated using the corresponding
     division operator.  Hence for 'TRUNC_MOD_EXPR' this definition
     assumes division using truncation towards zero, i.e.
     'TRUNC_DIV_EXPR'.  Integer remainder in C and C++ uses truncating
     division, i.e. 'TRUNC_MOD_EXPR'.

'EXACT_DIV_EXPR'
     The 'EXACT_DIV_EXPR' code is used to represent integer divisions
     where the numerator is known to be an exact multiple of the
     denominator.  This allows the backend to choose between the faster
     of 'TRUNC_DIV_EXPR', 'CEIL_DIV_EXPR' and 'FLOOR_DIV_EXPR' for the
     current target.

'LT_EXPR'
'LE_EXPR'
'GT_EXPR'
'GE_EXPR'
'EQ_EXPR'
'NE_EXPR'
     These nodes represent the less than, less than or equal to, greater
     than, greater than or equal to, equal, and not equal comparison
     operators.  The first and second operands will either be both of
     integral type, both of floating type or both of vector type.  The
     result type of these expressions will always be of integral,
     boolean or signed integral vector type.  These operations return
     the result type's zero value for false, the result type's one value
     for true, and a vector whose elements are zero (false) or minus one
     (true) for vectors.

     For floating point comparisons, if we honor IEEE NaNs and either
     operand is NaN, then 'NE_EXPR' always returns true and the
     remaining operators always return false.  On some targets,
     comparisons against an IEEE NaN, other than equality and
     inequality, may generate a floating point exception.

'ORDERED_EXPR'
'UNORDERED_EXPR'
     These nodes represent non-trapping ordered and unordered comparison
     operators.  These operations take two floating point operands and
     determine whether they are ordered or unordered relative to each
     other.  If either operand is an IEEE NaN, their comparison is
     defined to be unordered, otherwise the comparison is defined to be
     ordered.  The result type of these expressions will always be of
     integral or boolean type.  These operations return the result
     type's zero value for false, and the result type's one value for
     true.

'UNLT_EXPR'
'UNLE_EXPR'
'UNGT_EXPR'
'UNGE_EXPR'
'UNEQ_EXPR'
'LTGT_EXPR'
     These nodes represent the unordered comparison operators.  These
     operations take two floating point operands and determine whether
     the operands are unordered or are less than, less than or equal to,
     greater than, greater than or equal to, or equal respectively.  For
     example, 'UNLT_EXPR' returns true if either operand is an IEEE NaN
     or the first operand is less than the second.  With the possible
     exception of 'LTGT_EXPR', all of these operations are guaranteed
     not to generate a floating point exception.  The result type of
     these expressions will always be of integral or boolean type.
     These operations return the result type's zero value for false, and
     the result type's one value for true.

'MODIFY_EXPR'
     These nodes represent assignment.  The left-hand side is the first
     operand; the right-hand side is the second operand.  The left-hand
     side will be a 'VAR_DECL', 'INDIRECT_REF', 'COMPONENT_REF', or
     other lvalue.

     These nodes are used to represent not only assignment with '=' but
     also compound assignments (like '+='), by reduction to '='
     assignment.  In other words, the representation for 'i += 3' looks
     just like that for 'i = i + 3'.

'INIT_EXPR'
     These nodes are just like 'MODIFY_EXPR', but are used only when a
     variable is initialized, rather than assigned to subsequently.
     This means that we can assume that the target of the initialization
     is not used in computing its own value; any reference to the lhs in
     computing the rhs is undefined.

'COMPOUND_EXPR'
     These nodes represent comma-expressions.  The first operand is an
     expression whose value is computed and thrown away prior to the
     evaluation of the second operand.  The value of the entire
     expression is the value of the second operand.

'COND_EXPR'
     These nodes represent '?:' expressions.  The first operand is of
     boolean or integral type.  If it evaluates to a nonzero value, the
     second operand should be evaluated, and returned as the value of
     the expression.  Otherwise, the third operand is evaluated, and
     returned as the value of the expression.

     The second operand must have the same type as the entire
     expression, unless it unconditionally throws an exception or calls
     a noreturn function, in which case it should have void type.  The
     same constraints apply to the third operand.  This allows array
     bounds checks to be represented conveniently as '(i >= 0 && i < 10)
     ? i : abort()'.

     As a GNU extension, the C language front-ends allow the second
     operand of the '?:' operator may be omitted in the source.  For
     example, 'x ? : 3' is equivalent to 'x ? x : 3', assuming that 'x'
     is an expression without side-effects.  In the tree representation,
     however, the second operand is always present, possibly protected
     by 'SAVE_EXPR' if the first argument does cause side-effects.

'CALL_EXPR'
     These nodes are used to represent calls to functions, including
     non-static member functions.  'CALL_EXPR's are implemented as
     expression nodes with a variable number of operands.  Rather than
     using 'TREE_OPERAND' to extract them, it is preferable to use the
     specialized accessor macros and functions that operate specifically
     on 'CALL_EXPR' nodes.

     'CALL_EXPR_FN' returns a pointer to the function to call; it is
     always an expression whose type is a 'POINTER_TYPE'.

     The number of arguments to the call is returned by
     'call_expr_nargs', while the arguments themselves can be accessed
     with the 'CALL_EXPR_ARG' macro.  The arguments are zero-indexed and
     numbered left-to-right.  You can iterate over the arguments using
     'FOR_EACH_CALL_EXPR_ARG', as in:

          tree call, arg;
          call_expr_arg_iterator iter;
          FOR_EACH_CALL_EXPR_ARG (arg, iter, call)
            /* arg is bound to successive arguments of call.  */
            ...;

     For non-static member functions, there will be an operand
     corresponding to the 'this' pointer.  There will always be
     expressions corresponding to all of the arguments, even if the
     function is declared with default arguments and some arguments are
     not explicitly provided at the call sites.

     'CALL_EXPR's also have a 'CALL_EXPR_STATIC_CHAIN' operand that is
     used to implement nested functions.  This operand is otherwise
     null.

'CLEANUP_POINT_EXPR'
     These nodes represent full-expressions.  The single operand is an
     expression to evaluate.  Any destructor calls engendered by the
     creation of temporaries during the evaluation of that expression
     should be performed immediately after the expression is evaluated.

'CONSTRUCTOR'
     These nodes represent the brace-enclosed initializers for a
     structure or an array.  They contain a sequence of component values
     made out of a vector of constructor_elt, which is a ('INDEX',
     'VALUE') pair.

     If the 'TREE_TYPE' of the 'CONSTRUCTOR' is a 'RECORD_TYPE',
     'UNION_TYPE' or 'QUAL_UNION_TYPE' then the 'INDEX' of each node in
     the sequence will be a 'FIELD_DECL' and the 'VALUE' will be the
     expression used to initialize that field.

     If the 'TREE_TYPE' of the 'CONSTRUCTOR' is an 'ARRAY_TYPE', then
     the 'INDEX' of each node in the sequence will be an 'INTEGER_CST'
     or a 'RANGE_EXPR' of two 'INTEGER_CST's.  A single 'INTEGER_CST'
     indicates which element of the array is being assigned to.  A
     'RANGE_EXPR' indicates an inclusive range of elements to
     initialize.  In both cases the 'VALUE' is the corresponding
     initializer.  It is re-evaluated for each element of a
     'RANGE_EXPR'.  If the 'INDEX' is 'NULL_TREE', then the initializer
     is for the next available array element.

     In the front end, you should not depend on the fields appearing in
     any particular order.  However, in the middle end, fields must
     appear in declaration order.  You should not assume that all fields
     will be represented.  Unrepresented fields will be cleared
     (zeroed), unless the CONSTRUCTOR_NO_CLEARING flag is set, in which
     case their value becomes undefined.

'COMPOUND_LITERAL_EXPR'
     These nodes represent ISO C99 compound literals.  The
     'COMPOUND_LITERAL_EXPR_DECL_EXPR' is a 'DECL_EXPR' containing an
     anonymous 'VAR_DECL' for the unnamed object represented by the
     compound literal; the 'DECL_INITIAL' of that 'VAR_DECL' is a
     'CONSTRUCTOR' representing the brace-enclosed list of initializers
     in the compound literal.  That anonymous 'VAR_DECL' can also be
     accessed directly by the 'COMPOUND_LITERAL_EXPR_DECL' macro.

'SAVE_EXPR'

     A 'SAVE_EXPR' represents an expression (possibly involving
     side-effects) that is used more than once.  The side-effects should
     occur only the first time the expression is evaluated.  Subsequent
     uses should just reuse the computed value.  The first operand to
     the 'SAVE_EXPR' is the expression to evaluate.  The side-effects
     should be executed where the 'SAVE_EXPR' is first encountered in a
     depth-first preorder traversal of the expression tree.

'TARGET_EXPR'
     A 'TARGET_EXPR' represents a temporary object.  The first operand
     is a 'VAR_DECL' for the temporary variable.  The second operand is
     the initializer for the temporary.  The initializer is evaluated
     and, if non-void, copied (bitwise) into the temporary.  If the
     initializer is void, that means that it will perform the
     initialization itself.

     Often, a 'TARGET_EXPR' occurs on the right-hand side of an
     assignment, or as the second operand to a comma-expression which is
     itself the right-hand side of an assignment, etc.  In this case, we
     say that the 'TARGET_EXPR' is "normal"; otherwise, we say it is
     "orphaned".  For a normal 'TARGET_EXPR' the temporary variable
     should be treated as an alias for the left-hand side of the
     assignment, rather than as a new temporary variable.

     The third operand to the 'TARGET_EXPR', if present, is a
     cleanup-expression (i.e., destructor call) for the temporary.  If
     this expression is orphaned, then this expression must be executed
     when the statement containing this expression is complete.  These
     cleanups must always be executed in the order opposite to that in
     which they were encountered.  Note that if a temporary is created
     on one branch of a conditional operator (i.e., in the second or
     third operand to a 'COND_EXPR'), the cleanup must be run only if
     that branch is actually executed.

'VA_ARG_EXPR'
     This node is used to implement support for the C/C++ variable
     argument-list mechanism.  It represents expressions like 'va_arg
     (ap, type)'.  Its 'TREE_TYPE' yields the tree representation for
     'type' and its sole argument yields the representation for 'ap'.

'ANNOTATE_EXPR'
     This node is used to attach markers to an expression.  The first
     operand is the annotated expression, the second is an 'INTEGER_CST'
     with a value from 'enum annot_expr_kind'.


File: gccint.info,  Node: Vectors,  Prev: Unary and Binary Expressions,  Up: Expression trees

10.6.4 Vectors
--------------

'VEC_LSHIFT_EXPR'
'VEC_RSHIFT_EXPR'
     These nodes represent whole vector left and right shifts,
     respectively.  The first operand is the vector to shift; it will
     always be of vector type.  The second operand is an expression for
     the number of bits by which to shift.  Note that the result is
     undefined if the second operand is larger than or equal to the
     first operand's type size.

'VEC_WIDEN_MULT_HI_EXPR'
'VEC_WIDEN_MULT_LO_EXPR'
     These nodes represent widening vector multiplication of the high
     and low parts of the two input vectors, respectively.  Their
     operands are vectors that contain the same number of elements ('N')
     of the same integral type.  The result is a vector that contains
     half as many elements, of an integral type whose size is twice as
     wide.  In the case of 'VEC_WIDEN_MULT_HI_EXPR' the high 'N/2'
     elements of the two vector are multiplied to produce the vector of
     'N/2' products.  In the case of 'VEC_WIDEN_MULT_LO_EXPR' the low
     'N/2' elements of the two vector are multiplied to produce the
     vector of 'N/2' products.

'VEC_UNPACK_HI_EXPR'
'VEC_UNPACK_LO_EXPR'
     These nodes represent unpacking of the high and low parts of the
     input vector, respectively.  The single operand is a vector that
     contains 'N' elements of the same integral or floating point type.
     The result is a vector that contains half as many elements, of an
     integral or floating point type whose size is twice as wide.  In
     the case of 'VEC_UNPACK_HI_EXPR' the high 'N/2' elements of the
     vector are extracted and widened (promoted).  In the case of
     'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the vector are
     extracted and widened (promoted).

'VEC_UNPACK_FLOAT_HI_EXPR'
'VEC_UNPACK_FLOAT_LO_EXPR'
     These nodes represent unpacking of the high and low parts of the
     input vector, where the values are converted from fixed point to
     floating point.  The single operand is a vector that contains 'N'
     elements of the same integral type.  The result is a vector that
     contains half as many elements of a floating point type whose size
     is twice as wide.  In the case of 'VEC_UNPACK_HI_EXPR' the high
     'N/2' elements of the vector are extracted, converted and widened.
     In the case of 'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the
     vector are extracted, converted and widened.

'VEC_PACK_TRUNC_EXPR'
     This node represents packing of truncated elements of the two input
     vectors into the output vector.  Input operands are vectors that
     contain the same number of elements of the same integral or
     floating point type.  The result is a vector that contains twice as
     many elements of an integral or floating point type whose size is
     half as wide.  The elements of the two vectors are demoted and
     merged (concatenated) to form the output vector.

'VEC_PACK_SAT_EXPR'
     This node represents packing of elements of the two input vectors
     into the output vector using saturation.  Input operands are
     vectors that contain the same number of elements of the same
     integral type.  The result is a vector that contains twice as many
     elements of an integral type whose size is half as wide.  The
     elements of the two vectors are demoted and merged (concatenated)
     to form the output vector.

'VEC_PACK_FIX_TRUNC_EXPR'
     This node represents packing of elements of the two input vectors
     into the output vector, where the values are converted from
     floating point to fixed point.  Input operands are vectors that
     contain the same number of elements of a floating point type.  The
     result is a vector that contains twice as many elements of an
     integral type whose size is half as wide.  The elements of the two
     vectors are merged (concatenated) to form the output vector.

'VEC_COND_EXPR'
     These nodes represent '?:' expressions.  The three operands must be
     vectors of the same size and number of elements.  The second and
     third operands must have the same type as the entire expression.
     The first operand is of signed integral vector type.  If an element
     of the first operand evaluates to a zero value, the corresponding
     element of the result is taken from the third operand.  If it
     evaluates to a minus one value, it is taken from the second
     operand.  It should never evaluate to any other value currently,
     but optimizations should not rely on that property.  In contrast
     with a 'COND_EXPR', all operands are always evaluated.

'SAD_EXPR'
     This node represents the Sum of Absolute Differences operation.
     The three operands must be vectors of integral types.  The first
     and second operand must have the same type.  The size of the vector
     element of the third operand must be at lease twice of the size of
     the vector element of the first and second one.  The SAD is
     calculated between the first and second operands, added to the
     third operand, and returned.


File: gccint.info,  Node: Statements,  Next: Functions,  Prev: Expression trees,  Up: GENERIC

10.7 Statements
===============

Most statements in GIMPLE are assignment statements, represented by
'GIMPLE_ASSIGN'.  No other C expressions can appear at statement level;
a reference to a volatile object is converted into a 'GIMPLE_ASSIGN'.

 There are also several varieties of complex statements.

* Menu:

* Basic Statements::
* Blocks::
* Statement Sequences::
* Empty Statements::
* Jumps::
* Cleanups::
* OpenMP::
* OpenACC::


File: gccint.info,  Node: Basic Statements,  Next: Blocks,  Up: Statements

10.7.1 Basic Statements
-----------------------

'ASM_EXPR'

     Used to represent an inline assembly statement.  For an inline
     assembly statement like:
          asm ("mov x, y");
     The 'ASM_STRING' macro will return a 'STRING_CST' node for '"mov x,
     y"'.  If the original statement made use of the extended-assembly
     syntax, then 'ASM_OUTPUTS', 'ASM_INPUTS', and 'ASM_CLOBBERS' will
     be the outputs, inputs, and clobbers for the statement, represented
     as 'STRING_CST' nodes.  The extended-assembly syntax looks like:
          asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
     The first string is the 'ASM_STRING', containing the instruction
     template.  The next two strings are the output and inputs,
     respectively; this statement has no clobbers.  As this example
     indicates, "plain" assembly statements are merely a special case of
     extended assembly statements; they have no cv-qualifiers, outputs,
     inputs, or clobbers.  All of the strings will be 'NUL'-terminated,
     and will contain no embedded 'NUL'-characters.

     If the assembly statement is declared 'volatile', or if the
     statement was not an extended assembly statement, and is therefore
     implicitly volatile, then the predicate 'ASM_VOLATILE_P' will hold
     of the 'ASM_EXPR'.

'DECL_EXPR'

     Used to represent a local declaration.  The 'DECL_EXPR_DECL' macro
     can be used to obtain the entity declared.  This declaration may be
     a 'LABEL_DECL', indicating that the label declared is a local
     label.  (As an extension, GCC allows the declaration of labels with
     scope.)  In C, this declaration may be a 'FUNCTION_DECL',
     indicating the use of the GCC nested function extension.  For more
     information, *note Functions::.

'LABEL_EXPR'

     Used to represent a label.  The 'LABEL_DECL' declared by this
     statement can be obtained with the 'LABEL_EXPR_LABEL' macro.  The
     'IDENTIFIER_NODE' giving the name of the label can be obtained from
     the 'LABEL_DECL' with 'DECL_NAME'.

'GOTO_EXPR'

     Used to represent a 'goto' statement.  The 'GOTO_DESTINATION' will
     usually be a 'LABEL_DECL'.  However, if the "computed goto"
     extension has been used, the 'GOTO_DESTINATION' will be an
     arbitrary expression indicating the destination.  This expression
     will always have pointer type.

'RETURN_EXPR'

     Used to represent a 'return' statement.  Operand 0 represents the
     value to return.  It should either be the 'RESULT_DECL' for the
     containing function, or a 'MODIFY_EXPR' or 'INIT_EXPR' setting the
     function's 'RESULT_DECL'.  It will be 'NULL_TREE' if the statement
     was just
          return;

'LOOP_EXPR'
     These nodes represent "infinite" loops.  The 'LOOP_EXPR_BODY'
     represents the body of the loop.  It should be executed forever,
     unless an 'EXIT_EXPR' is encountered.

'EXIT_EXPR'
     These nodes represent conditional exits from the nearest enclosing
     'LOOP_EXPR'.  The single operand is the condition; if it is
     nonzero, then the loop should be exited.  An 'EXIT_EXPR' will only
     appear within a 'LOOP_EXPR'.

'SWITCH_STMT'

     Used to represent a 'switch' statement.  The 'SWITCH_STMT_COND' is
     the expression on which the switch is occurring.  See the
     documentation for an 'IF_STMT' for more information on the
     representation used for the condition.  The 'SWITCH_STMT_BODY' is
     the body of the switch statement.  The 'SWITCH_STMT_TYPE' is the
     original type of switch expression as given in the source, before
     any compiler conversions.

'CASE_LABEL_EXPR'

     Use to represent a 'case' label, range of 'case' labels, or a
     'default' label.  If 'CASE_LOW' is 'NULL_TREE', then this is a
     'default' label.  Otherwise, if 'CASE_HIGH' is 'NULL_TREE', then
     this is an ordinary 'case' label.  In this case, 'CASE_LOW' is an
     expression giving the value of the label.  Both 'CASE_LOW' and
     'CASE_HIGH' are 'INTEGER_CST' nodes.  These values will have the
     same type as the condition expression in the switch statement.

     Otherwise, if both 'CASE_LOW' and 'CASE_HIGH' are defined, the
     statement is a range of case labels.  Such statements originate
     with the extension that allows users to write things of the form:
          case 2 ... 5:
     The first value will be 'CASE_LOW', while the second will be
     'CASE_HIGH'.


File: gccint.info,  Node: Blocks,  Next: Statement Sequences,  Prev: Basic Statements,  Up: Statements

10.7.2 Blocks
-------------

Block scopes and the variables they declare in GENERIC are expressed
using the 'BIND_EXPR' code, which in previous versions of GCC was
primarily used for the C statement-expression extension.

 Variables in a block are collected into 'BIND_EXPR_VARS' in declaration
order through their 'TREE_CHAIN' field.  Any runtime initialization is
moved out of 'DECL_INITIAL' and into a statement in the controlled
block.  When gimplifying from C or C++, this initialization replaces the
'DECL_STMT'.  These variables will never require cleanups.  The scope of
these variables is just the body

 Variable-length arrays (VLAs) complicate this process, as their size
often refers to variables initialized earlier in the block and their
initialization involves an explicit stack allocation.  To handle this,
we add an indirection and replace them with a pointer to stack space
allocated by means of 'alloca'.  In most cases, we also arrange for this
space to be reclaimed when the enclosing 'BIND_EXPR' is exited, the
exception to this being when there is an explicit call to 'alloca' in
the source code, in which case the stack is left depressed on exit of
the 'BIND_EXPR'.

 A C++ program will usually contain more 'BIND_EXPR's than there are
syntactic blocks in the source code, since several C++ constructs have
implicit scopes associated with them.  On the other hand, although the
C++ front end uses pseudo-scopes to handle cleanups for objects with
destructors, these don't translate into the GIMPLE form; multiple
declarations at the same level use the same 'BIND_EXPR'.


File: gccint.info,  Node: Statement Sequences,  Next: Empty Statements,  Prev: Blocks,  Up: Statements

10.7.3 Statement Sequences
--------------------------

Multiple statements at the same nesting level are collected into a
'STATEMENT_LIST'.  Statement lists are modified and traversed using the
interface in 'tree-iterator.h'.


File: gccint.info,  Node: Empty Statements,  Next: Jumps,  Prev: Statement Sequences,  Up: Statements

10.7.4 Empty Statements
-----------------------

Whenever possible, statements with no effect are discarded.  But if they
are nested within another construct which cannot be discarded for some
reason, they are instead replaced with an empty statement, generated by
'build_empty_stmt'.  Initially, all empty statements were shared, after
the pattern of the Java front end, but this caused a lot of trouble in
practice.

 An empty statement is represented as '(void)0'.


File: gccint.info,  Node: Jumps,  Next: Cleanups,  Prev: Empty Statements,  Up: Statements

10.7.5 Jumps
------------

Other jumps are expressed by either 'GOTO_EXPR' or 'RETURN_EXPR'.

 The operand of a 'GOTO_EXPR' must be either a label or a variable
containing the address to jump to.

 The operand of a 'RETURN_EXPR' is either 'NULL_TREE', 'RESULT_DECL', or
a 'MODIFY_EXPR' which sets the return value.  It would be nice to move
the 'MODIFY_EXPR' into a separate statement, but the special return
semantics in 'expand_return' make that difficult.  It may still happen
in the future, perhaps by moving most of that logic into
'expand_assignment'.


File: gccint.info,  Node: Cleanups,  Next: OpenMP,  Prev: Jumps,  Up: Statements

10.7.6 Cleanups
---------------

Destructors for local C++ objects and similar dynamic cleanups are
represented in GIMPLE by a 'TRY_FINALLY_EXPR'.  'TRY_FINALLY_EXPR' has
two operands, both of which are a sequence of statements to execute.
The first sequence is executed.  When it completes the second sequence
is executed.

 The first sequence may complete in the following ways:

  1. Execute the last statement in the sequence and fall off the end.

  2. Execute a goto statement ('GOTO_EXPR') to an ordinary label outside
     the sequence.

  3. Execute a return statement ('RETURN_EXPR').

  4. Throw an exception.  This is currently not explicitly represented
     in GIMPLE.

 The second sequence is not executed if the first sequence completes by
calling 'setjmp' or 'exit' or any other function that does not return.
The second sequence is also not executed if the first sequence completes
via a non-local goto or a computed goto (in general the compiler does
not know whether such a goto statement exits the first sequence or not,
so we assume that it doesn't).

 After the second sequence is executed, if it completes normally by
falling off the end, execution continues wherever the first sequence
would have continued, by falling off the end, or doing a goto, etc.

 'TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs
to appear on every edge out of the controlled block; this reduces the
freedom to move code across these edges.  Therefore, the EH lowering
pass which runs before most of the optimization passes eliminates these
expressions by explicitly adding the cleanup to each edge.  Rethrowing
the exception is represented using 'RESX_EXPR'.


File: gccint.info,  Node: OpenMP,  Next: OpenACC,  Prev: Cleanups,  Up: Statements

10.7.7 OpenMP
-------------

All the statements starting with 'OMP_' represent directives and clauses
used by the OpenMP API <http://www.openmp.org/>.

'OMP_PARALLEL'

     Represents '#pragma omp parallel [clause1 ... clauseN]'.  It has
     four operands:

     Operand 'OMP_PARALLEL_BODY' is valid while in GENERIC and High
     GIMPLE forms.  It contains the body of code to be executed by all
     the threads.  During GIMPLE lowering, this operand becomes 'NULL'
     and the body is emitted linearly after 'OMP_PARALLEL'.

     Operand 'OMP_PARALLEL_CLAUSES' is the list of clauses associated
     with the directive.

     Operand 'OMP_PARALLEL_FN' is created by 'pass_lower_omp', it
     contains the 'FUNCTION_DECL' for the function that will contain the
     body of the parallel region.

     Operand 'OMP_PARALLEL_DATA_ARG' is also created by
     'pass_lower_omp'.  If there are shared variables to be communicated
     to the children threads, this operand will contain the 'VAR_DECL'
     that contains all the shared values and variables.

'OMP_FOR'

     Represents '#pragma omp for [clause1 ... clauseN]'.  It has six
     operands:

     Operand 'OMP_FOR_BODY' contains the loop body.

     Operand 'OMP_FOR_CLAUSES' is the list of clauses associated with
     the directive.

     Operand 'OMP_FOR_INIT' is the loop initialization code of the form
     'VAR = N1'.

     Operand 'OMP_FOR_COND' is the loop conditional expression of the
     form 'VAR {<,>,<=,>=} N2'.

     Operand 'OMP_FOR_INCR' is the loop index increment of the form 'VAR
     {+=,-=} INCR'.

     Operand 'OMP_FOR_PRE_BODY' contains side-effect code from operands
     'OMP_FOR_INIT', 'OMP_FOR_COND' and 'OMP_FOR_INC'.  These
     side-effects are part of the 'OMP_FOR' block but must be evaluated
     before the start of loop body.

     The loop index variable 'VAR' must be a signed integer variable,
     which is implicitly private to each thread.  Bounds 'N1' and 'N2'
     and the increment expression 'INCR' are required to be loop
     invariant integer expressions that are evaluated without any
     synchronization.  The evaluation order, frequency of evaluation and
     side-effects are unspecified by the standard.

'OMP_SECTIONS'

     Represents '#pragma omp sections [clause1 ... clauseN]'.

     Operand 'OMP_SECTIONS_BODY' contains the sections body, which in
     turn contains a set of 'OMP_SECTION' nodes for each of the
     concurrent sections delimited by '#pragma omp section'.

     Operand 'OMP_SECTIONS_CLAUSES' is the list of clauses associated
     with the directive.

'OMP_SECTION'

     Section delimiter for 'OMP_SECTIONS'.

'OMP_SINGLE'

     Represents '#pragma omp single'.

     Operand 'OMP_SINGLE_BODY' contains the body of code to be executed
     by a single thread.

     Operand 'OMP_SINGLE_CLAUSES' is the list of clauses associated with
     the directive.

'OMP_MASTER'

     Represents '#pragma omp master'.

     Operand 'OMP_MASTER_BODY' contains the body of code to be executed
     by the master thread.

'OMP_ORDERED'

     Represents '#pragma omp ordered'.

     Operand 'OMP_ORDERED_BODY' contains the body of code to be executed
     in the sequential order dictated by the loop index variable.

'OMP_CRITICAL'

     Represents '#pragma omp critical [name]'.

     Operand 'OMP_CRITICAL_BODY' is the critical section.

     Operand 'OMP_CRITICAL_NAME' is an optional identifier to label the
     critical section.

'OMP_RETURN'

     This does not represent any OpenMP directive, it is an artificial
     marker to indicate the end of the body of an OpenMP.  It is used by
     the flow graph ('tree-cfg.c') and OpenMP region building code
     ('omp-low.c').

'OMP_CONTINUE'

     Similarly, this instruction does not represent an OpenMP directive,
     it is used by 'OMP_FOR' (and similar codes) as well as
     'OMP_SECTIONS' to mark the place where the code needs to loop to
     the next iteration, or the next section, respectively.

     In some cases, 'OMP_CONTINUE' is placed right before 'OMP_RETURN'.
     But if there are cleanups that need to occur right after the
     looping body, it will be emitted between 'OMP_CONTINUE' and
     'OMP_RETURN'.

'OMP_ATOMIC'

     Represents '#pragma omp atomic'.

     Operand 0 is the address at which the atomic operation is to be
     performed.

     Operand 1 is the expression to evaluate.  The gimplifier tries
     three alternative code generation strategies.  Whenever possible,
     an atomic update built-in is used.  If that fails, a
     compare-and-swap loop is attempted.  If that also fails, a regular
     critical section around the expression is used.

'OMP_CLAUSE'

     Represents clauses associated with one of the 'OMP_' directives.
     Clauses are represented by separate subcodes defined in 'tree.h'.
     Clauses codes can be one of: 'OMP_CLAUSE_PRIVATE',
     'OMP_CLAUSE_SHARED', 'OMP_CLAUSE_FIRSTPRIVATE',
     'OMP_CLAUSE_LASTPRIVATE', 'OMP_CLAUSE_COPYIN',
     'OMP_CLAUSE_COPYPRIVATE', 'OMP_CLAUSE_IF',
     'OMP_CLAUSE_NUM_THREADS', 'OMP_CLAUSE_SCHEDULE',
     'OMP_CLAUSE_NOWAIT', 'OMP_CLAUSE_ORDERED', 'OMP_CLAUSE_DEFAULT',
     'OMP_CLAUSE_REDUCTION', 'OMP_CLAUSE_COLLAPSE', 'OMP_CLAUSE_UNTIED',
     'OMP_CLAUSE_FINAL', and 'OMP_CLAUSE_MERGEABLE'.  Each code
     represents the corresponding OpenMP clause.

     Clauses associated with the same directive are chained together via
     'OMP_CLAUSE_CHAIN'.  Those clauses that accept a list of variables
     are restricted to exactly one, accessed with 'OMP_CLAUSE_VAR'.
     Therefore, multiple variables under the same clause 'C' need to be
     represented as multiple 'C' clauses chained together.  This
     facilitates adding new clauses during compilation.


File: gccint.info,  Node: OpenACC,  Prev: OpenMP,  Up: Statements

10.7.8 OpenACC
--------------

All the statements starting with 'OACC_' represent directives and
clauses used by the OpenACC API <http://www.openacc.org/>.

'OACC_CACHE'

     Represents '#pragma acc cache (var ...)'.

'OACC_DATA'

     Represents '#pragma acc data [clause1 ... clauseN]'.

'OACC_DECLARE'

     Represents '#pragma acc declare [clause1 ... clauseN]'.

'OACC_ENTER_DATA'

     Represents '#pragma acc enter data [clause1 ... clauseN]'.

'OACC_EXIT_DATA'

     Represents '#pragma acc exit data [clause1 ... clauseN]'.

'OACC_HOST_DATA'

     Represents '#pragma acc host_data [clause1 ... clauseN]'.

'OACC_KERNELS'

     Represents '#pragma acc kernels [clause1 ... clauseN]'.

'OACC_LOOP'

     Represents '#pragma acc loop [clause1 ... clauseN]'.

     See the description of the 'OMP_FOR' code.

'OACC_PARALLEL'

     Represents '#pragma acc parallel [clause1 ... clauseN]'.

'OACC_UPDATE'

     Represents '#pragma acc update [clause1 ... clauseN]'.


File: gccint.info,  Node: Functions,  Next: Language-dependent trees,  Prev: Statements,  Up: GENERIC

10.8 Functions
==============

A function is represented by a 'FUNCTION_DECL' node.  It stores the
basic pieces of the function such as body, parameters, and return type
as well as information on the surrounding context, visibility, and
linkage.

* Menu:

* Function Basics::     Function names, body, and parameters.
* Function Properties:: Context, linkage, etc.


File: gccint.info,  Node: Function Basics,  Next: Function Properties,  Up: Functions

10.8.1 Function Basics
----------------------

A function has four core parts: the name, the parameters, the result,
and the body.  The following macros and functions access these parts of
a 'FUNCTION_DECL' as well as other basic features:
'DECL_NAME'
     This macro returns the unqualified name of the function, as an
     'IDENTIFIER_NODE'.  For an instantiation of a function template,
     the 'DECL_NAME' is the unqualified name of the template, not
     something like 'f<int>'.  The value of 'DECL_NAME' is undefined
     when used on a constructor, destructor, overloaded operator, or
     type-conversion operator, or any function that is implicitly
     generated by the compiler.  See below for macros that can be used
     to distinguish these cases.

'DECL_ASSEMBLER_NAME'
     This macro returns the mangled name of the function, also an
     'IDENTIFIER_NODE'.  This name does not contain leading underscores
     on systems that prefix all identifiers with underscores.  The
     mangled name is computed in the same way on all platforms; if
     special processing is required to deal with the object file format
     used on a particular platform, it is the responsibility of the back
     end to perform those modifications.  (Of course, the back end
     should not modify 'DECL_ASSEMBLER_NAME' itself.)

     Using 'DECL_ASSEMBLER_NAME' will cause additional memory to be
     allocated (for the mangled name of the entity) so it should be used
     only when emitting assembly code.  It should not be used within the
     optimizers to determine whether or not two declarations are the
     same, even though some of the existing optimizers do use it in that
     way.  These uses will be removed over time.

'DECL_ARGUMENTS'
     This macro returns the 'PARM_DECL' for the first argument to the
     function.  Subsequent 'PARM_DECL' nodes can be obtained by
     following the 'TREE_CHAIN' links.

'DECL_RESULT'
     This macro returns the 'RESULT_DECL' for the function.

'DECL_SAVED_TREE'
     This macro returns the complete body of the function.

'TREE_TYPE'
     This macro returns the 'FUNCTION_TYPE' or 'METHOD_TYPE' for the
     function.

'DECL_INITIAL'
     A function that has a definition in the current translation unit
     will have a non-'NULL' 'DECL_INITIAL'.  However, back ends should
     not make use of the particular value given by 'DECL_INITIAL'.

     It should contain a tree of 'BLOCK' nodes that mirrors the scopes
     that variables are bound in the function.  Each block contains a
     list of decls declared in a basic block, a pointer to a chain of
     blocks at the next lower scope level, then a pointer to the next
     block at the same level and a backpointer to the parent 'BLOCK' or
     'FUNCTION_DECL'.  So given a function as follows:

          void foo()
          {
            int a;
            {
              int b;
            }
            int c;
          }

     you would get the following:

          tree foo = FUNCTION_DECL;
          tree decl_a = VAR_DECL;
          tree decl_b = VAR_DECL;
          tree decl_c = VAR_DECL;
          tree block_a = BLOCK;
          tree block_b = BLOCK;
          tree block_c = BLOCK;
          BLOCK_VARS(block_a) = decl_a;
          BLOCK_SUBBLOCKS(block_a) = block_b;
          BLOCK_CHAIN(block_a) = block_c;
          BLOCK_SUPERCONTEXT(block_a) = foo;
          BLOCK_VARS(block_b) = decl_b;
          BLOCK_SUPERCONTEXT(block_b) = block_a;
          BLOCK_VARS(block_c) = decl_c;
          BLOCK_SUPERCONTEXT(block_c) = foo;
          DECL_INITIAL(foo) = block_a;


File: gccint.info,  Node: Function Properties,  Prev: Function Basics,  Up: Functions

10.8.2 Function Properties
--------------------------

To determine the scope of a function, you can use the 'DECL_CONTEXT'
macro.  This macro will return the class (either a 'RECORD_TYPE' or a
'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is
a member.  For a virtual function, this macro returns the class in which
the function was actually defined, not the base class in which the
virtual declaration occurred.

 In C, the 'DECL_CONTEXT' for a function maybe another function.  This
representation indicates that the GNU nested function extension is in
use.  For details on the semantics of nested functions, see the GCC
Manual.  The nested function can refer to local variables in its
containing function.  Such references are not explicitly marked in the
tree structure; back ends must look at the 'DECL_CONTEXT' for the
referenced 'VAR_DECL'.  If the 'DECL_CONTEXT' for the referenced
'VAR_DECL' is not the same as the function currently being processed,
and neither 'DECL_EXTERNAL' nor 'TREE_STATIC' hold, then the reference
is to a local variable in a containing function, and the back end must
take appropriate action.

'DECL_EXTERNAL'
     This predicate holds if the function is undefined.

'TREE_PUBLIC'
     This predicate holds if the function has external linkage.

'TREE_STATIC'
     This predicate holds if the function has been defined.

'TREE_THIS_VOLATILE'
     This predicate holds if the function does not return normally.

'TREE_READONLY'
     This predicate holds if the function can only read its arguments.

'DECL_PURE_P'
     This predicate holds if the function can only read its arguments,
     but may also read global memory.

'DECL_VIRTUAL_P'
     This predicate holds if the function is virtual.

'DECL_ARTIFICIAL'
     This macro holds if the function was implicitly generated by the
     compiler, rather than explicitly declared.  In addition to
     implicitly generated class member functions, this macro holds for
     the special functions created to implement static initialization
     and destruction, to compute run-time type information, and so
     forth.

'DECL_FUNCTION_SPECIFIC_TARGET'
     This macro returns a tree node that holds the target options that
     are to be used to compile this particular function or 'NULL_TREE'
     if the function is to be compiled with the target options specified
     on the command line.

'DECL_FUNCTION_SPECIFIC_OPTIMIZATION'
     This macro returns a tree node that holds the optimization options
     that are to be used to compile this particular function or
     'NULL_TREE' if the function is to be compiled with the optimization
     options specified on the command line.


File: gccint.info,  Node: Language-dependent trees,  Next: C and C++ Trees,  Prev: Functions,  Up: GENERIC

10.9 Language-dependent trees
=============================

Front ends may wish to keep some state associated with various GENERIC
trees while parsing.  To support this, trees provide a set of flags that
may be used by the front end.  They are accessed using
'TREE_LANG_FLAG_n' where 'n' is currently 0 through 6.

 If necessary, a front end can use some language-dependent tree codes in
its GENERIC representation, so long as it provides a hook for converting
them to GIMPLE and doesn't expect them to work with any (hypothetical)
optimizers that run before the conversion to GIMPLE.  The intermediate
representation used while parsing C and C++ looks very little like
GENERIC, but the C and C++ gimplifier hooks are perfectly happy to take
it as input and spit out GIMPLE.


File: gccint.info,  Node: C and C++ Trees,  Next: Java Trees,  Prev: Language-dependent trees,  Up: GENERIC

10.10 C and C++ Trees
=====================

This section documents the internal representation used by GCC to
represent C and C++ source programs.  When presented with a C or C++
source program, GCC parses the program, performs semantic analysis
(including the generation of error messages), and then produces the
internal representation described here.  This representation contains a
complete representation for the entire translation unit provided as
input to the front end.  This representation is then typically processed
by a code-generator in order to produce machine code, but could also be
used in the creation of source browsers, intelligent editors, automatic
documentation generators, interpreters, and any other programs needing
the ability to process C or C++ code.

 This section explains the internal representation.  In particular, it
documents the internal representation for C and C++ source constructs,
and the macros, functions, and variables that can be used to access
these constructs.  The C++ representation is largely a superset of the
representation used in the C front end.  There is only one construct
used in C that does not appear in the C++ front end and that is the GNU
"nested function" extension.  Many of the macros documented here do not
apply in C because the corresponding language constructs do not appear
in C.

 The C and C++ front ends generate a mix of GENERIC trees and ones
specific to C and C++.  These language-specific trees are higher-level
constructs than the ones in GENERIC to make the parser's job easier.
This section describes those trees that aren't part of GENERIC as well
as aspects of GENERIC trees that are treated in a language-specific
manner.

 If you are developing a "back end", be it is a code-generator or some
other tool, that uses this representation, you may occasionally find
that you need to ask questions not easily answered by the functions and
macros available here.  If that situation occurs, it is quite likely
that GCC already supports the functionality you desire, but that the
interface is simply not documented here.  In that case, you should ask
the GCC maintainers (via mail to <gcc@gcc.gnu.org>) about documenting
the functionality you require.  Similarly, if you find yourself writing
functions that do not deal directly with your back end, but instead
might be useful to other people using the GCC front end, you should
submit your patches for inclusion in GCC.

* Menu:

* Types for C++::               Fundamental and aggregate types.
* Namespaces::                  Namespaces.
* Classes::                     Classes.
* Functions for C++::           Overloading and accessors for C++.
* Statements for C++::          Statements specific to C and C++.
* C++ Expressions::    From 'typeid' to 'throw'.


File: gccint.info,  Node: Types for C++,  Next: Namespaces,  Up: C and C++ Trees

10.10.1 Types for C++
---------------------

In C++, an array type is not qualified; rather the type of the array
elements is qualified.  This situation is reflected in the intermediate
representation.  The macros described here will always examine the
qualification of the underlying element type when applied to an array
type.  (If the element type is itself an array, then the recursion
continues until a non-array type is found, and the qualification of this
type is examined.)  So, for example, 'CP_TYPE_CONST_P' will hold of the
type 'const int ()[7]', denoting an array of seven 'int's.

 The following functions and macros deal with cv-qualification of types:
'cp_type_quals'
     This function returns the set of type qualifiers applied to this
     type.  This value is 'TYPE_UNQUALIFIED' if no qualifiers have been
     applied.  The 'TYPE_QUAL_CONST' bit is set if the type is
     'const'-qualified.  The 'TYPE_QUAL_VOLATILE' bit is set if the type
     is 'volatile'-qualified.  The 'TYPE_QUAL_RESTRICT' bit is set if
     the type is 'restrict'-qualified.

'CP_TYPE_CONST_P'
     This macro holds if the type is 'const'-qualified.

'CP_TYPE_VOLATILE_P'
     This macro holds if the type is 'volatile'-qualified.

'CP_TYPE_RESTRICT_P'
     This macro holds if the type is 'restrict'-qualified.

'CP_TYPE_CONST_NON_VOLATILE_P'
     This predicate holds for a type that is 'const'-qualified, but
     _not_ 'volatile'-qualified; other cv-qualifiers are ignored as
     well: only the 'const'-ness is tested.

 A few other macros and functions are usable with all types:
'TYPE_SIZE'
     The number of bits required to represent the type, represented as
     an 'INTEGER_CST'.  For an incomplete type, 'TYPE_SIZE' will be
     'NULL_TREE'.

'TYPE_ALIGN'
     The alignment of the type, in bits, represented as an 'int'.

'TYPE_NAME'
     This macro returns a declaration (in the form of a 'TYPE_DECL') for
     the type.  (Note this macro does _not_ return an 'IDENTIFIER_NODE',
     as you might expect, given its name!)  You can look at the
     'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the
     type.  The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a
     built-in type, the result of a typedef, or a named class type.

'CP_INTEGRAL_TYPE'
     This predicate holds if the type is an integral type.  Notice that
     in C++, enumerations are _not_ integral types.

'ARITHMETIC_TYPE_P'
     This predicate holds if the type is an integral type (in the C++
     sense) or a floating point type.

'CLASS_TYPE_P'
     This predicate holds for a class-type.

'TYPE_BUILT_IN'
     This predicate holds for a built-in type.

'TYPE_PTRDATAMEM_P'
     This predicate holds if the type is a pointer to data member.

'TYPE_PTR_P'
     This predicate holds if the type is a pointer type, and the pointee
     is not a data member.

'TYPE_PTRFN_P'
     This predicate holds for a pointer to function type.

'TYPE_PTROB_P'
     This predicate holds for a pointer to object type.  Note however
     that it does not hold for the generic pointer to object type 'void
     *'.  You may use 'TYPE_PTROBV_P' to test for a pointer to object
     type as well as 'void *'.

 The table below describes types specific to C and C++ as well as
language-dependent info about GENERIC types.

'POINTER_TYPE'
     Used to represent pointer types, and pointer to data member types.
     If 'TREE_TYPE' is a pointer to data member type, then
     'TYPE_PTRDATAMEM_P' will hold.  For a pointer to data member type
     of the form 'T X::*', 'TYPE_PTRMEM_CLASS_TYPE' will be the type
     'X', while 'TYPE_PTRMEM_POINTED_TO_TYPE' will be the type 'T'.

'RECORD_TYPE'
     Used to represent 'struct' and 'class' types in C and C++.  If
     'TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member
     type.  In that case, the 'TYPE_PTRMEMFUNC_FN_TYPE' is a
     'POINTER_TYPE' pointing to a 'METHOD_TYPE'.  The 'METHOD_TYPE' is
     the type of a function pointed to by the pointer-to-member
     function.  If 'TYPE_PTRMEMFUNC_P' does not hold, this type is a
     class type.  For more information, *note Classes::.

'UNKNOWN_TYPE'
     This node is used to represent a type the knowledge of which is
     insufficient for a sound processing.

'TYPENAME_TYPE'
     Used to represent a construct of the form 'typename T::A'.  The
     'TYPE_CONTEXT' is 'T'; the 'TYPE_NAME' is an 'IDENTIFIER_NODE' for
     'A'.  If the type is specified via a template-id, then
     'TYPENAME_TYPE_FULLNAME' yields a 'TEMPLATE_ID_EXPR'.  The
     'TREE_TYPE' is non-'NULL' if the node is implicitly generated in
     support for the implicit typename extension; in which case the
     'TREE_TYPE' is a type node for the base-class.

'TYPEOF_TYPE'
     Used to represent the '__typeof__' extension.  The 'TYPE_FIELDS' is
     the expression the type of which is being represented.


File: gccint.info,  Node: Namespaces,  Next: Classes,  Prev: Types for C++,  Up: C and C++ Trees

10.10.2 Namespaces
------------------

The root of the entire intermediate representation is the variable
'global_namespace'.  This is the namespace specified with '::' in C++
source code.  All other namespaces, types, variables, functions, and so
forth can be found starting with this namespace.

 However, except for the fact that it is distinguished as the root of
the representation, the global namespace is no different from any other
namespace.  Thus, in what follows, we describe namespaces generally,
rather than the global namespace in particular.

 A namespace is represented by a 'NAMESPACE_DECL' node.

 The following macros and functions can be used on a 'NAMESPACE_DECL':

'DECL_NAME'
     This macro is used to obtain the 'IDENTIFIER_NODE' corresponding to
     the unqualified name of the name of the namespace (*note
     Identifiers::).  The name of the global namespace is '::', even
     though in C++ the global namespace is unnamed.  However, you should
     use comparison with 'global_namespace', rather than 'DECL_NAME' to
     determine whether or not a namespace is the global one.  An unnamed
     namespace will have a 'DECL_NAME' equal to
     'anonymous_namespace_name'.  Within a single translation unit, all
     unnamed namespaces will have the same name.

'DECL_CONTEXT'
     This macro returns the enclosing namespace.  The 'DECL_CONTEXT' for
     the 'global_namespace' is 'NULL_TREE'.

'DECL_NAMESPACE_ALIAS'
     If this declaration is for a namespace alias, then
     'DECL_NAMESPACE_ALIAS' is the namespace for which this one is an
     alias.

     Do not attempt to use 'cp_namespace_decls' for a namespace which is
     an alias.  Instead, follow 'DECL_NAMESPACE_ALIAS' links until you
     reach an ordinary, non-alias, namespace, and call
     'cp_namespace_decls' there.

'DECL_NAMESPACE_STD_P'
     This predicate holds if the namespace is the special '::std'
     namespace.

'cp_namespace_decls'
     This function will return the declarations contained in the
     namespace, including types, overloaded functions, other namespaces,
     and so forth.  If there are no declarations, this function will
     return 'NULL_TREE'.  The declarations are connected through their
     'TREE_CHAIN' fields.

     Although most entries on this list will be declarations,
     'TREE_LIST' nodes may also appear.  In this case, the 'TREE_VALUE'
     will be an 'OVERLOAD'.  The value of the 'TREE_PURPOSE' is
     unspecified; back ends should ignore this value.  As with the other
     kinds of declarations returned by 'cp_namespace_decls', the
     'TREE_CHAIN' will point to the next declaration in this list.

     For more information on the kinds of declarations that can occur on
     this list, *Note Declarations::.  Some declarations will not appear
     on this list.  In particular, no 'FIELD_DECL', 'LABEL_DECL', or
     'PARM_DECL' nodes will appear here.

     This function cannot be used with namespaces that have
     'DECL_NAMESPACE_ALIAS' set.


File: gccint.info,  Node: Classes,  Next: Functions for C++,  Prev: Namespaces,  Up: C and C++ Trees

10.10.3 Classes
---------------

Besides namespaces, the other high-level scoping construct in C++ is the
class.  (Throughout this manual the term "class" is used to mean the
types referred to in the ANSI/ISO C++ Standard as classes; these include
types defined with the 'class', 'struct', and 'union' keywords.)

 A class type is represented by either a 'RECORD_TYPE' or a
'UNION_TYPE'.  A class declared with the 'union' tag is represented by a
'UNION_TYPE', while classes declared with either the 'struct' or the
'class' tag are represented by 'RECORD_TYPE's.  You can use the
'CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular
type is a 'class' as opposed to a 'struct'.  This macro will be true
only for classes declared with the 'class' tag.

 Almost all non-function members are available on the 'TYPE_FIELDS'
list.  Given one member, the next can be found by following the
'TREE_CHAIN'.  You should not depend in any way on the order in which
fields appear on this list.  All nodes on this list will be 'DECL'
nodes.  A 'FIELD_DECL' is used to represent a non-static data member, a
'VAR_DECL' is used to represent a static data member, and a 'TYPE_DECL'
is used to represent a type.  Note that the 'CONST_DECL' for an
enumeration constant will appear on this list, if the enumeration type
was declared in the class.  (Of course, the 'TYPE_DECL' for the
enumeration type will appear here as well.)  There are no entries for
base classes on this list.  In particular, there is no 'FIELD_DECL' for
the "base-class portion" of an object.

 The 'TYPE_VFIELD' is a compiler-generated field used to point to
virtual function tables.  It may or may not appear on the 'TYPE_FIELDS'
list.  However, back ends should handle the 'TYPE_VFIELD' just like all
the entries on the 'TYPE_FIELDS' list.

 The function members are available on the 'TYPE_METHODS' list.  Again,
subsequent members are found by following the 'TREE_CHAIN' field.  If a
function is overloaded, each of the overloaded functions appears; no
'OVERLOAD' nodes appear on the 'TYPE_METHODS' list.  Implicitly declared
functions (including default constructors, copy constructors, assignment
operators, and destructors) will appear on this list as well.

 Every class has an associated "binfo", which can be obtained with
'TYPE_BINFO'.  Binfos are used to represent base-classes.  The binfo
given by 'TYPE_BINFO' is the degenerate case, whereby every class is
considered to be its own base-class.  The base binfos for a particular
binfo are held in a vector, whose length is obtained with
'BINFO_N_BASE_BINFOS'.  The base binfos themselves are obtained with
'BINFO_BASE_BINFO' and 'BINFO_BASE_ITERATE'.  To add a new binfo, use
'BINFO_BASE_APPEND'.  The vector of base binfos can be obtained with
'BINFO_BASE_BINFOS', but normally you do not need to use that.  The
class type associated with a binfo is given by 'BINFO_TYPE'.  It is not
always the case that 'BINFO_TYPE (TYPE_BINFO (x))', because of typedefs
and qualified types.  Neither is it the case that 'TYPE_BINFO
(BINFO_TYPE (y))' is the same binfo as 'y'.  The reason is that if 'y'
is a binfo representing a base-class 'B' of a derived class 'D', then
'BINFO_TYPE (y)' will be 'B', and 'TYPE_BINFO (BINFO_TYPE (y))' will be
'B' as its own base-class, rather than as a base-class of 'D'.

 The access to a base type can be found with 'BINFO_BASE_ACCESS'.  This
will produce 'access_public_node', 'access_private_node' or
'access_protected_node'.  If bases are always public,
'BINFO_BASE_ACCESSES' may be 'NULL'.

 'BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited
virtually or not.  The other flags, 'BINFO_FLAG_0' to 'BINFO_FLAG_6',
can be used for language specific use.

 The following macros can be used on a tree node representing a
class-type.

'LOCAL_CLASS_P'
     This predicate holds if the class is local class _i.e._ declared
     inside a function body.

'TYPE_POLYMORPHIC_P'
     This predicate holds if the class has at least one virtual function
     (declared or inherited).

'TYPE_HAS_DEFAULT_CONSTRUCTOR'
     This predicate holds whenever its argument represents a class-type
     with default constructor.

'CLASSTYPE_HAS_MUTABLE'
'TYPE_HAS_MUTABLE_P'
     These predicates hold for a class-type having a mutable data
     member.

'CLASSTYPE_NON_POD_P'
     This predicate holds only for class-types that are not PODs.

'TYPE_HAS_NEW_OPERATOR'
     This predicate holds for a class-type that defines 'operator new'.

'TYPE_HAS_ARRAY_NEW_OPERATOR'
     This predicate holds for a class-type for which 'operator new[]' is
     defined.

'TYPE_OVERLOADS_CALL_EXPR'
     This predicate holds for class-type for which the function call
     'operator()' is overloaded.

'TYPE_OVERLOADS_ARRAY_REF'
     This predicate holds for a class-type that overloads 'operator[]'

'TYPE_OVERLOADS_ARROW'
     This predicate holds for a class-type for which 'operator->' is
     overloaded.


File: gccint.info,  Node: Functions for C++,  Next: Statements for C++,  Prev: Classes,  Up: C and C++ Trees

10.10.4 Functions for C++
-------------------------

A function is represented by a 'FUNCTION_DECL' node.  A set of
overloaded functions is sometimes represented by an 'OVERLOAD' node.

 An 'OVERLOAD' node is not a declaration, so none of the 'DECL_' macros
should be used on an 'OVERLOAD'.  An 'OVERLOAD' node is similar to a
'TREE_LIST'.  Use 'OVL_CURRENT' to get the function associated with an
'OVERLOAD' node; use 'OVL_NEXT' to get the next 'OVERLOAD' node in the
list of overloaded functions.  The macros 'OVL_CURRENT' and 'OVL_NEXT'
are actually polymorphic; you can use them to work with 'FUNCTION_DECL'
nodes as well as with overloads.  In the case of a 'FUNCTION_DECL',
'OVL_CURRENT' will always return the function itself, and 'OVL_NEXT'
will always be 'NULL_TREE'.

 To determine the scope of a function, you can use the 'DECL_CONTEXT'
macro.  This macro will return the class (either a 'RECORD_TYPE' or a
'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is
a member.  For a virtual function, this macro returns the class in which
the function was actually defined, not the base class in which the
virtual declaration occurred.

 If a friend function is defined in a class scope, the
'DECL_FRIEND_CONTEXT' macro can be used to determine the class in which
it was defined.  For example, in
     class C { friend void f() {} };
the 'DECL_CONTEXT' for 'f' will be the 'global_namespace', but the
'DECL_FRIEND_CONTEXT' will be the 'RECORD_TYPE' for 'C'.

 The following macros and functions can be used on a 'FUNCTION_DECL':
'DECL_MAIN_P'
     This predicate holds for a function that is the program entry point
     '::code'.

'DECL_LOCAL_FUNCTION_P'
     This predicate holds if the function was declared at block scope,
     even though it has a global scope.

'DECL_ANTICIPATED'
     This predicate holds if the function is a built-in function but its
     prototype is not yet explicitly declared.

'DECL_EXTERN_C_FUNCTION_P'
     This predicate holds if the function is declared as an ''extern
     "C"'' function.

'DECL_LINKONCE_P'
     This macro holds if multiple copies of this function may be emitted
     in various translation units.  It is the responsibility of the
     linker to merge the various copies.  Template instantiations are
     the most common example of functions for which 'DECL_LINKONCE_P'
     holds; G++ instantiates needed templates in all translation units
     which require them, and then relies on the linker to remove
     duplicate instantiations.

     FIXME: This macro is not yet implemented.

'DECL_FUNCTION_MEMBER_P'
     This macro holds if the function is a member of a class, rather
     than a member of a namespace.

'DECL_STATIC_FUNCTION_P'
     This predicate holds if the function a static member function.

'DECL_NONSTATIC_MEMBER_FUNCTION_P'
     This macro holds for a non-static member function.

'DECL_CONST_MEMFUNC_P'
     This predicate holds for a 'const'-member function.

'DECL_VOLATILE_MEMFUNC_P'
     This predicate holds for a 'volatile'-member function.

'DECL_CONSTRUCTOR_P'
     This macro holds if the function is a constructor.

'DECL_NONCONVERTING_P'
     This predicate holds if the constructor is a non-converting
     constructor.

'DECL_COMPLETE_CONSTRUCTOR_P'
     This predicate holds for a function which is a constructor for an
     object of a complete type.

'DECL_BASE_CONSTRUCTOR_P'
     This predicate holds for a function which is a constructor for a
     base class sub-object.

'DECL_COPY_CONSTRUCTOR_P'
     This predicate holds for a function which is a copy-constructor.

'DECL_DESTRUCTOR_P'
     This macro holds if the function is a destructor.

'DECL_COMPLETE_DESTRUCTOR_P'
     This predicate holds if the function is the destructor for an
     object a complete type.

'DECL_OVERLOADED_OPERATOR_P'
     This macro holds if the function is an overloaded operator.

'DECL_CONV_FN_P'
     This macro holds if the function is a type-conversion operator.

'DECL_GLOBAL_CTOR_P'
     This predicate holds if the function is a file-scope initialization
     function.

'DECL_GLOBAL_DTOR_P'
     This predicate holds if the function is a file-scope finalization
     function.

'DECL_THUNK_P'
     This predicate holds if the function is a thunk.

     These functions represent stub code that adjusts the 'this' pointer
     and then jumps to another function.  When the jumped-to function
     returns, control is transferred directly to the caller, without
     returning to the thunk.  The first parameter to the thunk is always
     the 'this' pointer; the thunk should add 'THUNK_DELTA' to this
     value.  (The 'THUNK_DELTA' is an 'int', not an 'INTEGER_CST'.)

     Then, if 'THUNK_VCALL_OFFSET' (an 'INTEGER_CST') is nonzero the
     adjusted 'this' pointer must be adjusted again.  The complete
     calculation is given by the following pseudo-code:

          this += THUNK_DELTA
          if (THUNK_VCALL_OFFSET)
            this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]

     Finally, the thunk should jump to the location given by
     'DECL_INITIAL'; this will always be an expression for the address
     of a function.

'DECL_NON_THUNK_FUNCTION_P'
     This predicate holds if the function is _not_ a thunk function.

'GLOBAL_INIT_PRIORITY'
     If either 'DECL_GLOBAL_CTOR_P' or 'DECL_GLOBAL_DTOR_P' holds, then
     this gives the initialization priority for the function.  The
     linker will arrange that all functions for which
     'DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority
     before 'main' is called.  When the program exits, all functions for
     which 'DECL_GLOBAL_DTOR_P' holds are run in the reverse order.

'TYPE_RAISES_EXCEPTIONS'
     This macro returns the list of exceptions that a (member-)function
     can raise.  The returned list, if non 'NULL', is comprised of nodes
     whose 'TREE_VALUE' represents a type.

'TYPE_NOTHROW_P'
     This predicate holds when the exception-specification of its
     arguments is of the form ''()''.

'DECL_ARRAY_DELETE_OPERATOR_P'
     This predicate holds if the function an overloaded 'operator
     delete[]'.


File: gccint.info,  Node: Statements for C++,  Next: C++ Expressions,  Prev: Functions for C++,  Up: C and C++ Trees

10.10.5 Statements for C++
--------------------------

A function that has a definition in the current translation unit will
have a non-'NULL' 'DECL_INITIAL'.  However, back ends should not make
use of the particular value given by 'DECL_INITIAL'.

 The 'DECL_SAVED_TREE' macro will give the complete body of the
function.

10.10.5.1 Statements
....................

There are tree nodes corresponding to all of the source-level statement
constructs, used within the C and C++ frontends.  These are enumerated
here, together with a list of the various macros that can be used to
obtain information about them.  There are a few macros that can be used
with all statements:

'STMT_IS_FULL_EXPR_P'
     In C++, statements normally constitute "full expressions";
     temporaries created during a statement are destroyed when the
     statement is complete.  However, G++ sometimes represents
     expressions by statements; these statements will not have
     'STMT_IS_FULL_EXPR_P' set.  Temporaries created during such
     statements should be destroyed when the innermost enclosing
     statement with 'STMT_IS_FULL_EXPR_P' set is exited.

 Here is the list of the various statement nodes, and the macros used to
access them.  This documentation describes the use of these nodes in
non-template functions (including instantiations of template functions).
In template functions, the same nodes are used, but sometimes in
slightly different ways.

 Many of the statements have substatements.  For example, a 'while' loop
will have a body, which is itself a statement.  If the substatement is
'NULL_TREE', it is considered equivalent to a statement consisting of a
single ';', i.e., an expression statement in which the expression has
been omitted.  A substatement may in fact be a list of statements,
connected via their 'TREE_CHAIN's.  So, you should always process the
statement tree by looping over substatements, like this:
     void process_stmt (stmt)
          tree stmt;
     {
       while (stmt)
         {
           switch (TREE_CODE (stmt))
             {
             case IF_STMT:
               process_stmt (THEN_CLAUSE (stmt));
               /* More processing here.  */
               break;

             ...
             }

           stmt = TREE_CHAIN (stmt);
         }
     }
 In other words, while the 'then' clause of an 'if' statement in C++ can
be only one statement (although that one statement may be a compound
statement), the intermediate representation will sometimes use several
statements chained together.

'BREAK_STMT'

     Used to represent a 'break' statement.  There are no additional
     fields.

'CILK_SPAWN_STMT'

     Used to represent a spawning function in the Cilk Plus language
     extension.  This tree has one field that holds the name of the
     spawning function.  '_Cilk_spawn' can be written in C in the
     following way:

          _Cilk_spawn <function_name> (<parameters>);

     Detailed description for usage and functionality of '_Cilk_spawn'
     can be found at http://www.cilkplus.org

'CILK_SYNC_STMT'

     This statement is part of the Cilk Plus language extension.  It
     indicates that the current function cannot continue in parallel
     with its spawned children.  There are no additional fields.
     '_Cilk_sync' can be written in C in the following way:

          _Cilk_sync;

'CLEANUP_STMT'

     Used to represent an action that should take place upon exit from
     the enclosing scope.  Typically, these actions are calls to
     destructors for local objects, but back ends cannot rely on this
     fact.  If these nodes are in fact representing such destructors,
     'CLEANUP_DECL' will be the 'VAR_DECL' destroyed.  Otherwise,
     'CLEANUP_DECL' will be 'NULL_TREE'.  In any case, the
     'CLEANUP_EXPR' is the expression to execute.  The cleanups executed
     on exit from a scope should be run in the reverse order of the
     order in which the associated 'CLEANUP_STMT's were encountered.

'CONTINUE_STMT'

     Used to represent a 'continue' statement.  There are no additional
     fields.

'CTOR_STMT'

     Used to mark the beginning (if 'CTOR_BEGIN_P' holds) or end (if
     'CTOR_END_P' holds of the main body of a constructor.  See also
     'SUBOBJECT' for more information on how to use these nodes.

'DO_STMT'

     Used to represent a 'do' loop.  The body of the loop is given by
     'DO_BODY' while the termination condition for the loop is given by
     'DO_COND'.  The condition for a 'do'-statement is always an
     expression.

'EMPTY_CLASS_EXPR'

     Used to represent a temporary object of a class with no data whose
     address is never taken.  (All such objects are interchangeable.)
     The 'TREE_TYPE' represents the type of the object.

'EXPR_STMT'

     Used to represent an expression statement.  Use 'EXPR_STMT_EXPR' to
     obtain the expression.

'FOR_STMT'

     Used to represent a 'for' statement.  The 'FOR_INIT_STMT' is the
     initialization statement for the loop.  The 'FOR_COND' is the
     termination condition.  The 'FOR_EXPR' is the expression executed
     right before the 'FOR_COND' on each loop iteration; often, this
     expression increments a counter.  The body of the loop is given by
     'FOR_BODY'.  Note that 'FOR_INIT_STMT' and 'FOR_BODY' return
     statements, while 'FOR_COND' and 'FOR_EXPR' return expressions.

'HANDLER'

     Used to represent a C++ 'catch' block.  The 'HANDLER_TYPE' is the
     type of exception that will be caught by this handler; it is equal
     (by pointer equality) to 'NULL' if this handler is for all types.
     'HANDLER_PARMS' is the 'DECL_STMT' for the catch parameter, and
     'HANDLER_BODY' is the code for the block itself.

'IF_STMT'

     Used to represent an 'if' statement.  The 'IF_COND' is the
     expression.

     If the condition is a 'TREE_LIST', then the 'TREE_PURPOSE' is a
     statement (usually a 'DECL_STMT').  Each time the condition is
     evaluated, the statement should be executed.  Then, the
     'TREE_VALUE' should be used as the conditional expression itself.
     This representation is used to handle C++ code like this:

     C++ distinguishes between this and 'COND_EXPR' for handling
     templates.

          if (int i = 7) ...

     where there is a new local variable (or variables) declared within
     the condition.

     The 'THEN_CLAUSE' represents the statement given by the 'then'
     condition, while the 'ELSE_CLAUSE' represents the statement given
     by the 'else' condition.

'SUBOBJECT'

     In a constructor, these nodes are used to mark the point at which a
     subobject of 'this' is fully constructed.  If, after this point, an
     exception is thrown before a 'CTOR_STMT' with 'CTOR_END_P' set is
     encountered, the 'SUBOBJECT_CLEANUP' must be executed.  The
     cleanups must be executed in the reverse order in which they
     appear.

'SWITCH_STMT'

     Used to represent a 'switch' statement.  The 'SWITCH_STMT_COND' is
     the expression on which the switch is occurring.  See the
     documentation for an 'IF_STMT' for more information on the
     representation used for the condition.  The 'SWITCH_STMT_BODY' is
     the body of the switch statement.  The 'SWITCH_STMT_TYPE' is the
     original type of switch expression as given in the source, before
     any compiler conversions.

'TRY_BLOCK'
     Used to represent a 'try' block.  The body of the try block is
     given by 'TRY_STMTS'.  Each of the catch blocks is a 'HANDLER'
     node.  The first handler is given by 'TRY_HANDLERS'.  Subsequent
     handlers are obtained by following the 'TREE_CHAIN' link from one
     handler to the next.  The body of the handler is given by
     'HANDLER_BODY'.

     If 'CLEANUP_P' holds of the 'TRY_BLOCK', then the 'TRY_HANDLERS'
     will not be a 'HANDLER' node.  Instead, it will be an expression
     that should be executed if an exception is thrown in the try block.
     It must rethrow the exception after executing that code.  And, if
     an exception is thrown while the expression is executing,
     'terminate' must be called.

'USING_STMT'
     Used to represent a 'using' directive.  The namespace is given by
     'USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL.  This node
     is needed inside template functions, to implement using directives
     during instantiation.

'WHILE_STMT'

     Used to represent a 'while' loop.  The 'WHILE_COND' is the
     termination condition for the loop.  See the documentation for an
     'IF_STMT' for more information on the representation used for the
     condition.

     The 'WHILE_BODY' is the body of the loop.


File: gccint.info,  Node: C++ Expressions,  Prev: Statements for C++,  Up: C and C++ Trees

10.10.6 C++ Expressions
-----------------------

This section describes expressions specific to the C and C++ front ends.

'TYPEID_EXPR'

     Used to represent a 'typeid' expression.

'NEW_EXPR'
'VEC_NEW_EXPR'

     Used to represent a call to 'new' and 'new[]' respectively.

'DELETE_EXPR'
'VEC_DELETE_EXPR'

     Used to represent a call to 'delete' and 'delete[]' respectively.

'MEMBER_REF'

     Represents a reference to a member of a class.

'THROW_EXPR'

     Represents an instance of 'throw' in the program.  Operand 0, which
     is the expression to throw, may be 'NULL_TREE'.

'AGGR_INIT_EXPR'
     An 'AGGR_INIT_EXPR' represents the initialization as the return
     value of a function call, or as the result of a constructor.  An
     'AGGR_INIT_EXPR' will only appear as a full-expression, or as the
     second operand of a 'TARGET_EXPR'.  'AGGR_INIT_EXPR's have a
     representation similar to that of 'CALL_EXPR's.  You can use the
     'AGGR_INIT_EXPR_FN' and 'AGGR_INIT_EXPR_ARG' macros to access the
     function to call and the arguments to pass.

     If 'AGGR_INIT_VIA_CTOR_P' holds of the 'AGGR_INIT_EXPR', then the
     initialization is via a constructor call.  The address of the
     'AGGR_INIT_EXPR_SLOT' operand, which is always a 'VAR_DECL', is
     taken, and this value replaces the first argument in the argument
     list.

     In either case, the expression is void.


File: gccint.info,  Node: Java Trees,  Prev: C and C++ Trees,  Up: GENERIC

10.11 Java Trees
================


File: gccint.info,  Node: GIMPLE,  Next: Tree SSA,  Prev: GENERIC,  Up: Top

11 GIMPLE
*********

GIMPLE is a three-address representation derived from GENERIC by
breaking down GENERIC expressions into tuples of no more than 3 operands
(with some exceptions like function calls).  GIMPLE was heavily
influenced by the SIMPLE IL used by the McCAT compiler project at McGill
University, though we have made some different choices.  For one thing,
SIMPLE doesn't support 'goto'.

 Temporaries are introduced to hold intermediate values needed to
compute complex expressions.  Additionally, all the control structures
used in GENERIC are lowered into conditional jumps, lexical scopes are
removed and exception regions are converted into an on the side
exception region tree.

 The compiler pass which converts GENERIC into GIMPLE is referred to as
the 'gimplifier'.  The gimplifier works recursively, generating GIMPLE
tuples out of the original GENERIC expressions.

 One of the early implementation strategies used for the GIMPLE
representation was to use the same internal data structures used by
front ends to represent parse trees.  This simplified implementation
because we could leverage existing functionality and interfaces.
However, GIMPLE is a much more restrictive representation than abstract
syntax trees (AST), therefore it does not require the full structural
complexity provided by the main tree data structure.

 The GENERIC representation of a function is stored in the
'DECL_SAVED_TREE' field of the associated 'FUNCTION_DECL' tree node.  It
is converted to GIMPLE by a call to 'gimplify_function_tree'.

 If a front end wants to include language-specific tree codes in the
tree representation which it provides to the back end, it must provide a
definition of 'LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the
front end trees to GIMPLE.  Usually such a hook will involve much of the
same code for expanding front end trees to RTL.  This function can
return fully lowered GIMPLE, or it can return GENERIC trees and let the
main gimplifier lower them the rest of the way; this is often simpler.
GIMPLE that is not fully lowered is known as "High GIMPLE" and consists
of the IL before the pass 'pass_lower_cf'.  High GIMPLE contains some
container statements like lexical scopes (represented by 'GIMPLE_BIND')
and nested expressions (e.g., 'GIMPLE_TRY'), while "Low GIMPLE" exposes
all of the implicit jumps for control and exception expressions directly
in the IL and EH region trees.

 The C and C++ front ends currently convert directly from front end
trees to GIMPLE, and hand that off to the back end rather than first
converting to GENERIC.  Their gimplifier hooks know about all the
'_STMT' nodes and how to convert them to GENERIC forms.  There was some
work done on a genericization pass which would run first, but the
existence of 'STMT_EXPR' meant that in order to convert all of the C
statements into GENERIC equivalents would involve walking the entire
tree anyway, so it was simpler to lower all the way.  This might change
in the future if someone writes an optimization pass which would work
better with higher-level trees, but currently the optimizers all expect
GIMPLE.

 You can request to dump a C-like representation of the GIMPLE form with
the flag '-fdump-tree-gimple'.

* Menu:

* Tuple representation::
* Class hierarchy of GIMPLE statements::
* GIMPLE instruction set::
* GIMPLE Exception Handling::
* Temporaries::
* Operands::
* Manipulating GIMPLE statements::
* Tuple specific accessors::
* GIMPLE sequences::
* Sequence iterators::
* Adding a new GIMPLE statement code::
* Statement and operand traversals::


File: gccint.info,  Node: Tuple representation,  Next: Class hierarchy of GIMPLE statements,  Up: GIMPLE

11.1 Tuple representation
=========================

GIMPLE instructions are tuples of variable size divided in two groups: a
header describing the instruction and its locations, and a variable
length body with all the operands.  Tuples are organized into a
hierarchy with 3 main classes of tuples.

11.1.1 'gimple' (gsbase)
------------------------

This is the root of the hierarchy, it holds basic information needed by
most GIMPLE statements.  There are some fields that may not be relevant
to every GIMPLE statement, but those were moved into the base structure
to take advantage of holes left by other fields (thus making the
structure more compact).  The structure takes 4 words (32 bytes) on 64
bit hosts:

Field                   Size (bits)
'code'                  8
'subcode'               16
'no_warning'            1
'visited'               1
'nontemporal_move'      1
'plf'                   2
'modified'              1
'has_volatile_ops'      1
'references_memory_p'   1
'uid'                   32
'location'              32
'num_ops'               32
'bb'                    64
'block'                 63
Total size              32 bytes

   * 'code' Main identifier for a GIMPLE instruction.

   * 'subcode' Used to distinguish different variants of the same basic
     instruction or provide flags applicable to a given code.  The
     'subcode' flags field has different uses depending on the code of
     the instruction, but mostly it distinguishes instructions of the
     same family.  The most prominent use of this field is in
     assignments, where subcode indicates the operation done on the RHS
     of the assignment.  For example, a = b + c is encoded as
     'GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'.

   * 'no_warning' Bitflag to indicate whether a warning has already been
     issued on this statement.

   * 'visited' General purpose "visited" marker.  Set and cleared by
     each pass when needed.

   * 'nontemporal_move' Bitflag used in assignments that represent
     non-temporal moves.  Although this bitflag is only used in
     assignments, it was moved into the base to take advantage of the
     bit holes left by the previous fields.

   * 'plf' Pass Local Flags.  This 2-bit mask can be used as general
     purpose markers by any pass.  Passes are responsible for clearing
     and setting these two flags accordingly.

   * 'modified' Bitflag to indicate whether the statement has been
     modified.  Used mainly by the operand scanner to determine when to
     re-scan a statement for operands.

   * 'has_volatile_ops' Bitflag to indicate whether this statement
     contains operands that have been marked volatile.

   * 'references_memory_p' Bitflag to indicate whether this statement
     contains memory references (i.e., its operands are either global
     variables, or pointer dereferences or anything that must reside in
     memory).

   * 'uid' This is an unsigned integer used by passes that want to
     assign IDs to every statement.  These IDs must be assigned and used
     by each pass.

   * 'location' This is a 'location_t' identifier to specify source code
     location for this statement.  It is inherited from the front end.

   * 'num_ops' Number of operands that this statement has.  This
     specifies the size of the operand vector embedded in the tuple.
     Only used in some tuples, but it is declared in the base tuple to
     take advantage of the 32-bit hole left by the previous fields.

   * 'bb' Basic block holding the instruction.

   * 'block' Lexical block holding this statement.  Also used for debug
     information generation.

11.1.2 'gimple_statement_with_ops'
----------------------------------

This tuple is actually split in two: 'gimple_statement_with_ops_base'
and 'gimple_statement_with_ops'.  This is needed to accommodate the way
the operand vector is allocated.  The operand vector is defined to be an
array of 1 element.  So, to allocate a dynamic number of operands, the
memory allocator ('gimple_alloc') simply allocates enough memory to hold
the structure itself plus 'N - 1' operands which run "off the end" of
the structure.  For example, to allocate space for a tuple with 3
operands, 'gimple_alloc' reserves 'sizeof (struct
gimple_statement_with_ops) + 2 * sizeof (tree)' bytes.

 On the other hand, several fields in this tuple need to be shared with
the 'gimple_statement_with_memory_ops' tuple.  So, these common fields
are placed in 'gimple_statement_with_ops_base' which is then inherited
from the other two tuples.

'gsbase'    256
'def_ops'   64
'use_ops'   64
'op'        'num_ops' * 64
Total       48 + 8 * 'num_ops' bytes
size

   * 'gsbase' Inherited from 'struct gimple'.

   * 'def_ops' Array of pointers into the operand array indicating all
     the slots that contain a variable written-to by the statement.
     This array is also used for immediate use chaining.  Note that it
     would be possible to not rely on this array, but the changes
     required to implement this are pretty invasive.

   * 'use_ops' Similar to 'def_ops' but for variables read by the
     statement.

   * 'op' Array of trees with 'num_ops' slots.

11.1.3 'gimple_statement_with_memory_ops'
-----------------------------------------

This tuple is essentially identical to 'gimple_statement_with_ops',
except that it contains 4 additional fields to hold vectors related
memory stores and loads.  Similar to the previous case, the structure is
split in two to accommodate for the operand vector
('gimple_statement_with_memory_ops_base' and
'gimple_statement_with_memory_ops').

Field        Size (bits)
'gsbase'     256
'def_ops'    64
'use_ops'    64
'vdef_ops'   64
'vuse_ops'   64
'stores'     64
'loads'      64
'op'         'num_ops' * 64
Total size   80 + 8 * 'num_ops' bytes

   * 'vdef_ops' Similar to 'def_ops' but for 'VDEF' operators.  There is
     one entry per memory symbol written by this statement.  This is
     used to maintain the memory SSA use-def and def-def chains.

   * 'vuse_ops' Similar to 'use_ops' but for 'VUSE' operators.  There is
     one entry per memory symbol loaded by this statement.  This is used
     to maintain the memory SSA use-def chains.

   * 'stores' Bitset with all the UIDs for the symbols written-to by the
     statement.  This is different than 'vdef_ops' in that all the
     affected symbols are mentioned in this set.  If memory partitioning
     is enabled, the 'vdef_ops' vector will refer to memory partitions.
     Furthermore, no SSA information is stored in this set.

   * 'loads' Similar to 'stores', but for memory loads.  (Note that
     there is some amount of redundancy here, it should be possible to
     reduce memory utilization further by removing these sets).

 All the other tuples are defined in terms of these three basic ones.
Each tuple will add some fields.


File: gccint.info,  Node: Class hierarchy of GIMPLE statements,  Next: GIMPLE instruction set,  Prev: Tuple representation,  Up: GIMPLE

11.2 Class hierarchy of GIMPLE statements
=========================================

The following diagram shows the C++ inheritance hierarchy of statement
kinds, along with their relationships to 'GSS_' values (layouts) and
'GIMPLE_' values (codes):

        gimple
          |    layout: GSS_BASE
          |    used for 4 codes: GIMPLE_ERROR_MARK
          |                      GIMPLE_NOP
          |                      GIMPLE_OMP_SECTIONS_SWITCH
          |                      GIMPLE_PREDICT
          |
          + gimple_statement_with_ops_base
          |   |    (no GSS layout)
          |   |
          |   + gimple_statement_with_ops
          |   |   |    layout: GSS_WITH_OPS
          |   |   |
          |   |   + gcond
          |   |   |     code: GIMPLE_COND
          |   |   |
          |   |   + gdebug
          |   |   |     code: GIMPLE_DEBUG
          |   |   |
          |   |   + ggoto
          |   |   |     code: GIMPLE_GOTO
          |   |   |
          |   |   + glabel
          |   |   |     code: GIMPLE_LABEL
          |   |   |
          |   |   + gswitch
          |   |         code: GIMPLE_SWITCH
          |   |
          |   + gimple_statement_with_memory_ops_base
          |       |    layout: GSS_WITH_MEM_OPS_BASE
          |       |
          |       + gimple_statement_with_memory_ops
          |       |   |    layout: GSS_WITH_MEM_OPS
          |       |   |
          |       |   + gassign
          |       |   |    code GIMPLE_ASSIGN
          |       |   |
          |       |   + greturn
          |       |        code GIMPLE_RETURN
          |       |
          |       + gcall
          |       |        layout: GSS_CALL, code: GIMPLE_CALL
          |       |
          |       + gasm
          |       |        layout: GSS_ASM, code: GIMPLE_ASM
          |       |
          |       + gtransaction
          |                layout: GSS_TRANSACTION, code: GIMPLE_TRANSACTION
          |
          + gimple_statement_omp
          |   |    layout: GSS_OMP.  Used for code GIMPLE_OMP_SECTION
          |   |
          |   + gomp_critical
          |   |        layout: GSS_OMP_CRITICAL, code: GIMPLE_OMP_CRITICAL
          |   |
          |   + gomp_for
          |   |        layout: GSS_OMP_FOR, code: GIMPLE_OMP_FOR
          |   |
          |   + gomp_parallel_layout
          |   |   |    layout: GSS_OMP_PARALLEL_LAYOUT
          |   |   |
          |   |   + gimple_statement_omp_taskreg
          |   |   |   |
          |   |   |   + gomp_parallel
          |   |   |   |        code: GIMPLE_OMP_PARALLEL
          |   |   |   |
          |   |   |   + gomp_task
          |   |   |            code: GIMPLE_OMP_TASK
          |   |   |
          |   |   + gimple_statement_omp_target
          |   |            code: GIMPLE_OMP_TARGET
          |   |
          |   + gomp_sections
          |   |        layout: GSS_OMP_SECTIONS, code: GIMPLE_OMP_SECTIONS
          |   |
          |   + gimple_statement_omp_single_layout
          |       |    layout: GSS_OMP_SINGLE_LAYOUT
          |       |
          |       + gomp_single
          |       |        code: GIMPLE_OMP_SINGLE
          |       |
          |       + gomp_teams
          |                code: GIMPLE_OMP_TEAMS
          |
          + gbind
          |        layout: GSS_BIND, code: GIMPLE_BIND
          |
          + gcatch
          |        layout: GSS_CATCH, code: GIMPLE_CATCH
          |
          + geh_filter
          |        layout: GSS_EH_FILTER, code: GIMPLE_EH_FILTER
          |
          + geh_else
          |        layout: GSS_EH_ELSE, code: GIMPLE_EH_ELSE
          |
          + geh_mnt
          |        layout: GSS_EH_MNT, code: GIMPLE_EH_MUST_NOT_THROW
          |
          + gphi
          |        layout: GSS_PHI, code: GIMPLE_PHI
          |
          + gimple_statement_eh_ctrl
          |   |    layout: GSS_EH_CTRL
          |   |
          |   + gresx
          |   |        code: GIMPLE_RESX
          |   |
          |   + geh_dispatch
          |            code: GIMPLE_EH_DISPATCH
          |
          + gtry
          |        layout: GSS_TRY, code: GIMPLE_TRY
          |
          + gimple_statement_wce
          |        layout: GSS_WCE, code: GIMPLE_WITH_CLEANUP_EXPR
          |
          + gomp_continue
          |        layout: GSS_OMP_CONTINUE, code: GIMPLE_OMP_CONTINUE
          |
          + gomp_atomic_load
          |        layout: GSS_OMP_ATOMIC_LOAD, code: GIMPLE_OMP_ATOMIC_LOAD
          |
          + gimple_statement_omp_atomic_store_layout
              |    layout: GSS_OMP_ATOMIC_STORE_LAYOUT,
              |    code: GIMPLE_OMP_ATOMIC_STORE
              |
              + gomp_atomic_store
              |        code: GIMPLE_OMP_ATOMIC_STORE
              |
              + gomp_return
                       code: GIMPLE_OMP_RETURN


File: gccint.info,  Node: GIMPLE instruction set,  Next: GIMPLE Exception Handling,  Prev: Class hierarchy of GIMPLE statements,  Up: GIMPLE

11.3 GIMPLE instruction set
===========================

The following table briefly describes the GIMPLE instruction set.

Instruction                    High GIMPLE   Low GIMPLE
'GIMPLE_ASM'                   x             x
'GIMPLE_ASSIGN'                x             x
'GIMPLE_BIND'                  x
'GIMPLE_CALL'                  x             x
'GIMPLE_CATCH'                 x
'GIMPLE_COND'                  x             x
'GIMPLE_DEBUG'                 x             x
'GIMPLE_EH_FILTER'             x
'GIMPLE_GOTO'                  x             x
'GIMPLE_LABEL'                 x             x
'GIMPLE_NOP'                   x             x
'GIMPLE_OMP_ATOMIC_LOAD'       x             x
'GIMPLE_OMP_ATOMIC_STORE'      x             x
'GIMPLE_OMP_CONTINUE'          x             x
'GIMPLE_OMP_CRITICAL'          x             x
'GIMPLE_OMP_FOR'               x             x
'GIMPLE_OMP_MASTER'            x             x
'GIMPLE_OMP_ORDERED'           x             x
'GIMPLE_OMP_PARALLEL'          x             x
'GIMPLE_OMP_RETURN'            x             x
'GIMPLE_OMP_SECTION'           x             x
'GIMPLE_OMP_SECTIONS'          x             x
'GIMPLE_OMP_SECTIONS_SWITCH'   x             x
'GIMPLE_OMP_SINGLE'            x             x
'GIMPLE_PHI'                                 x
'GIMPLE_RESX'                                x
'GIMPLE_RETURN'                x             x
'GIMPLE_SWITCH'                x             x
'GIMPLE_TRY'                   x


File: gccint.info,  Node: GIMPLE Exception Handling,  Next: Temporaries,  Prev: GIMPLE instruction set,  Up: GIMPLE

11.4 Exception Handling
=======================

Other exception handling constructs are represented using
'GIMPLE_TRY_CATCH'.  'GIMPLE_TRY_CATCH' has two operands.  The first
operand is a sequence of statements to execute.  If executing these
statements does not throw an exception, then the second operand is
ignored.  Otherwise, if an exception is thrown, then the second operand
of the 'GIMPLE_TRY_CATCH' is checked.  The second operand may have the
following forms:

  1. A sequence of statements to execute.  When an exception occurs,
     these statements are executed, and then the exception is rethrown.

  2. A sequence of 'GIMPLE_CATCH' statements.  Each 'GIMPLE_CATCH' has a
     list of applicable exception types and handler code.  If the thrown
     exception matches one of the caught types, the associated handler
     code is executed.  If the handler code falls off the bottom,
     execution continues after the original 'GIMPLE_TRY_CATCH'.

  3. A 'GIMPLE_EH_FILTER' statement.  This has a list of permitted
     exception types, and code to handle a match failure.  If the thrown
     exception does not match one of the allowed types, the associated
     match failure code is executed.  If the thrown exception does
     match, it continues unwinding the stack looking for the next
     handler.

 Currently throwing an exception is not directly represented in GIMPLE,
since it is implemented by calling a function.  At some point in the
future we will want to add some way to express that the call will throw
an exception of a known type.

 Just before running the optimizers, the compiler lowers the high-level
EH constructs above into a set of 'goto's, magic labels, and EH regions.
Continuing to unwind at the end of a cleanup is represented with a
'GIMPLE_RESX'.


File: gccint.info,  Node: Temporaries,  Next: Operands,  Prev: GIMPLE Exception Handling,  Up: GIMPLE

11.5 Temporaries
================

When gimplification encounters a subexpression that is too complex, it
creates a new temporary variable to hold the value of the subexpression,
and adds a new statement to initialize it before the current statement.
These special temporaries are known as 'expression temporaries', and are
allocated using 'get_formal_tmp_var'.  The compiler tries to always
evaluate identical expressions into the same temporary, to simplify
elimination of redundant calculations.

 We can only use expression temporaries when we know that it will not be
reevaluated before its value is used, and that it will not be otherwise
modified(1).  Other temporaries can be allocated using
'get_initialized_tmp_var' or 'create_tmp_var'.

 Currently, an expression like 'a = b + 5' is not reduced any further.
We tried converting it to something like
     T1 = b + 5;
     a = T1;
 but this bloated the representation for minimal benefit.  However, a
variable which must live in memory cannot appear in an expression; its
value is explicitly loaded into a temporary first.  Similarly, storing
the value of an expression to a memory variable goes through a
temporary.

   ---------- Footnotes ----------

   (1) These restrictions are derived from those in Morgan 4.8.


File: gccint.info,  Node: Operands,  Next: Manipulating GIMPLE statements,  Prev: Temporaries,  Up: GIMPLE

11.6 Operands
=============

In general, expressions in GIMPLE consist of an operation and the
appropriate number of simple operands; these operands must either be a
GIMPLE rvalue ('is_gimple_val'), i.e. a constant or a register variable.
More complex operands are factored out into temporaries, so that
     a = b + c + d
 becomes
     T1 = b + c;
     a = T1 + d;

 The same rule holds for arguments to a 'GIMPLE_CALL'.

 The target of an assignment is usually a variable, but can also be a
'MEM_REF' or a compound lvalue as described below.

* Menu:

* Compound Expressions::
* Compound Lvalues::
* Conditional Expressions::
* Logical Operators::


File: gccint.info,  Node: Compound Expressions,  Next: Compound Lvalues,  Up: Operands

11.6.1 Compound Expressions
---------------------------

The left-hand side of a C comma expression is simply moved into a
separate statement.


File: gccint.info,  Node: Compound Lvalues,  Next: Conditional Expressions,  Prev: Compound Expressions,  Up: Operands

11.6.2 Compound Lvalues
-----------------------

Currently compound lvalues involving array and structure field
references are not broken down; an expression like 'a.b[2] = 42' is not
reduced any further (though complex array subscripts are).  This
restriction is a workaround for limitations in later optimizers; if we
were to convert this to

     T1 = &a.b;
     T1[2] = 42;

 alias analysis would not remember that the reference to 'T1[2]' came by
way of 'a.b', so it would think that the assignment could alias another
member of 'a'; this broke 'struct-alias-1.c'.  Future optimizer
improvements may make this limitation unnecessary.


File: gccint.info,  Node: Conditional Expressions,  Next: Logical Operators,  Prev: Compound Lvalues,  Up: Operands

11.6.3 Conditional Expressions
------------------------------

A C '?:' expression is converted into an 'if' statement with each branch
assigning to the same temporary.  So,

     a = b ? c : d;
 becomes
     if (b == 1)
       T1 = c;
     else
       T1 = d;
     a = T1;

 The GIMPLE level if-conversion pass re-introduces '?:' expression, if
appropriate.  It is used to vectorize loops with conditions using vector
conditional operations.

 Note that in GIMPLE, 'if' statements are represented using
'GIMPLE_COND', as described below.


File: gccint.info,  Node: Logical Operators,  Prev: Conditional Expressions,  Up: Operands

11.6.4 Logical Operators
------------------------

Except when they appear in the condition operand of a 'GIMPLE_COND',
logical 'and' and 'or' operators are simplified as follows: 'a = b && c'
becomes

     T1 = (bool)b;
     if (T1 == true)
       T1 = (bool)c;
     a = T1;

 Note that 'T1' in this example cannot be an expression temporary,
because it has two different assignments.

11.6.5 Manipulating operands
----------------------------

All gimple operands are of type 'tree'.  But only certain types of trees
are allowed to be used as operand tuples.  Basic validation is
controlled by the function 'get_gimple_rhs_class', which given a tree
code, returns an 'enum' with the following values of type 'enum
gimple_rhs_class'

   * 'GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand.

   * 'GIMPLE_TERNARY_RHS' The tree is a valid GIMPLE ternary operation.

   * 'GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation.

   * 'GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation.

   * 'GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be
     split into simpler operands (for instance, 'SSA_NAME', 'VAR_DECL',
     'COMPONENT_REF', etc).

     This operand class also acts as an escape hatch for tree nodes that
     may be flattened out into the operand vector, but would need more
     than two slots on the RHS. For instance, a 'COND_EXPR' expression
     of the form '(a op b) ? x : y' could be flattened out on the
     operand vector using 4 slots, but it would also require additional
     processing to distinguish 'c = a op b' from 'c = a op b ? x : y'.
     Something similar occurs with 'ASSERT_EXPR'.  In time, these
     special case tree expressions should be flattened into the operand
     vector.

 For tree nodes in the categories 'GIMPLE_TERNARY_RHS',
'GIMPLE_BINARY_RHS' and 'GIMPLE_UNARY_RHS', they cannot be stored inside
tuples directly.  They first need to be flattened and separated into
individual components.  For instance, given the GENERIC expression

     a = b + c

 its tree representation is:

     MODIFY_EXPR <VAR_DECL  <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>>

 In this case, the GIMPLE form for this statement is logically identical
to its GENERIC form but in GIMPLE, the 'PLUS_EXPR' on the RHS of the
assignment is not represented as a tree, instead the two operands are
taken out of the 'PLUS_EXPR' sub-tree and flattened into the GIMPLE
tuple as follows:

     GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>>

11.6.6 Operand vector allocation
--------------------------------

The operand vector is stored at the bottom of the three tuple structures
that accept operands.  This means, that depending on the code of a given
statement, its operand vector will be at different offsets from the base
of the structure.  To access tuple operands use the following accessors

 -- GIMPLE function: unsigned gimple_num_ops (gimple g)
     Returns the number of operands in statement G.

 -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
     Returns operand 'I' from statement 'G'.

 -- GIMPLE function: tree * gimple_ops (gimple g)
     Returns a pointer into the operand vector for statement 'G'.  This
     is computed using an internal table called 'gimple_ops_offset_'[].
     This table is indexed by the gimple code of 'G'.

     When the compiler is built, this table is filled-in using the sizes
     of the structures used by each statement code defined in
     gimple.def.  Since the operand vector is at the bottom of the
     structure, for a gimple code 'C' the offset is computed as sizeof
     (struct-of 'C') - sizeof (tree).

     This mechanism adds one memory indirection to every access when
     using 'gimple_op'(), if this becomes a bottleneck, a pass can
     choose to memoize the result from 'gimple_ops'() and use that to
     access the operands.

11.6.7 Operand validation
-------------------------

When adding a new operand to a gimple statement, the operand will be
validated according to what each tuple accepts in its operand vector.
These predicates are called by the 'gimple_NAME_set_...()'.  Each tuple
will use one of the following predicates (Note, this list is not
exhaustive):

 -- GIMPLE function: bool is_gimple_val (tree t)
     Returns true if t is a "GIMPLE value", which are all the
     non-addressable stack variables (variables for which
     'is_gimple_reg' returns true) and constants (expressions for which
     'is_gimple_min_invariant' returns true).

 -- GIMPLE function: bool is_gimple_addressable (tree t)
     Returns true if t is a symbol or memory reference whose address can
     be taken.

 -- GIMPLE function: bool is_gimple_asm_val (tree t)
     Similar to 'is_gimple_val' but it also accepts hard registers.

 -- GIMPLE function: bool is_gimple_call_addr (tree t)
     Return true if t is a valid expression to use as the function
     called by a 'GIMPLE_CALL'.

 -- GIMPLE function: bool is_gimple_mem_ref_addr (tree t)
     Return true if t is a valid expression to use as first operand of a
     'MEM_REF' expression.

 -- GIMPLE function: bool is_gimple_constant (tree t)
     Return true if t is a valid gimple constant.

 -- GIMPLE function: bool is_gimple_min_invariant (tree t)
     Return true if t is a valid minimal invariant.  This is different
     from constants, in that the specific value of t may not be known at
     compile time, but it is known that it doesn't change (e.g., the
     address of a function local variable).

 -- GIMPLE function: bool is_gimple_ip_invariant (tree t)
     Return true if t is an interprocedural invariant.  This means that
     t is a valid invariant in all functions (e.g.  it can be an address
     of a global variable but not of a local one).

 -- GIMPLE function: bool is_gimple_ip_invariant_address (tree t)
     Return true if t is an 'ADDR_EXPR' that does not change once the
     program is running (and which is valid in all functions).

11.6.8 Statement validation
---------------------------

 -- GIMPLE function: bool is_gimple_assign (gimple g)
     Return true if the code of g is 'GIMPLE_ASSIGN'.

 -- GIMPLE function: bool is_gimple_call (gimple g)
     Return true if the code of g is 'GIMPLE_CALL'.

 -- GIMPLE function: bool is_gimple_debug (gimple g)
     Return true if the code of g is 'GIMPLE_DEBUG'.

 -- GIMPLE function: bool gimple_assign_cast_p (const_gimple g)
     Return true if g is a 'GIMPLE_ASSIGN' that performs a type cast
     operation.

 -- GIMPLE function: bool gimple_debug_bind_p (gimple g)
     Return true if g is a 'GIMPLE_DEBUG' that binds the value of an
     expression to a variable.

 -- GIMPLE function: bool is_gimple_omp (gimple g)
     Return true if g is any of the OpenMP codes.


File: gccint.info,  Node: Manipulating GIMPLE statements,  Next: Tuple specific accessors,  Prev: Operands,  Up: GIMPLE

11.7 Manipulating GIMPLE statements
===================================

This section documents all the functions available to handle each of the
GIMPLE instructions.

11.7.1 Common accessors
-----------------------

The following are common accessors for gimple statements.

 -- GIMPLE function: enum gimple_code gimple_code (gimple g)
     Return the code for statement 'G'.

 -- GIMPLE function: basic_block gimple_bb (gimple g)
     Return the basic block to which statement 'G' belongs to.

 -- GIMPLE function: tree gimple_block (gimple g)
     Return the lexical scope block holding statement 'G'.

 -- GIMPLE function: tree gimple_expr_type (gimple stmt)
     Return the type of the main expression computed by 'STMT'.  Return
     'void_type_node' if 'STMT' computes nothing.  This will only return
     something meaningful for 'GIMPLE_ASSIGN', 'GIMPLE_COND' and
     'GIMPLE_CALL'.  For all other tuple codes, it will return
     'void_type_node'.

 -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt)
     Return the tree code for the expression computed by 'STMT'.  This
     is only meaningful for 'GIMPLE_CALL', 'GIMPLE_ASSIGN' and
     'GIMPLE_COND'.  If 'STMT' is 'GIMPLE_CALL', it will return
     'CALL_EXPR'.  For 'GIMPLE_COND', it returns the code of the
     comparison predicate.  For 'GIMPLE_ASSIGN' it returns the code of
     the operation performed by the 'RHS' of the assignment.

 -- GIMPLE function: void gimple_set_block (gimple g, tree block)
     Set the lexical scope block of 'G' to 'BLOCK'.

 -- GIMPLE function: location_t gimple_locus (gimple g)
     Return locus information for statement 'G'.

 -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus)
     Set locus information for statement 'G'.

 -- GIMPLE function: bool gimple_locus_empty_p (gimple g)
     Return true if 'G' does not have locus information.

 -- GIMPLE function: bool gimple_no_warning_p (gimple stmt)
     Return true if no warnings should be emitted for statement 'STMT'.

 -- GIMPLE function: void gimple_set_visited (gimple stmt, bool
          visited_p)
     Set the visited status on statement 'STMT' to 'VISITED_P'.

 -- GIMPLE function: bool gimple_visited_p (gimple stmt)
     Return the visited status on statement 'STMT'.

 -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask
          plf, bool val_p)
     Set pass local flag 'PLF' on statement 'STMT' to 'VAL_P'.

 -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum plf_mask
          plf)
     Return the value of pass local flag 'PLF' on statement 'STMT'.

 -- GIMPLE function: bool gimple_has_ops (gimple g)
     Return true if statement 'G' has register or memory operands.

 -- GIMPLE function: bool gimple_has_mem_ops (gimple g)
     Return true if statement 'G' has memory operands.

 -- GIMPLE function: unsigned gimple_num_ops (gimple g)
     Return the number of operands for statement 'G'.

 -- GIMPLE function: tree * gimple_ops (gimple g)
     Return the array of operands for statement 'G'.

 -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
     Return operand 'I' for statement 'G'.

 -- GIMPLE function: tree * gimple_op_ptr (gimple g, unsigned i)
     Return a pointer to operand 'I' for statement 'G'.

 -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op)
     Set operand 'I' of statement 'G' to 'OP'.

 -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt)
     Return the set of symbols that have had their address taken by
     'STMT'.

 -- GIMPLE function: struct def_optype_d * gimple_def_ops (gimple g)
     Return the set of 'DEF' operands for statement 'G'.

 -- GIMPLE function: void gimple_set_def_ops (gimple g, struct
          def_optype_d *def)
     Set 'DEF' to be the set of 'DEF' operands for statement 'G'.

 -- GIMPLE function: struct use_optype_d * gimple_use_ops (gimple g)
     Return the set of 'USE' operands for statement 'G'.

 -- GIMPLE function: void gimple_set_use_ops (gimple g, struct
          use_optype_d *use)
     Set 'USE' to be the set of 'USE' operands for statement 'G'.

 -- GIMPLE function: struct voptype_d * gimple_vuse_ops (gimple g)
     Return the set of 'VUSE' operands for statement 'G'.

 -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct
          voptype_d *ops)
     Set 'OPS' to be the set of 'VUSE' operands for statement 'G'.

 -- GIMPLE function: struct voptype_d * gimple_vdef_ops (gimple g)
     Return the set of 'VDEF' operands for statement 'G'.

 -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct
          voptype_d *ops)
     Set 'OPS' to be the set of 'VDEF' operands for statement 'G'.

 -- GIMPLE function: bitmap gimple_loaded_syms (gimple g)
     Return the set of symbols loaded by statement 'G'.  Each element of
     the set is the 'DECL_UID' of the corresponding symbol.

 -- GIMPLE function: bitmap gimple_stored_syms (gimple g)
     Return the set of symbols stored by statement 'G'.  Each element of
     the set is the 'DECL_UID' of the corresponding symbol.

 -- GIMPLE function: bool gimple_modified_p (gimple g)
     Return true if statement 'G' has operands and the modified field
     has been set.

 -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt)
     Return true if statement 'STMT' contains volatile operands.

 -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt, bool
          volatilep)
     Return true if statement 'STMT' contains volatile operands.

 -- GIMPLE function: void update_stmt (gimple s)
     Mark statement 'S' as modified, and update it.

 -- GIMPLE function: void update_stmt_if_modified (gimple s)
     Update statement 'S' if it has been marked modified.

 -- GIMPLE function: gimple gimple_copy (gimple stmt)
     Return a deep copy of statement 'STMT'.


File: gccint.info,  Node: Tuple specific accessors,  Next: GIMPLE sequences,  Prev: Manipulating GIMPLE statements,  Up: GIMPLE

11.8 Tuple specific accessors
=============================

* Menu:

* GIMPLE_ASM::
* GIMPLE_ASSIGN::
* GIMPLE_BIND::
* GIMPLE_CALL::
* GIMPLE_CATCH::
* GIMPLE_COND::
* GIMPLE_DEBUG::
* GIMPLE_EH_FILTER::
* GIMPLE_LABEL::
* GIMPLE_GOTO::
* GIMPLE_NOP::
* GIMPLE_OMP_ATOMIC_LOAD::
* GIMPLE_OMP_ATOMIC_STORE::
* GIMPLE_OMP_CONTINUE::
* GIMPLE_OMP_CRITICAL::
* GIMPLE_OMP_FOR::
* GIMPLE_OMP_MASTER::
* GIMPLE_OMP_ORDERED::
* GIMPLE_OMP_PARALLEL::
* GIMPLE_OMP_RETURN::
* GIMPLE_OMP_SECTION::
* GIMPLE_OMP_SECTIONS::
* GIMPLE_OMP_SINGLE::
* GIMPLE_PHI::
* GIMPLE_RESX::
* GIMPLE_RETURN::
* GIMPLE_SWITCH::
* GIMPLE_TRY::
* GIMPLE_WITH_CLEANUP_EXPR::


File: gccint.info,  Node: GIMPLE_ASM,  Next: GIMPLE_ASSIGN,  Up: Tuple specific accessors

11.8.1 'GIMPLE_ASM'
-------------------

 -- GIMPLE function: gasm *gimple_build_asm_vec ( const char *string,
          vec<tree, va_gc> *inputs, vec<tree, va_gc> *outputs, vec<tree,
          va_gc> *clobbers, vec<tree, va_gc> *labels)
     Build a 'GIMPLE_ASM' statement.  This statement is used for
     building in-line assembly constructs.  'STRING' is the assembly
     code.  'INPUTS', 'OUTPUTS', 'CLOBBERS' and 'LABELS' are the inputs,
     outputs, clobbered registers and labels.

 -- GIMPLE function: unsigned gimple_asm_ninputs (const gasm *g)
     Return the number of input operands for 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: unsigned gimple_asm_noutputs (const gasm *g)
     Return the number of output operands for 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: unsigned gimple_asm_nclobbers (const gasm *g)
     Return the number of clobber operands for 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: tree gimple_asm_input_op (const gasm *g, unsigned
          index)
     Return input operand 'INDEX' of 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: void gimple_asm_set_input_op (gasm *g, unsigned
          index, tree in_op)
     Set 'IN_OP' to be input operand 'INDEX' in 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: tree gimple_asm_output_op (const gasm *g, unsigned
          index)
     Return output operand 'INDEX' of 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: void gimple_asm_set_output_op (gasm *g, unsigned
          index, tree out_op)
     Set 'OUT_OP' to be output operand 'INDEX' in 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: tree gimple_asm_clobber_op (const gasm *g, unsigned
          index)
     Return clobber operand 'INDEX' of 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: void gimple_asm_set_clobber_op (gasm *g, unsigned
          index, tree clobber_op)
     Set 'CLOBBER_OP' to be clobber operand 'INDEX' in 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: const char * gimple_asm_string (const gasm *g)
     Return the string representing the assembly instruction in
     'GIMPLE_ASM' 'G'.

 -- GIMPLE function: bool gimple_asm_volatile_p (const gasm *g)
     Return true if 'G' is an asm statement marked volatile.

 -- GIMPLE function: void gimple_asm_set_volatile (gasm *g, bool
          volatile_p)
     Mark asm statement 'G' as volatile or non-volatile based on
     'VOLATILE_P'.


File: gccint.info,  Node: GIMPLE_ASSIGN,  Next: GIMPLE_BIND,  Prev: GIMPLE_ASM,  Up: Tuple specific accessors

11.8.2 'GIMPLE_ASSIGN'
----------------------

 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, tree rhs)
     Build a 'GIMPLE_ASSIGN' statement.  The left-hand side is an lvalue
     passed in lhs.  The right-hand side can be either a unary or binary
     tree expression.  The expression tree rhs will be flattened and its
     operands assigned to the corresponding operand slots in the new
     statement.  This function is useful when you already have a tree
     expression that you want to convert into a tuple.  However, try to
     avoid building expression trees for the sole purpose of calling
     this function.  If you already have the operands in separate trees,
     it is better to use 'gimple_build_assign' with 'enum tree_code'
     argument and separate arguments for each operand.

 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum
          tree_code subcode, tree op1, tree op2, tree op3)
     This function is similar to two operand 'gimple_build_assign', but
     is used to build a 'GIMPLE_ASSIGN' statement when the operands of
     the right-hand side of the assignment are already split into
     different operands.

     The left-hand side is an lvalue passed in lhs.  Subcode is the
     'tree_code' for the right-hand side of the assignment.  Op1, op2
     and op3 are the operands.

 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum
          tree_code subcode, tree op1, tree op2)
     Like the above 5 operand 'gimple_build_assign', but with the last
     argument 'NULL' - this overload should not be used for
     'GIMPLE_TERNARY_RHS' assignments.

 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum
          tree_code subcode, tree op1)
     Like the above 4 operand 'gimple_build_assign', but with the last
     argument 'NULL' - this overload should be used only for
     'GIMPLE_UNARY_RHS' and 'GIMPLE_SINGLE_RHS' assignments.

 -- GIMPLE function: gimple gimplify_assign (tree dst, tree src,
          gimple_seq *seq_p)
     Build a new 'GIMPLE_ASSIGN' tuple and append it to the end of
     '*SEQ_P'.

 'DST'/'SRC' are the destination and source respectively.  You can pass
ungimplified trees in 'DST' or 'SRC', in which case they will be
converted to a gimple operand if necessary.

 This function returns the newly created 'GIMPLE_ASSIGN' tuple.

 -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g)
     Return the code of the expression computed on the 'RHS' of
     assignment statement 'G'.

 -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class
          (gimple g)
     Return the gimple rhs class of the code for the expression computed
     on the rhs of assignment statement 'G'.  This will never return
     'GIMPLE_INVALID_RHS'.

 -- GIMPLE function: tree gimple_assign_lhs (gimple g)
     Return the 'LHS' of assignment statement 'G'.

 -- GIMPLE function: tree * gimple_assign_lhs_ptr (gimple g)
     Return a pointer to the 'LHS' of assignment statement 'G'.

 -- GIMPLE function: tree gimple_assign_rhs1 (gimple g)
     Return the first operand on the 'RHS' of assignment statement 'G'.

 -- GIMPLE function: tree * gimple_assign_rhs1_ptr (gimple g)
     Return the address of the first operand on the 'RHS' of assignment
     statement 'G'.

 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g)
     Return the second operand on the 'RHS' of assignment statement 'G'.

 -- GIMPLE function: tree * gimple_assign_rhs2_ptr (gimple g)
     Return the address of the second operand on the 'RHS' of assignment
     statement 'G'.

 -- GIMPLE function: tree gimple_assign_rhs3 (gimple g)
     Return the third operand on the 'RHS' of assignment statement 'G'.

 -- GIMPLE function: tree * gimple_assign_rhs3_ptr (gimple g)
     Return the address of the third operand on the 'RHS' of assignment
     statement 'G'.

 -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs)
     Set 'LHS' to be the 'LHS' operand of assignment statement 'G'.

 -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs)
     Set 'RHS' to be the first operand on the 'RHS' of assignment
     statement 'G'.

 -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs)
     Set 'RHS' to be the second operand on the 'RHS' of assignment
     statement 'G'.

 -- GIMPLE function: void gimple_assign_set_rhs3 (gimple g, tree rhs)
     Set 'RHS' to be the third operand on the 'RHS' of assignment
     statement 'G'.

 -- GIMPLE function: bool gimple_assign_cast_p (const_gimple s)
     Return true if 'S' is a type-cast assignment.


File: gccint.info,  Node: GIMPLE_BIND,  Next: GIMPLE_CALL,  Prev: GIMPLE_ASSIGN,  Up: Tuple specific accessors

11.8.3 'GIMPLE_BIND'
--------------------

 -- GIMPLE function: gbind *gimple_build_bind (tree vars, gimple_seq
          body)
     Build a 'GIMPLE_BIND' statement with a list of variables in 'VARS'
     and a body of statements in sequence 'BODY'.

 -- GIMPLE function: tree gimple_bind_vars (const gbind *g)
     Return the variables declared in the 'GIMPLE_BIND' statement 'G'.

 -- GIMPLE function: void gimple_bind_set_vars (gbind *g, tree vars)
     Set 'VARS' to be the set of variables declared in the 'GIMPLE_BIND'
     statement 'G'.

 -- GIMPLE function: void gimple_bind_append_vars (gbind *g, tree vars)
     Append 'VARS' to the set of variables declared in the 'GIMPLE_BIND'
     statement 'G'.

 -- GIMPLE function: gimple_seq gimple_bind_body (gbind *g)
     Return the GIMPLE sequence contained in the 'GIMPLE_BIND' statement
     'G'.

 -- GIMPLE function: void gimple_bind_set_body (gbind *g, gimple_seq
          seq)
     Set 'SEQ' to be sequence contained in the 'GIMPLE_BIND' statement
     'G'.

 -- GIMPLE function: void gimple_bind_add_stmt (gbind *gs, gimple stmt)
     Append a statement to the end of a 'GIMPLE_BIND''s body.

 -- GIMPLE function: void gimple_bind_add_seq (gbind *gs, gimple_seq
          seq)
     Append a sequence of statements to the end of a 'GIMPLE_BIND''s
     body.

 -- GIMPLE function: tree gimple_bind_block (const gbind *g)
     Return the 'TREE_BLOCK' node associated with 'GIMPLE_BIND'
     statement 'G'.  This is analogous to the 'BIND_EXPR_BLOCK' field in
     trees.

 -- GIMPLE function: void gimple_bind_set_block (gbind *g, tree block)
     Set 'BLOCK' to be the 'TREE_BLOCK' node associated with
     'GIMPLE_BIND' statement 'G'.


File: gccint.info,  Node: GIMPLE_CALL,  Next: GIMPLE_CATCH,  Prev: GIMPLE_BIND,  Up: Tuple specific accessors

11.8.4 'GIMPLE_CALL'
--------------------

 -- GIMPLE function: gcall *gimple_build_call (tree fn, unsigned nargs,
          ...)
     Build a 'GIMPLE_CALL' statement to function 'FN'.  The argument
     'FN' must be either a 'FUNCTION_DECL' or a gimple call address as
     determined by 'is_gimple_call_addr'.  'NARGS' are the number of
     arguments.  The rest of the arguments follow the argument 'NARGS',
     and must be trees that are valid as rvalues in gimple (i.e., each
     operand is validated with 'is_gimple_operand').

 -- GIMPLE function: gcall *gimple_build_call_from_tree (tree call_expr)
     Build a 'GIMPLE_CALL' from a 'CALL_EXPR' node.  The arguments and
     the function are taken from the expression directly.  This routine
     assumes that 'call_expr' is already in GIMPLE form.  That is, its
     operands are GIMPLE values and the function call needs no further
     simplification.  All the call flags in 'call_expr' are copied over
     to the new 'GIMPLE_CALL'.

 -- GIMPLE function: gcall *gimple_build_call_vec (tree fn, 'vec<tree>'
          args)
     Identical to 'gimple_build_call' but the arguments are stored in a
     'vec<tree>'.

 -- GIMPLE function: tree gimple_call_lhs (gimple g)
     Return the 'LHS' of call statement 'G'.

 -- GIMPLE function: tree * gimple_call_lhs_ptr (gimple g)
     Return a pointer to the 'LHS' of call statement 'G'.

 -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs)
     Set 'LHS' to be the 'LHS' operand of call statement 'G'.

 -- GIMPLE function: tree gimple_call_fn (gimple g)
     Return the tree node representing the function called by call
     statement 'G'.

 -- GIMPLE function: void gimple_call_set_fn (gcall *g, tree fn)
     Set 'FN' to be the function called by call statement 'G'.  This has
     to be a gimple value specifying the address of the called function.

 -- GIMPLE function: tree gimple_call_fndecl (gimple g)
     If a given 'GIMPLE_CALL''s callee is a 'FUNCTION_DECL', return it.
     Otherwise return 'NULL'.  This function is analogous to
     'get_callee_fndecl' in 'GENERIC'.

 -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl)
     Set the called function to 'FNDECL'.

 -- GIMPLE function: tree gimple_call_return_type (const gcall *g)
     Return the type returned by call statement 'G'.

 -- GIMPLE function: tree gimple_call_chain (gimple g)
     Return the static chain for call statement 'G'.

 -- GIMPLE function: void gimple_call_set_chain (gcall *g, tree chain)
     Set 'CHAIN' to be the static chain for call statement 'G'.

 -- GIMPLE function: unsigned gimple_call_num_args (gimple g)
     Return the number of arguments used by call statement 'G'.

 -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index)
     Return the argument at position 'INDEX' for call statement 'G'.
     The first argument is 0.

 -- GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned
          index)
     Return a pointer to the argument at position 'INDEX' for call
     statement 'G'.

 -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned index,
          tree arg)
     Set 'ARG' to be the argument at position 'INDEX' for call statement
     'G'.

 -- GIMPLE function: void gimple_call_set_tail (gcall *s)
     Mark call statement 'S' as being a tail call (i.e., a call just
     before the exit of a function).  These calls are candidate for tail
     call optimization.

 -- GIMPLE function: bool gimple_call_tail_p (gcall *s)
     Return true if 'GIMPLE_CALL' 'S' is marked as a tail call.

 -- GIMPLE function: bool gimple_call_noreturn_p (gimple s)
     Return true if 'S' is a noreturn call.

 -- GIMPLE function: gimple gimple_call_copy_skip_args (gcall *stmt,
          bitmap args_to_skip)
     Build a 'GIMPLE_CALL' identical to 'STMT' but skipping the
     arguments in the positions marked by the set 'ARGS_TO_SKIP'.


File: gccint.info,  Node: GIMPLE_CATCH,  Next: GIMPLE_COND,  Prev: GIMPLE_CALL,  Up: Tuple specific accessors

11.8.5 'GIMPLE_CATCH'
---------------------

 -- GIMPLE function: gcatch *gimple_build_catch (tree types, gimple_seq
          handler)
     Build a 'GIMPLE_CATCH' statement.  'TYPES' are the tree types this
     catch handles.  'HANDLER' is a sequence of statements with the code
     for the handler.

 -- GIMPLE function: tree gimple_catch_types (const gcatch *g)
     Return the types handled by 'GIMPLE_CATCH' statement 'G'.

 -- GIMPLE function: tree * gimple_catch_types_ptr (gcatch *g)
     Return a pointer to the types handled by 'GIMPLE_CATCH' statement
     'G'.

 -- GIMPLE function: gimple_seq gimple_catch_handler (gcatch *g)
     Return the GIMPLE sequence representing the body of the handler of
     'GIMPLE_CATCH' statement 'G'.

 -- GIMPLE function: void gimple_catch_set_types (gcatch *g, tree t)
     Set 'T' to be the set of types handled by 'GIMPLE_CATCH' 'G'.

 -- GIMPLE function: void gimple_catch_set_handler (gcatch *g,
          gimple_seq handler)
     Set 'HANDLER' to be the body of 'GIMPLE_CATCH' 'G'.


File: gccint.info,  Node: GIMPLE_COND,  Next: GIMPLE_DEBUG,  Prev: GIMPLE_CATCH,  Up: Tuple specific accessors

11.8.6 'GIMPLE_COND'
--------------------

 -- GIMPLE function: gcond *gimple_build_cond ( enum tree_code
          pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
     Build a 'GIMPLE_COND' statement.  'A' 'GIMPLE_COND' statement
     compares 'LHS' and 'RHS' and if the condition in 'PRED_CODE' is
     true, jump to the label in 't_label', otherwise jump to the label
     in 'f_label'.  'PRED_CODE' are relational operator tree codes like
     'EQ_EXPR', 'LT_EXPR', 'LE_EXPR', 'NE_EXPR', etc.

 -- GIMPLE function: gcond *gimple_build_cond_from_tree (tree cond, tree
          t_label, tree f_label)
     Build a 'GIMPLE_COND' statement from the conditional expression
     tree 'COND'.  'T_LABEL' and 'F_LABEL' are as in
     'gimple_build_cond'.

 -- GIMPLE function: enum tree_code gimple_cond_code (gimple g)
     Return the code of the predicate computed by conditional statement
     'G'.

 -- GIMPLE function: void gimple_cond_set_code (gcond *g, enum tree_code
          code)
     Set 'CODE' to be the predicate code for the conditional statement
     'G'.

 -- GIMPLE function: tree gimple_cond_lhs (gimple g)
     Return the 'LHS' of the predicate computed by conditional statement
     'G'.

 -- GIMPLE function: void gimple_cond_set_lhs (gcond *g, tree lhs)
     Set 'LHS' to be the 'LHS' operand of the predicate computed by
     conditional statement 'G'.

 -- GIMPLE function: tree gimple_cond_rhs (gimple g)
     Return the 'RHS' operand of the predicate computed by conditional
     'G'.

 -- GIMPLE function: void gimple_cond_set_rhs (gcond *g, tree rhs)
     Set 'RHS' to be the 'RHS' operand of the predicate computed by
     conditional statement 'G'.

 -- GIMPLE function: tree gimple_cond_true_label (const gcond *g)
     Return the label used by conditional statement 'G' when its
     predicate evaluates to true.

 -- GIMPLE function: void gimple_cond_set_true_label (gcond *g, tree
          label)
     Set 'LABEL' to be the label used by conditional statement 'G' when
     its predicate evaluates to true.

 -- GIMPLE function: void gimple_cond_set_false_label (gcond *g, tree
          label)
     Set 'LABEL' to be the label used by conditional statement 'G' when
     its predicate evaluates to false.

 -- GIMPLE function: tree gimple_cond_false_label (const gcond *g)
     Return the label used by conditional statement 'G' when its
     predicate evaluates to false.

 -- GIMPLE function: void gimple_cond_make_false (gcond *g)
     Set the conditional 'COND_STMT' to be of the form 'if (1 == 0)'.

 -- GIMPLE function: void gimple_cond_make_true (gcond *g)
     Set the conditional 'COND_STMT' to be of the form 'if (1 == 1)'.


File: gccint.info,  Node: GIMPLE_DEBUG,  Next: GIMPLE_EH_FILTER,  Prev: GIMPLE_COND,  Up: Tuple specific accessors

11.8.7 'GIMPLE_DEBUG'
---------------------

 -- GIMPLE function: gdebug *gimple_build_debug_bind (tree var, tree
          value, gimple stmt)
     Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_BIND' of
     'subcode'.  The effect of this statement is to tell debug
     information generation machinery that the value of user variable
     'var' is given by 'value' at that point, and to remain with that
     value until 'var' runs out of scope, a dynamically-subsequent debug
     bind statement overrides the binding, or conflicting values reach a
     control flow merge point.  Even if components of the 'value'
     expression change afterwards, the variable is supposed to retain
     the same value, though not necessarily the same location.

     It is expected that 'var' be most often a tree for automatic user
     variables ('VAR_DECL' or 'PARM_DECL') that satisfy the requirements
     for gimple registers, but it may also be a tree for a scalarized
     component of a user variable ('ARRAY_REF', 'COMPONENT_REF'), or a
     debug temporary ('DEBUG_EXPR_DECL').

     As for 'value', it can be an arbitrary tree expression, but it is
     recommended that it be in a suitable form for a gimple assignment
     'RHS'.  It is not expected that user variables that could appear as
     'var' ever appear in 'value', because in the latter we'd have their
     'SSA_NAME's instead, but even if they were not in SSA form, user
     variables appearing in 'value' are to be regarded as part of the
     executable code space, whereas those in 'var' are to be regarded as
     part of the source code space.  There is no way to refer to the
     value bound to a user variable within a 'value' expression.

     If 'value' is 'GIMPLE_DEBUG_BIND_NOVALUE', debug information
     generation machinery is informed that the variable 'var' is
     unbound, i.e., that its value is indeterminate, which sometimes
     means it is really unavailable, and other times that the compiler
     could not keep track of it.

     Block and location information for the newly-created stmt are taken
     from 'stmt', if given.

 -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt)
     Return the user variable VAR that is bound at 'stmt'.

 -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt)
     Return the value expression that is bound to a user variable at
     'stmt'.

 -- GIMPLE function: tree * gimple_debug_bind_get_value_ptr (gimple
          stmt)
     Return a pointer to the value expression that is bound to a user
     variable at 'stmt'.

 -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree
          var)
     Modify the user variable bound at 'stmt' to VAR.

 -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt, tree
          var)
     Modify the value bound to the user variable bound at 'stmt' to
     VALUE.

 -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt)
     Modify the value bound to the user variable bound at 'stmt' so that
     the variable becomes unbound.

 -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt)
     Return 'TRUE' if 'stmt' binds a user variable to a value, and
     'FALSE' if it unbinds the variable.


File: gccint.info,  Node: GIMPLE_EH_FILTER,  Next: GIMPLE_LABEL,  Prev: GIMPLE_DEBUG,  Up: Tuple specific accessors

11.8.8 'GIMPLE_EH_FILTER'
-------------------------

 -- GIMPLE function: geh_filter *gimple_build_eh_filter (tree types,
          gimple_seq failure)
     Build a 'GIMPLE_EH_FILTER' statement.  'TYPES' are the filter's
     types.  'FAILURE' is a sequence with the filter's failure action.

 -- GIMPLE function: tree gimple_eh_filter_types (gimple g)
     Return the types handled by 'GIMPLE_EH_FILTER' statement 'G'.

 -- GIMPLE function: tree * gimple_eh_filter_types_ptr (gimple g)
     Return a pointer to the types handled by 'GIMPLE_EH_FILTER'
     statement 'G'.

 -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g)
     Return the sequence of statement to execute when 'GIMPLE_EH_FILTER'
     statement fails.

 -- GIMPLE function: void gimple_eh_filter_set_types (geh_filter *g,
          tree types)
     Set 'TYPES' to be the set of types handled by 'GIMPLE_EH_FILTER'
     'G'.

 -- GIMPLE function: void gimple_eh_filter_set_failure (geh_filter *g,
          gimple_seq failure)
     Set 'FAILURE' to be the sequence of statements to execute on
     failure for 'GIMPLE_EH_FILTER' 'G'.

 -- GIMPLE function: tree gimple_eh_must_not_throw_fndecl ( geh_mnt
          *eh_mnt_stmt)
     Get the function decl to be called by the MUST_NOT_THROW region.

 -- GIMPLE function: void gimple_eh_must_not_throw_set_fndecl ( geh_mnt
          *eh_mnt_stmt, tree decl)
     Set the function decl to be called by GS to DECL.


File: gccint.info,  Node: GIMPLE_LABEL,  Next: GIMPLE_GOTO,  Prev: GIMPLE_EH_FILTER,  Up: Tuple specific accessors

11.8.9 'GIMPLE_LABEL'
---------------------

 -- GIMPLE function: glabel *gimple_build_label (tree label)
     Build a 'GIMPLE_LABEL' statement with corresponding to the tree
     label, 'LABEL'.

 -- GIMPLE function: tree gimple_label_label (const glabel *g)
     Return the 'LABEL_DECL' node used by 'GIMPLE_LABEL' statement 'G'.

 -- GIMPLE function: void gimple_label_set_label (glabel *g, tree label)
     Set 'LABEL' to be the 'LABEL_DECL' node used by 'GIMPLE_LABEL'
     statement 'G'.


File: gccint.info,  Node: GIMPLE_GOTO,  Next: GIMPLE_NOP,  Prev: GIMPLE_LABEL,  Up: Tuple specific accessors

11.8.10 'GIMPLE_GOTO'
---------------------

 -- GIMPLE function: ggoto *gimple_build_goto (tree dest)
     Build a 'GIMPLE_GOTO' statement to label 'DEST'.

 -- GIMPLE function: tree gimple_goto_dest (gimple g)
     Return the destination of the unconditional jump 'G'.

 -- GIMPLE function: void gimple_goto_set_dest (ggoto *g, tree dest)
     Set 'DEST' to be the destination of the unconditional jump 'G'.


File: gccint.info,  Node: GIMPLE_NOP,  Next: GIMPLE_OMP_ATOMIC_LOAD,  Prev: GIMPLE_GOTO,  Up: Tuple specific accessors

11.8.11 'GIMPLE_NOP'
--------------------

 -- GIMPLE function: gimple gimple_build_nop (void)
     Build a 'GIMPLE_NOP' statement.

 -- GIMPLE function: bool gimple_nop_p (gimple g)
     Returns 'TRUE' if statement 'G' is a 'GIMPLE_NOP'.


File: gccint.info,  Node: GIMPLE_OMP_ATOMIC_LOAD,  Next: GIMPLE_OMP_ATOMIC_STORE,  Prev: GIMPLE_NOP,  Up: Tuple specific accessors

11.8.12 'GIMPLE_OMP_ATOMIC_LOAD'
--------------------------------

 -- GIMPLE function: gomp_atomic_load *gimple_build_omp_atomic_load (
          tree lhs, tree rhs)
     Build a 'GIMPLE_OMP_ATOMIC_LOAD' statement.  'LHS' is the left-hand
     side of the assignment.  'RHS' is the right-hand side of the
     assignment.

 -- GIMPLE function: void gimple_omp_atomic_load_set_lhs (
          gomp_atomic_load *g, tree lhs)
     Set the 'LHS' of an atomic load.

 -- GIMPLE function: tree gimple_omp_atomic_load_lhs ( const
          gomp_atomic_load *g)
     Get the 'LHS' of an atomic load.

 -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (
          gomp_atomic_load *g, tree rhs)
     Set the 'RHS' of an atomic set.

 -- GIMPLE function: tree gimple_omp_atomic_load_rhs ( const
          gomp_atomic_load *g)
     Get the 'RHS' of an atomic set.


File: gccint.info,  Node: GIMPLE_OMP_ATOMIC_STORE,  Next: GIMPLE_OMP_CONTINUE,  Prev: GIMPLE_OMP_ATOMIC_LOAD,  Up: Tuple specific accessors

11.8.13 'GIMPLE_OMP_ATOMIC_STORE'
---------------------------------

 -- GIMPLE function: gomp_atomic_store *gimple_build_omp_atomic_store (
          tree val)
     Build a 'GIMPLE_OMP_ATOMIC_STORE' statement.  'VAL' is the value to
     be stored.

 -- GIMPLE function: void gimple_omp_atomic_store_set_val (
          gomp_atomic_store *g, tree val)
     Set the value being stored in an atomic store.

 -- GIMPLE function: tree gimple_omp_atomic_store_val ( const
          gomp_atomic_store *g)
     Return the value being stored in an atomic store.


File: gccint.info,  Node: GIMPLE_OMP_CONTINUE,  Next: GIMPLE_OMP_CRITICAL,  Prev: GIMPLE_OMP_ATOMIC_STORE,  Up: Tuple specific accessors

11.8.14 'GIMPLE_OMP_CONTINUE'
-----------------------------

 -- GIMPLE function: gomp_continue *gimple_build_omp_continue ( tree
          control_def, tree control_use)
     Build a 'GIMPLE_OMP_CONTINUE' statement.  'CONTROL_DEF' is the
     definition of the control variable.  'CONTROL_USE' is the use of
     the control variable.

 -- GIMPLE function: tree gimple_omp_continue_control_def ( const
          gomp_continue *s)
     Return the definition of the control variable on a
     'GIMPLE_OMP_CONTINUE' in 'S'.

 -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (
          gomp_continue *s)
     Same as above, but return the pointer.

 -- GIMPLE function: tree gimple_omp_continue_set_control_def (
          gomp_continue *s)
     Set the control variable definition for a 'GIMPLE_OMP_CONTINUE'
     statement in 'S'.

 -- GIMPLE function: tree gimple_omp_continue_control_use ( const
          gomp_continue *s)
     Return the use of the control variable on a 'GIMPLE_OMP_CONTINUE'
     in 'S'.

 -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (
          gomp_continue *s)
     Same as above, but return the pointer.

 -- GIMPLE function: tree gimple_omp_continue_set_control_use (
          gomp_continue *s)
     Set the control variable use for a 'GIMPLE_OMP_CONTINUE' statement
     in 'S'.


File: gccint.info,  Node: GIMPLE_OMP_CRITICAL,  Next: GIMPLE_OMP_FOR,  Prev: GIMPLE_OMP_CONTINUE,  Up: Tuple specific accessors

11.8.15 'GIMPLE_OMP_CRITICAL'
-----------------------------

 -- GIMPLE function: gomp_critical *gimple_build_omp_critical (
          gimple_seq body, tree name)
     Build a 'GIMPLE_OMP_CRITICAL' statement.  'BODY' is the sequence of
     statements for which only one thread can execute.  'NAME' is an
     optional identifier for this critical block.

 -- GIMPLE function: tree gimple_omp_critical_name ( const gomp_critical
          *g)
     Return the name associated with 'OMP_CRITICAL' statement 'G'.

 -- GIMPLE function: tree * gimple_omp_critical_name_ptr ( gomp_critical
          *g)
     Return a pointer to the name associated with 'OMP' critical
     statement 'G'.

 -- GIMPLE function: void gimple_omp_critical_set_name ( gomp_critical
          *g, tree name)
     Set 'NAME' to be the name associated with 'OMP' critical statement
     'G'.


File: gccint.info,  Node: GIMPLE_OMP_FOR,  Next: GIMPLE_OMP_MASTER,  Prev: GIMPLE_OMP_CRITICAL,  Up: Tuple specific accessors

11.8.16 'GIMPLE_OMP_FOR'
------------------------

 -- GIMPLE function: gomp_for *gimple_build_omp_for (gimple_seq body,
          tree clauses, tree index, tree initial, tree final, tree incr,
          gimple_seq pre_body, enum tree_code omp_for_cond)
     Build a 'GIMPLE_OMP_FOR' statement.  'BODY' is sequence of
     statements inside the for loop.  'CLAUSES', are any of the loop
     construct's clauses.  'PRE_BODY' is the sequence of statements that
     are loop invariant.  'INDEX' is the index variable.  'INITIAL' is
     the initial value of 'INDEX'.  'FINAL' is final value of 'INDEX'.
     OMP_FOR_COND is the predicate used to compare 'INDEX' and 'FINAL'.
     'INCR' is the increment expression.

 -- GIMPLE function: tree gimple_omp_for_clauses (gimple g)
     Return the clauses associated with 'OMP_FOR' 'G'.

 -- GIMPLE function: tree * gimple_omp_for_clauses_ptr (gimple g)
     Return a pointer to the 'OMP_FOR' 'G'.

 -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree
          clauses)
     Set 'CLAUSES' to be the list of clauses associated with 'OMP_FOR'
     'G'.

 -- GIMPLE function: tree gimple_omp_for_index (gimple g)
     Return the index variable for 'OMP_FOR' 'G'.

 -- GIMPLE function: tree * gimple_omp_for_index_ptr (gimple g)
     Return a pointer to the index variable for 'OMP_FOR' 'G'.

 -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree
          index)
     Set 'INDEX' to be the index variable for 'OMP_FOR' 'G'.

 -- GIMPLE function: tree gimple_omp_for_initial (gimple g)
     Return the initial value for 'OMP_FOR' 'G'.

 -- GIMPLE function: tree * gimple_omp_for_initial_ptr (gimple g)
     Return a pointer to the initial value for 'OMP_FOR' 'G'.

 -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree
          initial)
     Set 'INITIAL' to be the initial value for 'OMP_FOR' 'G'.

 -- GIMPLE function: tree gimple_omp_for_final (gimple g)
     Return the final value for 'OMP_FOR' 'G'.

 -- GIMPLE function: tree * gimple_omp_for_final_ptr (gimple g)
     turn a pointer to the final value for 'OMP_FOR' 'G'.

 -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree
          final)
     Set 'FINAL' to be the final value for 'OMP_FOR' 'G'.

 -- GIMPLE function: tree gimple_omp_for_incr (gimple g)
     Return the increment value for 'OMP_FOR' 'G'.

 -- GIMPLE function: tree * gimple_omp_for_incr_ptr (gimple g)
     Return a pointer to the increment value for 'OMP_FOR' 'G'.

 -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr)
     Set 'INCR' to be the increment value for 'OMP_FOR' 'G'.

 -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g)
     Return the sequence of statements to execute before the 'OMP_FOR'
     statement 'G' starts.

 -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g,
          gimple_seq pre_body)
     Set 'PRE_BODY' to be the sequence of statements to execute before
     the 'OMP_FOR' statement 'G' starts.

 -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum
          tree_code cond)
     Set 'COND' to be the condition code for 'OMP_FOR' 'G'.

 -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g)
     Return the condition code associated with 'OMP_FOR' 'G'.


File: gccint.info,  Node: GIMPLE_OMP_MASTER,  Next: GIMPLE_OMP_ORDERED,  Prev: GIMPLE_OMP_FOR,  Up: Tuple specific accessors

11.8.17 'GIMPLE_OMP_MASTER'
---------------------------

 -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body)
     Build a 'GIMPLE_OMP_MASTER' statement.  'BODY' is the sequence of
     statements to be executed by just the master.


File: gccint.info,  Node: GIMPLE_OMP_ORDERED,  Next: GIMPLE_OMP_PARALLEL,  Prev: GIMPLE_OMP_MASTER,  Up: Tuple specific accessors

11.8.18 'GIMPLE_OMP_ORDERED'
----------------------------

 -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body)
     Build a 'GIMPLE_OMP_ORDERED' statement.

 'BODY' is the sequence of statements inside a loop that will executed
in sequence.


File: gccint.info,  Node: GIMPLE_OMP_PARALLEL,  Next: GIMPLE_OMP_RETURN,  Prev: GIMPLE_OMP_ORDERED,  Up: Tuple specific accessors

11.8.19 'GIMPLE_OMP_PARALLEL'
-----------------------------

 -- GIMPLE function: gomp_parallel *gimple_build_omp_parallel
          (gimple_seq body, tree clauses, tree child_fn, tree data_arg)
     Build a 'GIMPLE_OMP_PARALLEL' statement.

 'BODY' is sequence of statements which are executed in parallel.
'CLAUSES', are the 'OMP' parallel construct's clauses.  'CHILD_FN' is
the function created for the parallel threads to execute.  'DATA_ARG'
are the shared data argument(s).

 -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g)
     Return true if 'OMP' parallel statement 'G' has the
     'GF_OMP_PARALLEL_COMBINED' flag set.

 -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g)
     Set the 'GF_OMP_PARALLEL_COMBINED' field in 'OMP' parallel
     statement 'G'.

 -- GIMPLE function: gimple_seq gimple_omp_body (gimple g)
     Return the body for the 'OMP' statement 'G'.

 -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq
          body)
     Set 'BODY' to be the body for the 'OMP' statement 'G'.

 -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g)
     Return the clauses associated with 'OMP_PARALLEL' 'G'.

 -- GIMPLE function: tree * gimple_omp_parallel_clauses_ptr (
          gomp_parallel *g)
     Return a pointer to the clauses associated with 'OMP_PARALLEL' 'G'.

 -- GIMPLE function: void gimple_omp_parallel_set_clauses (
          gomp_parallel *g, tree clauses)
     Set 'CLAUSES' to be the list of clauses associated with
     'OMP_PARALLEL' 'G'.

 -- GIMPLE function: tree gimple_omp_parallel_child_fn ( const
          gomp_parallel *g)
     Return the child function used to hold the body of 'OMP_PARALLEL'
     'G'.

 -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr (
          gomp_parallel *g)
     Return a pointer to the child function used to hold the body of
     'OMP_PARALLEL' 'G'.

 -- GIMPLE function: void gimple_omp_parallel_set_child_fn (
          gomp_parallel *g, tree child_fn)
     Set 'CHILD_FN' to be the child function for 'OMP_PARALLEL' 'G'.

 -- GIMPLE function: tree gimple_omp_parallel_data_arg ( const
          gomp_parallel *g)
     Return the artificial argument used to send variables and values
     from the parent to the children threads in 'OMP_PARALLEL' 'G'.

 -- GIMPLE function: tree * gimple_omp_parallel_data_arg_ptr (
          gomp_parallel *g)
     Return a pointer to the data argument for 'OMP_PARALLEL' 'G'.

 -- GIMPLE function: void gimple_omp_parallel_set_data_arg (
          gomp_parallel *g, tree data_arg)
     Set 'DATA_ARG' to be the data argument for 'OMP_PARALLEL' 'G'.


File: gccint.info,  Node: GIMPLE_OMP_RETURN,  Next: GIMPLE_OMP_SECTION,  Prev: GIMPLE_OMP_PARALLEL,  Up: Tuple specific accessors

11.8.20 'GIMPLE_OMP_RETURN'
---------------------------

 -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p)
     Build a 'GIMPLE_OMP_RETURN' statement.  'WAIT_P' is true if this is
     a non-waiting return.

 -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s)
     Set the nowait flag on 'GIMPLE_OMP_RETURN' statement 'S'.

 -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g)
     Return true if 'OMP' return statement 'G' has the
     'GF_OMP_RETURN_NOWAIT' flag set.


File: gccint.info,  Node: GIMPLE_OMP_SECTION,  Next: GIMPLE_OMP_SECTIONS,  Prev: GIMPLE_OMP_RETURN,  Up: Tuple specific accessors

11.8.21 'GIMPLE_OMP_SECTION'
----------------------------

 -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body)
     Build a 'GIMPLE_OMP_SECTION' statement for a sections statement.

 'BODY' is the sequence of statements in the section.

 -- GIMPLE function: bool gimple_omp_section_last_p (gimple g)
     Return true if 'OMP' section statement 'G' has the
     'GF_OMP_SECTION_LAST' flag set.

 -- GIMPLE function: void gimple_omp_section_set_last (gimple g)
     Set the 'GF_OMP_SECTION_LAST' flag on 'G'.


File: gccint.info,  Node: GIMPLE_OMP_SECTIONS,  Next: GIMPLE_OMP_SINGLE,  Prev: GIMPLE_OMP_SECTION,  Up: Tuple specific accessors

11.8.22 'GIMPLE_OMP_SECTIONS'
-----------------------------

 -- GIMPLE function: gomp_sections *gimple_build_omp_sections (
          gimple_seq body, tree clauses)
     Build a 'GIMPLE_OMP_SECTIONS' statement.  'BODY' is a sequence of
     section statements.  'CLAUSES' are any of the 'OMP' sections
     construct's clauses: private, firstprivate, lastprivate, reduction,
     and nowait.

 -- GIMPLE function: gimple gimple_build_omp_sections_switch (void)
     Build a 'GIMPLE_OMP_SECTIONS_SWITCH' statement.

 -- GIMPLE function: tree gimple_omp_sections_control (gimple g)
     Return the control variable associated with the
     'GIMPLE_OMP_SECTIONS' in 'G'.

 -- GIMPLE function: tree * gimple_omp_sections_control_ptr (gimple g)
     Return a pointer to the clauses associated with the
     'GIMPLE_OMP_SECTIONS' in 'G'.

 -- GIMPLE function: void gimple_omp_sections_set_control (gimple g,
          tree control)
     Set 'CONTROL' to be the set of clauses associated with the
     'GIMPLE_OMP_SECTIONS' in 'G'.

 -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g)
     Return the clauses associated with 'OMP_SECTIONS' 'G'.

 -- GIMPLE function: tree * gimple_omp_sections_clauses_ptr (gimple g)
     Return a pointer to the clauses associated with 'OMP_SECTIONS' 'G'.

 -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g,
          tree clauses)
     Set 'CLAUSES' to be the set of clauses associated with
     'OMP_SECTIONS' 'G'.


File: gccint.info,  Node: GIMPLE_OMP_SINGLE,  Next: GIMPLE_PHI,  Prev: GIMPLE_OMP_SECTIONS,  Up: Tuple specific accessors

11.8.23 'GIMPLE_OMP_SINGLE'
---------------------------

 -- GIMPLE function: gomp_single *gimple_build_omp_single ( gimple_seq
          body, tree clauses)
     Build a 'GIMPLE_OMP_SINGLE' statement.  'BODY' is the sequence of
     statements that will be executed once.  'CLAUSES' are any of the
     'OMP' single construct's clauses: private, firstprivate,
     copyprivate, nowait.

 -- GIMPLE function: tree gimple_omp_single_clauses (gimple g)
     Return the clauses associated with 'OMP_SINGLE' 'G'.

 -- GIMPLE function: tree * gimple_omp_single_clauses_ptr (gimple g)
     Return a pointer to the clauses associated with 'OMP_SINGLE' 'G'.

 -- GIMPLE function: void gimple_omp_single_set_clauses ( gomp_single
          *g, tree clauses)
     Set 'CLAUSES' to be the clauses associated with 'OMP_SINGLE' 'G'.


File: gccint.info,  Node: GIMPLE_PHI,  Next: GIMPLE_RESX,  Prev: GIMPLE_OMP_SINGLE,  Up: Tuple specific accessors

11.8.24 'GIMPLE_PHI'
--------------------

 -- GIMPLE function: unsigned gimple_phi_capacity (gimple g)
     Return the maximum number of arguments supported by 'GIMPLE_PHI'
     'G'.

 -- GIMPLE function: unsigned gimple_phi_num_args (gimple g)
     Return the number of arguments in 'GIMPLE_PHI' 'G'.  This must
     always be exactly the number of incoming edges for the basic block
     holding 'G'.

 -- GIMPLE function: tree gimple_phi_result (gimple g)
     Return the 'SSA' name created by 'GIMPLE_PHI' 'G'.

 -- GIMPLE function: tree * gimple_phi_result_ptr (gimple g)
     Return a pointer to the 'SSA' name created by 'GIMPLE_PHI' 'G'.

 -- GIMPLE function: void gimple_phi_set_result (gphi *g, tree result)
     Set 'RESULT' to be the 'SSA' name created by 'GIMPLE_PHI' 'G'.

 -- GIMPLE function: struct phi_arg_d * gimple_phi_arg (gimple g, index)
     Return the 'PHI' argument corresponding to incoming edge 'INDEX'
     for 'GIMPLE_PHI' 'G'.

 -- GIMPLE function: void gimple_phi_set_arg (gphi *g, index, struct
          phi_arg_d * phiarg)
     Set 'PHIARG' to be the argument corresponding to incoming edge
     'INDEX' for 'GIMPLE_PHI' 'G'.


File: gccint.info,  Node: GIMPLE_RESX,  Next: GIMPLE_RETURN,  Prev: GIMPLE_PHI,  Up: Tuple specific accessors

11.8.25 'GIMPLE_RESX'
---------------------

 -- GIMPLE function: gresx *gimple_build_resx (int region)
     Build a 'GIMPLE_RESX' statement which is a statement.  This
     statement is a placeholder for _Unwind_Resume before we know if a
     function call or a branch is needed.  'REGION' is the exception
     region from which control is flowing.

 -- GIMPLE function: int gimple_resx_region (const gresx *g)
     Return the region number for 'GIMPLE_RESX' 'G'.

 -- GIMPLE function: void gimple_resx_set_region (gresx *g, int region)
     Set 'REGION' to be the region number for 'GIMPLE_RESX' 'G'.


File: gccint.info,  Node: GIMPLE_RETURN,  Next: GIMPLE_SWITCH,  Prev: GIMPLE_RESX,  Up: Tuple specific accessors

11.8.26 'GIMPLE_RETURN'
-----------------------

 -- GIMPLE function: greturn *gimple_build_return (tree retval)
     Build a 'GIMPLE_RETURN' statement whose return value is retval.

 -- GIMPLE function: tree gimple_return_retval (const greturn *g)
     Return the return value for 'GIMPLE_RETURN' 'G'.

 -- GIMPLE function: void gimple_return_set_retval (greturn *g, tree
          retval)
     Set 'RETVAL' to be the return value for 'GIMPLE_RETURN' 'G'.


File: gccint.info,  Node: GIMPLE_SWITCH,  Next: GIMPLE_TRY,  Prev: GIMPLE_RETURN,  Up: Tuple specific accessors

11.8.27 'GIMPLE_SWITCH'
-----------------------

 -- GIMPLE function: gswitch *gimple_build_switch (tree index, tree
          default_label, 'vec'<tree> *args)
     Build a 'GIMPLE_SWITCH' statement.  'INDEX' is the index variable
     to switch on, and 'DEFAULT_LABEL' represents the default label.
     'ARGS' is a vector of 'CASE_LABEL_EXPR' trees that contain the
     non-default case labels.  Each label is a tree of code
     'CASE_LABEL_EXPR'.

 -- GIMPLE function: unsigned gimple_switch_num_labels ( const gswitch
          *g)
     Return the number of labels associated with the switch statement
     'G'.

 -- GIMPLE function: void gimple_switch_set_num_labels (gswitch *g,
          unsigned nlabels)
     Set 'NLABELS' to be the number of labels for the switch statement
     'G'.

 -- GIMPLE function: tree gimple_switch_index (const gswitch *g)
     Return the index variable used by the switch statement 'G'.

 -- GIMPLE function: void gimple_switch_set_index (gswitch *g, tree
          index)
     Set 'INDEX' to be the index variable for switch statement 'G'.

 -- GIMPLE function: tree gimple_switch_label (const gswitch *g,
          unsigned index)
     Return the label numbered 'INDEX'.  The default label is 0,
     followed by any labels in a switch statement.

 -- GIMPLE function: void gimple_switch_set_label (gswitch *g, unsigned
          index, tree label)
     Set the label number 'INDEX' to 'LABEL'.  0 is always the default
     label.

 -- GIMPLE function: tree gimple_switch_default_label ( const gswitch
          *g)
     Return the default label for a switch statement.

 -- GIMPLE function: void gimple_switch_set_default_label (gswitch *g,
          tree label)
     Set the default label for a switch statement.


File: gccint.info,  Node: GIMPLE_TRY,  Next: GIMPLE_WITH_CLEANUP_EXPR,  Prev: GIMPLE_SWITCH,  Up: Tuple specific accessors

11.8.28 'GIMPLE_TRY'
--------------------

 -- GIMPLE function: gtry *gimple_build_try (gimple_seq eval, gimple_seq
          cleanup, unsigned int kind)
     Build a 'GIMPLE_TRY' statement.  'EVAL' is a sequence with the
     expression to evaluate.  'CLEANUP' is a sequence of statements to
     run at clean-up time.  'KIND' is the enumeration value
     'GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct
     or 'GIMPLE_TRY_FINALLY' if this statement denotes a try/finally
     construct.

 -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g)
     Return the kind of try block represented by 'GIMPLE_TRY' 'G'.  This
     is either 'GIMPLE_TRY_CATCH' or 'GIMPLE_TRY_FINALLY'.

 -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g)
     Return the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag.

 -- GIMPLE function: gimple_seq gimple_try_eval (gimple g)
     Return the sequence of statements used as the body for 'GIMPLE_TRY'
     'G'.

 -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g)
     Return the sequence of statements used as the cleanup body for
     'GIMPLE_TRY' 'G'.

 -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g,
          bool catch_is_cleanup)
     Set the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag.

 -- GIMPLE function: void gimple_try_set_eval (gtry *g, gimple_seq eval)
     Set 'EVAL' to be the sequence of statements to use as the body for
     'GIMPLE_TRY' 'G'.

 -- GIMPLE function: void gimple_try_set_cleanup (gtry *g, gimple_seq
          cleanup)
     Set 'CLEANUP' to be the sequence of statements to use as the
     cleanup body for 'GIMPLE_TRY' 'G'.


File: gccint.info,  Node: GIMPLE_WITH_CLEANUP_EXPR,  Prev: GIMPLE_TRY,  Up: Tuple specific accessors

11.8.29 'GIMPLE_WITH_CLEANUP_EXPR'
----------------------------------

 -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup)
     Build a 'GIMPLE_WITH_CLEANUP_EXPR' statement.  'CLEANUP' is the
     clean-up expression.

 -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g)
     Return the cleanup sequence for cleanup statement 'G'.

 -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq
          cleanup)
     Set 'CLEANUP' to be the cleanup sequence for 'G'.

 -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g)
     Return the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple.

 -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g, bool
          eh_only_p)
     Set the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple.


File: gccint.info,  Node: GIMPLE sequences,  Next: Sequence iterators,  Prev: Tuple specific accessors,  Up: GIMPLE

11.9 GIMPLE sequences
=====================

GIMPLE sequences are the tuple equivalent of 'STATEMENT_LIST''s used in
'GENERIC'.  They are used to chain statements together, and when used in
conjunction with sequence iterators, provide a framework for iterating
through statements.

 GIMPLE sequences are of type struct 'gimple_sequence', but are more
commonly passed by reference to functions dealing with sequences.  The
type for a sequence pointer is 'gimple_seq' which is the same as struct
'gimple_sequence' *.  When declaring a local sequence, you can define a
local variable of type struct 'gimple_sequence'.  When declaring a
sequence allocated on the garbage collected heap, use the function
'gimple_seq_alloc' documented below.

 There are convenience functions for iterating through sequences in the
section entitled Sequence Iterators.

 Below is a list of functions to manipulate and query sequences.

 -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple
          g)
     Link a gimple statement to the end of the sequence *'SEQ' if 'G' is
     not 'NULL'.  If *'SEQ' is 'NULL', allocate a sequence before
     linking.

 -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest,
          gimple_seq src)
     Append sequence 'SRC' to the end of sequence *'DEST' if 'SRC' is
     not 'NULL'.  If *'DEST' is 'NULL', allocate a new sequence before
     appending.

 -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src)
     Perform a deep copy of sequence 'SRC' and return the result.

 -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq)
     Reverse the order of the statements in the sequence 'SEQ'.  Return
     'SEQ'.

 -- GIMPLE function: gimple gimple_seq_first (gimple_seq s)
     Return the first statement in sequence 'S'.

 -- GIMPLE function: gimple gimple_seq_last (gimple_seq s)
     Return the last statement in sequence 'S'.

 -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple
          last)
     Set the last statement in sequence 'S' to the statement in 'LAST'.

 -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple
          first)
     Set the first statement in sequence 'S' to the statement in
     'FIRST'.

 -- GIMPLE function: void gimple_seq_init (gimple_seq s)
     Initialize sequence 'S' to an empty sequence.

 -- GIMPLE function: gimple_seq gimple_seq_alloc (void)
     Allocate a new sequence in the garbage collected store and return
     it.

 -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq
          src)
     Copy the sequence 'SRC' into the sequence 'DEST'.

 -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s)
     Return true if the sequence 'S' is empty.

 -- GIMPLE function: gimple_seq bb_seq (basic_block bb)
     Returns the sequence of statements in 'BB'.

 -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq)
     Sets the sequence of statements in 'BB' to 'SEQ'.

 -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq)
     Determine whether 'SEQ' contains exactly one statement.


File: gccint.info,  Node: Sequence iterators,  Next: Adding a new GIMPLE statement code,  Prev: GIMPLE sequences,  Up: GIMPLE

11.10 Sequence iterators
========================

Sequence iterators are convenience constructs for iterating through
statements in a sequence.  Given a sequence 'SEQ', here is a typical use
of gimple sequence iterators:

     gimple_stmt_iterator gsi;

     for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi))
       {
         gimple g = gsi_stmt (gsi);
         /* Do something with gimple statement G.  */
       }

 Backward iterations are possible:

             for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi))

 Forward and backward iterations on basic blocks are possible with
'gsi_start_bb' and 'gsi_last_bb'.

 In the documentation below we sometimes refer to enum
'gsi_iterator_update'.  The valid options for this enumeration are:

   * 'GSI_NEW_STMT' Only valid when a single statement is added.  Move
     the iterator to it.

   * 'GSI_SAME_STMT' Leave the iterator at the same statement.

   * 'GSI_CONTINUE_LINKING' Move iterator to whatever position is
     suitable for linking other statements in the same direction.

 Below is a list of the functions used to manipulate and use statement
iterators.

 -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq)
     Return a new iterator pointing to the sequence 'SEQ''s first
     statement.  If 'SEQ' is empty, the iterator's basic block is
     'NULL'.  Use 'gsi_start_bb' instead when the iterator needs to
     always have the correct basic block set.

 -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb)
     Return a new iterator pointing to the first statement in basic
     block 'BB'.

 -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq)
     Return a new iterator initially pointing to the last statement of
     sequence 'SEQ'.  If 'SEQ' is empty, the iterator's basic block is
     'NULL'.  Use 'gsi_last_bb' instead when the iterator needs to
     always have the correct basic block set.

 -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb)
     Return a new iterator pointing to the last statement in basic block
     'BB'.

 -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i)
     Return 'TRUE' if at the end of 'I'.

 -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i)
     Return 'TRUE' if we're one statement before the end of 'I'.

 -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i)
     Advance the iterator to the next gimple statement.

 -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i)
     Advance the iterator to the previous gimple statement.

 -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i)
     Return the current stmt.

 -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block
          bb)
     Return a block statement iterator that points to the first
     non-label statement in block 'BB'.

 -- GIMPLE function: gimple * gsi_stmt_ptr (gimple_stmt_iterator *i)
     Return a pointer to the current stmt.

 -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i)
     Return the basic block associated with this iterator.

 -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i)
     Return the sequence associated with this iterator.

 -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool
          remove_eh_info)
     Remove the current stmt from the sequence.  The iterator is updated
     to point to the next statement.  When 'REMOVE_EH_INFO' is true we
     remove the statement pointed to by iterator 'I' from the 'EH'
     tables.  Otherwise we do not modify the 'EH' tables.  Generally,
     'REMOVE_EH_INFO' should be true when the statement is going to be
     removed from the 'IL' and not reinserted elsewhere.

 -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i,
          gimple_seq seq, enum gsi_iterator_update mode)
     Links the sequence of statements 'SEQ' before the statement pointed
     by iterator 'I'.  'MODE' indicates what to do with the iterator
     after insertion (see 'enum gsi_iterator_update' above).

 -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i,
          gimple g, enum gsi_iterator_update mode)
     Links statement 'G' before the statement pointed-to by iterator
     'I'.  Updates iterator 'I' according to 'MODE'.

 -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i,
          gimple_seq seq, enum gsi_iterator_update mode)
     Links sequence 'SEQ' after the statement pointed-to by iterator
     'I'.  'MODE' is as in 'gsi_insert_after'.

 -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i,
          gimple g, enum gsi_iterator_update mode)
     Links statement 'G' after the statement pointed-to by iterator 'I'.
     'MODE' is as in 'gsi_insert_after'.

 -- GIMPLE function: gimple_seq gsi_split_seq_after
          (gimple_stmt_iterator i)
     Move all statements in the sequence after 'I' to a new sequence.
     Return this new sequence.

 -- GIMPLE function: gimple_seq gsi_split_seq_before
          (gimple_stmt_iterator *i)
     Move all statements in the sequence before 'I' to a new sequence.
     Return this new sequence.

 -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple
          stmt, bool update_eh_info)
     Replace the statement pointed-to by 'I' to 'STMT'.  If
     'UPDATE_EH_INFO' is true, the exception handling information of the
     original statement is moved to the new statement.

 -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i,
          gimple stmt, enum gsi_iterator_update mode)
     Insert statement 'STMT' before the statement pointed-to by iterator
     'I', update 'STMT''s basic block and scan it for new operands.
     'MODE' specifies how to update iterator 'I' after insertion (see
     enum 'gsi_iterator_update').

 -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator
          *i, gimple_seq seq, enum gsi_iterator_update mode)
     Like 'gsi_insert_before', but for all the statements in 'SEQ'.

 -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i,
          gimple stmt, enum gsi_iterator_update mode)
     Insert statement 'STMT' after the statement pointed-to by iterator
     'I', update 'STMT''s basic block and scan it for new operands.
     'MODE' specifies how to update iterator 'I' after insertion (see
     enum 'gsi_iterator_update').

 -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator *i,
          gimple_seq seq, enum gsi_iterator_update mode)
     Like 'gsi_insert_after', but for all the statements in 'SEQ'.

 -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt)
     Finds iterator for 'STMT'.

 -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from,
          gimple_stmt_iterator *to)
     Move the statement at 'FROM' so it comes right after the statement
     at 'TO'.

 -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from,
          gimple_stmt_iterator *to)
     Move the statement at 'FROM' so it comes right before the statement
     at 'TO'.

 -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator
          *from, basic_block bb)
     Move the statement at 'FROM' to the end of basic block 'BB'.

 -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt)
     Add 'STMT' to the pending list of edge 'E'.  No actual insertion is
     made until a call to 'gsi_commit_edge_inserts'() is made.

 -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq
          seq)
     Add the sequence of statements in 'SEQ' to the pending list of edge
     'E'.  No actual insertion is made until a call to
     'gsi_commit_edge_inserts'() is made.

 -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e,
          gimple stmt)
     Similar to 'gsi_insert_on_edge'+'gsi_commit_edge_inserts'.  If a
     new block has to be created, it is returned.

 -- GIMPLE function: void gsi_commit_one_edge_insert (edge e,
          basic_block *new_bb)
     Commit insertions pending at edge 'E'.  If a new block is created,
     set 'NEW_BB' to this block, otherwise set it to 'NULL'.

 -- GIMPLE function: void gsi_commit_edge_inserts (void)
     This routine will commit all pending edge insertions, creating any
     new basic blocks which are necessary.


File: gccint.info,  Node: Adding a new GIMPLE statement code,  Next: Statement and operand traversals,  Prev: Sequence iterators,  Up: GIMPLE

11.11 Adding a new GIMPLE statement code
========================================

The first step in adding a new GIMPLE statement code, is modifying the
file 'gimple.def', which contains all the GIMPLE codes.  Then you must
add a corresponding gimple subclass located in 'gimple.h'.  This in
turn, will require you to add a corresponding 'GTY' tag in
'gsstruct.def', and code to handle this tag in 'gss_for_code' which is
located in 'gimple.c'.

 In order for the garbage collector to know the size of the structure
you created in 'gimple.h', you need to add a case to handle your new
GIMPLE statement in 'gimple_size' which is located in 'gimple.c'.

 You will probably want to create a function to build the new gimple
statement in 'gimple.c'.  The function should be called
'gimple_build_NEW-TUPLE-NAME', and should return the new tuple as a
pointer to the appropriate gimple subclass.

 If your new statement requires accessors for any members or operands it
may have, put simple inline accessors in 'gimple.h' and any non-trivial
accessors in 'gimple.c' with a corresponding prototype in 'gimple.h'.

 You should add the new statement subclass to the class hierarchy
diagram in 'gimple.texi'.


File: gccint.info,  Node: Statement and operand traversals,  Prev: Adding a new GIMPLE statement code,  Up: GIMPLE

11.12 Statement and operand traversals
======================================

There are two functions available for walking statements and sequences:
'walk_gimple_stmt' and 'walk_gimple_seq', accordingly, and a third
function for walking the operands in a statement: 'walk_gimple_op'.

 -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi,
          walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct
          walk_stmt_info *wi)
     This function is used to walk the current statement in 'GSI',
     optionally using traversal state stored in 'WI'.  If 'WI' is
     'NULL', no state is kept during the traversal.

     The callback 'CALLBACK_STMT' is called.  If 'CALLBACK_STMT' returns
     true, it means that the callback function has handled all the
     operands of the statement and it is not necessary to walk its
     operands.

     If 'CALLBACK_STMT' is 'NULL' or it returns false, 'CALLBACK_OP' is
     called on each operand of the statement via 'walk_gimple_op'.  If
     'walk_gimple_op' returns non-'NULL' for any operand, the remaining
     operands are not scanned.

     The return value is that returned by the last call to
     'walk_gimple_op', or 'NULL_TREE' if no 'CALLBACK_OP' is specified.

 -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn
          callback_op, struct walk_stmt_info *wi)
     Use this function to walk the operands of statement 'STMT'.  Every
     operand is walked via 'walk_tree' with optional state information
     in 'WI'.

     'CALLBACK_OP' is called on each operand of 'STMT' via 'walk_tree'.
     Additional parameters to 'walk_tree' must be stored in 'WI'.  For
     each operand 'OP', 'walk_tree' is called as:

          walk_tree (&OP, CALLBACK_OP, WI, PSET)

     If 'CALLBACK_OP' returns non-'NULL' for an operand, the remaining
     operands are not scanned.  The return value is that returned by the
     last call to 'walk_tree', or 'NULL_TREE' if no 'CALLBACK_OP' is
     specified.

 -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn
          callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info
          *wi)
     This function walks all the statements in the sequence 'SEQ'
     calling 'walk_gimple_stmt' on each one.  'WI' is as in
     'walk_gimple_stmt'.  If 'walk_gimple_stmt' returns non-'NULL', the
     walk is stopped and the value returned.  Otherwise, all the
     statements are walked and 'NULL_TREE' returned.


File: gccint.info,  Node: Tree SSA,  Next: RTL,  Prev: GIMPLE,  Up: Top

12 Analysis and Optimization of GIMPLE tuples
*********************************************

GCC uses three main intermediate languages to represent the program
during compilation: GENERIC, GIMPLE and RTL.  GENERIC is a
language-independent representation generated by each front end.  It is
used to serve as an interface between the parser and optimizer.  GENERIC
is a common representation that is able to represent programs written in
all the languages supported by GCC.

 GIMPLE and RTL are used to optimize the program.  GIMPLE is used for
target and language independent optimizations (e.g., inlining, constant
propagation, tail call elimination, redundancy elimination, etc).  Much
like GENERIC, GIMPLE is a language independent, tree based
representation.  However, it differs from GENERIC in that the GIMPLE
grammar is more restrictive: expressions contain no more than 3 operands
(except function calls), it has no control flow structures and
expressions with side-effects are only allowed on the right hand side of
assignments.  See the chapter describing GENERIC and GIMPLE for more
details.

 This chapter describes the data structures and functions used in the
GIMPLE optimizers (also known as "tree optimizers" or "middle end").  In
particular, it focuses on all the macros, data structures, functions and
programming constructs needed to implement optimization passes for
GIMPLE.

* Menu:

* Annotations::         Attributes for variables.
* SSA Operands::        SSA names referenced by GIMPLE statements.
* SSA::                 Static Single Assignment representation.
* Alias analysis::      Representing aliased loads and stores.
* Memory model::        Memory model used by the middle-end.


File: gccint.info,  Node: Annotations,  Next: SSA Operands,  Up: Tree SSA

12.1 Annotations
================

The optimizers need to associate attributes with variables during the
optimization process.  For instance, we need to know whether a variable
has aliases.  All these attributes are stored in data structures called
annotations which are then linked to the field 'ann' in 'struct
tree_common'.


File: gccint.info,  Node: SSA Operands,  Next: SSA,  Prev: Annotations,  Up: Tree SSA

12.2 SSA Operands
=================

Almost every GIMPLE statement will contain a reference to a variable or
memory location.  Since statements come in different shapes and sizes,
their operands are going to be located at various spots inside the
statement's tree.  To facilitate access to the statement's operands,
they are organized into lists associated inside each statement's
annotation.  Each element in an operand list is a pointer to a
'VAR_DECL', 'PARM_DECL' or 'SSA_NAME' tree node.  This provides a very
convenient way of examining and replacing operands.

 Data flow analysis and optimization is done on all tree nodes
representing variables.  Any node for which 'SSA_VAR_P' returns nonzero
is considered when scanning statement operands.  However, not all
'SSA_VAR_P' variables are processed in the same way.  For the purposes
of optimization, we need to distinguish between references to local
scalar variables and references to globals, statics, structures, arrays,
aliased variables, etc.  The reason is simple, the compiler can gather
complete data flow information for a local scalar.  On the other hand, a
global variable may be modified by a function call, it may not be
possible to keep track of all the elements of an array or the fields of
a structure, etc.

 The operand scanner gathers two kinds of operands: "real" and
"virtual".  An operand for which 'is_gimple_reg' returns true is
considered real, otherwise it is a virtual operand.  We also distinguish
between uses and definitions.  An operand is used if its value is loaded
by the statement (e.g., the operand at the RHS of an assignment).  If
the statement assigns a new value to the operand, the operand is
considered a definition (e.g., the operand at the LHS of an assignment).

 Virtual and real operands also have very different data flow
properties.  Real operands are unambiguous references to the full object
that they represent.  For instance, given

     {
       int a, b;
       a = b
     }

 Since 'a' and 'b' are non-aliased locals, the statement 'a = b' will
have one real definition and one real use because variable 'a' is
completely modified with the contents of variable 'b'.  Real definition
are also known as "killing definitions".  Similarly, the use of 'b'
reads all its bits.

 In contrast, virtual operands are used with variables that can have a
partial or ambiguous reference.  This includes structures, arrays,
globals, and aliased variables.  In these cases, we have two types of
definitions.  For globals, structures, and arrays, we can determine from
a statement whether a variable of these types has a killing definition.
If the variable does, then the statement is marked as having a "must
definition" of that variable.  However, if a statement is only defining
a part of the variable (i.e. a field in a structure), or if we know that
a statement might define the variable but we cannot say for sure, then
we mark that statement as having a "may definition".  For instance,
given

     {
       int a, b, *p;

       if (...)
         p = &a;
       else
         p = &b;
       *p = 5;
       return *p;
     }

 The assignment '*p = 5' may be a definition of 'a' or 'b'.  If we
cannot determine statically where 'p' is pointing to at the time of the
store operation, we create virtual definitions to mark that statement as
a potential definition site for 'a' and 'b'.  Memory loads are similarly
marked with virtual use operands.  Virtual operands are shown in tree
dumps right before the statement that contains them.  To request a tree
dump with virtual operands, use the '-vops' option to '-fdump-tree':

     {
       int a, b, *p;

       if (...)
         p = &a;
       else
         p = &b;
       # a = VDEF <a>
       # b = VDEF <b>
       *p = 5;

       # VUSE <a>
       # VUSE <b>
       return *p;
     }

 Notice that 'VDEF' operands have two copies of the referenced variable.
This indicates that this is not a killing definition of that variable.
In this case we refer to it as a "may definition" or "aliased store".
The presence of the second copy of the variable in the 'VDEF' operand
will become important when the function is converted into SSA form.
This will be used to link all the non-killing definitions to prevent
optimizations from making incorrect assumptions about them.

 Operands are updated as soon as the statement is finished via a call to
'update_stmt'.  If statement elements are changed via 'SET_USE' or
'SET_DEF', then no further action is required (i.e., those macros take
care of updating the statement).  If changes are made by manipulating
the statement's tree directly, then a call must be made to 'update_stmt'
when complete.  Calling one of the 'bsi_insert' routines or
'bsi_replace' performs an implicit call to 'update_stmt'.

12.2.1 Operand Iterators And Access Routines
--------------------------------------------

Operands are collected by 'tree-ssa-operands.c'.  They are stored inside
each statement's annotation and can be accessed through either the
operand iterators or an access routine.

 The following access routines are available for examining operands:

  1. 'SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return
     NULL unless there is exactly one operand matching the specified
     flags.  If there is exactly one operand, the operand is returned as
     either a 'tree', 'def_operand_p', or 'use_operand_p'.

          tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags);
          use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES);
          def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS);

  2. 'ZERO_SSA_OPERANDS': This macro returns true if there are no
     operands matching the specified flags.

          if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS))
            return;

  3. 'NUM_SSA_OPERANDS': This macro Returns the number of operands
     matching 'flags'.  This actually executes a loop to perform the
     count, so only use this if it is really needed.

          int count = NUM_SSA_OPERANDS (stmt, flags)

 If you wish to iterate over some or all operands, use the
'FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator.  For example, to print
all the operands for a statement:

     void
     print_ops (tree stmt)
     {
       ssa_op_iter;
       tree var;

       FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS)
         print_generic_expr (stderr, var, TDF_SLIM);
     }

 How to choose the appropriate iterator:

  1. Determine whether you are need to see the operand pointers, or just
     the trees, and choose the appropriate macro:

          Need            Macro:
          ----            -------
          use_operand_p   FOR_EACH_SSA_USE_OPERAND
          def_operand_p   FOR_EACH_SSA_DEF_OPERAND
          tree            FOR_EACH_SSA_TREE_OPERAND

  2. You need to declare a variable of the type you are interested in,
     and an ssa_op_iter structure which serves as the loop controlling
     variable.

  3. Determine which operands you wish to use, and specify the flags of
     those you are interested in.  They are documented in
     'tree-ssa-operands.h':

          #define SSA_OP_USE              0x01    /* Real USE operands.  */
          #define SSA_OP_DEF              0x02    /* Real DEF operands.  */
          #define SSA_OP_VUSE             0x04    /* VUSE operands.  */
          #define SSA_OP_VDEF             0x08    /* VDEF operands.  */

          /* These are commonly grouped operand flags.  */
          #define SSA_OP_VIRTUAL_USES	(SSA_OP_VUSE)
          #define SSA_OP_VIRTUAL_DEFS	(SSA_OP_VDEF)
          #define SSA_OP_ALL_VIRTUALS     (SSA_OP_VIRTUAL_USES | SSA_OP_VIRTUAL_DEFS)
          #define SSA_OP_ALL_USES		(SSA_OP_VIRTUAL_USES | SSA_OP_USE)
          #define SSA_OP_ALL_DEFS		(SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
          #define SSA_OP_ALL_OPERANDS	(SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)

 So if you want to look at the use pointers for all the 'USE' and 'VUSE'
operands, you would do something like:

       use_operand_p use_p;
       ssa_op_iter iter;

       FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE))
         {
           process_use_ptr (use_p);
         }

 The 'TREE' macro is basically the same as the 'USE' and 'DEF' macros,
only with the use or def dereferenced via 'USE_FROM_PTR (use_p)' and
'DEF_FROM_PTR (def_p)'.  Since we aren't using operand pointers, use and
defs flags can be mixed.

       tree var;
       ssa_op_iter iter;

       FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE)
         {
            print_generic_expr (stderr, var, TDF_SLIM);
         }

 'VDEF's are broken into two flags, one for the 'DEF' portion
('SSA_OP_VDEF') and one for the USE portion ('SSA_OP_VUSE').

 There are many examples in the code, in addition to the documentation
in 'tree-ssa-operands.h' and 'ssa-iterators.h'.

 There are also a couple of variants on the stmt iterators regarding PHI
nodes.

 'FOR_EACH_PHI_ARG' Works exactly like 'FOR_EACH_SSA_USE_OPERAND',
except it works over 'PHI' arguments instead of statement operands.

     /* Look at every virtual PHI use.  */
     FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES)
     {
        my_code;
     }

     /* Look at every real PHI use.  */
     FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES)
       my_code;

     /* Look at every PHI use.  */
     FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES)
       my_code;

 'FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like
'FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a
statement or a 'PHI' node.  These should be used when it is appropriate
but they are not quite as efficient as the individual 'FOR_EACH_PHI' and
'FOR_EACH_SSA' routines.

     FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags)
       {
          my_code;
       }

     FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags)
       {
          my_code;
       }

12.2.2 Immediate Uses
---------------------

Immediate use information is now always available.  Using the immediate
use iterators, you may examine every use of any 'SSA_NAME'.  For
instance, to change each use of 'ssa_var' to 'ssa_var2' and call
fold_stmt on each stmt after that is done:

       use_operand_p imm_use_p;
       imm_use_iterator iterator;
       tree ssa_var, stmt;


       FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
         {
           FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
             SET_USE (imm_use_p, ssa_var_2);
           fold_stmt (stmt);
         }

 There are 2 iterators which can be used.  'FOR_EACH_IMM_USE_FAST' is
used when the immediate uses are not changed, i.e., you are looking at
the uses, but not setting them.

 If they do get changed, then care must be taken that things are not
changed under the iterators, so use the 'FOR_EACH_IMM_USE_STMT' and
'FOR_EACH_IMM_USE_ON_STMT' iterators.  They attempt to preserve the
sanity of the use list by moving all the uses for a statement into a
controlled position, and then iterating over those uses.  Then the
optimization can manipulate the stmt when all the uses have been
processed.  This is a little slower than the FAST version since it adds
a placeholder element and must sort through the list a bit for each
statement.  This placeholder element must be also be removed if the loop
is terminated early.  The macro 'BREAK_FROM_IMM_USE_SAFE' is provided to
do this :

       FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
         {
           if (stmt == last_stmt)
             BREAK_FROM_SAFE_IMM_USE (iter);

           FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
             SET_USE (imm_use_p, ssa_var_2);
           fold_stmt (stmt);
         }

 There are checks in 'verify_ssa' which verify that the immediate use
list is up to date, as well as checking that an optimization didn't
break from the loop without using this macro.  It is safe to simply
'break'; from a 'FOR_EACH_IMM_USE_FAST' traverse.

 Some useful functions and macros:
  1. 'has_zero_uses (ssa_var)' : Returns true if there are no uses of
     'ssa_var'.
  2. 'has_single_use (ssa_var)' : Returns true if there is only a single
     use of 'ssa_var'.
  3. 'single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' :
     Returns true if there is only a single use of 'ssa_var', and also
     returns the use pointer and statement it occurs in, in the second
     and third parameters.
  4. 'num_imm_uses (ssa_var)' : Returns the number of immediate uses of
     'ssa_var'.  It is better not to use this if possible since it
     simply utilizes a loop to count the uses.
  5. 'PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a 'PHI' node,
     return the index number for the use.  An assert is triggered if the
     use isn't located in a 'PHI' node.
  6. 'USE_STMT (use_p)' : Return the statement a use occurs in.

 Note that uses are not put into an immediate use list until their
statement is actually inserted into the instruction stream via a 'bsi_*'
routine.

 It is also still possible to utilize lazy updating of statements, but
this should be used only when absolutely required.  Both alias analysis
and the dominator optimizations currently do this.

 When lazy updating is being used, the immediate use information is out
of date and cannot be used reliably.  Lazy updating is achieved by
simply marking statements modified via calls to 'gimple_set_modified'
instead of 'update_stmt'.  When lazy updating is no longer required, all
the modified statements must have 'update_stmt' called in order to bring
them up to date.  This must be done before the optimization is finished,
or 'verify_ssa' will trigger an abort.

 This is done with a simple loop over the instruction stream:
       block_stmt_iterator bsi;
       basic_block bb;
       FOR_EACH_BB (bb)
         {
           for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
             update_stmt_if_modified (bsi_stmt (bsi));
         }


File: gccint.info,  Node: SSA,  Next: Alias analysis,  Prev: SSA Operands,  Up: Tree SSA

12.3 Static Single Assignment
=============================

Most of the tree optimizers rely on the data flow information provided
by the Static Single Assignment (SSA) form.  We implement the SSA form
as described in 'R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K.
Zadeck. Efficiently Computing Static Single Assignment Form and the
Control Dependence Graph. ACM Transactions on Programming Languages and
Systems, 13(4):451-490, October 1991'.

 The SSA form is based on the premise that program variables are
assigned in exactly one location in the program.  Multiple assignments
to the same variable create new versions of that variable.  Naturally,
actual programs are seldom in SSA form initially because variables tend
to be assigned multiple times.  The compiler modifies the program
representation so that every time a variable is assigned in the code, a
new version of the variable is created.  Different versions of the same
variable are distinguished by subscripting the variable name with its
version number.  Variables used in the right-hand side of expressions
are renamed so that their version number matches that of the most recent
assignment.

 We represent variable versions using 'SSA_NAME' nodes.  The renaming
process in 'tree-ssa.c' wraps every real and virtual operand with an
'SSA_NAME' node which contains the version number and the statement that
created the 'SSA_NAME'.  Only definitions and virtual definitions may
create new 'SSA_NAME' nodes.

 Sometimes, flow of control makes it impossible to determine the most
recent version of a variable.  In these cases, the compiler inserts an
artificial definition for that variable called "PHI function" or "PHI
node".  This new definition merges all the incoming versions of the
variable to create a new name for it.  For instance,

     if (...)
       a_1 = 5;
     else if (...)
       a_2 = 2;
     else
       a_3 = 13;

     # a_4 = PHI <a_1, a_2, a_3>
     return a_4;

 Since it is not possible to determine which of the three branches will
be taken at runtime, we don't know which of 'a_1', 'a_2' or 'a_3' to use
at the return statement.  So, the SSA renamer creates a new version
'a_4' which is assigned the result of "merging" 'a_1', 'a_2' and 'a_3'.
Hence, PHI nodes mean "one of these operands.  I don't know which".

 The following functions can be used to examine PHI nodes

 -- Function: gimple_phi_result (PHI)
     Returns the 'SSA_NAME' created by PHI node PHI (i.e., PHI's LHS).

 -- Function: gimple_phi_num_args (PHI)
     Returns the number of arguments in PHI.  This number is exactly the
     number of incoming edges to the basic block holding PHI.

 -- Function: gimple_phi_arg (PHI, I)
     Returns Ith argument of PHI.

 -- Function: gimple_phi_arg_edge (PHI, I)
     Returns the incoming edge for the Ith argument of PHI.

 -- Function: gimple_phi_arg_def (PHI, I)
     Returns the 'SSA_NAME' for the Ith argument of PHI.

12.3.1 Preserving the SSA form
------------------------------

Some optimization passes make changes to the function that invalidate
the SSA property.  This can happen when a pass has added new symbols or
changed the program so that variables that were previously aliased
aren't anymore.  Whenever something like this happens, the affected
symbols must be renamed into SSA form again.  Transformations that emit
new code or replicate existing statements will also need to update the
SSA form.

 Since GCC implements two different SSA forms for register and virtual
variables, keeping the SSA form up to date depends on whether you are
updating register or virtual names.  In both cases, the general idea
behind incremental SSA updates is similar: when new SSA names are
created, they typically are meant to replace other existing names in the
program.

 For instance, given the following code:

          1  L0:
          2  x_1 = PHI (0, x_5)
          3  if (x_1 < 10)
          4    if (x_1 > 7)
          5      y_2 = 0
          6    else
          7      y_3 = x_1 + x_7
          8    endif
          9    x_5 = x_1 + 1
          10   goto L0;
          11 endif

 Suppose that we insert new names 'x_10' and 'x_11' (lines '4' and '8').

          1  L0:
          2  x_1 = PHI (0, x_5)
          3  if (x_1 < 10)
          4    x_10 = ...
          5    if (x_1 > 7)
          6      y_2 = 0
          7    else
          8      x_11 = ...
          9      y_3 = x_1 + x_7
          10   endif
          11   x_5 = x_1 + 1
          12   goto L0;
          13 endif

 We want to replace all the uses of 'x_1' with the new definitions of
'x_10' and 'x_11'.  Note that the only uses that should be replaced are
those at lines '5', '9' and '11'.  Also, the use of 'x_7' at line '9'
should _not_ be replaced (this is why we cannot just mark symbol 'x' for
renaming).

 Additionally, we may need to insert a PHI node at line '11' because
that is a merge point for 'x_10' and 'x_11'.  So the use of 'x_1' at
line '11' will be replaced with the new PHI node.  The insertion of PHI
nodes is optional.  They are not strictly necessary to preserve the SSA
form, and depending on what the caller inserted, they may not even be
useful for the optimizers.

 Updating the SSA form is a two step process.  First, the pass has to
identify which names need to be updated and/or which symbols need to be
renamed into SSA form for the first time.  When new names are introduced
to replace existing names in the program, the mapping between the old
and the new names are registered by calling 'register_new_name_mapping'
(note that if your pass creates new code by duplicating basic blocks,
the call to 'tree_duplicate_bb' will set up the necessary mappings
automatically).

 After the replacement mappings have been registered and new symbols
marked for renaming, a call to 'update_ssa' makes the registered
changes.  This can be done with an explicit call or by creating 'TODO'
flags in the 'tree_opt_pass' structure for your pass.  There are several
'TODO' flags that control the behavior of 'update_ssa':

   * 'TODO_update_ssa'.  Update the SSA form inserting PHI nodes for
     newly exposed symbols and virtual names marked for updating.  When
     updating real names, only insert PHI nodes for a real name 'O_j' in
     blocks reached by all the new and old definitions for 'O_j'.  If
     the iterated dominance frontier for 'O_j' is not pruned, we may end
     up inserting PHI nodes in blocks that have one or more edges with
     no incoming definition for 'O_j'.  This would lead to uninitialized
     warnings for 'O_j''s symbol.

   * 'TODO_update_ssa_no_phi'.  Update the SSA form without inserting
     any new PHI nodes at all.  This is used by passes that have either
     inserted all the PHI nodes themselves or passes that need only to
     patch use-def and def-def chains for virtuals (e.g., DCE).

   * 'TODO_update_ssa_full_phi'.  Insert PHI nodes everywhere they are
     needed.  No pruning of the IDF is done.  This is used by passes
     that need the PHI nodes for 'O_j' even if it means that some
     arguments will come from the default definition of 'O_j''s symbol
     (e.g., 'pass_linear_transform').

     WARNING: If you need to use this flag, chances are that your pass
     may be doing something wrong.  Inserting PHI nodes for an old name
     where not all edges carry a new replacement may lead to silent
     codegen errors or spurious uninitialized warnings.

   * 'TODO_update_ssa_only_virtuals'.  Passes that update the SSA form
     on their own may want to delegate the updating of virtual names to
     the generic updater.  Since FUD chains are easier to maintain, this
     simplifies the work they need to do.  NOTE: If this flag is used,
     any OLD->NEW mappings for real names are explicitly destroyed and
     only the symbols marked for renaming are processed.

12.3.2 Examining 'SSA_NAME' nodes
---------------------------------

The following macros can be used to examine 'SSA_NAME' nodes

 -- Macro: SSA_NAME_DEF_STMT (VAR)
     Returns the statement S that creates the 'SSA_NAME' VAR.  If S is
     an empty statement (i.e., 'IS_EMPTY_STMT (S)' returns 'true'), it
     means that the first reference to this variable is a USE or a VUSE.

 -- Macro: SSA_NAME_VERSION (VAR)
     Returns the version number of the 'SSA_NAME' object VAR.

12.3.3 Walking the dominator tree
---------------------------------

 -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB)

     This function walks the dominator tree for the current CFG calling
     a set of callback functions defined in STRUCT DOM_WALK_DATA in
     'domwalk.h'.  The call back functions you need to define give you
     hooks to execute custom code at various points during traversal:

       1. Once to initialize any local data needed while processing BB
          and its children.  This local data is pushed into an internal
          stack which is automatically pushed and popped as the walker
          traverses the dominator tree.

       2. Once before traversing all the statements in the BB.

       3. Once for every statement inside BB.

       4. Once after traversing all the statements and before recursing
          into BB's dominator children.

       5. It then recurses into all the dominator children of BB.

       6. After recursing into all the dominator children of BB it can,
          optionally, traverse every statement in BB again (i.e.,
          repeating steps 2 and 3).

       7. Once after walking the statements in BB and BB's dominator
          children.  At this stage, the block local data stack is
          popped.


File: gccint.info,  Node: Alias analysis,  Next: Memory model,  Prev: SSA,  Up: Tree SSA

12.4 Alias analysis
===================

Alias analysis in GIMPLE SSA form consists of two pieces.  First the
virtual SSA web ties conflicting memory accesses and provides a SSA
use-def chain and SSA immediate-use chains for walking possibly
dependent memory accesses.  Second an alias-oracle can be queried to
disambiguate explicit and implicit memory references.

  1. Memory SSA form.

     All statements that may use memory have exactly one accompanied use
     of a virtual SSA name that represents the state of memory at the
     given point in the IL.

     All statements that may define memory have exactly one accompanied
     definition of a virtual SSA name using the previous state of memory
     and defining the new state of memory after the given point in the
     IL.

          int i;
          int foo (void)
          {
            # .MEM_3 = VDEF <.MEM_2(D)>
            i = 1;
            # VUSE <.MEM_3>
            return i;
          }

     The virtual SSA names in this case are '.MEM_2(D)' and '.MEM_3'.
     The store to the global variable 'i' defines '.MEM_3' invalidating
     '.MEM_2(D)'.  The load from 'i' uses that new state '.MEM_3'.

     The virtual SSA web serves as constraints to SSA optimizers
     preventing illegitimate code-motion and optimization.  It also
     provides a way to walk related memory statements.

  2. Points-to and escape analysis.

     Points-to analysis builds a set of constraints from the GIMPLE SSA
     IL representing all pointer operations and facts we do or do not
     know about pointers.  Solving this set of constraints yields a
     conservatively correct solution for each pointer variable in the
     program (though we are only interested in SSA name pointers) as to
     what it may possibly point to.

     This points-to solution for a given SSA name pointer is stored in
     the 'pt_solution' sub-structure of the 'SSA_NAME_PTR_INFO' record.
     The following accessor functions are available:

        * 'pt_solution_includes'
        * 'pt_solutions_intersect'

     Points-to analysis also computes the solution for two special set
     of pointers, 'ESCAPED' and 'CALLUSED'.  Those represent all memory
     that has escaped the scope of analysis or that is used by pure or
     nested const calls.

  3. Type-based alias analysis

     Type-based alias analysis is frontend dependent though generic
     support is provided by the middle-end in 'alias.c'.  TBAA code is
     used by both tree optimizers and RTL optimizers.

     Every language that wishes to perform language-specific alias
     analysis should define a function that computes, given a 'tree'
     node, an alias set for the node.  Nodes in different alias sets are
     not allowed to alias.  For an example, see the C front-end function
     'c_get_alias_set'.

  4. Tree alias-oracle

     The tree alias-oracle provides means to disambiguate two memory
     references and memory references against statements.  The following
     queries are available:

        * 'refs_may_alias_p'
        * 'ref_maybe_used_by_stmt_p'
        * 'stmt_may_clobber_ref_p'

     In addition to those two kind of statement walkers are available
     walking statements related to a reference ref.
     'walk_non_aliased_vuses' walks over dominating memory defining
     statements and calls back if the statement does not clobber ref
     providing the non-aliased VUSE. The walk stops at the first
     clobbering statement or if asked to.  'walk_aliased_vdefs' walks
     over dominating memory defining statements and calls back on each
     statement clobbering ref providing its aliasing VDEF. The walk
     stops if asked to.


File: gccint.info,  Node: Memory model,  Prev: Alias analysis,  Up: Tree SSA

12.5 Memory model
=================

The memory model used by the middle-end models that of the C/C++
languages.  The middle-end has the notion of an effective type of a
memory region which is used for type-based alias analysis.

 The following is a refinement of ISO C99 6.5/6, clarifying the block
copy case to follow common sense and extending the concept of a dynamic
effective type to objects with a declared type as required for C++.

     The effective type of an object for an access to its stored value is
     the declared type of the object or the effective type determined by
     a previous store to it.  If a value is stored into an object through
     an lvalue having a type that is not a character type, then the
     type of the lvalue becomes the effective type of the object for that
     access and for subsequent accesses that do not modify the stored value.
     If a value is copied into an object using memcpy or memmove,
     or is copied as an array of character type, then the effective type
     of the modified object for that access and for subsequent accesses that
     do not modify the value is undetermined.  For all other accesses to an
     object, the effective type of the object is simply the type of the
     lvalue used for the access.


File: gccint.info,  Node: RTL,  Next: Control Flow,  Prev: Tree SSA,  Up: Top

13 RTL Representation
*********************

The last part of the compiler work is done on a low-level intermediate
representation called Register Transfer Language.  In this language, the
instructions to be output are described, pretty much one by one, in an
algebraic form that describes what the instruction does.

 RTL is inspired by Lisp lists.  It has both an internal form, made up
of structures that point at other structures, and a textual form that is
used in the machine description and in printed debugging dumps.  The
textual form uses nested parentheses to indicate the pointers in the
internal form.

* Menu:

* RTL Objects::       Expressions vs vectors vs strings vs integers.
* RTL Classes::       Categories of RTL expression objects, and their structure.
* Accessors::         Macros to access expression operands or vector elts.
* Special Accessors:: Macros to access specific annotations on RTL.
* Flags::             Other flags in an RTL expression.
* Machine Modes::     Describing the size and format of a datum.
* Constants::         Expressions with constant values.
* Regs and Memory::   Expressions representing register contents or memory.
* Arithmetic::        Expressions representing arithmetic on other expressions.
* Comparisons::       Expressions representing comparison of expressions.
* Bit-Fields::        Expressions representing bit-fields in memory or reg.
* Vector Operations:: Expressions involving vector datatypes.
* Conversions::       Extending, truncating, floating or fixing.
* RTL Declarations::  Declaring volatility, constancy, etc.
* Side Effects::      Expressions for storing in registers, etc.
* Incdec::            Embedded side-effects for autoincrement addressing.
* Assembler::         Representing 'asm' with operands.
* Debug Information:: Expressions representing debugging information.
* Insns::             Expression types for entire insns.
* Calls::             RTL representation of function call insns.
* Sharing::           Some expressions are unique; others *must* be copied.
* Reading RTL::       Reading textual RTL from a file.


File: gccint.info,  Node: RTL Objects,  Next: RTL Classes,  Up: RTL

13.1 RTL Object Types
=====================

RTL uses five kinds of objects: expressions, integers, wide integers,
strings and vectors.  Expressions are the most important ones.  An RTL
expression ("RTX", for short) is a C structure, but it is usually
referred to with a pointer; a type that is given the typedef name 'rtx'.

 An integer is simply an 'int'; their written form uses decimal digits.
A wide integer is an integral object whose type is 'HOST_WIDE_INT';
their written form uses decimal digits.

 A string is a sequence of characters.  In core it is represented as a
'char *' in usual C fashion, and it is written in C syntax as well.
However, strings in RTL may never be null.  If you write an empty string
in a machine description, it is represented in core as a null pointer
rather than as a pointer to a null character.  In certain contexts,
these null pointers instead of strings are valid.  Within RTL code,
strings are most commonly found inside 'symbol_ref' expressions, but
they appear in other contexts in the RTL expressions that make up
machine descriptions.

 In a machine description, strings are normally written with double
quotes, as you would in C.  However, strings in machine descriptions may
extend over many lines, which is invalid C, and adjacent string
constants are not concatenated as they are in C.  Any string constant
may be surrounded with a single set of parentheses.  Sometimes this
makes the machine description easier to read.

 There is also a special syntax for strings, which can be useful when C
code is embedded in a machine description.  Wherever a string can
appear, it is also valid to write a C-style brace block.  The entire
brace block, including the outermost pair of braces, is considered to be
the string constant.  Double quote characters inside the braces are not
special.  Therefore, if you write string constants in the C code, you
need not escape each quote character with a backslash.

 A vector contains an arbitrary number of pointers to expressions.  The
number of elements in the vector is explicitly present in the vector.
The written form of a vector consists of square brackets ('[...]')
surrounding the elements, in sequence and with whitespace separating
them.  Vectors of length zero are not created; null pointers are used
instead.

 Expressions are classified by "expression codes" (also called RTX
codes).  The expression code is a name defined in 'rtl.def', which is
also (in uppercase) a C enumeration constant.  The possible expression
codes and their meanings are machine-independent.  The code of an RTX
can be extracted with the macro 'GET_CODE (X)' and altered with
'PUT_CODE (X, NEWCODE)'.

 The expression code determines how many operands the expression
contains, and what kinds of objects they are.  In RTL, unlike Lisp, you
cannot tell by looking at an operand what kind of object it is.
Instead, you must know from its context--from the expression code of the
containing expression.  For example, in an expression of code 'subreg',
the first operand is to be regarded as an expression and the second
operand as an integer.  In an expression of code 'plus', there are two
operands, both of which are to be regarded as expressions.  In a
'symbol_ref' expression, there is one operand, which is to be regarded
as a string.

 Expressions are written as parentheses containing the name of the
expression type, its flags and machine mode if any, and then the
operands of the expression (separated by spaces).

 Expression code names in the 'md' file are written in lowercase, but
when they appear in C code they are written in uppercase.  In this
manual, they are shown as follows: 'const_int'.

 In a few contexts a null pointer is valid where an expression is
normally wanted.  The written form of this is '(nil)'.


File: gccint.info,  Node: RTL Classes,  Next: Accessors,  Prev: RTL Objects,  Up: RTL

13.2 RTL Classes and Formats
============================

The various expression codes are divided into several "classes", which
are represented by single characters.  You can determine the class of an
RTX code with the macro 'GET_RTX_CLASS (CODE)'.  Currently, 'rtl.def'
defines these classes:

'RTX_OBJ'
     An RTX code that represents an actual object, such as a register
     ('REG') or a memory location ('MEM', 'SYMBOL_REF').  'LO_SUM') is
     also included; instead, 'SUBREG' and 'STRICT_LOW_PART' are not in
     this class, but in class 'x'.

'RTX_CONST_OBJ'
     An RTX code that represents a constant object.  'HIGH' is also
     included in this class.

'RTX_COMPARE'
     An RTX code for a non-symmetric comparison, such as 'GEU' or 'LT'.

'RTX_COMM_COMPARE'
     An RTX code for a symmetric (commutative) comparison, such as 'EQ'
     or 'ORDERED'.

'RTX_UNARY'
     An RTX code for a unary arithmetic operation, such as 'NEG', 'NOT',
     or 'ABS'.  This category also includes value extension (sign or
     zero) and conversions between integer and floating point.

'RTX_COMM_ARITH'
     An RTX code for a commutative binary operation, such as 'PLUS' or
     'AND'.  'NE' and 'EQ' are comparisons, so they have class '<'.

'RTX_BIN_ARITH'
     An RTX code for a non-commutative binary operation, such as
     'MINUS', 'DIV', or 'ASHIFTRT'.

'RTX_BITFIELD_OPS'
     An RTX code for a bit-field operation.  Currently only
     'ZERO_EXTRACT' and 'SIGN_EXTRACT'.  These have three inputs and are
     lvalues (so they can be used for insertion as well).  *Note
     Bit-Fields::.

'RTX_TERNARY'
     An RTX code for other three input operations.  Currently only
     'IF_THEN_ELSE', 'VEC_MERGE', 'SIGN_EXTRACT', 'ZERO_EXTRACT', and
     'FMA'.

'RTX_INSN'
     An RTX code for an entire instruction: 'INSN', 'JUMP_INSN', and
     'CALL_INSN'.  *Note Insns::.

'RTX_MATCH'
     An RTX code for something that matches in insns, such as
     'MATCH_DUP'.  These only occur in machine descriptions.

'RTX_AUTOINC'
     An RTX code for an auto-increment addressing mode, such as
     'POST_INC'.  'XEXP (X, 0)' gives the auto-modified register.

'RTX_EXTRA'
     All other RTX codes.  This category includes the remaining codes
     used only in machine descriptions ('DEFINE_*', etc.).  It also
     includes all the codes describing side effects ('SET', 'USE',
     'CLOBBER', etc.)  and the non-insns that may appear on an insn
     chain, such as 'NOTE', 'BARRIER', and 'CODE_LABEL'.  'SUBREG' is
     also part of this class.

 For each expression code, 'rtl.def' specifies the number of contained
objects and their kinds using a sequence of characters called the
"format" of the expression code.  For example, the format of 'subreg' is
'ei'.

 These are the most commonly used format characters:

'e'
     An expression (actually a pointer to an expression).

'i'
     An integer.

'w'
     A wide integer.

's'
     A string.

'E'
     A vector of expressions.

 A few other format characters are used occasionally:

'u'
     'u' is equivalent to 'e' except that it is printed differently in
     debugging dumps.  It is used for pointers to insns.

'n'
     'n' is equivalent to 'i' except that it is printed differently in
     debugging dumps.  It is used for the line number or code number of
     a 'note' insn.

'S'
     'S' indicates a string which is optional.  In the RTL objects in
     core, 'S' is equivalent to 's', but when the object is read, from
     an 'md' file, the string value of this operand may be omitted.  An
     omitted string is taken to be the null string.

'V'
     'V' indicates a vector which is optional.  In the RTL objects in
     core, 'V' is equivalent to 'E', but when the object is read from an
     'md' file, the vector value of this operand may be omitted.  An
     omitted vector is effectively the same as a vector of no elements.

'B'
     'B' indicates a pointer to basic block structure.

'0'
     '0' means a slot whose contents do not fit any normal category.
     '0' slots are not printed at all in dumps, and are often used in
     special ways by small parts of the compiler.

 There are macros to get the number of operands and the format of an
expression code:

'GET_RTX_LENGTH (CODE)'
     Number of operands of an RTX of code CODE.

'GET_RTX_FORMAT (CODE)'
     The format of an RTX of code CODE, as a C string.

 Some classes of RTX codes always have the same format.  For example, it
is safe to assume that all comparison operations have format 'ee'.

'1'
     All codes of this class have format 'e'.

'<'
'c'
'2'
     All codes of these classes have format 'ee'.

'b'
'3'
     All codes of these classes have format 'eee'.

'i'
     All codes of this class have formats that begin with 'iuueiee'.
     *Note Insns::.  Note that not all RTL objects linked onto an insn
     chain are of class 'i'.

'o'
'm'
'x'
     You can make no assumptions about the format of these codes.


File: gccint.info,  Node: Accessors,  Next: Special Accessors,  Prev: RTL Classes,  Up: RTL

13.3 Access to Operands
=======================

Operands of expressions are accessed using the macros 'XEXP', 'XINT',
'XWINT' and 'XSTR'.  Each of these macros takes two arguments: an
expression-pointer (RTX) and an operand number (counting from zero).
Thus,

     XEXP (X, 2)

accesses operand 2 of expression X, as an expression.

     XINT (X, 2)

accesses the same operand as an integer.  'XSTR', used in the same
fashion, would access it as a string.

 Any operand can be accessed as an integer, as an expression or as a
string.  You must choose the correct method of access for the kind of
value actually stored in the operand.  You would do this based on the
expression code of the containing expression.  That is also how you
would know how many operands there are.

 For example, if X is a 'subreg' expression, you know that it has two
operands which can be correctly accessed as 'XEXP (X, 0)' and 'XINT (X,
1)'.  If you did 'XINT (X, 0)', you would get the address of the
expression operand but cast as an integer; that might occasionally be
useful, but it would be cleaner to write '(int) XEXP (X, 0)'.  'XEXP (X,
1)' would also compile without error, and would return the second,
integer operand cast as an expression pointer, which would probably
result in a crash when accessed.  Nothing stops you from writing 'XEXP
(X, 28)' either, but this will access memory past the end of the
expression with unpredictable results.

 Access to operands which are vectors is more complicated.  You can use
the macro 'XVEC' to get the vector-pointer itself, or the macros
'XVECEXP' and 'XVECLEN' to access the elements and length of a vector.

'XVEC (EXP, IDX)'
     Access the vector-pointer which is operand number IDX in EXP.

'XVECLEN (EXP, IDX)'
     Access the length (number of elements) in the vector which is in
     operand number IDX in EXP.  This value is an 'int'.

'XVECEXP (EXP, IDX, ELTNUM)'
     Access element number ELTNUM in the vector which is in operand
     number IDX in EXP.  This value is an RTX.

     It is up to you to make sure that ELTNUM is not negative and is
     less than 'XVECLEN (EXP, IDX)'.

 All the macros defined in this section expand into lvalues and
therefore can be used to assign the operands, lengths and vector
elements as well as to access them.


File: gccint.info,  Node: Special Accessors,  Next: Flags,  Prev: Accessors,  Up: RTL

13.4 Access to Special Operands
===============================

Some RTL nodes have special annotations associated with them.

'MEM'
     'MEM_ALIAS_SET (X)'
          If 0, X is not in any alias set, and may alias anything.
          Otherwise, X can only alias 'MEM's in a conflicting alias set.
          This value is set in a language-dependent manner in the
          front-end, and should not be altered in the back-end.  In some
          front-ends, these numbers may correspond in some way to types,
          or other language-level entities, but they need not, and the
          back-end makes no such assumptions.  These set numbers are
          tested with 'alias_sets_conflict_p'.

     'MEM_EXPR (X)'
          If this register is known to hold the value of some user-level
          declaration, this is that tree node.  It may also be a
          'COMPONENT_REF', in which case this is some field reference,
          and 'TREE_OPERAND (X, 0)' contains the declaration, or another
          'COMPONENT_REF', or null if there is no compile-time object
          associated with the reference.

     'MEM_OFFSET_KNOWN_P (X)'
          True if the offset of the memory reference from 'MEM_EXPR' is
          known.  'MEM_OFFSET (X)' provides the offset if so.

     'MEM_OFFSET (X)'
          The offset from the start of 'MEM_EXPR'.  The value is only
          valid if 'MEM_OFFSET_KNOWN_P (X)' is true.

     'MEM_SIZE_KNOWN_P (X)'
          True if the size of the memory reference is known.  'MEM_SIZE
          (X)' provides its size if so.

     'MEM_SIZE (X)'
          The size in bytes of the memory reference.  This is mostly
          relevant for 'BLKmode' references as otherwise the size is
          implied by the mode.  The value is only valid if
          'MEM_SIZE_KNOWN_P (X)' is true.

     'MEM_ALIGN (X)'
          The known alignment in bits of the memory reference.

     'MEM_ADDR_SPACE (X)'
          The address space of the memory reference.  This will commonly
          be zero for the generic address space.

'REG'
     'ORIGINAL_REGNO (X)'
          This field holds the number the register "originally" had; for
          a pseudo register turned into a hard reg this will hold the
          old pseudo register number.

     'REG_EXPR (X)'
          If this register is known to hold the value of some user-level
          declaration, this is that tree node.

     'REG_OFFSET (X)'
          If this register is known to hold the value of some user-level
          declaration, this is the offset into that logical storage.

'SYMBOL_REF'
     'SYMBOL_REF_DECL (X)'
          If the 'symbol_ref' X was created for a 'VAR_DECL' or a
          'FUNCTION_DECL', that tree is recorded here.  If this value is
          null, then X was created by back end code generation routines,
          and there is no associated front end symbol table entry.

          'SYMBOL_REF_DECL' may also point to a tree of class ''c'',
          that is, some sort of constant.  In this case, the
          'symbol_ref' is an entry in the per-file constant pool; again,
          there is no associated front end symbol table entry.

     'SYMBOL_REF_CONSTANT (X)'
          If 'CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant
          pool entry for X.  It is null otherwise.

     'SYMBOL_REF_DATA (X)'
          A field of opaque type used to store 'SYMBOL_REF_DECL' or
          'SYMBOL_REF_CONSTANT'.

     'SYMBOL_REF_FLAGS (X)'
          In a 'symbol_ref', this is used to communicate various
          predicates about the symbol.  Some of these are common enough
          to be computed by common code, some are specific to the
          target.  The common bits are:

          'SYMBOL_FLAG_FUNCTION'
               Set if the symbol refers to a function.

          'SYMBOL_FLAG_LOCAL'
               Set if the symbol is local to this "module".  See
               'TARGET_BINDS_LOCAL_P'.

          'SYMBOL_FLAG_EXTERNAL'
               Set if this symbol is not defined in this translation
               unit.  Note that this is not the inverse of
               'SYMBOL_FLAG_LOCAL'.

          'SYMBOL_FLAG_SMALL'
               Set if the symbol is located in the small data section.
               See 'TARGET_IN_SMALL_DATA_P'.

          'SYMBOL_REF_TLS_MODEL (X)'
               This is a multi-bit field accessor that returns the
               'tls_model' to be used for a thread-local storage symbol.
               It returns zero for non-thread-local symbols.

          'SYMBOL_FLAG_HAS_BLOCK_INFO'
               Set if the symbol has 'SYMBOL_REF_BLOCK' and
               'SYMBOL_REF_BLOCK_OFFSET' fields.

          'SYMBOL_FLAG_ANCHOR'
               Set if the symbol is used as a section anchor.  "Section
               anchors" are symbols that have a known position within an
               'object_block' and that can be used to access nearby
               members of that block.  They are used to implement
               '-fsection-anchors'.

               If this flag is set, then 'SYMBOL_FLAG_HAS_BLOCK_INFO'
               will be too.

          Bits beginning with 'SYMBOL_FLAG_MACH_DEP' are available for
          the target's use.

'SYMBOL_REF_BLOCK (X)'
     If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the 'object_block'
     structure to which the symbol belongs, or 'NULL' if it has not been
     assigned a block.

'SYMBOL_REF_BLOCK_OFFSET (X)'
     If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from
     the first object in 'SYMBOL_REF_BLOCK (X)'.  The value is negative
     if X has not yet been assigned to a block, or it has not been given
     an offset within that block.


File: gccint.info,  Node: Flags,  Next: Machine Modes,  Prev: Special Accessors,  Up: RTL

13.5 Flags in an RTL Expression
===============================

RTL expressions contain several flags (one-bit bit-fields) that are used
in certain types of expression.  Most often they are accessed with the
following macros, which expand into lvalues.

'CONSTANT_POOL_ADDRESS_P (X)'
     Nonzero in a 'symbol_ref' if it refers to part of the current
     function's constant pool.  For most targets these addresses are in
     a '.rodata' section entirely separate from the function, but for
     some targets the addresses are close to the beginning of the
     function.  In either case GCC assumes these addresses can be
     addressed directly, perhaps with the help of base registers.
     Stored in the 'unchanging' field and printed as '/u'.

'RTL_CONST_CALL_P (X)'
     In a 'call_insn' indicates that the insn represents a call to a
     const function.  Stored in the 'unchanging' field and printed as
     '/u'.

'RTL_PURE_CALL_P (X)'
     In a 'call_insn' indicates that the insn represents a call to a
     pure function.  Stored in the 'return_val' field and printed as
     '/i'.

'RTL_CONST_OR_PURE_CALL_P (X)'
     In a 'call_insn', true if 'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P'
     is true.

'RTL_LOOPING_CONST_OR_PURE_CALL_P (X)'
     In a 'call_insn' indicates that the insn represents a possibly
     infinite looping call to a const or pure function.  Stored in the
     'call' field and printed as '/c'.  Only true if one of
     'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P' is true.

'INSN_ANNULLED_BRANCH_P (X)'
     In a 'jump_insn', 'call_insn', or 'insn' indicates that the branch
     is an annulling one.  See the discussion under 'sequence' below.
     Stored in the 'unchanging' field and printed as '/u'.

'INSN_DELETED_P (X)'
     In an 'insn', 'call_insn', 'jump_insn', 'code_label',
     'jump_table_data', 'barrier', or 'note', nonzero if the insn has
     been deleted.  Stored in the 'volatil' field and printed as '/v'.

'INSN_FROM_TARGET_P (X)'
     In an 'insn' or 'jump_insn' or 'call_insn' in a delay slot of a
     branch, indicates that the insn is from the target of the branch.
     If the branch insn has 'INSN_ANNULLED_BRANCH_P' set, this insn will
     only be executed if the branch is taken.  For annulled branches
     with 'INSN_FROM_TARGET_P' clear, the insn will be executed only if
     the branch is not taken.  When 'INSN_ANNULLED_BRANCH_P' is not set,
     this insn will always be executed.  Stored in the 'in_struct' field
     and printed as '/s'.

'LABEL_PRESERVE_P (X)'
     In a 'code_label' or 'note', indicates that the label is referenced
     by code or data not visible to the RTL of a given function.  Labels
     referenced by a non-local goto will have this bit set.  Stored in
     the 'in_struct' field and printed as '/s'.

'LABEL_REF_NONLOCAL_P (X)'
     In 'label_ref' and 'reg_label' expressions, nonzero if this is a
     reference to a non-local label.  Stored in the 'volatil' field and
     printed as '/v'.

'MEM_KEEP_ALIAS_SET_P (X)'
     In 'mem' expressions, 1 if we should keep the alias set for this
     mem unchanged when we access a component.  Set to 1, for example,
     when we are already in a non-addressable component of an aggregate.
     Stored in the 'jump' field and printed as '/j'.

'MEM_VOLATILE_P (X)'
     In 'mem', 'asm_operands', and 'asm_input' expressions, nonzero for
     volatile memory references.  Stored in the 'volatil' field and
     printed as '/v'.

'MEM_NOTRAP_P (X)'
     In 'mem', nonzero for memory references that will not trap.  Stored
     in the 'call' field and printed as '/c'.

'MEM_POINTER (X)'
     Nonzero in a 'mem' if the memory reference holds a pointer.  Stored
     in the 'frame_related' field and printed as '/f'.

'REG_FUNCTION_VALUE_P (X)'
     Nonzero in a 'reg' if it is the place in which this function's
     value is going to be returned.  (This happens only in a hard
     register.)  Stored in the 'return_val' field and printed as '/i'.

'REG_POINTER (X)'
     Nonzero in a 'reg' if the register holds a pointer.  Stored in the
     'frame_related' field and printed as '/f'.

'REG_USERVAR_P (X)'
     In a 'reg', nonzero if it corresponds to a variable present in the
     user's source code.  Zero for temporaries generated internally by
     the compiler.  Stored in the 'volatil' field and printed as '/v'.

     The same hard register may be used also for collecting the values
     of functions called by this one, but 'REG_FUNCTION_VALUE_P' is zero
     in this kind of use.

'RTX_FRAME_RELATED_P (X)'
     Nonzero in an 'insn', 'call_insn', 'jump_insn', 'barrier', or 'set'
     which is part of a function prologue and sets the stack pointer,
     sets the frame pointer, or saves a register.  This flag should also
     be set on an instruction that sets up a temporary register to use
     in place of the frame pointer.  Stored in the 'frame_related' field
     and printed as '/f'.

     In particular, on RISC targets where there are limits on the sizes
     of immediate constants, it is sometimes impossible to reach the
     register save area directly from the stack pointer.  In that case,
     a temporary register is used that is near enough to the register
     save area, and the Canonical Frame Address, i.e., DWARF2's logical
     frame pointer, register must (temporarily) be changed to be this
     temporary register.  So, the instruction that sets this temporary
     register must be marked as 'RTX_FRAME_RELATED_P'.

     If the marked instruction is overly complex (defined in terms of
     what 'dwarf2out_frame_debug_expr' can handle), you will also have
     to create a 'REG_FRAME_RELATED_EXPR' note and attach it to the
     instruction.  This note should contain a simple expression of the
     computation performed by this instruction, i.e., one that
     'dwarf2out_frame_debug_expr' can handle.

     This flag is required for exception handling support on targets
     with RTL prologues.

'MEM_READONLY_P (X)'
     Nonzero in a 'mem', if the memory is statically allocated and
     read-only.

     Read-only in this context means never modified during the lifetime
     of the program, not necessarily in ROM or in write-disabled pages.
     A common example of the later is a shared library's global offset
     table.  This table is initialized by the runtime loader, so the
     memory is technically writable, but after control is transferred
     from the runtime loader to the application, this memory will never
     be subsequently modified.

     Stored in the 'unchanging' field and printed as '/u'.

'SCHED_GROUP_P (X)'
     During instruction scheduling, in an 'insn', 'call_insn',
     'jump_insn' or 'jump_table_data', indicates that the previous insn
     must be scheduled together with this insn.  This is used to ensure
     that certain groups of instructions will not be split up by the
     instruction scheduling pass, for example, 'use' insns before a
     'call_insn' may not be separated from the 'call_insn'.  Stored in
     the 'in_struct' field and printed as '/s'.

'SET_IS_RETURN_P (X)'
     For a 'set', nonzero if it is for a return.  Stored in the 'jump'
     field and printed as '/j'.

'SIBLING_CALL_P (X)'
     For a 'call_insn', nonzero if the insn is a sibling call.  Stored
     in the 'jump' field and printed as '/j'.

'STRING_POOL_ADDRESS_P (X)'
     For a 'symbol_ref' expression, nonzero if it addresses this
     function's string constant pool.  Stored in the 'frame_related'
     field and printed as '/f'.

'SUBREG_PROMOTED_UNSIGNED_P (X)'
     Returns a value greater then zero for a 'subreg' that has
     'SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is
     kept zero-extended, zero if it is kept sign-extended, and less then
     zero if it is extended some other way via the 'ptr_extend'
     instruction.  Stored in the 'unchanging' field and 'volatil' field,
     printed as '/u' and '/v'.  This macro may only be used to get the
     value it may not be used to change the value.  Use
     'SUBREG_PROMOTED_UNSIGNED_SET' to change the value.

'SUBREG_PROMOTED_UNSIGNED_SET (X)'
     Set the 'unchanging' and 'volatil' fields in a 'subreg' to reflect
     zero, sign, or other extension.  If 'volatil' is zero, then
     'unchanging' as nonzero means zero extension and as zero means sign
     extension.  If 'volatil' is nonzero then some other type of
     extension was done via the 'ptr_extend' instruction.

'SUBREG_PROMOTED_VAR_P (X)'
     Nonzero in a 'subreg' if it was made when accessing an object that
     was promoted to a wider mode in accord with the 'PROMOTED_MODE'
     machine description macro (*note Storage Layout::).  In this case,
     the mode of the 'subreg' is the declared mode of the object and the
     mode of 'SUBREG_REG' is the mode of the register that holds the
     object.  Promoted variables are always either sign- or
     zero-extended to the wider mode on every assignment.  Stored in the
     'in_struct' field and printed as '/s'.

'SYMBOL_REF_USED (X)'
     In a 'symbol_ref', indicates that X has been used.  This is
     normally only used to ensure that X is only declared external once.
     Stored in the 'used' field.

'SYMBOL_REF_WEAK (X)'
     In a 'symbol_ref', indicates that X has been declared weak.  Stored
     in the 'return_val' field and printed as '/i'.

'SYMBOL_REF_FLAG (X)'
     In a 'symbol_ref', this is used as a flag for machine-specific
     purposes.  Stored in the 'volatil' field and printed as '/v'.

     Most uses of 'SYMBOL_REF_FLAG' are historic and may be subsumed by
     'SYMBOL_REF_FLAGS'.  Certainly use of 'SYMBOL_REF_FLAGS' is
     mandatory if the target requires more than one bit of storage.

'PREFETCH_SCHEDULE_BARRIER_P (X)'
     In a 'prefetch', indicates that the prefetch is a scheduling
     barrier.  No other INSNs will be moved over it.  Stored in the
     'volatil' field and printed as '/v'.

 These are the fields to which the above macros refer:

'call'
     In a 'mem', 1 means that the memory reference will not trap.

     In a 'call', 1 means that this pure or const call may possibly
     infinite loop.

     In an RTL dump, this flag is represented as '/c'.

'frame_related'
     In an 'insn' or 'set' expression, 1 means that it is part of a
     function prologue and sets the stack pointer, sets the frame
     pointer, saves a register, or sets up a temporary register to use
     in place of the frame pointer.

     In 'reg' expressions, 1 means that the register holds a pointer.

     In 'mem' expressions, 1 means that the memory reference holds a
     pointer.

     In 'symbol_ref' expressions, 1 means that the reference addresses
     this function's string constant pool.

     In an RTL dump, this flag is represented as '/f'.

'in_struct'
     In 'reg' expressions, it is 1 if the register has its entire life
     contained within the test expression of some loop.

     In 'subreg' expressions, 1 means that the 'subreg' is accessing an
     object that has had its mode promoted from a wider mode.

     In 'label_ref' expressions, 1 means that the referenced label is
     outside the innermost loop containing the insn in which the
     'label_ref' was found.

     In 'code_label' expressions, it is 1 if the label may never be
     deleted.  This is used for labels which are the target of non-local
     gotos.  Such a label that would have been deleted is replaced with
     a 'note' of type 'NOTE_INSN_DELETED_LABEL'.

     In an 'insn' during dead-code elimination, 1 means that the insn is
     dead code.

     In an 'insn' or 'jump_insn' during reorg for an insn in the delay
     slot of a branch, 1 means that this insn is from the target of the
     branch.

     In an 'insn' during instruction scheduling, 1 means that this insn
     must be scheduled as part of a group together with the previous
     insn.

     In an RTL dump, this flag is represented as '/s'.

'return_val'
     In 'reg' expressions, 1 means the register contains the value to be
     returned by the current function.  On machines that pass parameters
     in registers, the same register number may be used for parameters
     as well, but this flag is not set on such uses.

     In 'symbol_ref' expressions, 1 means the referenced symbol is weak.

     In 'call' expressions, 1 means the call is pure.

     In an RTL dump, this flag is represented as '/i'.

'jump'
     In a 'mem' expression, 1 means we should keep the alias set for
     this mem unchanged when we access a component.

     In a 'set', 1 means it is for a return.

     In a 'call_insn', 1 means it is a sibling call.

     In an RTL dump, this flag is represented as '/j'.

'unchanging'
     In 'reg' and 'mem' expressions, 1 means that the value of the
     expression never changes.

     In 'subreg' expressions, it is 1 if the 'subreg' references an
     unsigned object whose mode has been promoted to a wider mode.

     In an 'insn' or 'jump_insn' in the delay slot of a branch
     instruction, 1 means an annulling branch should be used.

     In a 'symbol_ref' expression, 1 means that this symbol addresses
     something in the per-function constant pool.

     In a 'call_insn' 1 means that this instruction is a call to a const
     function.

     In an RTL dump, this flag is represented as '/u'.

'used'
     This flag is used directly (without an access macro) at the end of
     RTL generation for a function, to count the number of times an
     expression appears in insns.  Expressions that appear more than
     once are copied, according to the rules for shared structure (*note
     Sharing::).

     For a 'reg', it is used directly (without an access macro) by the
     leaf register renumbering code to ensure that each register is only
     renumbered once.

     In a 'symbol_ref', it indicates that an external declaration for
     the symbol has already been written.

'volatil'
     In a 'mem', 'asm_operands', or 'asm_input' expression, it is 1 if
     the memory reference is volatile.  Volatile memory references may
     not be deleted, reordered or combined.

     In a 'symbol_ref' expression, it is used for machine-specific
     purposes.

     In a 'reg' expression, it is 1 if the value is a user-level
     variable.  0 indicates an internal compiler temporary.

     In an 'insn', 1 means the insn has been deleted.

     In 'label_ref' and 'reg_label' expressions, 1 means a reference to
     a non-local label.

     In 'prefetch' expressions, 1 means that the containing insn is a
     scheduling barrier.

     In an RTL dump, this flag is represented as '/v'.


File: gccint.info,  Node: Machine Modes,  Next: Constants,  Prev: Flags,  Up: RTL

13.6 Machine Modes
==================

A machine mode describes a size of data object and the representation
used for it.  In the C code, machine modes are represented by an
enumeration type, 'machine_mode', defined in 'machmode.def'.  Each RTL
expression has room for a machine mode and so do certain kinds of tree
expressions (declarations and types, to be precise).

 In debugging dumps and machine descriptions, the machine mode of an RTL
expression is written after the expression code with a colon to separate
them.  The letters 'mode' which appear at the end of each machine mode
name are omitted.  For example, '(reg:SI 38)' is a 'reg' expression with
machine mode 'SImode'.  If the mode is 'VOIDmode', it is not written at
all.

 Here is a table of machine modes.  The term "byte" below refers to an
object of 'BITS_PER_UNIT' bits (*note Storage Layout::).

'BImode'
     "Bit" mode represents a single bit, for predicate registers.

'QImode'
     "Quarter-Integer" mode represents a single byte treated as an
     integer.

'HImode'
     "Half-Integer" mode represents a two-byte integer.

'PSImode'
     "Partial Single Integer" mode represents an integer which occupies
     four bytes but which doesn't really use all four.  On some
     machines, this is the right mode to use for pointers.

'SImode'
     "Single Integer" mode represents a four-byte integer.

'PDImode'
     "Partial Double Integer" mode represents an integer which occupies
     eight bytes but which doesn't really use all eight.  On some
     machines, this is the right mode to use for certain pointers.

'DImode'
     "Double Integer" mode represents an eight-byte integer.

'TImode'
     "Tetra Integer" (?)  mode represents a sixteen-byte integer.

'OImode'
     "Octa Integer" (?)  mode represents a thirty-two-byte integer.

'XImode'
     "Hexadeca Integer" (?)  mode represents a sixty-four-byte integer.

'QFmode'
     "Quarter-Floating" mode represents a quarter-precision (single
     byte) floating point number.

'HFmode'
     "Half-Floating" mode represents a half-precision (two byte)
     floating point number.

'TQFmode'
     "Three-Quarter-Floating" (?)  mode represents a
     three-quarter-precision (three byte) floating point number.

'SFmode'
     "Single Floating" mode represents a four byte floating point
     number.  In the common case, of a processor with IEEE arithmetic
     and 8-bit bytes, this is a single-precision IEEE floating point
     number; it can also be used for double-precision (on processors
     with 16-bit bytes) and single-precision VAX and IBM types.

'DFmode'
     "Double Floating" mode represents an eight byte floating point
     number.  In the common case, of a processor with IEEE arithmetic
     and 8-bit bytes, this is a double-precision IEEE floating point
     number.

'XFmode'
     "Extended Floating" mode represents an IEEE extended floating point
     number.  This mode only has 80 meaningful bits (ten bytes).  Some
     processors require such numbers to be padded to twelve bytes,
     others to sixteen; this mode is used for either.

'SDmode'
     "Single Decimal Floating" mode represents a four byte decimal
     floating point number (as distinct from conventional binary
     floating point).

'DDmode'
     "Double Decimal Floating" mode represents an eight byte decimal
     floating point number.

'TDmode'
     "Tetra Decimal Floating" mode represents a sixteen byte decimal
     floating point number all 128 of whose bits are meaningful.

'TFmode'
     "Tetra Floating" mode represents a sixteen byte floating point
     number all 128 of whose bits are meaningful.  One common use is the
     IEEE quad-precision format.

'QQmode'
     "Quarter-Fractional" mode represents a single byte treated as a
     signed fractional number.  The default format is "s.7".

'HQmode'
     "Half-Fractional" mode represents a two-byte signed fractional
     number.  The default format is "s.15".

'SQmode'
     "Single Fractional" mode represents a four-byte signed fractional
     number.  The default format is "s.31".

'DQmode'
     "Double Fractional" mode represents an eight-byte signed fractional
     number.  The default format is "s.63".

'TQmode'
     "Tetra Fractional" mode represents a sixteen-byte signed fractional
     number.  The default format is "s.127".

'UQQmode'
     "Unsigned Quarter-Fractional" mode represents a single byte treated
     as an unsigned fractional number.  The default format is ".8".

'UHQmode'
     "Unsigned Half-Fractional" mode represents a two-byte unsigned
     fractional number.  The default format is ".16".

'USQmode'
     "Unsigned Single Fractional" mode represents a four-byte unsigned
     fractional number.  The default format is ".32".

'UDQmode'
     "Unsigned Double Fractional" mode represents an eight-byte unsigned
     fractional number.  The default format is ".64".

'UTQmode'
     "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned
     fractional number.  The default format is ".128".

'HAmode'
     "Half-Accumulator" mode represents a two-byte signed accumulator.
     The default format is "s8.7".

'SAmode'
     "Single Accumulator" mode represents a four-byte signed
     accumulator.  The default format is "s16.15".

'DAmode'
     "Double Accumulator" mode represents an eight-byte signed
     accumulator.  The default format is "s32.31".

'TAmode'
     "Tetra Accumulator" mode represents a sixteen-byte signed
     accumulator.  The default format is "s64.63".

'UHAmode'
     "Unsigned Half-Accumulator" mode represents a two-byte unsigned
     accumulator.  The default format is "8.8".

'USAmode'
     "Unsigned Single Accumulator" mode represents a four-byte unsigned
     accumulator.  The default format is "16.16".

'UDAmode'
     "Unsigned Double Accumulator" mode represents an eight-byte
     unsigned accumulator.  The default format is "32.32".

'UTAmode'
     "Unsigned Tetra Accumulator" mode represents a sixteen-byte
     unsigned accumulator.  The default format is "64.64".

'CCmode'
     "Condition Code" mode represents the value of a condition code,
     which is a machine-specific set of bits used to represent the
     result of a comparison operation.  Other machine-specific modes may
     also be used for the condition code.  These modes are not used on
     machines that use 'cc0' (*note Condition Code::).

'BLKmode'
     "Block" mode represents values that are aggregates to which none of
     the other modes apply.  In RTL, only memory references can have
     this mode, and only if they appear in string-move or vector
     instructions.  On machines which have no such instructions,
     'BLKmode' will not appear in RTL.

'VOIDmode'
     Void mode means the absence of a mode or an unspecified mode.  For
     example, RTL expressions of code 'const_int' have mode 'VOIDmode'
     because they can be taken to have whatever mode the context
     requires.  In debugging dumps of RTL, 'VOIDmode' is expressed by
     the absence of any mode.

'QCmode, HCmode, SCmode, DCmode, XCmode, TCmode'
     These modes stand for a complex number represented as a pair of
     floating point values.  The floating point values are in 'QFmode',
     'HFmode', 'SFmode', 'DFmode', 'XFmode', and 'TFmode', respectively.

'CQImode, CHImode, CSImode, CDImode, CTImode, COImode'
     These modes stand for a complex number represented as a pair of
     integer values.  The integer values are in 'QImode', 'HImode',
     'SImode', 'DImode', 'TImode', and 'OImode', respectively.

'BND32mode BND64mode'
     These modes stand for bounds for pointer of 32 and 64 bit size
     respectively.  Mode size is double pointer mode size.

 The machine description defines 'Pmode' as a C macro which expands into
the machine mode used for addresses.  Normally this is the mode whose
size is 'BITS_PER_WORD', 'SImode' on 32-bit machines.

 The only modes which a machine description must support are 'QImode',
and the modes corresponding to 'BITS_PER_WORD', 'FLOAT_TYPE_SIZE' and
'DOUBLE_TYPE_SIZE'.  The compiler will attempt to use 'DImode' for
8-byte structures and unions, but this can be prevented by overriding
the definition of 'MAX_FIXED_MODE_SIZE'.  Alternatively, you can have
the compiler use 'TImode' for 16-byte structures and unions.  Likewise,
you can arrange for the C type 'short int' to avoid using 'HImode'.

 Very few explicit references to machine modes remain in the compiler
and these few references will soon be removed.  Instead, the machine
modes are divided into mode classes.  These are represented by the
enumeration type 'enum mode_class' defined in 'machmode.h'.  The
possible mode classes are:

'MODE_INT'
     Integer modes.  By default these are 'BImode', 'QImode', 'HImode',
     'SImode', 'DImode', 'TImode', and 'OImode'.

'MODE_PARTIAL_INT'
     The "partial integer" modes, 'PQImode', 'PHImode', 'PSImode' and
     'PDImode'.

'MODE_FLOAT'
     Floating point modes.  By default these are 'QFmode', 'HFmode',
     'TQFmode', 'SFmode', 'DFmode', 'XFmode' and 'TFmode'.

'MODE_DECIMAL_FLOAT'
     Decimal floating point modes.  By default these are 'SDmode',
     'DDmode' and 'TDmode'.

'MODE_FRACT'
     Signed fractional modes.  By default these are 'QQmode', 'HQmode',
     'SQmode', 'DQmode' and 'TQmode'.

'MODE_UFRACT'
     Unsigned fractional modes.  By default these are 'UQQmode',
     'UHQmode', 'USQmode', 'UDQmode' and 'UTQmode'.

'MODE_ACCUM'
     Signed accumulator modes.  By default these are 'HAmode', 'SAmode',
     'DAmode' and 'TAmode'.

'MODE_UACCUM'
     Unsigned accumulator modes.  By default these are 'UHAmode',
     'USAmode', 'UDAmode' and 'UTAmode'.

'MODE_COMPLEX_INT'
     Complex integer modes.  (These are not currently implemented).

'MODE_COMPLEX_FLOAT'
     Complex floating point modes.  By default these are 'QCmode',
     'HCmode', 'SCmode', 'DCmode', 'XCmode', and 'TCmode'.

'MODE_FUNCTION'
     Algol or Pascal function variables including a static chain.
     (These are not currently implemented).

'MODE_CC'
     Modes representing condition code values.  These are 'CCmode' plus
     any 'CC_MODE' modes listed in the 'MACHINE-modes.def'.  *Note Jump
     Patterns::, also see *note Condition Code::.

'MODE_POINTER_BOUNDS'
     Pointer bounds modes.  Used to represent values of pointer bounds
     type.  Operations in these modes may be executed as NOPs depending
     on hardware features and environment setup.

'MODE_RANDOM'
     This is a catchall mode class for modes which don't fit into the
     above classes.  Currently 'VOIDmode' and 'BLKmode' are in
     'MODE_RANDOM'.

 Here are some C macros that relate to machine modes:

'GET_MODE (X)'
     Returns the machine mode of the RTX X.

'PUT_MODE (X, NEWMODE)'
     Alters the machine mode of the RTX X to be NEWMODE.

'NUM_MACHINE_MODES'
     Stands for the number of machine modes available on the target
     machine.  This is one greater than the largest numeric value of any
     machine mode.

'GET_MODE_NAME (M)'
     Returns the name of mode M as a string.

'GET_MODE_CLASS (M)'
     Returns the mode class of mode M.

'GET_MODE_WIDER_MODE (M)'
     Returns the next wider natural mode.  For example, the expression
     'GET_MODE_WIDER_MODE (QImode)' returns 'HImode'.

'GET_MODE_SIZE (M)'
     Returns the size in bytes of a datum of mode M.

'GET_MODE_BITSIZE (M)'
     Returns the size in bits of a datum of mode M.

'GET_MODE_IBIT (M)'
     Returns the number of integral bits of a datum of fixed-point mode
     M.

'GET_MODE_FBIT (M)'
     Returns the number of fractional bits of a datum of fixed-point
     mode M.

'GET_MODE_MASK (M)'
     Returns a bitmask containing 1 for all bits in a word that fit
     within mode M.  This macro can only be used for modes whose bitsize
     is less than or equal to 'HOST_BITS_PER_INT'.

'GET_MODE_ALIGNMENT (M)'
     Return the required alignment, in bits, for an object of mode M.

'GET_MODE_UNIT_SIZE (M)'
     Returns the size in bytes of the subunits of a datum of mode M.
     This is the same as 'GET_MODE_SIZE' except in the case of complex
     modes.  For them, the unit size is the size of the real or
     imaginary part.

'GET_MODE_NUNITS (M)'
     Returns the number of units contained in a mode, i.e.,
     'GET_MODE_SIZE' divided by 'GET_MODE_UNIT_SIZE'.

'GET_CLASS_NARROWEST_MODE (C)'
     Returns the narrowest mode in mode class C.

 The following 3 variables are defined on every target.  They can be
used to allocate buffers that are guaranteed to be large enough to hold
any value that can be represented on the target.  The first two can be
overridden by defining them in the target's mode.def file, however, the
value must be a constant that can determined very early in the
compilation process.  The third symbol cannot be overridden.

'BITS_PER_UNIT'
     The number of bits in an addressable storage unit (byte).  If you
     do not define this, the default is 8.

'MAX_BITSIZE_MODE_ANY_INT'
     The maximum bitsize of any mode that is used in integer math.  This
     should be overridden by the target if it uses large integers as
     containers for larger vectors but otherwise never uses the contents
     to compute integer values.

'MAX_BITSIZE_MODE_ANY_MODE'
     The bitsize of the largest mode on the target.

 The global variables 'byte_mode' and 'word_mode' contain modes whose
classes are 'MODE_INT' and whose bitsizes are either 'BITS_PER_UNIT' or
'BITS_PER_WORD', respectively.  On 32-bit machines, these are 'QImode'
and 'SImode', respectively.


File: gccint.info,  Node: Constants,  Next: Regs and Memory,  Prev: Machine Modes,  Up: RTL

13.7 Constant Expression Types
==============================

The simplest RTL expressions are those that represent constant values.

'(const_int I)'
     This type of expression represents the integer value I.  I is
     customarily accessed with the macro 'INTVAL' as in 'INTVAL (EXP)',
     which is equivalent to 'XWINT (EXP, 0)'.

     Constants generated for modes with fewer bits than in
     'HOST_WIDE_INT' must be sign extended to full width (e.g., with
     'gen_int_mode').  For constants for modes with more bits than in
     'HOST_WIDE_INT' the implied high order bits of that constant are
     copies of the top bit.  Note however that values are neither
     inherently signed nor inherently unsigned; where necessary,
     signedness is determined by the rtl operation instead.

     There is only one expression object for the integer value zero; it
     is the value of the variable 'const0_rtx'.  Likewise, the only
     expression for integer value one is found in 'const1_rtx', the only
     expression for integer value two is found in 'const2_rtx', and the
     only expression for integer value negative one is found in
     'constm1_rtx'.  Any attempt to create an expression of code
     'const_int' and value zero, one, two or negative one will return
     'const0_rtx', 'const1_rtx', 'const2_rtx' or 'constm1_rtx' as
     appropriate.

     Similarly, there is only one object for the integer whose value is
     'STORE_FLAG_VALUE'.  It is found in 'const_true_rtx'.  If
     'STORE_FLAG_VALUE' is one, 'const_true_rtx' and 'const1_rtx' will
     point to the same object.  If 'STORE_FLAG_VALUE' is -1,
     'const_true_rtx' and 'constm1_rtx' will point to the same object.

'(const_double:M I0 I1 ...)'
     This represents either a floating-point constant of mode M or (on
     older ports that do not define 'TARGET_SUPPORTS_WIDE_INT') an
     integer constant too large to fit into 'HOST_BITS_PER_WIDE_INT'
     bits but small enough to fit within twice that number of bits.  In
     the latter case, M will be 'VOIDmode'.  For integral values
     constants for modes with more bits than twice the number in
     'HOST_WIDE_INT' the implied high order bits of that constant are
     copies of the top bit of 'CONST_DOUBLE_HIGH'.  Note however that
     integral values are neither inherently signed nor inherently
     unsigned; where necessary, signedness is determined by the rtl
     operation instead.

     On more modern ports, 'CONST_DOUBLE' only represents floating point
     values.  New ports define 'TARGET_SUPPORTS_WIDE_INT' to make this
     designation.

     If M is 'VOIDmode', the bits of the value are stored in I0 and I1.
     I0 is customarily accessed with the macro 'CONST_DOUBLE_LOW' and I1
     with 'CONST_DOUBLE_HIGH'.

     If the constant is floating point (regardless of its precision),
     then the number of integers used to store the value depends on the
     size of 'REAL_VALUE_TYPE' (*note Floating Point::).  The integers
     represent a floating point number, but not precisely in the target
     machine's or host machine's floating point format.  To convert them
     to the precise bit pattern used by the target machine, use the
     macro 'REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data
     Output::).

'(const_wide_int:M NUNITS ELT0 ...)'
     This contains an array of 'HOST_WIDE_INT's that is large enough to
     hold any constant that can be represented on the target.  This form
     of rtl is only used on targets that define
     'TARGET_SUPPORTS_WIDE_INT' to be nonzero and then 'CONST_DOUBLE's
     are only used to hold floating-point values.  If the target leaves
     'TARGET_SUPPORTS_WIDE_INT' defined as 0, 'CONST_WIDE_INT's are not
     used and 'CONST_DOUBLE's are as they were before.

     The values are stored in a compressed format.  The higher-order 0s
     or -1s are not represented if they are just the logical sign
     extension of the number that is represented.

'CONST_WIDE_INT_VEC (CODE)'
     Returns the entire array of 'HOST_WIDE_INT's that are used to store
     the value.  This macro should be rarely used.

'CONST_WIDE_INT_NUNITS (CODE)'
     The number of 'HOST_WIDE_INT's used to represent the number.  Note
     that this generally is smaller than the number of 'HOST_WIDE_INT's
     implied by the mode size.

'CONST_WIDE_INT_NUNITS (CODE,I)'
     Returns the 'i'th element of the array.  Element 0 is contains the
     low order bits of the constant.

'(const_fixed:M ...)'
     Represents a fixed-point constant of mode M.  The operand is a data
     structure of type 'struct fixed_value' and is accessed with the
     macro 'CONST_FIXED_VALUE'.  The high part of data is accessed with
     'CONST_FIXED_VALUE_HIGH'; the low part is accessed with
     'CONST_FIXED_VALUE_LOW'.

'(const_vector:M [X0 X1 ...])'
     Represents a vector constant.  The square brackets stand for the
     vector containing the constant elements.  X0, X1 and so on are the
     'const_int', 'const_double' or 'const_fixed' elements.

     The number of units in a 'const_vector' is obtained with the macro
     'CONST_VECTOR_NUNITS' as in 'CONST_VECTOR_NUNITS (V)'.

     Individual elements in a vector constant are accessed with the
     macro 'CONST_VECTOR_ELT' as in 'CONST_VECTOR_ELT (V, N)' where V is
     the vector constant and N is the element desired.

'(const_string STR)'
     Represents a constant string with value STR.  Currently this is
     used only for insn attributes (*note Insn Attributes::) since
     constant strings in C are placed in memory.

'(symbol_ref:MODE SYMBOL)'
     Represents the value of an assembler label for data.  SYMBOL is a
     string that describes the name of the assembler label.  If it
     starts with a '*', the label is the rest of SYMBOL not including
     the '*'.  Otherwise, the label is SYMBOL, usually prefixed with
     '_'.

     The 'symbol_ref' contains a mode, which is usually 'Pmode'.
     Usually that is the only mode for which a symbol is directly valid.

'(label_ref:MODE LABEL)'
     Represents the value of an assembler label for code.  It contains
     one operand, an expression, which must be a 'code_label' or a
     'note' of type 'NOTE_INSN_DELETED_LABEL' that appears in the
     instruction sequence to identify the place where the label should
     go.

     The reason for using a distinct expression type for code label
     references is so that jump optimization can distinguish them.

     The 'label_ref' contains a mode, which is usually 'Pmode'.  Usually
     that is the only mode for which a label is directly valid.

'(const:M EXP)'
     Represents a constant that is the result of an assembly-time
     arithmetic computation.  The operand, EXP, is an expression that
     contains only constants ('const_int', 'symbol_ref' and 'label_ref'
     expressions) combined with 'plus' and 'minus'.  However, not all
     combinations are valid, since the assembler cannot do arbitrary
     arithmetic on relocatable symbols.

     M should be 'Pmode'.

'(high:M EXP)'
     Represents the high-order bits of EXP, usually a 'symbol_ref'.  The
     number of bits is machine-dependent and is normally the number of
     bits specified in an instruction that initializes the high order
     bits of a register.  It is used with 'lo_sum' to represent the
     typical two-instruction sequence used in RISC machines to reference
     a global memory location.

     M should be 'Pmode'.

 The macro 'CONST0_RTX (MODE)' refers to an expression with value 0 in
mode MODE.  If mode MODE is of mode class 'MODE_INT', it returns
'const0_rtx'.  If mode MODE is of mode class 'MODE_FLOAT', it returns a
'CONST_DOUBLE' expression in mode MODE.  Otherwise, it returns a
'CONST_VECTOR' expression in mode MODE.  Similarly, the macro
'CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE
and similarly for 'CONST2_RTX'.  The 'CONST1_RTX' and 'CONST2_RTX'
macros are undefined for vector modes.


File: gccint.info,  Node: Regs and Memory,  Next: Arithmetic,  Prev: Constants,  Up: RTL

13.8 Registers and Memory
=========================

Here are the RTL expression types for describing access to machine
registers and to main memory.

'(reg:M N)'
     For small values of the integer N (those that are less than
     'FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
     register number N: a "hard register".  For larger values of N, it
     stands for a temporary value or "pseudo register".  The compiler's
     strategy is to generate code assuming an unlimited number of such
     pseudo registers, and later convert them into hard registers or
     into memory references.

     M is the machine mode of the reference.  It is necessary because
     machines can generally refer to each register in more than one
     mode.  For example, a register may contain a full word but there
     may be instructions to refer to it as a half word or as a single
     byte, as well as instructions to refer to it as a floating point
     number of various precisions.

     Even for a register that the machine can access in only one mode,
     the mode must always be specified.

     The symbol 'FIRST_PSEUDO_REGISTER' is defined by the machine
     description, since the number of hard registers on the machine is
     an invariant characteristic of the machine.  Note, however, that
     not all of the machine registers must be general registers.  All
     the machine registers that can be used for storage of data are
     given hard register numbers, even those that can be used only in
     certain instructions or can hold only certain types of data.

     A hard register may be accessed in various modes throughout one
     function, but each pseudo register is given a natural mode and is
     accessed only in that mode.  When it is necessary to describe an
     access to a pseudo register using a nonnatural mode, a 'subreg'
     expression is used.

     A 'reg' expression with a machine mode that specifies more than one
     word of data may actually stand for several consecutive registers.
     If in addition the register number specifies a hardware register,
     then it actually represents several consecutive hardware registers
     starting with the specified one.

     Each pseudo register number used in a function's RTL code is
     represented by a unique 'reg' expression.

     Some pseudo register numbers, those within the range of
     'FIRST_VIRTUAL_REGISTER' to 'LAST_VIRTUAL_REGISTER' only appear
     during the RTL generation phase and are eliminated before the
     optimization phases.  These represent locations in the stack frame
     that cannot be determined until RTL generation for the function has
     been completed.  The following virtual register numbers are
     defined:

     'VIRTUAL_INCOMING_ARGS_REGNUM'
          This points to the first word of the incoming arguments passed
          on the stack.  Normally these arguments are placed there by
          the caller, but the callee may have pushed some arguments that
          were previously passed in registers.

          When RTL generation is complete, this virtual register is
          replaced by the sum of the register given by
          'ARG_POINTER_REGNUM' and the value of 'FIRST_PARM_OFFSET'.

     'VIRTUAL_STACK_VARS_REGNUM'
          If 'FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this
          points to immediately above the first variable on the stack.
          Otherwise, it points to the first variable on the stack.

          'VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the
          register given by 'FRAME_POINTER_REGNUM' and the value
          'STARTING_FRAME_OFFSET'.

     'VIRTUAL_STACK_DYNAMIC_REGNUM'
          This points to the location of dynamically allocated memory on
          the stack immediately after the stack pointer has been
          adjusted by the amount of memory desired.

          This virtual register is replaced by the sum of the register
          given by 'STACK_POINTER_REGNUM' and the value
          'STACK_DYNAMIC_OFFSET'.

     'VIRTUAL_OUTGOING_ARGS_REGNUM'
          This points to the location in the stack at which outgoing
          arguments should be written when the stack is pre-pushed
          (arguments pushed using push insns should always use
          'STACK_POINTER_REGNUM').

          This virtual register is replaced by the sum of the register
          given by 'STACK_POINTER_REGNUM' and the value
          'STACK_POINTER_OFFSET'.

'(subreg:M1 REG:M2 BYTENUM)'

     'subreg' expressions are used to refer to a register in a machine
     mode other than its natural one, or to refer to one register of a
     multi-part 'reg' that actually refers to several registers.

     Each pseudo register has a natural mode.  If it is necessary to
     operate on it in a different mode, the register must be enclosed in
     a 'subreg'.

     There are currently three supported types for the first operand of
     a 'subreg':
        * pseudo registers This is the most common case.  Most 'subreg's
          have pseudo 'reg's as their first operand.

        * mem 'subreg's of 'mem' were common in earlier versions of GCC
          and are still supported.  During the reload pass these are
          replaced by plain 'mem's.  On machines that do not do
          instruction scheduling, use of 'subreg's of 'mem' are still
          used, but this is no longer recommended.  Such 'subreg's are
          considered to be 'register_operand's rather than
          'memory_operand's before and during reload.  Because of this,
          the scheduling passes cannot properly schedule instructions
          with 'subreg's of 'mem', so for machines that do scheduling,
          'subreg's of 'mem' should never be used.  To support this, the
          combine and recog passes have explicit code to inhibit the
          creation of 'subreg's of 'mem' when 'INSN_SCHEDULING' is
          defined.

          The use of 'subreg's of 'mem' after the reload pass is an area
          that is not well understood and should be avoided.  There is
          still some code in the compiler to support this, but this code
          has possibly rotted.  This use of 'subreg's is discouraged and
          will most likely not be supported in the future.

        * hard registers It is seldom necessary to wrap hard registers
          in 'subreg's; such registers would normally reduce to a single
          'reg' rtx.  This use of 'subreg's is discouraged and may not
          be supported in the future.

     'subreg's of 'subreg's are not supported.  Using
     'simplify_gen_subreg' is the recommended way to avoid this problem.

     'subreg's come in two distinct flavors, each having its own usage
     and rules:

     Paradoxical subregs
          When M1 is strictly wider than M2, the 'subreg' expression is
          called "paradoxical".  The canonical test for this class of
          'subreg' is:

               GET_MODE_SIZE (M1) > GET_MODE_SIZE (M2)

          Paradoxical 'subreg's can be used as both lvalues and rvalues.
          When used as an lvalue, the low-order bits of the source value
          are stored in REG and the high-order bits are discarded.  When
          used as an rvalue, the low-order bits of the 'subreg' are
          taken from REG while the high-order bits may or may not be
          defined.

          The high-order bits of rvalues are in the following
          circumstances:

             * 'subreg's of 'mem' When M2 is smaller than a word, the
               macro 'LOAD_EXTEND_OP', can control how the high-order
               bits are defined.

             * 'subreg' of 'reg's The upper bits are defined when
               'SUBREG_PROMOTED_VAR_P' is true.
               'SUBREG_PROMOTED_UNSIGNED_P' describes what the upper
               bits hold.  Such subregs usually represent local
               variables, register variables and parameter pseudo
               variables that have been promoted to a wider mode.

          BYTENUM is always zero for a paradoxical 'subreg', even on
          big-endian targets.

          For example, the paradoxical 'subreg':

               (set (subreg:SI (reg:HI X) 0) Y)

          stores the lower 2 bytes of Y in X and discards the upper 2
          bytes.  A subsequent:

               (set Z (subreg:SI (reg:HI X) 0))

          would set the lower two bytes of Z to Y and set the upper two
          bytes to an unknown value assuming 'SUBREG_PROMOTED_VAR_P' is
          false.

     Normal subregs
          When M1 is at least as narrow as M2 the 'subreg' expression is
          called "normal".

          Normal 'subreg's restrict consideration to certain bits of
          REG.  There are two cases.  If M1 is smaller than a word, the
          'subreg' refers to the least-significant part (or "lowpart")
          of one word of REG.  If M1 is word-sized or greater, the
          'subreg' refers to one or more complete words.

          When used as an lvalue, 'subreg' is a word-based accessor.
          Storing to a 'subreg' modifies all the words of REG that
          overlap the 'subreg', but it leaves the other words of REG
          alone.

          When storing to a normal 'subreg' that is smaller than a word,
          the other bits of the referenced word are usually left in an
          undefined state.  This laxity makes it easier to generate
          efficient code for such instructions.  To represent an
          instruction that preserves all the bits outside of those in
          the 'subreg', use 'strict_low_part' or 'zero_extract' around
          the 'subreg'.

          BYTENUM must identify the offset of the first byte of the
          'subreg' from the start of REG, assuming that REG is laid out
          in memory order.  The memory order of bytes is defined by two
          target macros, 'WORDS_BIG_ENDIAN' and 'BYTES_BIG_ENDIAN':

             * 'WORDS_BIG_ENDIAN', if set to 1, says that byte number
               zero is part of the most significant word; otherwise, it
               is part of the least significant word.

             * 'BYTES_BIG_ENDIAN', if set to 1, says that byte number
               zero is the most significant byte within a word;
               otherwise, it is the least significant byte within a
               word.

          On a few targets, 'FLOAT_WORDS_BIG_ENDIAN' disagrees with
          'WORDS_BIG_ENDIAN'.  However, most parts of the compiler treat
          floating point values as if they had the same endianness as
          integer values.  This works because they handle them solely as
          a collection of integer values, with no particular numerical
          value.  Only real.c and the runtime libraries care about
          'FLOAT_WORDS_BIG_ENDIAN'.

          Thus,

               (subreg:HI (reg:SI X) 2)

          on a 'BYTES_BIG_ENDIAN', 'UNITS_PER_WORD == 4' target is the
          same as

               (subreg:HI (reg:SI X) 0)

          on a little-endian, 'UNITS_PER_WORD == 4' target.  Both
          'subreg's access the lower two bytes of register X.

     A 'MODE_PARTIAL_INT' mode behaves as if it were as wide as the
     corresponding 'MODE_INT' mode, except that it has an unknown number
     of undefined bits.  For example:

          (subreg:PSI (reg:SI 0) 0)

     accesses the whole of '(reg:SI 0)', but the exact relationship
     between the 'PSImode' value and the 'SImode' value is not defined.
     If we assume 'UNITS_PER_WORD <= 4', then the following two
     'subreg's:

          (subreg:PSI (reg:DI 0) 0)
          (subreg:PSI (reg:DI 0) 4)

     represent independent 4-byte accesses to the two halves of '(reg:DI
     0)'.  Both 'subreg's have an unknown number of undefined bits.

     If 'UNITS_PER_WORD <= 2' then these two 'subreg's:

          (subreg:HI (reg:PSI 0) 0)
          (subreg:HI (reg:PSI 0) 2)

     represent independent 2-byte accesses that together span the whole
     of '(reg:PSI 0)'.  Storing to the first 'subreg' does not affect
     the value of the second, and vice versa.  '(reg:PSI 0)' has an
     unknown number of undefined bits, so the assignment:

          (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4))

     does not guarantee that '(subreg:HI (reg:PSI 0) 0)' has the value
     '(reg:HI 4)'.

     The rules above apply to both pseudo REGs and hard REGs.  If the
     semantics are not correct for particular combinations of M1, M2 and
     hard REG, the target-specific code must ensure that those
     combinations are never used.  For example:

          CANNOT_CHANGE_MODE_CLASS (M2, M1, CLASS)

     must be true for every class CLASS that includes REG.

     The first operand of a 'subreg' expression is customarily accessed
     with the 'SUBREG_REG' macro and the second operand is customarily
     accessed with the 'SUBREG_BYTE' macro.

     It has been several years since a platform in which
     'BYTES_BIG_ENDIAN' not equal to 'WORDS_BIG_ENDIAN' has been tested.
     Anyone wishing to support such a platform in the future may be
     confronted with code rot.

'(scratch:M)'
     This represents a scratch register that will be required for the
     execution of a single instruction and not used subsequently.  It is
     converted into a 'reg' by either the local register allocator or
     the reload pass.

     'scratch' is usually present inside a 'clobber' operation (*note
     Side Effects::).

'(cc0)'
     This refers to the machine's condition code register.  It has no
     operands and may not have a machine mode.  There are two ways to
     use it:

        * To stand for a complete set of condition code flags.  This is
          best on most machines, where each comparison sets the entire
          series of flags.

          With this technique, '(cc0)' may be validly used in only two
          contexts: as the destination of an assignment (in test and
          compare instructions) and in comparison operators comparing
          against zero ('const_int' with value zero; that is to say,
          'const0_rtx').

        * To stand for a single flag that is the result of a single
          condition.  This is useful on machines that have only a single
          flag bit, and in which comparison instructions must specify
          the condition to test.

          With this technique, '(cc0)' may be validly used in only two
          contexts: as the destination of an assignment (in test and
          compare instructions) where the source is a comparison
          operator, and as the first operand of 'if_then_else' (in a
          conditional branch).

     There is only one expression object of code 'cc0'; it is the value
     of the variable 'cc0_rtx'.  Any attempt to create an expression of
     code 'cc0' will return 'cc0_rtx'.

     Instructions can set the condition code implicitly.  On many
     machines, nearly all instructions set the condition code based on
     the value that they compute or store.  It is not necessary to
     record these actions explicitly in the RTL because the machine
     description includes a prescription for recognizing the
     instructions that do so (by means of the macro 'NOTICE_UPDATE_CC').
     *Note Condition Code::.  Only instructions whose sole purpose is to
     set the condition code, and instructions that use the condition
     code, need mention '(cc0)'.

     On some machines, the condition code register is given a register
     number and a 'reg' is used instead of '(cc0)'.  This is usually the
     preferable approach if only a small subset of instructions modify
     the condition code.  Other machines store condition codes in
     general registers; in such cases a pseudo register should be used.

     Some machines, such as the SPARC and RS/6000, have two sets of
     arithmetic instructions, one that sets and one that does not set
     the condition code.  This is best handled by normally generating
     the instruction that does not set the condition code, and making a
     pattern that both performs the arithmetic and sets the condition
     code register (which would not be '(cc0)' in this case).  For
     examples, search for 'addcc' and 'andcc' in 'sparc.md'.

'(pc)'
     This represents the machine's program counter.  It has no operands
     and may not have a machine mode.  '(pc)' may be validly used only
     in certain specific contexts in jump instructions.

     There is only one expression object of code 'pc'; it is the value
     of the variable 'pc_rtx'.  Any attempt to create an expression of
     code 'pc' will return 'pc_rtx'.

     All instructions that do not jump alter the program counter
     implicitly by incrementing it, but there is no need to mention this
     in the RTL.

'(mem:M ADDR ALIAS)'
     This RTX represents a reference to main memory at an address
     represented by the expression ADDR.  M specifies how large a unit
     of memory is accessed.  ALIAS specifies an alias set for the
     reference.  In general two items are in different alias sets if
     they cannot reference the same memory address.

     The construct '(mem:BLK (scratch))' is considered to alias all
     other memories.  Thus it may be used as a memory barrier in
     epilogue stack deallocation patterns.

'(concatM RTX RTX)'
     This RTX represents the concatenation of two other RTXs.  This is
     used for complex values.  It should only appear in the RTL attached
     to declarations and during RTL generation.  It should not appear in
     the ordinary insn chain.

'(concatnM [RTX ...])'
     This RTX represents the concatenation of all the RTX to make a
     single value.  Like 'concat', this should only appear in
     declarations, and not in the insn chain.


File: gccint.info,  Node: Arithmetic,  Next: Comparisons,  Prev: Regs and Memory,  Up: RTL

13.9 RTL Expressions for Arithmetic
===================================

Unless otherwise specified, all the operands of arithmetic expressions
must be valid for mode M.  An operand is valid for mode M if it has mode
M, or if it is a 'const_int' or 'const_double' and M is a mode of class
'MODE_INT'.

 For commutative binary operations, constants should be placed in the
second operand.

'(plus:M X Y)'
'(ss_plus:M X Y)'
'(us_plus:M X Y)'

     These three expressions all represent the sum of the values
     represented by X and Y carried out in machine mode M.  They differ
     in their behavior on overflow of integer modes.  'plus' wraps round
     modulo the width of M; 'ss_plus' saturates at the maximum signed
     value representable in M; 'us_plus' saturates at the maximum
     unsigned value.

'(lo_sum:M X Y)'

     This expression represents the sum of X and the low-order bits of
     Y.  It is used with 'high' (*note Constants::) to represent the
     typical two-instruction sequence used in RISC machines to reference
     a global memory location.

     The number of low order bits is machine-dependent but is normally
     the number of bits in a 'Pmode' item minus the number of bits set
     by 'high'.

     M should be 'Pmode'.

'(minus:M X Y)'
'(ss_minus:M X Y)'
'(us_minus:M X Y)'

     These three expressions represent the result of subtracting Y from
     X, carried out in mode M.  Behavior on overflow is the same as for
     the three variants of 'plus' (see above).

'(compare:M X Y)'
     Represents the result of subtracting Y from X for purposes of
     comparison.  The result is computed without overflow, as if with
     infinite precision.

     Of course, machines can't really subtract with infinite precision.
     However, they can pretend to do so when only the sign of the result
     will be used, which is the case when the result is stored in the
     condition code.  And that is the _only_ way this kind of expression
     may validly be used: as a value to be stored in the condition
     codes, either '(cc0)' or a register.  *Note Comparisons::.

     The mode M is not related to the modes of X and Y, but instead is
     the mode of the condition code value.  If '(cc0)' is used, it is
     'VOIDmode'.  Otherwise it is some mode in class 'MODE_CC', often
     'CCmode'.  *Note Condition Code::.  If M is 'VOIDmode' or 'CCmode',
     the operation returns sufficient information (in an unspecified
     format) so that any comparison operator can be applied to the
     result of the 'COMPARE' operation.  For other modes in class
     'MODE_CC', the operation only returns a subset of this information.

     Normally, X and Y must have the same mode.  Otherwise, 'compare' is
     valid only if the mode of X is in class 'MODE_INT' and Y is a
     'const_int' or 'const_double' with mode 'VOIDmode'.  The mode of X
     determines what mode the comparison is to be done in; thus it must
     not be 'VOIDmode'.

     If one of the operands is a constant, it should be placed in the
     second operand and the comparison code adjusted as appropriate.

     A 'compare' specifying two 'VOIDmode' constants is not valid since
     there is no way to know in what mode the comparison is to be
     performed; the comparison must either be folded during the
     compilation or the first operand must be loaded into a register
     while its mode is still known.

'(neg:M X)'
'(ss_neg:M X)'
'(us_neg:M X)'
     These two expressions represent the negation (subtraction from
     zero) of the value represented by X, carried out in mode M.  They
     differ in the behavior on overflow of integer modes.  In the case
     of 'neg', the negation of the operand may be a number not
     representable in mode M, in which case it is truncated to M.
     'ss_neg' and 'us_neg' ensure that an out-of-bounds result saturates
     to the maximum or minimum signed or unsigned value.

'(mult:M X Y)'
'(ss_mult:M X Y)'
'(us_mult:M X Y)'
     Represents the signed product of the values represented by X and Y
     carried out in machine mode M.  'ss_mult' and 'us_mult' ensure that
     an out-of-bounds result saturates to the maximum or minimum signed
     or unsigned value.

     Some machines support a multiplication that generates a product
     wider than the operands.  Write the pattern for this as

          (mult:M (sign_extend:M X) (sign_extend:M Y))

     where M is wider than the modes of X and Y, which need not be the
     same.

     For unsigned widening multiplication, use the same idiom, but with
     'zero_extend' instead of 'sign_extend'.

'(fma:M X Y Z)'
     Represents the 'fma', 'fmaf', and 'fmal' builtin functions, which
     compute 'X * Y + Z' without doing an intermediate rounding step.

'(div:M X Y)'
'(ss_div:M X Y)'
     Represents the quotient in signed division of X by Y, carried out
     in machine mode M.  If M is a floating point mode, it represents
     the exact quotient; otherwise, the integerized quotient.  'ss_div'
     ensures that an out-of-bounds result saturates to the maximum or
     minimum signed value.

     Some machines have division instructions in which the operands and
     quotient widths are not all the same; you should represent such
     instructions using 'truncate' and 'sign_extend' as in,

          (truncate:M1 (div:M2 X (sign_extend:M2 Y)))

'(udiv:M X Y)'
'(us_div:M X Y)'
     Like 'div' but represents unsigned division.  'us_div' ensures that
     an out-of-bounds result saturates to the maximum or minimum
     unsigned value.

'(mod:M X Y)'
'(umod:M X Y)'
     Like 'div' and 'udiv' but represent the remainder instead of the
     quotient.

'(smin:M X Y)'
'(smax:M X Y)'
     Represents the smaller (for 'smin') or larger (for 'smax') of X and
     Y, interpreted as signed values in mode M.  When used with floating
     point, if both operands are zeros, or if either operand is 'NaN',
     then it is unspecified which of the two operands is returned as the
     result.

'(umin:M X Y)'
'(umax:M X Y)'
     Like 'smin' and 'smax', but the values are interpreted as unsigned
     integers.

'(not:M X)'
     Represents the bitwise complement of the value represented by X,
     carried out in mode M, which must be a fixed-point machine mode.

'(and:M X Y)'
     Represents the bitwise logical-and of the values represented by X
     and Y, carried out in machine mode M, which must be a fixed-point
     machine mode.

'(ior:M X Y)'
     Represents the bitwise inclusive-or of the values represented by X
     and Y, carried out in machine mode M, which must be a fixed-point
     mode.

'(xor:M X Y)'
     Represents the bitwise exclusive-or of the values represented by X
     and Y, carried out in machine mode M, which must be a fixed-point
     mode.

'(ashift:M X C)'
'(ss_ashift:M X C)'
'(us_ashift:M X C)'
     These three expressions represent the result of arithmetically
     shifting X left by C places.  They differ in their behavior on
     overflow of integer modes.  An 'ashift' operation is a plain shift
     with no special behavior in case of a change in the sign bit;
     'ss_ashift' and 'us_ashift' saturates to the minimum or maximum
     representable value if any of the bits shifted out differs from the
     final sign bit.

     X have mode M, a fixed-point machine mode.  C be a fixed-point mode
     or be a constant with mode 'VOIDmode'; which mode is determined by
     the mode called for in the machine description entry for the
     left-shift instruction.  For example, on the VAX, the mode of C is
     'QImode' regardless of M.

'(lshiftrt:M X C)'
'(ashiftrt:M X C)'
     Like 'ashift' but for right shift.  Unlike the case for left shift,
     these two operations are distinct.

'(rotate:M X C)'
'(rotatert:M X C)'
     Similar but represent left and right rotate.  If C is a constant,
     use 'rotate'.

'(abs:M X)'
'(ss_abs:M X)'
     Represents the absolute value of X, computed in mode M.  'ss_abs'
     ensures that an out-of-bounds result saturates to the maximum
     signed value.

'(sqrt:M X)'
     Represents the square root of X, computed in mode M.  Most often M
     will be a floating point mode.

'(ffs:M X)'
     Represents one plus the index of the least significant 1-bit in X,
     represented as an integer of mode M.  (The value is zero if X is
     zero.)  The mode of X must be M or 'VOIDmode'.

'(clrsb:M X)'
     Represents the number of redundant leading sign bits in X,
     represented as an integer of mode M, starting at the most
     significant bit position.  This is one less than the number of
     leading sign bits (either 0 or 1), with no special cases.  The mode
     of X must be M or 'VOIDmode'.

'(clz:M X)'
     Represents the number of leading 0-bits in X, represented as an
     integer of mode M, starting at the most significant bit position.
     If X is zero, the value is determined by
     'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Note that this is one
     of the few expressions that is not invariant under widening.  The
     mode of X must be M or 'VOIDmode'.

'(ctz:M X)'
     Represents the number of trailing 0-bits in X, represented as an
     integer of mode M, starting at the least significant bit position.
     If X is zero, the value is determined by
     'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Except for this case,
     'ctz(x)' is equivalent to 'ffs(X) - 1'.  The mode of X must be M or
     'VOIDmode'.

'(popcount:M X)'
     Represents the number of 1-bits in X, represented as an integer of
     mode M.  The mode of X must be M or 'VOIDmode'.

'(parity:M X)'
     Represents the number of 1-bits modulo 2 in X, represented as an
     integer of mode M.  The mode of X must be M or 'VOIDmode'.

'(bswap:M X)'
     Represents the value X with the order of bytes reversed, carried
     out in mode M, which must be a fixed-point machine mode.  The mode
     of X must be M or 'VOIDmode'.


File: gccint.info,  Node: Comparisons,  Next: Bit-Fields,  Prev: Arithmetic,  Up: RTL

13.10 Comparison Operations
===========================

Comparison operators test a relation on two operands and are considered
to represent a machine-dependent nonzero value described by, but not
necessarily equal to, 'STORE_FLAG_VALUE' (*note Misc::) if the relation
holds, or zero if it does not, for comparison operators whose results
have a 'MODE_INT' mode, 'FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the
relation holds, or zero if it does not, for comparison operators that
return floating-point values, and a vector of either
'VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of
zeros if it does not, for comparison operators that return vector
results.  The mode of the comparison operation is independent of the
mode of the data being compared.  If the comparison operation is being
tested (e.g., the first operand of an 'if_then_else'), the mode must be
'VOIDmode'.

 There are two ways that comparison operations may be used.  The
comparison operators may be used to compare the condition codes '(cc0)'
against zero, as in '(eq (cc0) (const_int 0))'.  Such a construct
actually refers to the result of the preceding instruction in which the
condition codes were set.  The instruction setting the condition code
must be adjacent to the instruction using the condition code; only
'note' insns may separate them.

 Alternatively, a comparison operation may directly compare two data
objects.  The mode of the comparison is determined by the operands; they
must both be valid for a common machine mode.  A comparison with both
operands constant would be invalid as the machine mode could not be
deduced from it, but such a comparison should never exist in RTL due to
constant folding.

 In the example above, if '(cc0)' were last set to '(compare X Y)', the
comparison operation is identical to '(eq X Y)'.  Usually only one style
of comparisons is supported on a particular machine, but the combine
pass will try to merge the operations to produce the 'eq' shown in case
it exists in the context of the particular insn involved.

 Inequality comparisons come in two flavors, signed and unsigned.  Thus,
there are distinct expression codes 'gt' and 'gtu' for signed and
unsigned greater-than.  These can produce different results for the same
pair of integer values: for example, 1 is signed greater-than -1 but not
unsigned greater-than, because -1 when regarded as unsigned is actually
'0xffffffff' which is greater than 1.

 The signed comparisons are also used for floating point values.
Floating point comparisons are distinguished by the machine modes of the
operands.

'(eq:M X Y)'
     'STORE_FLAG_VALUE' if the values represented by X and Y are equal,
     otherwise 0.

'(ne:M X Y)'
     'STORE_FLAG_VALUE' if the values represented by X and Y are not
     equal, otherwise 0.

'(gt:M X Y)'
     'STORE_FLAG_VALUE' if the X is greater than Y.  If they are
     fixed-point, the comparison is done in a signed sense.

'(gtu:M X Y)'
     Like 'gt' but does unsigned comparison, on fixed-point numbers
     only.

'(lt:M X Y)'
'(ltu:M X Y)'
     Like 'gt' and 'gtu' but test for "less than".

'(ge:M X Y)'
'(geu:M X Y)'
     Like 'gt' and 'gtu' but test for "greater than or equal".

'(le:M X Y)'
'(leu:M X Y)'
     Like 'gt' and 'gtu' but test for "less than or equal".

'(if_then_else COND THEN ELSE)'
     This is not a comparison operation but is listed here because it is
     always used in conjunction with a comparison operation.  To be
     precise, COND is a comparison expression.  This expression
     represents a choice, according to COND, between the value
     represented by THEN and the one represented by ELSE.

     On most machines, 'if_then_else' expressions are valid only to
     express conditional jumps.

'(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)'
     Similar to 'if_then_else', but more general.  Each of TEST1, TEST2,
     ... is performed in turn.  The result of this expression is the
     VALUE corresponding to the first nonzero test, or DEFAULT if none
     of the tests are nonzero expressions.

     This is currently not valid for instruction patterns and is
     supported only for insn attributes.  *Note Insn Attributes::.


File: gccint.info,  Node: Bit-Fields,  Next: Vector Operations,  Prev: Comparisons,  Up: RTL

13.11 Bit-Fields
================

Special expression codes exist to represent bit-field instructions.

'(sign_extract:M LOC SIZE POS)'
     This represents a reference to a sign-extended bit-field contained
     or starting in LOC (a memory or register reference).  The bit-field
     is SIZE bits wide and starts at bit POS.  The compilation option
     'BITS_BIG_ENDIAN' says which end of the memory unit POS counts
     from.

     If LOC is in memory, its mode must be a single-byte integer mode.
     If LOC is in a register, the mode to use is specified by the
     operand of the 'insv' or 'extv' pattern (*note Standard Names::)
     and is usually a full-word integer mode, which is the default if
     none is specified.

     The mode of POS is machine-specific and is also specified in the
     'insv' or 'extv' pattern.

     The mode M is the same as the mode that would be used for LOC if it
     were a register.

     A 'sign_extract' can not appear as an lvalue, or part thereof, in
     RTL.

'(zero_extract:M LOC SIZE POS)'
     Like 'sign_extract' but refers to an unsigned or zero-extended
     bit-field.  The same sequence of bits are extracted, but they are
     filled to an entire word with zeros instead of by sign-extension.

     Unlike 'sign_extract', this type of expressions can be lvalues in
     RTL; they may appear on the left side of an assignment, indicating
     insertion of a value into the specified bit-field.


File: gccint.info,  Node: Vector Operations,  Next: Conversions,  Prev: Bit-Fields,  Up: RTL

13.12 Vector Operations
=======================

All normal RTL expressions can be used with vector modes; they are
interpreted as operating on each part of the vector independently.
Additionally, there are a few new expressions to describe specific
vector operations.

'(vec_merge:M VEC1 VEC2 ITEMS)'
     This describes a merge operation between two vectors.  The result
     is a vector of mode M; its elements are selected from either VEC1
     or VEC2.  Which elements are selected is described by ITEMS, which
     is a bit mask represented by a 'const_int'; a zero bit indicates
     the corresponding element in the result vector is taken from VEC2
     while a set bit indicates it is taken from VEC1.

'(vec_select:M VEC1 SELECTION)'
     This describes an operation that selects parts of a vector.  VEC1
     is the source vector, and SELECTION is a 'parallel' that contains a
     'const_int' for each of the subparts of the result vector, giving
     the number of the source subpart that should be stored into it.
     The result mode M is either the submode for a single element of
     VEC1 (if only one subpart is selected), or another vector mode with
     that element submode (if multiple subparts are selected).

'(vec_concat:M X1 X2)'
     Describes a vector concat operation.  The result is a concatenation
     of the vectors or scalars X1 and X2; its length is the sum of the
     lengths of the two inputs.

'(vec_duplicate:M X)'
     This operation converts a scalar into a vector or a small vector
     into a larger one by duplicating the input values.  The output
     vector mode must have the same submodes as the input vector mode or
     the scalar modes, and the number of output parts must be an integer
     multiple of the number of input parts.


File: gccint.info,  Node: Conversions,  Next: RTL Declarations,  Prev: Vector Operations,  Up: RTL

13.13 Conversions
=================

All conversions between machine modes must be represented by explicit
conversion operations.  For example, an expression which is the sum of a
byte and a full word cannot be written as '(plus:SI (reg:QI 34) (reg:SI
80))' because the 'plus' operation requires two operands of the same
machine mode.  Therefore, the byte-sized operand is enclosed in a
conversion operation, as in

     (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))

 The conversion operation is not a mere placeholder, because there may
be more than one way of converting from a given starting mode to the
desired final mode.  The conversion operation code says how to do it.

 For all conversion operations, X must not be 'VOIDmode' because the
mode in which to do the conversion would not be known.  The conversion
must either be done at compile-time or X must be placed into a register.

'(sign_extend:M X)'
     Represents the result of sign-extending the value X to machine mode
     M.  M must be a fixed-point mode and X a fixed-point value of a
     mode narrower than M.

'(zero_extend:M X)'
     Represents the result of zero-extending the value X to machine mode
     M.  M must be a fixed-point mode and X a fixed-point value of a
     mode narrower than M.

'(float_extend:M X)'
     Represents the result of extending the value X to machine mode M.
     M must be a floating point mode and X a floating point value of a
     mode narrower than M.

'(truncate:M X)'
     Represents the result of truncating the value X to machine mode M.
     M must be a fixed-point mode and X a fixed-point value of a mode
     wider than M.

'(ss_truncate:M X)'
     Represents the result of truncating the value X to machine mode M,
     using signed saturation in the case of overflow.  Both M and the
     mode of X must be fixed-point modes.

'(us_truncate:M X)'
     Represents the result of truncating the value X to machine mode M,
     using unsigned saturation in the case of overflow.  Both M and the
     mode of X must be fixed-point modes.

'(float_truncate:M X)'
     Represents the result of truncating the value X to machine mode M.
     M must be a floating point mode and X a floating point value of a
     mode wider than M.

'(float:M X)'
     Represents the result of converting fixed point value X, regarded
     as signed, to floating point mode M.

'(unsigned_float:M X)'
     Represents the result of converting fixed point value X, regarded
     as unsigned, to floating point mode M.

'(fix:M X)'
     When M is a floating-point mode, represents the result of
     converting floating point value X (valid for mode M) to an integer,
     still represented in floating point mode M, by rounding towards
     zero.

     When M is a fixed-point mode, represents the result of converting
     floating point value X to mode M, regarded as signed.  How rounding
     is done is not specified, so this operation may be used validly in
     compiling C code only for integer-valued operands.

'(unsigned_fix:M X)'
     Represents the result of converting floating point value X to fixed
     point mode M, regarded as unsigned.  How rounding is done is not
     specified.

'(fract_convert:M X)'
     Represents the result of converting fixed-point value X to
     fixed-point mode M, signed integer value X to fixed-point mode M,
     floating-point value X to fixed-point mode M, fixed-point value X
     to integer mode M regarded as signed, or fixed-point value X to
     floating-point mode M.  When overflows or underflows happen, the
     results are undefined.

'(sat_fract:M X)'
     Represents the result of converting fixed-point value X to
     fixed-point mode M, signed integer value X to fixed-point mode M,
     or floating-point value X to fixed-point mode M.  When overflows or
     underflows happen, the results are saturated to the maximum or the
     minimum.

'(unsigned_fract_convert:M X)'
     Represents the result of converting fixed-point value X to integer
     mode M regarded as unsigned, or unsigned integer value X to
     fixed-point mode M.  When overflows or underflows happen, the
     results are undefined.

'(unsigned_sat_fract:M X)'
     Represents the result of converting unsigned integer value X to
     fixed-point mode M.  When overflows or underflows happen, the
     results are saturated to the maximum or the minimum.


File: gccint.info,  Node: RTL Declarations,  Next: Side Effects,  Prev: Conversions,  Up: RTL

13.14 Declarations
==================

Declaration expression codes do not represent arithmetic operations but
rather state assertions about their operands.

'(strict_low_part (subreg:M (reg:N R) 0))'
     This expression code is used in only one context: as the
     destination operand of a 'set' expression.  In addition, the
     operand of this expression must be a non-paradoxical 'subreg'
     expression.

     The presence of 'strict_low_part' says that the part of the
     register which is meaningful in mode N, but is not part of mode M,
     is not to be altered.  Normally, an assignment to such a subreg is
     allowed to have undefined effects on the rest of the register when
     M is less than a word.


File: gccint.info,  Node: Side Effects,  Next: Incdec,  Prev: RTL Declarations,  Up: RTL

13.15 Side Effect Expressions
=============================

The expression codes described so far represent values, not actions.
But machine instructions never produce values; they are meaningful only
for their side effects on the state of the machine.  Special expression
codes are used to represent side effects.

 The body of an instruction is always one of these side effect codes;
the codes described above, which represent values, appear only as the
operands of these.

'(set LVAL X)'
     Represents the action of storing the value of X into the place
     represented by LVAL.  LVAL must be an expression representing a
     place that can be stored in: 'reg' (or 'subreg', 'strict_low_part'
     or 'zero_extract'), 'mem', 'pc', 'parallel', or 'cc0'.

     If LVAL is a 'reg', 'subreg' or 'mem', it has a machine mode; then
     X must be valid for that mode.

     If LVAL is a 'reg' whose machine mode is less than the full width
     of the register, then it means that the part of the register
     specified by the machine mode is given the specified value and the
     rest of the register receives an undefined value.  Likewise, if
     LVAL is a 'subreg' whose machine mode is narrower than the mode of
     the register, the rest of the register can be changed in an
     undefined way.

     If LVAL is a 'strict_low_part' of a subreg, then the part of the
     register specified by the machine mode of the 'subreg' is given the
     value X and the rest of the register is not changed.

     If LVAL is a 'zero_extract', then the referenced part of the
     bit-field (a memory or register reference) specified by the
     'zero_extract' is given the value X and the rest of the bit-field
     is not changed.  Note that 'sign_extract' can not appear in LVAL.

     If LVAL is '(cc0)', it has no machine mode, and X may be either a
     'compare' expression or a value that may have any mode.  The latter
     case represents a "test" instruction.  The expression '(set (cc0)
     (reg:M N))' is equivalent to '(set (cc0) (compare (reg:M N)
     (const_int 0)))'.  Use the former expression to save space during
     the compilation.

     If LVAL is a 'parallel', it is used to represent the case of a
     function returning a structure in multiple registers.  Each element
     of the 'parallel' is an 'expr_list' whose first operand is a 'reg'
     and whose second operand is a 'const_int' representing the offset
     (in bytes) into the structure at which the data in that register
     corresponds.  The first element may be null to indicate that the
     structure is also passed partly in memory.

     If LVAL is '(pc)', we have a jump instruction, and the
     possibilities for X are very limited.  It may be a 'label_ref'
     expression (unconditional jump).  It may be an 'if_then_else'
     (conditional jump), in which case either the second or the third
     operand must be '(pc)' (for the case which does not jump) and the
     other of the two must be a 'label_ref' (for the case which does
     jump).  X may also be a 'mem' or '(plus:SI (pc) Y)', where Y may be
     a 'reg' or a 'mem'; these unusual patterns are used to represent
     jumps through branch tables.

     If LVAL is neither '(cc0)' nor '(pc)', the mode of LVAL must not be
     'VOIDmode' and the mode of X must be valid for the mode of LVAL.

     LVAL is customarily accessed with the 'SET_DEST' macro and X with
     the 'SET_SRC' macro.

'(return)'
     As the sole expression in a pattern, represents a return from the
     current function, on machines where this can be done with one
     instruction, such as VAXen.  On machines where a multi-instruction
     "epilogue" must be executed in order to return from the function,
     returning is done by jumping to a label which precedes the
     epilogue, and the 'return' expression code is never used.

     Inside an 'if_then_else' expression, represents the value to be
     placed in 'pc' to return to the caller.

     Note that an insn pattern of '(return)' is logically equivalent to
     '(set (pc) (return))', but the latter form is never used.

'(simple_return)'
     Like '(return)', but truly represents only a function return, while
     '(return)' may represent an insn that also performs other functions
     of the function epilogue.  Like '(return)', this may also occur in
     conditional jumps.

'(call FUNCTION NARGS)'
     Represents a function call.  FUNCTION is a 'mem' expression whose
     address is the address of the function to be called.  NARGS is an
     expression which can be used for two purposes: on some machines it
     represents the number of bytes of stack argument; on others, it
     represents the number of argument registers.

     Each machine has a standard machine mode which FUNCTION must have.
     The machine description defines macro 'FUNCTION_MODE' to expand
     into the requisite mode name.  The purpose of this mode is to
     specify what kind of addressing is allowed, on machines where the
     allowed kinds of addressing depend on the machine mode being
     addressed.

'(clobber X)'
     Represents the storing or possible storing of an unpredictable,
     undescribed value into X, which must be a 'reg', 'scratch',
     'parallel' or 'mem' expression.

     One place this is used is in string instructions that store
     standard values into particular hard registers.  It may not be
     worth the trouble to describe the values that are stored, but it is
     essential to inform the compiler that the registers will be
     altered, lest it attempt to keep data in them across the string
     instruction.

     If X is '(mem:BLK (const_int 0))' or '(mem:BLK (scratch))', it
     means that all memory locations must be presumed clobbered.  If X
     is a 'parallel', it has the same meaning as a 'parallel' in a 'set'
     expression.

     Note that the machine description classifies certain hard registers
     as "call-clobbered".  All function call instructions are assumed by
     default to clobber these registers, so there is no need to use
     'clobber' expressions to indicate this fact.  Also, each function
     call is assumed to have the potential to alter any memory location,
     unless the function is declared 'const'.

     If the last group of expressions in a 'parallel' are each a
     'clobber' expression whose arguments are 'reg' or 'match_scratch'
     (*note RTL Template::) expressions, the combiner phase can add the
     appropriate 'clobber' expressions to an insn it has constructed
     when doing so will cause a pattern to be matched.

     This feature can be used, for example, on a machine that whose
     multiply and add instructions don't use an MQ register but which
     has an add-accumulate instruction that does clobber the MQ
     register.  Similarly, a combined instruction might require a
     temporary register while the constituent instructions might not.

     When a 'clobber' expression for a register appears inside a
     'parallel' with other side effects, the register allocator
     guarantees that the register is unoccupied both before and after
     that insn if it is a hard register clobber.  For pseudo-register
     clobber, the register allocator and the reload pass do not assign
     the same hard register to the clobber and the input operands if
     there is an insn alternative containing the '&' constraint (*note
     Modifiers::) for the clobber and the hard register is in register
     classes of the clobber in the alternative.  You can clobber either
     a specific hard register, a pseudo register, or a 'scratch'
     expression; in the latter two cases, GCC will allocate a hard
     register that is available there for use as a temporary.

     For instructions that require a temporary register, you should use
     'scratch' instead of a pseudo-register because this will allow the
     combiner phase to add the 'clobber' when required.  You do this by
     coding ('clobber' ('match_scratch' ...)).  If you do clobber a
     pseudo register, use one which appears nowhere else--generate a new
     one each time.  Otherwise, you may confuse CSE.

     There is one other known use for clobbering a pseudo register in a
     'parallel': when one of the input operands of the insn is also
     clobbered by the insn.  In this case, using the same pseudo
     register in the clobber and elsewhere in the insn produces the
     expected results.

'(use X)'
     Represents the use of the value of X.  It indicates that the value
     in X at this point in the program is needed, even though it may not
     be apparent why this is so.  Therefore, the compiler will not
     attempt to delete previous instructions whose only effect is to
     store a value in X.  X must be a 'reg' expression.

     In some situations, it may be tempting to add a 'use' of a register
     in a 'parallel' to describe a situation where the value of a
     special register will modify the behavior of the instruction.  A
     hypothetical example might be a pattern for an addition that can
     either wrap around or use saturating addition depending on the
     value of a special control register:

          (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
                                                 (reg:SI 4)] 0))
                     (use (reg:SI 1))])


     This will not work, several of the optimizers only look at
     expressions locally; it is very likely that if you have multiple
     insns with identical inputs to the 'unspec', they will be optimized
     away even if register 1 changes in between.

     This means that 'use' can _only_ be used to describe that the
     register is live.  You should think twice before adding 'use'
     statements, more often you will want to use 'unspec' instead.  The
     'use' RTX is most commonly useful to describe that a fixed register
     is implicitly used in an insn.  It is also safe to use in patterns
     where the compiler knows for other reasons that the result of the
     whole pattern is variable, such as 'movmemM' or 'call' patterns.

     During the reload phase, an insn that has a 'use' as pattern can
     carry a reg_equal note.  These 'use' insns will be deleted before
     the reload phase exits.

     During the delayed branch scheduling phase, X may be an insn.  This
     indicates that X previously was located at this place in the code
     and its data dependencies need to be taken into account.  These
     'use' insns will be deleted before the delayed branch scheduling
     phase exits.

'(parallel [X0 X1 ...])'
     Represents several side effects performed in parallel.  The square
     brackets stand for a vector; the operand of 'parallel' is a vector
     of expressions.  X0, X1 and so on are individual side effect
     expressions--expressions of code 'set', 'call', 'return',
     'simple_return', 'clobber' or 'use'.

     "In parallel" means that first all the values used in the
     individual side-effects are computed, and second all the actual
     side-effects are performed.  For example,

          (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
                     (set (mem:SI (reg:SI 1)) (reg:SI 1))])

     says unambiguously that the values of hard register 1 and the
     memory location addressed by it are interchanged.  In both places
     where '(reg:SI 1)' appears as a memory address it refers to the
     value in register 1 _before_ the execution of the insn.

     It follows that it is _incorrect_ to use 'parallel' and expect the
     result of one 'set' to be available for the next one.  For example,
     people sometimes attempt to represent a jump-if-zero instruction
     this way:

          (parallel [(set (cc0) (reg:SI 34))
                     (set (pc) (if_then_else
                                  (eq (cc0) (const_int 0))
                                  (label_ref ...)
                                  (pc)))])

     But this is incorrect, because it says that the jump condition
     depends on the condition code value _before_ this instruction, not
     on the new value that is set by this instruction.

     Peephole optimization, which takes place together with final
     assembly code output, can produce insns whose patterns consist of a
     'parallel' whose elements are the operands needed to output the
     resulting assembler code--often 'reg', 'mem' or constant
     expressions.  This would not be well-formed RTL at any other stage
     in compilation, but it is OK then because no further optimization
     remains to be done.  However, the definition of the macro
     'NOTICE_UPDATE_CC', if any, must deal with such insns if you define
     any peephole optimizations.

'(cond_exec [COND EXPR])'
     Represents a conditionally executed expression.  The EXPR is
     executed only if the COND is nonzero.  The COND expression must not
     have side-effects, but the EXPR may very well have side-effects.

'(sequence [INSNS ...])'
     Represents a sequence of insns.  If a 'sequence' appears in the
     chain of insns, then each of the INSNS that appears in the sequence
     must be suitable for appearing in the chain of insns, i.e.  must
     satisfy the 'INSN_P' predicate.

     After delay-slot scheduling is completed, an insn and all the insns
     that reside in its delay slots are grouped together into a
     'sequence'.  The insn requiring the delay slot is the first insn in
     the vector; subsequent insns are to be placed in the delay slot.

     'INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to
     indicate that a branch insn should be used that will conditionally
     annul the effect of the insns in the delay slots.  In such a case,
     'INSN_FROM_TARGET_P' indicates that the insn is from the target of
     the branch and should be executed only if the branch is taken;
     otherwise the insn should be executed only if the branch is not
     taken.  *Note Delay Slots::.

     Some back ends also use 'sequence' objects for purposes other than
     delay-slot groups.  This is not supported in the common parts of
     the compiler, which treat such sequences as delay-slot groups.

     DWARF2 Call Frame Address (CFA) adjustments are sometimes also
     expressed using 'sequence' objects as the value of a
     'RTX_FRAME_RELATED_P' note.  This only happens if the CFA
     adjustments cannot be easily derived from the pattern of the
     instruction to which the note is attached.  In such cases, the
     value of the note is used instead of best-guesing the semantics of
     the instruction.  The back end can attach notes containing a
     'sequence' of 'set' patterns that express the effect of the parent
     instruction.

 These expression codes appear in place of a side effect, as the body of
an insn, though strictly speaking they do not always describe side
effects as such:

'(asm_input S)'
     Represents literal assembler code as described by the string S.

'(unspec [OPERANDS ...] INDEX)'
'(unspec_volatile [OPERANDS ...] INDEX)'
     Represents a machine-specific operation on OPERANDS.  INDEX selects
     between multiple machine-specific operations.  'unspec_volatile' is
     used for volatile operations and operations that may trap; 'unspec'
     is used for other operations.

     These codes may appear inside a 'pattern' of an insn, inside a
     'parallel', or inside an expression.

'(addr_vec:M [LR0 LR1 ...])'
     Represents a table of jump addresses.  The vector elements LR0,
     etc., are 'label_ref' expressions.  The mode M specifies how much
     space is given to each address; normally M would be 'Pmode'.

'(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)'
     Represents a table of jump addresses expressed as offsets from
     BASE.  The vector elements LR0, etc., are 'label_ref' expressions
     and so is BASE.  The mode M specifies how much space is given to
     each address-difference.  MIN and MAX are set up by branch
     shortening and hold a label with a minimum and a maximum address,
     respectively.  FLAGS indicates the relative position of BASE, MIN
     and MAX to the containing insn and of MIN and MAX to BASE.  See
     rtl.def for details.

'(prefetch:M ADDR RW LOCALITY)'
     Represents prefetch of memory at address ADDR.  Operand RW is 1 if
     the prefetch is for data to be written, 0 otherwise; targets that
     do not support write prefetches should treat this as a normal
     prefetch.  Operand LOCALITY specifies the amount of temporal
     locality; 0 if there is none or 1, 2, or 3 for increasing levels of
     temporal locality; targets that do not support locality hints
     should ignore this.

     This insn is used to minimize cache-miss latency by moving data
     into a cache before it is accessed.  It should use only
     non-faulting data prefetch instructions.


File: gccint.info,  Node: Incdec,  Next: Assembler,  Prev: Side Effects,  Up: RTL

13.16 Embedded Side-Effects on Addresses
========================================

Six special side-effect expression codes appear as memory addresses.

'(pre_dec:M X)'
     Represents the side effect of decrementing X by a standard amount
     and represents also the value that X has after being decremented.
     X must be a 'reg' or 'mem', but most machines allow only a 'reg'.
     M must be the machine mode for pointers on the machine in use.  The
     amount X is decremented by is the length in bytes of the machine
     mode of the containing memory reference of which this expression
     serves as the address.  Here is an example of its use:

          (mem:DF (pre_dec:SI (reg:SI 39)))

     This says to decrement pseudo register 39 by the length of a
     'DFmode' value and use the result to address a 'DFmode' value.

'(pre_inc:M X)'
     Similar, but specifies incrementing X instead of decrementing it.

'(post_dec:M X)'
     Represents the same side effect as 'pre_dec' but a different value.
     The value represented here is the value X has before being
     decremented.

'(post_inc:M X)'
     Similar, but specifies incrementing X instead of decrementing it.

'(post_modify:M X Y)'

     Represents the side effect of setting X to Y and represents X
     before X is modified.  X must be a 'reg' or 'mem', but most
     machines allow only a 'reg'.  M must be the machine mode for
     pointers on the machine in use.

     The expression Y must be one of three forms: '(plus:M X Z)',
     '(minus:M X Z)', or '(plus:M X I)', where Z is an index register
     and I is a constant.

     Here is an example of its use:

          (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
                                                    (reg:SI 48))))

     This says to modify pseudo register 42 by adding the contents of
     pseudo register 48 to it, after the use of what ever 42 points to.

'(pre_modify:M X EXPR)'
     Similar except side effects happen before the use.

 These embedded side effect expressions must be used with care.
Instruction patterns may not use them.  Until the 'flow' pass of the
compiler, they may occur only to represent pushes onto the stack.  The
'flow' pass finds cases where registers are incremented or decremented
in one instruction and used as an address shortly before or after; these
cases are then transformed to use pre- or post-increment or -decrement.

 If a register used as the operand of these expressions is used in
another address in an insn, the original value of the register is used.
Uses of the register outside of an address are not permitted within the
same insn as a use in an embedded side effect expression because such
insns behave differently on different machines and hence must be treated
as ambiguous and disallowed.

 An instruction that can be represented with an embedded side effect
could also be represented using 'parallel' containing an additional
'set' to describe how the address register is altered.  This is not done
because machines that allow these operations at all typically allow them
wherever a memory address is called for.  Describing them as additional
parallel stores would require doubling the number of entries in the
machine description.


File: gccint.info,  Node: Assembler,  Next: Debug Information,  Prev: Incdec,  Up: RTL

13.17 Assembler Instructions as Expressions
===========================================

The RTX code 'asm_operands' represents a value produced by a
user-specified assembler instruction.  It is used to represent an 'asm'
statement with arguments.  An 'asm' statement with a single output
operand, like this:

     asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));

is represented using a single 'asm_operands' RTX which represents the
value that is stored in 'outputvar':

     (set RTX-FOR-OUTPUTVAR
          (asm_operands "foo %1,%2,%0" "a" 0
                        [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
                        [(asm_input:M1 "g")
                         (asm_input:M2 "di")]))

Here the operands of the 'asm_operands' RTX are the assembler template
string, the output-operand's constraint, the index-number of the output
operand among the output operands specified, a vector of input operand
RTX's, and a vector of input-operand modes and constraints.  The mode M1
is the mode of the sum 'x+y'; M2 is that of '*z'.

 When an 'asm' statement has multiple output values, its insn has
several such 'set' RTX's inside of a 'parallel'.  Each 'set' contains an
'asm_operands'; all of these share the same assembler template and
vectors, but each contains the constraint for the respective output
operand.  They are also distinguished by the output-operand index
number, which is 0, 1, ... for successive output operands.


File: gccint.info,  Node: Debug Information,  Next: Insns,  Prev: Assembler,  Up: RTL

13.18 Variable Location Debug Information in RTL
================================================

Variable tracking relies on 'MEM_EXPR' and 'REG_EXPR' annotations to
determine what user variables memory and register references refer to.

 Variable tracking at assignments uses these notes only when they refer
to variables that live at fixed locations (e.g., addressable variables,
global non-automatic variables).  For variables whose location may vary,
it relies on the following types of notes.

'(var_location:MODE VAR EXP STAT)'
     Binds variable 'var', a tree, to value EXP, an RTL expression.  It
     appears only in 'NOTE_INSN_VAR_LOCATION' and 'DEBUG_INSN's, with
     slightly different meanings.  MODE, if present, represents the mode
     of EXP, which is useful if it is a modeless expression.  STAT is
     only meaningful in notes, indicating whether the variable is known
     to be initialized or uninitialized.

'(debug_expr:MODE DECL)'
     Stands for the value bound to the 'DEBUG_EXPR_DECL' DECL, that
     points back to it, within value expressions in 'VAR_LOCATION'
     nodes.


File: gccint.info,  Node: Insns,  Next: Calls,  Prev: Debug Information,  Up: RTL

13.19 Insns
===========

The RTL representation of the code for a function is a doubly-linked
chain of objects called "insns".  Insns are expressions with special
codes that are used for no other purpose.  Some insns are actual
instructions; others represent dispatch tables for 'switch' statements;
others represent labels to jump to or various sorts of declarative
information.

 In addition to its own specific data, each insn must have a unique
id-number that distinguishes it from all other insns in the current
function (after delayed branch scheduling, copies of an insn with the
same id-number may be present in multiple places in a function, but
these copies will always be identical and will only appear inside a
'sequence'), and chain pointers to the preceding and following insns.
These three fields occupy the same position in every insn, independent
of the expression code of the insn.  They could be accessed with 'XEXP'
and 'XINT', but instead three special macros are always used:

'INSN_UID (I)'
     Accesses the unique id of insn I.

'PREV_INSN (I)'
     Accesses the chain pointer to the insn preceding I.  If I is the
     first insn, this is a null pointer.

'NEXT_INSN (I)'
     Accesses the chain pointer to the insn following I.  If I is the
     last insn, this is a null pointer.

 The first insn in the chain is obtained by calling 'get_insns'; the
last insn is the result of calling 'get_last_insn'.  Within the chain
delimited by these insns, the 'NEXT_INSN' and 'PREV_INSN' pointers must
always correspond: if INSN is not the first insn,

     NEXT_INSN (PREV_INSN (INSN)) == INSN

is always true and if INSN is not the last insn,

     PREV_INSN (NEXT_INSN (INSN)) == INSN

is always true.

 After delay slot scheduling, some of the insns in the chain might be
'sequence' expressions, which contain a vector of insns.  The value of
'NEXT_INSN' in all but the last of these insns is the next insn in the
vector; the value of 'NEXT_INSN' of the last insn in the vector is the
same as the value of 'NEXT_INSN' for the 'sequence' in which it is
contained.  Similar rules apply for 'PREV_INSN'.

 This means that the above invariants are not necessarily true for insns
inside 'sequence' expressions.  Specifically, if INSN is the first insn
in a 'sequence', 'NEXT_INSN (PREV_INSN (INSN))' is the insn containing
the 'sequence' expression, as is the value of 'PREV_INSN (NEXT_INSN
(INSN))' if INSN is the last insn in the 'sequence' expression.  You can
use these expressions to find the containing 'sequence' expression.

 Every insn has one of the following expression codes:

'insn'
     The expression code 'insn' is used for instructions that do not
     jump and do not do function calls.  'sequence' expressions are
     always contained in insns with code 'insn' even if one of those
     insns should jump or do function calls.

     Insns with code 'insn' have four additional fields beyond the three
     mandatory ones listed above.  These four are described in a table
     below.

'jump_insn'
     The expression code 'jump_insn' is used for instructions that may
     jump (or, more generally, may contain 'label_ref' expressions to
     which 'pc' can be set in that instruction).  If there is an
     instruction to return from the current function, it is recorded as
     a 'jump_insn'.

     'jump_insn' insns have the same extra fields as 'insn' insns,
     accessed in the same way and in addition contain a field
     'JUMP_LABEL' which is defined once jump optimization has completed.

     For simple conditional and unconditional jumps, this field contains
     the 'code_label' to which this insn will (possibly conditionally)
     branch.  In a more complex jump, 'JUMP_LABEL' records one of the
     labels that the insn refers to; other jump target labels are
     recorded as 'REG_LABEL_TARGET' notes.  The exception is 'addr_vec'
     and 'addr_diff_vec', where 'JUMP_LABEL' is 'NULL_RTX' and the only
     way to find the labels is to scan the entire body of the insn.

     Return insns count as jumps, but since they do not refer to any
     labels, their 'JUMP_LABEL' is 'NULL_RTX'.

'call_insn'
     The expression code 'call_insn' is used for instructions that may
     do function calls.  It is important to distinguish these
     instructions because they imply that certain registers and memory
     locations may be altered unpredictably.

     'call_insn' insns have the same extra fields as 'insn' insns,
     accessed in the same way and in addition contain a field
     'CALL_INSN_FUNCTION_USAGE', which contains a list (chain of
     'expr_list' expressions) containing 'use', 'clobber' and sometimes
     'set' expressions that denote hard registers and 'mem's used or
     clobbered by the called function.

     A 'mem' generally points to a stack slot in which arguments passed
     to the libcall by reference (*note TARGET_PASS_BY_REFERENCE:
     Register Arguments.) are stored.  If the argument is caller-copied
     (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot
     will be mentioned in 'clobber' and 'use' entries; if it's
     callee-copied, only a 'use' will appear, and the 'mem' may point to
     addresses that are not stack slots.

     Registers occurring inside a 'clobber' in this list augment
     registers specified in 'CALL_USED_REGISTERS' (*note Register
     Basics::).

     If the list contains a 'set' involving two registers, it indicates
     that the function returns one of its arguments.  Such a 'set' may
     look like a no-op if the same register holds the argument and the
     return value.

'code_label'
     A 'code_label' insn represents a label that a jump insn can jump
     to.  It contains two special fields of data in addition to the
     three standard ones.  'CODE_LABEL_NUMBER' is used to hold the
     "label number", a number that identifies this label uniquely among
     all the labels in the compilation (not just in the current
     function).  Ultimately, the label is represented in the assembler
     output as an assembler label, usually of the form 'LN' where N is
     the label number.

     When a 'code_label' appears in an RTL expression, it normally
     appears within a 'label_ref' which represents the address of the
     label, as a number.

     Besides as a 'code_label', a label can also be represented as a
     'note' of type 'NOTE_INSN_DELETED_LABEL'.

     The field 'LABEL_NUSES' is only defined once the jump optimization
     phase is completed.  It contains the number of times this label is
     referenced in the current function.

     The field 'LABEL_KIND' differentiates four different types of
     labels: 'LABEL_NORMAL', 'LABEL_STATIC_ENTRY', 'LABEL_GLOBAL_ENTRY',
     and 'LABEL_WEAK_ENTRY'.  The only labels that do not have type
     'LABEL_NORMAL' are "alternate entry points" to the current
     function.  These may be static (visible only in the containing
     translation unit), global (exposed to all translation units), or
     weak (global, but can be overridden by another symbol with the same
     name).

     Much of the compiler treats all four kinds of label identically.
     Some of it needs to know whether or not a label is an alternate
     entry point; for this purpose, the macro 'LABEL_ALT_ENTRY_P' is
     provided.  It is equivalent to testing whether 'LABEL_KIND (label)
     == LABEL_NORMAL'.  The only place that cares about the distinction
     between static, global, and weak alternate entry points, besides
     the front-end code that creates them, is the function
     'output_alternate_entry_point', in 'final.c'.

     To set the kind of a label, use the 'SET_LABEL_KIND' macro.

'jump_table_data'
     A 'jump_table_data' insn is a placeholder for the jump-table data
     of a 'casesi' or 'tablejump' insn.  They are placed after a
     'tablejump_p' insn.  A 'jump_table_data' insn is not part o a basic
     blockm but it is associated with the basic block that ends with the
     'tablejump_p' insn.  The 'PATTERN' of a 'jump_table_data' is always
     either an 'addr_vec' or an 'addr_diff_vec', and a 'jump_table_data'
     insn is always preceded by a 'code_label'.  The 'tablejump_p' insn
     refers to that 'code_label' via its 'JUMP_LABEL'.

'barrier'
     Barriers are placed in the instruction stream when control cannot
     flow past them.  They are placed after unconditional jump
     instructions to indicate that the jumps are unconditional and after
     calls to 'volatile' functions, which do not return (e.g., 'exit').
     They contain no information beyond the three standard fields.

'note'
     'note' insns are used to represent additional debugging and
     declarative information.  They contain two nonstandard fields, an
     integer which is accessed with the macro 'NOTE_LINE_NUMBER' and a
     string accessed with 'NOTE_SOURCE_FILE'.

     If 'NOTE_LINE_NUMBER' is positive, the note represents the position
     of a source line and 'NOTE_SOURCE_FILE' is the source file name
     that the line came from.  These notes control generation of line
     number data in the assembler output.

     Otherwise, 'NOTE_LINE_NUMBER' is not really a line number but a
     code with one of the following values (and 'NOTE_SOURCE_FILE' must
     contain a null pointer):

     'NOTE_INSN_DELETED'
          Such a note is completely ignorable.  Some passes of the
          compiler delete insns by altering them into notes of this
          kind.

     'NOTE_INSN_DELETED_LABEL'
          This marks what used to be a 'code_label', but was not used
          for other purposes than taking its address and was transformed
          to mark that no code jumps to it.

     'NOTE_INSN_BLOCK_BEG'
     'NOTE_INSN_BLOCK_END'
          These types of notes indicate the position of the beginning
          and end of a level of scoping of variable names.  They control
          the output of debugging information.

     'NOTE_INSN_EH_REGION_BEG'
     'NOTE_INSN_EH_REGION_END'
          These types of notes indicate the position of the beginning
          and end of a level of scoping for exception handling.
          'NOTE_EH_HANDLER' identifies which region is associated with
          these notes.

     'NOTE_INSN_FUNCTION_BEG'
          Appears at the start of the function body, after the function
          prologue.

     'NOTE_INSN_VAR_LOCATION'
          This note is used to generate variable location debugging
          information.  It indicates that the user variable in its
          'VAR_LOCATION' operand is at the location given in the RTL
          expression, or holds a value that can be computed by
          evaluating the RTL expression from that static point in the
          program up to the next such note for the same user variable.

     These codes are printed symbolically when they appear in debugging
     dumps.

'debug_insn'
     The expression code 'debug_insn' is used for pseudo-instructions
     that hold debugging information for variable tracking at
     assignments (see '-fvar-tracking-assignments' option).  They are
     the RTL representation of 'GIMPLE_DEBUG' statements (*note
     GIMPLE_DEBUG::), with a 'VAR_LOCATION' operand that binds a user
     variable tree to an RTL representation of the 'value' in the
     corresponding statement.  A 'DEBUG_EXPR' in it stands for the value
     bound to the corresponding 'DEBUG_EXPR_DECL'.

     Throughout optimization passes, binding information is kept in
     pseudo-instruction form, so that, unlike notes, it gets the same
     treatment and adjustments that regular instructions would.  It is
     the variable tracking pass that turns these pseudo-instructions
     into var location notes, analyzing control flow, value equivalences
     and changes to registers and memory referenced in value
     expressions, propagating the values of debug temporaries and
     determining expressions that can be used to compute the value of
     each user variable at as many points (ranges, actually) in the
     program as possible.

     Unlike 'NOTE_INSN_VAR_LOCATION', the value expression in an
     'INSN_VAR_LOCATION' denotes a value at that specific point in the
     program, rather than an expression that can be evaluated at any
     later point before an overriding 'VAR_LOCATION' is encountered.
     E.g., if a user variable is bound to a 'REG' and then a subsequent
     insn modifies the 'REG', the note location would keep mapping the
     user variable to the register across the insn, whereas the insn
     location would keep the variable bound to the value, so that the
     variable tracking pass would emit another location note for the
     variable at the point in which the register is modified.

 The machine mode of an insn is normally 'VOIDmode', but some phases use
the mode for various purposes.

 The common subexpression elimination pass sets the mode of an insn to
'QImode' when it is the first insn in a block that has already been
processed.

 The second Haifa scheduling pass, for targets that can multiple issue,
sets the mode of an insn to 'TImode' when it is believed that the
instruction begins an issue group.  That is, when the instruction cannot
issue simultaneously with the previous.  This may be relied on by later
passes, in particular machine-dependent reorg.

 Here is a table of the extra fields of 'insn', 'jump_insn' and
'call_insn' insns:

'PATTERN (I)'
     An expression for the side effect performed by this insn.  This
     must be one of the following codes: 'set', 'call', 'use',
     'clobber', 'return', 'simple_return', 'asm_input', 'asm_output',
     'addr_vec', 'addr_diff_vec', 'trap_if', 'unspec',
     'unspec_volatile', 'parallel', 'cond_exec', or 'sequence'.  If it
     is a 'parallel', each element of the 'parallel' must be one these
     codes, except that 'parallel' expressions cannot be nested and
     'addr_vec' and 'addr_diff_vec' are not permitted inside a
     'parallel' expression.

'INSN_CODE (I)'
     An integer that says which pattern in the machine description
     matches this insn, or -1 if the matching has not yet been
     attempted.

     Such matching is never attempted and this field remains -1 on an
     insn whose pattern consists of a single 'use', 'clobber',
     'asm_input', 'addr_vec' or 'addr_diff_vec' expression.

     Matching is also never attempted on insns that result from an 'asm'
     statement.  These contain at least one 'asm_operands' expression.
     The function 'asm_noperands' returns a non-negative value for such
     insns.

     In the debugging output, this field is printed as a number followed
     by a symbolic representation that locates the pattern in the 'md'
     file as some small positive or negative offset from a named
     pattern.

'LOG_LINKS (I)'
     A list (chain of 'insn_list' expressions) giving information about
     dependencies between instructions within a basic block.  Neither a
     jump nor a label may come between the related insns.  These are
     only used by the schedulers and by combine.  This is a deprecated
     data structure.  Def-use and use-def chains are now preferred.

'REG_NOTES (I)'
     A list (chain of 'expr_list', 'insn_list' and 'int_list'
     expressions) giving miscellaneous information about the insn.  It
     is often information pertaining to the registers used in this insn.

 The 'LOG_LINKS' field of an insn is a chain of 'insn_list' expressions.
Each of these has two operands: the first is an insn, and the second is
another 'insn_list' expression (the next one in the chain).  The last
'insn_list' in the chain has a null pointer as second operand.  The
significant thing about the chain is which insns appear in it (as first
operands of 'insn_list' expressions).  Their order is not significant.

 This list is originally set up by the flow analysis pass; it is a null
pointer until then.  Flow only adds links for those data dependencies
which can be used for instruction combination.  For each insn, the flow
analysis pass adds a link to insns which store into registers values
that are used for the first time in this insn.

 The 'REG_NOTES' field of an insn is a chain similar to the 'LOG_LINKS'
field but it includes 'expr_list' and 'int_list' expressions in addition
to 'insn_list' expressions.  There are several kinds of register notes,
which are distinguished by the machine mode, which in a register note is
really understood as being an 'enum reg_note'.  The first operand OP of
the note is data whose meaning depends on the kind of note.

 The macro 'REG_NOTE_KIND (X)' returns the kind of register note.  Its
counterpart, the macro 'PUT_REG_NOTE_KIND (X, NEWKIND)' sets the
register note type of X to be NEWKIND.

 Register notes are of three classes: They may say something about an
input to an insn, they may say something about an output of an insn, or
they may create a linkage between two insns.  There are also a set of
values that are only used in 'LOG_LINKS'.

 These register notes annotate inputs to an insn:

'REG_DEAD'
     The value in OP dies in this insn; that is to say, altering the
     value immediately after this insn would not affect the future
     behavior of the program.

     It does not follow that the register OP has no useful value after
     this insn since OP is not necessarily modified by this insn.
     Rather, no subsequent instruction uses the contents of OP.

'REG_UNUSED'
     The register OP being set by this insn will not be used in a
     subsequent insn.  This differs from a 'REG_DEAD' note, which
     indicates that the value in an input will not be used subsequently.
     These two notes are independent; both may be present for the same
     register.

'REG_INC'
     The register OP is incremented (or decremented; at this level there
     is no distinction) by an embedded side effect inside this insn.
     This means it appears in a 'post_inc', 'pre_inc', 'post_dec' or
     'pre_dec' expression.

'REG_NONNEG'
     The register OP is known to have a nonnegative value when this insn
     is reached.  This is used so that decrement and branch until zero
     instructions, such as the m68k dbra, can be matched.

     The 'REG_NONNEG' note is added to insns only if the machine
     description has a 'decrement_and_branch_until_zero' pattern.

'REG_LABEL_OPERAND'
     This insn uses OP, a 'code_label' or a 'note' of type
     'NOTE_INSN_DELETED_LABEL', but is not a 'jump_insn', or it is a
     'jump_insn' that refers to the operand as an ordinary operand.  The
     label may still eventually be a jump target, but if so in an
     indirect jump in a subsequent insn.  The presence of this note
     allows jump optimization to be aware that OP is, in fact, being
     used, and flow optimization to build an accurate flow graph.

'REG_LABEL_TARGET'
     This insn is a 'jump_insn' but not an 'addr_vec' or
     'addr_diff_vec'.  It uses OP, a 'code_label' as a direct or
     indirect jump target.  Its purpose is similar to that of
     'REG_LABEL_OPERAND'.  This note is only present if the insn has
     multiple targets; the last label in the insn (in the highest
     numbered insn-field) goes into the 'JUMP_LABEL' field and does not
     have a 'REG_LABEL_TARGET' note.  *Note JUMP_LABEL: Insns.

'REG_CROSSING_JUMP'
     This insn is a branching instruction (either an unconditional jump
     or an indirect jump) which crosses between hot and cold sections,
     which could potentially be very far apart in the executable.  The
     presence of this note indicates to other optimizations that this
     branching instruction should not be "collapsed" into a simpler
     branching construct.  It is used when the optimization to partition
     basic blocks into hot and cold sections is turned on.

'REG_SETJMP'
     Appears attached to each 'CALL_INSN' to 'setjmp' or a related
     function.

 The following notes describe attributes of outputs of an insn:

'REG_EQUIV'
'REG_EQUAL'
     This note is only valid on an insn that sets only one register and
     indicates that that register will be equal to OP at run time; the
     scope of this equivalence differs between the two types of notes.
     The value which the insn explicitly copies into the register may
     look different from OP, but they will be equal at run time.  If the
     output of the single 'set' is a 'strict_low_part' or 'zero_extract'
     expression, the note refers to the register that is contained in
     its first operand.

     For 'REG_EQUIV', the register is equivalent to OP throughout the
     entire function, and could validly be replaced in all its
     occurrences by OP.  ("Validly" here refers to the data flow of the
     program; simple replacement may make some insns invalid.)  For
     example, when a constant is loaded into a register that is never
     assigned any other value, this kind of note is used.

     When a parameter is copied into a pseudo-register at entry to a
     function, a note of this kind records that the register is
     equivalent to the stack slot where the parameter was passed.
     Although in this case the register may be set by other insns, it is
     still valid to replace the register by the stack slot throughout
     the function.

     A 'REG_EQUIV' note is also used on an instruction which copies a
     register parameter into a pseudo-register at entry to a function,
     if there is a stack slot where that parameter could be stored.
     Although other insns may set the pseudo-register, it is valid for
     the compiler to replace the pseudo-register by stack slot
     throughout the function, provided the compiler ensures that the
     stack slot is properly initialized by making the replacement in the
     initial copy instruction as well.  This is used on machines for
     which the calling convention allocates stack space for register
     parameters.  See 'REG_PARM_STACK_SPACE' in *note Stack Arguments::.

     In the case of 'REG_EQUAL', the register that is set by this insn
     will be equal to OP at run time at the end of this insn but not
     necessarily elsewhere in the function.  In this case, OP is
     typically an arithmetic expression.  For example, when a sequence
     of insns such as a library call is used to perform an arithmetic
     operation, this kind of note is attached to the insn that produces
     or copies the final value.

     These two notes are used in different ways by the compiler passes.
     'REG_EQUAL' is used by passes prior to register allocation (such as
     common subexpression elimination and loop optimization) to tell
     them how to think of that value.  'REG_EQUIV' notes are used by
     register allocation to indicate that there is an available
     substitute expression (either a constant or a 'mem' expression for
     the location of a parameter on the stack) that may be used in place
     of a register if insufficient registers are available.

     Except for stack homes for parameters, which are indicated by a
     'REG_EQUIV' note and are not useful to the early optimization
     passes and pseudo registers that are equivalent to a memory
     location throughout their entire life, which is not detected until
     later in the compilation, all equivalences are initially indicated
     by an attached 'REG_EQUAL' note.  In the early stages of register
     allocation, a 'REG_EQUAL' note is changed into a 'REG_EQUIV' note
     if OP is a constant and the insn represents the only set of its
     destination register.

     Thus, compiler passes prior to register allocation need only check
     for 'REG_EQUAL' notes and passes subsequent to register allocation
     need only check for 'REG_EQUIV' notes.

 These notes describe linkages between insns.  They occur in pairs: one
insn has one of a pair of notes that points to a second insn, which has
the inverse note pointing back to the first insn.

'REG_CC_SETTER'
'REG_CC_USER'
     On machines that use 'cc0', the insns which set and use 'cc0' set
     and use 'cc0' are adjacent.  However, when branch delay slot
     filling is done, this may no longer be true.  In this case a
     'REG_CC_USER' note will be placed on the insn setting 'cc0' to
     point to the insn using 'cc0' and a 'REG_CC_SETTER' note will be
     placed on the insn using 'cc0' to point to the insn setting 'cc0'.

 These values are only used in the 'LOG_LINKS' field, and indicate the
type of dependency that each link represents.  Links which indicate a
data dependence (a read after write dependence) do not use any code,
they simply have mode 'VOIDmode', and are printed without any
descriptive text.

'REG_DEP_TRUE'
     This indicates a true dependence (a read after write dependence).

'REG_DEP_OUTPUT'
     This indicates an output dependence (a write after write
     dependence).

'REG_DEP_ANTI'
     This indicates an anti dependence (a write after read dependence).

 These notes describe information gathered from gcov profile data.  They
are stored in the 'REG_NOTES' field of an insn.

'REG_BR_PROB'
     This is used to specify the ratio of branches to non-branches of a
     branch insn according to the profile data.  The note is represented
     as an 'int_list' expression whose integer value is between 0 and
     REG_BR_PROB_BASE. Larger values indicate a higher probability that
     the branch will be taken.

'REG_BR_PRED'
     These notes are found in JUMP insns after delayed branch scheduling
     has taken place.  They indicate both the direction and the
     likelihood of the JUMP.  The format is a bitmask of ATTR_FLAG_*
     values.

'REG_FRAME_RELATED_EXPR'
     This is used on an RTX_FRAME_RELATED_P insn wherein the attached
     expression is used in place of the actual insn pattern.  This is
     done in cases where the pattern is either complex or misleading.

 For convenience, the machine mode in an 'insn_list' or 'expr_list' is
printed using these symbolic codes in debugging dumps.

 The only difference between the expression codes 'insn_list' and
'expr_list' is that the first operand of an 'insn_list' is assumed to be
an insn and is printed in debugging dumps as the insn's unique id; the
first operand of an 'expr_list' is printed in the ordinary way as an
expression.


File: gccint.info,  Node: Calls,  Next: Sharing,  Prev: Insns,  Up: RTL

13.20 RTL Representation of Function-Call Insns
===============================================

Insns that call subroutines have the RTL expression code 'call_insn'.
These insns must satisfy special rules, and their bodies must use a
special RTL expression code, 'call'.

 A 'call' expression has two operands, as follows:

     (call (mem:FM ADDR) NBYTES)

Here NBYTES is an operand that represents the number of bytes of
argument data being passed to the subroutine, FM is a machine mode
(which must equal as the definition of the 'FUNCTION_MODE' macro in the
machine description) and ADDR represents the address of the subroutine.

 For a subroutine that returns no value, the 'call' expression as shown
above is the entire body of the insn, except that the insn might also
contain 'use' or 'clobber' expressions.

 For a subroutine that returns a value whose mode is not 'BLKmode', the
value is returned in a hard register.  If this register's number is R,
then the body of the call insn looks like this:

     (set (reg:M R)
          (call (mem:FM ADDR) NBYTES))

This RTL expression makes it clear (to the optimizer passes) that the
appropriate register receives a useful value in this insn.

 When a subroutine returns a 'BLKmode' value, it is handled by passing
to the subroutine the address of a place to store the value.  So the
call insn itself does not "return" any value, and it has the same RTL
form as a call that returns nothing.

 On some machines, the call instruction itself clobbers some register,
for example to contain the return address.  'call_insn' insns on these
machines should have a body which is a 'parallel' that contains both the
'call' expression and 'clobber' expressions that indicate which
registers are destroyed.  Similarly, if the call instruction requires
some register other than the stack pointer that is not explicitly
mentioned in its RTL, a 'use' subexpression should mention that
register.

 Functions that are called are assumed to modify all registers listed in
the configuration macro 'CALL_USED_REGISTERS' (*note Register Basics::)
and, with the exception of 'const' functions and library calls, to
modify all of memory.

 Insns containing just 'use' expressions directly precede the
'call_insn' insn to indicate which registers contain inputs to the
function.  Similarly, if registers other than those in
'CALL_USED_REGISTERS' are clobbered by the called function, insns
containing a single 'clobber' follow immediately after the call to
indicate which registers.


File: gccint.info,  Node: Sharing,  Next: Reading RTL,  Prev: Calls,  Up: RTL

13.21 Structure Sharing Assumptions
===================================

The compiler assumes that certain kinds of RTL expressions are unique;
there do not exist two distinct objects representing the same value.  In
other cases, it makes an opposite assumption: that no RTL expression
object of a certain kind appears in more than one place in the
containing structure.

 These assumptions refer to a single function; except for the RTL
objects that describe global variables and external functions, and a few
standard objects such as small integer constants, no RTL objects are
common to two functions.

   * Each pseudo-register has only a single 'reg' object to represent
     it, and therefore only a single machine mode.

   * For any symbolic label, there is only one 'symbol_ref' object
     referring to it.

   * All 'const_int' expressions with equal values are shared.

   * There is only one 'pc' expression.

   * There is only one 'cc0' expression.

   * There is only one 'const_double' expression with value 0 for each
     floating point mode.  Likewise for values 1 and 2.

   * There is only one 'const_vector' expression with value 0 for each
     vector mode, be it an integer or a double constant vector.

   * No 'label_ref' or 'scratch' appears in more than one place in the
     RTL structure; in other words, it is safe to do a tree-walk of all
     the insns in the function and assume that each time a 'label_ref'
     or 'scratch' is seen it is distinct from all others that are seen.

   * Only one 'mem' object is normally created for each static variable
     or stack slot, so these objects are frequently shared in all the
     places they appear.  However, separate but equal objects for these
     variables are occasionally made.

   * When a single 'asm' statement has multiple output operands, a
     distinct 'asm_operands' expression is made for each output operand.
     However, these all share the vector which contains the sequence of
     input operands.  This sharing is used later on to test whether two
     'asm_operands' expressions come from the same statement, so all
     optimizations must carefully preserve the sharing if they copy the
     vector at all.

   * No RTL object appears in more than one place in the RTL structure
     except as described above.  Many passes of the compiler rely on
     this by assuming that they can modify RTL objects in place without
     unwanted side-effects on other insns.

   * During initial RTL generation, shared structure is freely
     introduced.  After all the RTL for a function has been generated,
     all shared structure is copied by 'unshare_all_rtl' in
     'emit-rtl.c', after which the above rules are guaranteed to be
     followed.

   * During the combiner pass, shared structure within an insn can exist
     temporarily.  However, the shared structure is copied before the
     combiner is finished with the insn.  This is done by calling
     'copy_rtx_if_shared', which is a subroutine of 'unshare_all_rtl'.


File: gccint.info,  Node: Reading RTL,  Prev: Sharing,  Up: RTL

13.22 Reading RTL
=================

To read an RTL object from a file, call 'read_rtx'.  It takes one
argument, a stdio stream, and returns a single RTL object.  This routine
is defined in 'read-rtl.c'.  It is not available in the compiler itself,
only the various programs that generate the compiler back end from the
machine description.

 People frequently have the idea of using RTL stored as text in a file
as an interface between a language front end and the bulk of GCC.  This
idea is not feasible.

 GCC was designed to use RTL internally only.  Correct RTL for a given
program is very dependent on the particular target machine.  And the RTL
does not contain all the information about the program.

 The proper way to interface GCC to a new language front end is with the
"tree" data structure, described in the files 'tree.h' and 'tree.def'.
The documentation for this structure (*note GENERIC::) is incomplete.


File: gccint.info,  Node: Control Flow,  Next: Loop Analysis and Representation,  Prev: RTL,  Up: Top

14 Control Flow Graph
*********************

A control flow graph (CFG) is a data structure built on top of the
intermediate code representation (the RTL or 'GIMPLE' instruction
stream) abstracting the control flow behavior of a function that is
being compiled.  The CFG is a directed graph where the vertices
represent basic blocks and edges represent possible transfer of control
flow from one basic block to another.  The data structures used to
represent the control flow graph are defined in 'basic-block.h'.

 In GCC, the representation of control flow is maintained throughout the
compilation process, from constructing the CFG early in 'pass_build_cfg'
to 'pass_free_cfg' (see 'passes.def').  The CFG takes various different
modes and may undergo extensive manipulations, but the graph is always
valid between its construction and its release.  This way, transfer of
information such as data flow, a measured profile, or the loop tree, can
be propagated through the passes pipeline, and even from 'GIMPLE' to
'RTL'.

 Often the CFG may be better viewed as integral part of instruction
chain, than structure built on the top of it.  Updating the compiler's
intermediate representation for instructions can not be easily done
without proper maintenance of the CFG simultaneously.

* Menu:

* Basic Blocks::           The definition and representation of basic blocks.
* Edges::                  Types of edges and their representation.
* Profile information::    Representation of frequencies and probabilities.
* Maintaining the CFG::    Keeping the control flow graph and up to date.
* Liveness information::   Using and maintaining liveness information.


File: gccint.info,  Node: Basic Blocks,  Next: Edges,  Up: Control Flow

14.1 Basic Blocks
=================

A basic block is a straight-line sequence of code with only one entry
point and only one exit.  In GCC, basic blocks are represented using the
'basic_block' data type.

 Special basic blocks represent possible entry and exit points of a
function.  These blocks are called 'ENTRY_BLOCK_PTR' and
'EXIT_BLOCK_PTR'.  These blocks do not contain any code.

 The 'BASIC_BLOCK' array contains all basic blocks in an unspecified
order.  Each 'basic_block' structure has a field that holds a unique
integer identifier 'index' that is the index of the block in the
'BASIC_BLOCK' array.  The total number of basic blocks in the function
is 'n_basic_blocks'.  Both the basic block indices and the total number
of basic blocks may vary during the compilation process, as passes
reorder, create, duplicate, and destroy basic blocks.  The index for any
block should never be greater than 'last_basic_block'.  The indices 0
and 1 are special codes reserved for 'ENTRY_BLOCK' and 'EXIT_BLOCK', the
indices of 'ENTRY_BLOCK_PTR' and 'EXIT_BLOCK_PTR'.

 Two pointer members of the 'basic_block' structure are the pointers
'next_bb' and 'prev_bb'.  These are used to keep doubly linked chain of
basic blocks in the same order as the underlying instruction stream.
The chain of basic blocks is updated transparently by the provided API
for manipulating the CFG.  The macro 'FOR_EACH_BB' can be used to visit
all the basic blocks in lexicographical order, except 'ENTRY_BLOCK' and
'EXIT_BLOCK'.  The macro 'FOR_ALL_BB' also visits all basic blocks in
lexicographical order, including 'ENTRY_BLOCK' and 'EXIT_BLOCK'.

 The functions 'post_order_compute' and 'inverted_post_order_compute'
can be used to compute topological orders of the CFG. The orders are
stored as vectors of basic block indices.  The 'BASIC_BLOCK' array can
be used to iterate each basic block by index.  Dominator traversals are
also possible using 'walk_dominator_tree'.  Given two basic blocks A and
B, block A dominates block B if A is _always_ executed before B.

 Each 'basic_block' also contains pointers to the first instruction (the
"head") and the last instruction (the "tail") or "end" of the
instruction stream contained in a basic block.  In fact, since the
'basic_block' data type is used to represent blocks in both major
intermediate representations of GCC ('GIMPLE' and RTL), there are
pointers to the head and end of a basic block for both representations,
stored in intermediate representation specific data in the 'il' field of
'struct basic_block_def'.

 For RTL, these pointers are 'BB_HEAD' and 'BB_END'.

 In the RTL representation of a function, the instruction stream
contains not only the "real" instructions, but also "notes" or "insn
notes" (to distinguish them from "reg notes").  Any function that moves
or duplicates the basic blocks needs to take care of updating of these
notes.  Many of these notes expect that the instruction stream consists
of linear regions, so updating can sometimes be tedious.  All types of
insn notes are defined in 'insn-notes.def'.

 In the RTL function representation, the instructions contained in a
basic block always follow a 'NOTE_INSN_BASIC_BLOCK', but zero or more
'CODE_LABEL' nodes can precede the block note.  A basic block ends with
a control flow instruction or with the last instruction before the next
'CODE_LABEL' or 'NOTE_INSN_BASIC_BLOCK'.  By definition, a 'CODE_LABEL'
cannot appear in the middle of the instruction stream of a basic block.

 In addition to notes, the jump table vectors are also represented as
"pseudo-instructions" inside the insn stream.  These vectors never
appear in the basic block and should always be placed just after the
table jump instructions referencing them.  After removing the table-jump
it is often difficult to eliminate the code computing the address and
referencing the vector, so cleaning up these vectors is postponed until
after liveness analysis.  Thus the jump table vectors may appear in the
insn stream unreferenced and without any purpose.  Before any edge is
made "fall-thru", the existence of such construct in the way needs to be
checked by calling 'can_fallthru' function.

 For the 'GIMPLE' representation, the PHI nodes and statements contained
in a basic block are in a 'gimple_seq' pointed to by the basic block
intermediate language specific pointers.  Abstract containers and
iterators are used to access the PHI nodes and statements in a basic
blocks.  These iterators are called "GIMPLE statement iterators" (GSIs).
Grep for '^gsi' in the various 'gimple-*' and 'tree-*' files.  There is
a 'gimple_stmt_iterator' type for iterating over all kinds of statement,
and a 'gphi_iterator' subclass for iterating over PHI nodes.  The
following snippet will pretty-print all PHI nodes the statements of the
current function in the GIMPLE representation.

     basic_block bb;

     FOR_EACH_BB (bb)
       {
        gphi_iterator pi;
        gimple_stmt_iterator si;

        for (pi = gsi_start_phis (bb); !gsi_end_p (pi); gsi_next (&pi))
          {
            gphi *phi = pi.phi ();
            print_gimple_stmt (dump_file, phi, 0, TDF_SLIM);
          }
        for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
          {
            gimple stmt = gsi_stmt (si);
            print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
          }
       }


File: gccint.info,  Node: Edges,  Next: Profile information,  Prev: Basic Blocks,  Up: Control Flow

14.2 Edges
==========

Edges represent possible control flow transfers from the end of some
basic block A to the head of another basic block B.  We say that A is a
predecessor of B, and B is a successor of A.  Edges are represented in
GCC with the 'edge' data type.  Each 'edge' acts as a link between two
basic blocks: The 'src' member of an edge points to the predecessor
basic block of the 'dest' basic block.  The members 'preds' and 'succs'
of the 'basic_block' data type point to type-safe vectors of edges to
the predecessors and successors of the block.

 When walking the edges in an edge vector, "edge iterators" should be
used.  Edge iterators are constructed using the 'edge_iterator' data
structure and several methods are available to operate on them:

'ei_start'
     This function initializes an 'edge_iterator' that points to the
     first edge in a vector of edges.

'ei_last'
     This function initializes an 'edge_iterator' that points to the
     last edge in a vector of edges.

'ei_end_p'
     This predicate is 'true' if an 'edge_iterator' represents the last
     edge in an edge vector.

'ei_one_before_end_p'
     This predicate is 'true' if an 'edge_iterator' represents the
     second last edge in an edge vector.

'ei_next'
     This function takes a pointer to an 'edge_iterator' and makes it
     point to the next edge in the sequence.

'ei_prev'
     This function takes a pointer to an 'edge_iterator' and makes it
     point to the previous edge in the sequence.

'ei_edge'
     This function returns the 'edge' currently pointed to by an
     'edge_iterator'.

'ei_safe_safe'
     This function returns the 'edge' currently pointed to by an
     'edge_iterator', but returns 'NULL' if the iterator is pointing at
     the end of the sequence.  This function has been provided for
     existing code makes the assumption that a 'NULL' edge indicates the
     end of the sequence.

 The convenience macro 'FOR_EACH_EDGE' can be used to visit all of the
edges in a sequence of predecessor or successor edges.  It must not be
used when an element might be removed during the traversal, otherwise
elements will be missed.  Here is an example of how to use the macro:

     edge e;
     edge_iterator ei;

     FOR_EACH_EDGE (e, ei, bb->succs)
       {
          if (e->flags & EDGE_FALLTHRU)
            break;
       }

 There are various reasons why control flow may transfer from one block
to another.  One possibility is that some instruction, for example a
'CODE_LABEL', in a linearized instruction stream just always starts a
new basic block.  In this case a "fall-thru" edge links the basic block
to the first following basic block.  But there are several other reasons
why edges may be created.  The 'flags' field of the 'edge' data type is
used to store information about the type of edge we are dealing with.
Each edge is of one of the following types:

_jump_
     No type flags are set for edges corresponding to jump instructions.
     These edges are used for unconditional or conditional jumps and in
     RTL also for table jumps.  They are the easiest to manipulate as
     they may be freely redirected when the flow graph is not in SSA
     form.

_fall-thru_
     Fall-thru edges are present in case where the basic block may
     continue execution to the following one without branching.  These
     edges have the 'EDGE_FALLTHRU' flag set.  Unlike other types of
     edges, these edges must come into the basic block immediately
     following in the instruction stream.  The function
     'force_nonfallthru' is available to insert an unconditional jump in
     the case that redirection is needed.  Note that this may require
     creation of a new basic block.

_exception handling_
     Exception handling edges represent possible control transfers from
     a trapping instruction to an exception handler.  The definition of
     "trapping" varies.  In C++, only function calls can throw, but for
     Java and Ada, exceptions like division by zero or segmentation
     fault are defined and thus each instruction possibly throwing this
     kind of exception needs to be handled as control flow instruction.
     Exception edges have the 'EDGE_ABNORMAL' and 'EDGE_EH' flags set.

     When updating the instruction stream it is easy to change possibly
     trapping instruction to non-trapping, by simply removing the
     exception edge.  The opposite conversion is difficult, but should
     not happen anyway.  The edges can be eliminated via
     'purge_dead_edges' call.

     In the RTL representation, the destination of an exception edge is
     specified by 'REG_EH_REGION' note attached to the insn.  In case of
     a trapping call the 'EDGE_ABNORMAL_CALL' flag is set too.  In the
     'GIMPLE' representation, this extra flag is not set.

     In the RTL representation, the predicate 'may_trap_p' may be used
     to check whether instruction still may trap or not.  For the tree
     representation, the 'tree_could_trap_p' predicate is available, but
     this predicate only checks for possible memory traps, as in
     dereferencing an invalid pointer location.

_sibling calls_
     Sibling calls or tail calls terminate the function in a
     non-standard way and thus an edge to the exit must be present.
     'EDGE_SIBCALL' and 'EDGE_ABNORMAL' are set in such case.  These
     edges only exist in the RTL representation.

_computed jumps_
     Computed jumps contain edges to all labels in the function
     referenced from the code.  All those edges have 'EDGE_ABNORMAL'
     flag set.  The edges used to represent computed jumps often cause
     compile time performance problems, since functions consisting of
     many taken labels and many computed jumps may have _very_ dense
     flow graphs, so these edges need to be handled with special care.
     During the earlier stages of the compilation process, GCC tries to
     avoid such dense flow graphs by factoring computed jumps.  For
     example, given the following series of jumps,

            goto *x;
            [ ... ]

            goto *x;
            [ ... ]

            goto *x;
            [ ... ]

     factoring the computed jumps results in the following code sequence
     which has a much simpler flow graph:

            goto y;
            [ ... ]

            goto y;
            [ ... ]

            goto y;
            [ ... ]

          y:
            goto *x;

     However, the classic problem with this transformation is that it
     has a runtime cost in there resulting code: An extra jump.
     Therefore, the computed jumps are un-factored in the later passes
     of the compiler (in the pass called
     'pass_duplicate_computed_gotos').  Be aware of that when you work
     on passes in that area.  There have been numerous examples already
     where the compile time for code with unfactored computed jumps
     caused some serious headaches.

_nonlocal goto handlers_
     GCC allows nested functions to return into caller using a 'goto' to
     a label passed to as an argument to the callee.  The labels passed
     to nested functions contain special code to cleanup after function
     call.  Such sections of code are referred to as "nonlocal goto
     receivers".  If a function contains such nonlocal goto receivers,
     an edge from the call to the label is created with the
     'EDGE_ABNORMAL' and 'EDGE_ABNORMAL_CALL' flags set.

_function entry points_
     By definition, execution of function starts at basic block 0, so
     there is always an edge from the 'ENTRY_BLOCK_PTR' to basic block
     0.  There is no 'GIMPLE' representation for alternate entry points
     at this moment.  In RTL, alternate entry points are specified by
     'CODE_LABEL' with 'LABEL_ALTERNATE_NAME' defined.  This feature is
     currently used for multiple entry point prologues and is limited to
     post-reload passes only.  This can be used by back-ends to emit
     alternate prologues for functions called from different contexts.
     In future full support for multiple entry functions defined by
     Fortran 90 needs to be implemented.

_function exits_
     In the pre-reload representation a function terminates after the
     last instruction in the insn chain and no explicit return
     instructions are used.  This corresponds to the fall-thru edge into
     exit block.  After reload, optimal RTL epilogues are used that use
     explicit (conditional) return instructions that are represented by
     edges with no flags set.


File: gccint.info,  Node: Profile information,  Next: Maintaining the CFG,  Prev: Edges,  Up: Control Flow

14.3 Profile information
========================

In many cases a compiler must make a choice whether to trade speed in
one part of code for speed in another, or to trade code size for code
speed.  In such cases it is useful to know information about how often
some given block will be executed.  That is the purpose for maintaining
profile within the flow graph.  GCC can handle profile information
obtained through "profile feedback", but it can also estimate branch
probabilities based on statics and heuristics.

 The feedback based profile is produced by compiling the program with
instrumentation, executing it on a train run and reading the numbers of
executions of basic blocks and edges back to the compiler while
re-compiling the program to produce the final executable.  This method
provides very accurate information about where a program spends most of
its time on the train run.  Whether it matches the average run of course
depends on the choice of train data set, but several studies have shown
that the behavior of a program usually changes just marginally over
different data sets.

 When profile feedback is not available, the compiler may be asked to
attempt to predict the behavior of each branch in the program using a
set of heuristics (see 'predict.def' for details) and compute estimated
frequencies of each basic block by propagating the probabilities over
the graph.

 Each 'basic_block' contains two integer fields to represent profile
information: 'frequency' and 'count'.  The 'frequency' is an estimation
how often is basic block executed within a function.  It is represented
as an integer scaled in the range from 0 to 'BB_FREQ_BASE'.  The most
frequently executed basic block in function is initially set to
'BB_FREQ_BASE' and the rest of frequencies are scaled accordingly.
During optimization, the frequency of the most frequent basic block can
both decrease (for instance by loop unrolling) or grow (for instance by
cross-jumping optimization), so scaling sometimes has to be performed
multiple times.

 The 'count' contains hard-counted numbers of execution measured during
training runs and is nonzero only when profile feedback is available.
This value is represented as the host's widest integer (typically a 64
bit integer) of the special type 'gcov_type'.

 Most optimization passes can use only the frequency information of a
basic block, but a few passes may want to know hard execution counts.
The frequencies should always match the counts after scaling, however
during updating of the profile information numerical error may
accumulate into quite large errors.

 Each edge also contains a branch probability field: an integer in the
range from 0 to 'REG_BR_PROB_BASE'.  It represents probability of
passing control from the end of the 'src' basic block to the 'dest'
basic block, i.e. the probability that control will flow along this
edge.  The 'EDGE_FREQUENCY' macro is available to compute how frequently
a given edge is taken.  There is a 'count' field for each edge as well,
representing same information as for a basic block.

 The basic block frequencies are not represented in the instruction
stream, but in the RTL representation the edge frequencies are
represented for conditional jumps (via the 'REG_BR_PROB' macro) since
they are used when instructions are output to the assembly file and the
flow graph is no longer maintained.

 The probability that control flow arrives via a given edge to its
destination basic block is called "reverse probability" and is not
directly represented, but it may be easily computed from frequencies of
basic blocks.

 Updating profile information is a delicate task that can unfortunately
not be easily integrated with the CFG manipulation API.  Many of the
functions and hooks to modify the CFG, such as
'redirect_edge_and_branch', do not have enough information to easily
update the profile, so updating it is in the majority of cases left up
to the caller.  It is difficult to uncover bugs in the profile updating
code, because they manifest themselves only by producing worse code, and
checking profile consistency is not possible because of numeric error
accumulation.  Hence special attention needs to be given to this issue
in each pass that modifies the CFG.

 It is important to point out that 'REG_BR_PROB_BASE' and 'BB_FREQ_BASE'
are both set low enough to be possible to compute second power of any
frequency or probability in the flow graph, it is not possible to even
square the 'count' field, as modern CPUs are fast enough to execute
$2^32$ operations quickly.


File: gccint.info,  Node: Maintaining the CFG,  Next: Liveness information,  Prev: Profile information,  Up: Control Flow

14.4 Maintaining the CFG
========================

An important task of each compiler pass is to keep both the control flow
graph and all profile information up-to-date.  Reconstruction of the
control flow graph after each pass is not an option, since it may be
very expensive and lost profile information cannot be reconstructed at
all.

 GCC has two major intermediate representations, and both use the
'basic_block' and 'edge' data types to represent control flow.  Both
representations share as much of the CFG maintenance code as possible.
For each representation, a set of "hooks" is defined so that each
representation can provide its own implementation of CFG manipulation
routines when necessary.  These hooks are defined in 'cfghooks.h'.
There are hooks for almost all common CFG manipulations, including block
splitting and merging, edge redirection and creating and deleting basic
blocks.  These hooks should provide everything you need to maintain and
manipulate the CFG in both the RTL and 'GIMPLE' representation.

 At the moment, the basic block boundaries are maintained transparently
when modifying instructions, so there rarely is a need to move them
manually (such as in case someone wants to output instruction outside
basic block explicitly).

 In the RTL representation, each instruction has a 'BLOCK_FOR_INSN'
value that represents pointer to the basic block that contains the
instruction.  In the 'GIMPLE' representation, the function 'gimple_bb'
returns a pointer to the basic block containing the queried statement.

 When changes need to be applied to a function in its 'GIMPLE'
representation, "GIMPLE statement iterators" should be used.  These
iterators provide an integrated abstraction of the flow graph and the
instruction stream.  Block statement iterators are constructed using the
'gimple_stmt_iterator' data structure and several modifiers are
available, including the following:

'gsi_start'
     This function initializes a 'gimple_stmt_iterator' that points to
     the first non-empty statement in a basic block.

'gsi_last'
     This function initializes a 'gimple_stmt_iterator' that points to
     the last statement in a basic block.

'gsi_end_p'
     This predicate is 'true' if a 'gimple_stmt_iterator' represents the
     end of a basic block.

'gsi_next'
     This function takes a 'gimple_stmt_iterator' and makes it point to
     its successor.

'gsi_prev'
     This function takes a 'gimple_stmt_iterator' and makes it point to
     its predecessor.

'gsi_insert_after'
     This function inserts a statement after the 'gimple_stmt_iterator'
     passed in.  The final parameter determines whether the statement
     iterator is updated to point to the newly inserted statement, or
     left pointing to the original statement.

'gsi_insert_before'
     This function inserts a statement before the 'gimple_stmt_iterator'
     passed in.  The final parameter determines whether the statement
     iterator is updated to point to the newly inserted statement, or
     left pointing to the original statement.

'gsi_remove'
     This function removes the 'gimple_stmt_iterator' passed in and
     rechains the remaining statements in a basic block, if any.

 In the RTL representation, the macros 'BB_HEAD' and 'BB_END' may be
used to get the head and end 'rtx' of a basic block.  No abstract
iterators are defined for traversing the insn chain, but you can just
use 'NEXT_INSN' and 'PREV_INSN' instead.  *Note Insns::.

 Usually a code manipulating pass simplifies the instruction stream and
the flow of control, possibly eliminating some edges.  This may for
example happen when a conditional jump is replaced with an unconditional
jump, but also when simplifying possibly trapping instruction to
non-trapping while compiling Java.  Updating of edges is not transparent
and each optimization pass is required to do so manually.  However only
few cases occur in practice.  The pass may call 'purge_dead_edges' on a
given basic block to remove superfluous edges, if any.

 Another common scenario is redirection of branch instructions, but this
is best modeled as redirection of edges in the control flow graph and
thus use of 'redirect_edge_and_branch' is preferred over more low level
functions, such as 'redirect_jump' that operate on RTL chain only.  The
CFG hooks defined in 'cfghooks.h' should provide the complete API
required for manipulating and maintaining the CFG.

 It is also possible that a pass has to insert control flow instruction
into the middle of a basic block, thus creating an entry point in the
middle of the basic block, which is impossible by definition: The block
must be split to make sure it only has one entry point, i.e. the head of
the basic block.  The CFG hook 'split_block' may be used when an
instruction in the middle of a basic block has to become the target of a
jump or branch instruction.

 For a global optimizer, a common operation is to split edges in the
flow graph and insert instructions on them.  In the RTL representation,
this can be easily done using the 'insert_insn_on_edge' function that
emits an instruction "on the edge", caching it for a later
'commit_edge_insertions' call that will take care of moving the inserted
instructions off the edge into the instruction stream contained in a
basic block.  This includes the creation of new basic blocks where
needed.  In the 'GIMPLE' representation, the equivalent functions are
'gsi_insert_on_edge' which inserts a block statement iterator on an
edge, and 'gsi_commit_edge_inserts' which flushes the instruction to
actual instruction stream.

 While debugging the optimization pass, the 'verify_flow_info' function
may be useful to find bugs in the control flow graph updating code.


File: gccint.info,  Node: Liveness information,  Prev: Maintaining the CFG,  Up: Control Flow

14.5 Liveness information
=========================

Liveness information is useful to determine whether some register is
"live" at given point of program, i.e. that it contains a value that may
be used at a later point in the program.  This information is used, for
instance, during register allocation, as the pseudo registers only need
to be assigned to a unique hard register or to a stack slot if they are
live.  The hard registers and stack slots may be freely reused for other
values when a register is dead.

 Liveness information is available in the back end starting with
'pass_df_initialize' and ending with 'pass_df_finish'.  Three flavors of
live analysis are available: With 'LR', it is possible to determine at
any point 'P' in the function if the register may be used on some path
from 'P' to the end of the function.  With 'UR', it is possible to
determine if there is a path from the beginning of the function to 'P'
that defines the variable.  'LIVE' is the intersection of the 'LR' and
'UR' and a variable is live at 'P' if there is both an assignment that
reaches it from the beginning of the function and a use that can be
reached on some path from 'P' to the end of the function.

 In general 'LIVE' is the most useful of the three.  The macros
'DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information.  The
macros take a basic block number and return a bitmap that is indexed by
the register number.  This information is only guaranteed to be up to
date after calls are made to 'df_analyze'.  See the file 'df-core.c' for
details on using the dataflow.

 The liveness information is stored partly in the RTL instruction stream
and partly in the flow graph.  Local information is stored in the
instruction stream: Each instruction may contain 'REG_DEAD' notes
representing that the value of a given register is no longer needed, or
'REG_UNUSED' notes representing that the value computed by the
instruction is never used.  The second is useful for instructions
computing multiple values at once.


File: gccint.info,  Node: Loop Analysis and Representation,  Next: Machine Desc,  Prev: Control Flow,  Up: Top

15 Analysis and Representation of Loops
***************************************

GCC provides extensive infrastructure for work with natural loops, i.e.,
strongly connected components of CFG with only one entry block.  This
chapter describes representation of loops in GCC, both on GIMPLE and in
RTL, as well as the interfaces to loop-related analyses (induction
variable analysis and number of iterations analysis).

* Menu:

* Loop representation::         Representation and analysis of loops.
* Loop querying::               Getting information about loops.
* Loop manipulation::           Loop manipulation functions.
* LCSSA::                       Loop-closed SSA form.
* Scalar evolutions::           Induction variables on GIMPLE.
* loop-iv::                     Induction variables on RTL.
* Number of iterations::        Number of iterations analysis.
* Dependency analysis::         Data dependency analysis.


File: gccint.info,  Node: Loop representation,  Next: Loop querying,  Up: Loop Analysis and Representation

15.1 Loop representation
========================

This chapter describes the representation of loops in GCC, and functions
that can be used to build, modify and analyze this representation.  Most
of the interfaces and data structures are declared in 'cfgloop.h'.  Loop
structures are analyzed and this information disposed or updated at the
discretion of individual passes.  Still most of the generic CFG
manipulation routines are aware of loop structures and try to keep them
up-to-date.  By this means an increasing part of the compilation
pipeline is setup to maintain loop structure across passes to allow
attaching meta information to individual loops for consumption by later
passes.

 In general, a natural loop has one entry block (header) and possibly
several back edges (latches) leading to the header from the inside of
the loop.  Loops with several latches may appear if several loops share
a single header, or if there is a branching in the middle of the loop.
The representation of loops in GCC however allows only loops with a
single latch.  During loop analysis, headers of such loops are split and
forwarder blocks are created in order to disambiguate their structures.
Heuristic based on profile information and structure of the induction
variables in the loops is used to determine whether the latches
correspond to sub-loops or to control flow in a single loop.  This means
that the analysis sometimes changes the CFG, and if you run it in the
middle of an optimization pass, you must be able to deal with the new
blocks.  You may avoid CFG changes by passing
'LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note
however that most other loop manipulation functions will not work
correctly for loops with multiple latch edges (the functions that only
query membership of blocks to loops and subloop relationships, or
enumerate and test loop exits, can be expected to work).

 Body of the loop is the set of blocks that are dominated by its header,
and reachable from its latch against the direction of edges in CFG.  The
loops are organized in a containment hierarchy (tree) such that all the
loops immediately contained inside loop L are the children of L in the
tree.  This tree is represented by the 'struct loops' structure.  The
root of this tree is a fake loop that contains all blocks in the
function.  Each of the loops is represented in a 'struct loop'
structure.  Each loop is assigned an index ('num' field of the 'struct
loop' structure), and the pointer to the loop is stored in the
corresponding field of the 'larray' vector in the loops structure.  The
indices do not have to be continuous, there may be empty ('NULL')
entries in the 'larray' created by deleting loops.  Also, there is no
guarantee on the relative order of a loop and its subloops in the
numbering.  The index of a loop never changes.

 The entries of the 'larray' field should not be accessed directly.  The
function 'get_loop' returns the loop description for a loop with the
given index.  'number_of_loops' function returns number of loops in the
function.  To traverse all loops, use 'FOR_EACH_LOOP' macro.  The
'flags' argument of the macro is used to determine the direction of
traversal and the set of loops visited.  Each loop is guaranteed to be
visited exactly once, regardless of the changes to the loop tree, and
the loops may be removed during the traversal.  The newly created loops
are never traversed, if they need to be visited, this must be done
separately after their creation.  The 'FOR_EACH_LOOP' macro allocates
temporary variables.  If the 'FOR_EACH_LOOP' loop were ended using break
or goto, they would not be released; 'FOR_EACH_LOOP_BREAK' macro must be
used instead.

 Each basic block contains the reference to the innermost loop it
belongs to ('loop_father').  For this reason, it is only possible to
have one 'struct loops' structure initialized at the same time for each
CFG.  The global variable 'current_loops' contains the 'struct loops'
structure.  Many of the loop manipulation functions assume that
dominance information is up-to-date.

 The loops are analyzed through 'loop_optimizer_init' function.  The
argument of this function is a set of flags represented in an integer
bitmask.  These flags specify what other properties of the loop
structures should be calculated/enforced and preserved later:

   * 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes
     to CFG will be performed in the loop analysis, in particular, loops
     with multiple latch edges will not be disambiguated.  If a loop has
     multiple latches, its latch block is set to NULL.  Most of the loop
     manipulation functions will not work for loops in this shape.  No
     other flags that require CFG changes can be passed to
     loop_optimizer_init.
   * 'LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a way
     that each loop has only one entry edge, and additionally, the
     source block of this entry edge has only one successor.  This
     creates a natural place where the code can be moved out of the
     loop, and ensures that the entry edge of the loop leads from its
     immediate super-loop.
   * 'LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force
     the latch block of each loop to have only one successor.  This
     ensures that the latch of the loop does not belong to any of its
     sub-loops, and makes manipulation with the loops significantly
     easier.  Most of the loop manipulation functions assume that the
     loops are in this shape.  Note that with this flag, the "normal"
     loop without any control flow inside and with one exit consists of
     two basic blocks.
   * 'LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in
     the strongly connected components that are not natural loops (have
     more than one entry block) are marked with 'BB_IRREDUCIBLE_LOOP'
     and 'EDGE_IRREDUCIBLE_LOOP' flags.  The flag is not set for blocks
     and edges that belong to natural loops that are in such an
     irreducible region (but it is set for the entry and exit edges of
     such a loop, if they lead to/from this region).
   * 'LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and
     updated for each loop.  This makes some functions (e.g.,
     'get_loop_exit_edges') more efficient.  Some functions (e.g.,
     'single_exit') can be used only if the lists of exits are recorded.

 These properties may also be computed/enforced later, using functions
'create_preheaders', 'force_single_succ_latches',
'mark_irreducible_loops' and 'record_loop_exits'.  The properties can be
queried using 'loops_state_satisfies_p'.

 The memory occupied by the loops structures should be freed with
'loop_optimizer_finalize' function.  When loop structures are setup to
be preserved across passes this function reduces the information to be
kept up-to-date to a minimum (only 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES'
set).

 The CFG manipulation functions in general do not update loop
structures.  Specialized versions that additionally do so are provided
for the most common tasks.  On GIMPLE, 'cleanup_tree_cfg_loop' function
can be used to cleanup CFG while updating the loops structures if
'current_loops' is set.

 At the moment loop structure is preserved from the start of GIMPLE loop
optimizations until the end of RTL loop optimizations.  During this time
a loop can be tracked by its 'struct loop' and number.


File: gccint.info,  Node: Loop querying,  Next: Loop manipulation,  Prev: Loop representation,  Up: Loop Analysis and Representation

15.2 Loop querying
==================

The functions to query the information about loops are declared in
'cfgloop.h'.  Some of the information can be taken directly from the
structures.  'loop_father' field of each basic block contains the
innermost loop to that the block belongs.  The most useful fields of
loop structure (that are kept up-to-date at all times) are:

   * 'header', 'latch': Header and latch basic blocks of the loop.
   * 'num_nodes': Number of basic blocks in the loop (including the
     basic blocks of the sub-loops).
   * 'outer', 'inner', 'next': The super-loop, the first sub-loop, and
     the sibling of the loop in the loops tree.

 There are other fields in the loop structures, many of them used only
by some of the passes, or not updated during CFG changes; in general,
they should not be accessed directly.

 The most important functions to query loop structures are:

   * 'loop_depth': The depth of the loop in the loops tree, i.e., the
     number of super-loops of the loop.
   * 'flow_loops_dump': Dumps the information about loops to a file.
   * 'verify_loop_structure': Checks consistency of the loop structures.
   * 'loop_latch_edge': Returns the latch edge of a loop.
   * 'loop_preheader_edge': If loops have preheaders, returns the
     preheader edge of a loop.
   * 'flow_loop_nested_p': Tests whether loop is a sub-loop of another
     loop.
   * 'flow_bb_inside_loop_p': Tests whether a basic block belongs to a
     loop (including its sub-loops).
   * 'find_common_loop': Finds the common super-loop of two loops.
   * 'superloop_at_depth': Returns the super-loop of a loop with the
     given depth.
   * 'tree_num_loop_insns', 'num_loop_insns': Estimates the number of
     insns in the loop, on GIMPLE and on RTL.
   * 'loop_exit_edge_p': Tests whether edge is an exit from a loop.
   * 'mark_loop_exit_edges': Marks all exit edges of all loops with
     'EDGE_LOOP_EXIT' flag.
   * 'get_loop_body', 'get_loop_body_in_dom_order',
     'get_loop_body_in_bfs_order': Enumerates the basic blocks in the
     loop in depth-first search order in reversed CFG, ordered by
     dominance relation, and breath-first search order, respectively.
   * 'single_exit': Returns the single exit edge of the loop, or 'NULL'
     if the loop has more than one exit.  You can only use this function
     if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used.
   * 'get_loop_exit_edges': Enumerates the exit edges of a loop.
   * 'just_once_each_iteration_p': Returns true if the basic block is
     executed exactly once during each iteration of a loop (that is, it
     does not belong to a sub-loop, and it dominates the latch of the
     loop).


File: gccint.info,  Node: Loop manipulation,  Next: LCSSA,  Prev: Loop querying,  Up: Loop Analysis and Representation

15.3 Loop manipulation
======================

The loops tree can be manipulated using the following functions:

   * 'flow_loop_tree_node_add': Adds a node to the tree.
   * 'flow_loop_tree_node_remove': Removes a node from the tree.
   * 'add_bb_to_loop': Adds a basic block to a loop.
   * 'remove_bb_from_loops': Removes a basic block from loops.

 Most low-level CFG functions update loops automatically.  The following
functions handle some more complicated cases of CFG manipulations:

   * 'remove_path': Removes an edge and all blocks it dominates.
   * 'split_loop_exit_edge': Splits exit edge of the loop, ensuring that
     PHI node arguments remain in the loop (this ensures that
     loop-closed SSA form is preserved).  Only useful on GIMPLE.

 Finally, there are some higher-level loop transformations implemented.
While some of them are written so that they should work on non-innermost
loops, they are mostly untested in that case, and at the moment, they
are only reliable for the innermost loops:

   * 'create_iv': Creates a new induction variable.  Only works on
     GIMPLE.  'standard_iv_increment_position' can be used to find a
     suitable place for the iv increment.
   * 'duplicate_loop_to_header_edge',
     'tree_duplicate_loop_to_header_edge': These functions (on RTL and
     on GIMPLE) duplicate the body of the loop prescribed number of
     times on one of the edges entering loop header, thus performing
     either loop unrolling or loop peeling.  'can_duplicate_loop_p'
     ('can_unroll_loop_p' on GIMPLE) must be true for the duplicated
     loop.
   * 'loop_version', 'tree_ssa_loop_version': These function create a
     copy of a loop, and a branch before them that selects one of them
     depending on the prescribed condition.  This is useful for
     optimizations that need to verify some assumptions in runtime (one
     of the copies of the loop is usually left unchanged, while the
     other one is transformed in some way).
   * 'tree_unroll_loop': Unrolls the loop, including peeling the extra
     iterations to make the number of iterations divisible by unroll
     factor, updating the exit condition, and removing the exits that
     now cannot be taken.  Works only on GIMPLE.


File: gccint.info,  Node: LCSSA,  Next: Scalar evolutions,  Prev: Loop manipulation,  Up: Loop Analysis and Representation

15.4 Loop-closed SSA form
=========================

Throughout the loop optimizations on tree level, one extra condition is
enforced on the SSA form: No SSA name is used outside of the loop in
that it is defined.  The SSA form satisfying this condition is called
"loop-closed SSA form" - LCSSA.  To enforce LCSSA, PHI nodes must be
created at the exits of the loops for the SSA names that are used
outside of them.  Only the real operands (not virtual SSA names) are
held in LCSSA, in order to save memory.

 There are various benefits of LCSSA:

   * Many optimizations (value range analysis, final value replacement)
     are interested in the values that are defined in the loop and used
     outside of it, i.e., exactly those for that we create new PHI
     nodes.
   * In induction variable analysis, it is not necessary to specify the
     loop in that the analysis should be performed - the scalar
     evolution analysis always returns the results with respect to the
     loop in that the SSA name is defined.
   * It makes updating of SSA form during loop transformations simpler.
     Without LCSSA, operations like loop unrolling may force creation of
     PHI nodes arbitrarily far from the loop, while in LCSSA, the SSA
     form can be updated locally.  However, since we only keep real
     operands in LCSSA, we cannot use this advantage (we could have
     local updating of real operands, but it is not much more efficient
     than to use generic SSA form updating for it as well; the amount of
     changes to SSA is the same).

 However, it also means LCSSA must be updated.  This is usually
straightforward, unless you create a new value in loop and use it
outside, or unless you manipulate loop exit edges (functions are
provided to make these manipulations simple).
'rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA, and
'verify_loop_closed_ssa' to check that the invariant of LCSSA is
preserved.


File: gccint.info,  Node: Scalar evolutions,  Next: loop-iv,  Prev: LCSSA,  Up: Loop Analysis and Representation

15.5 Scalar evolutions
======================

Scalar evolutions (SCEV) are used to represent results of induction
variable analysis on GIMPLE.  They enable us to represent variables with
complicated behavior in a simple and consistent way (we only use it to
express values of polynomial induction variables, but it is possible to
extend it).  The interfaces to SCEV analysis are declared in
'tree-scalar-evolution.h'.  To use scalar evolutions analysis,
'scev_initialize' must be used.  To stop using SCEV, 'scev_finalize'
should be used.  SCEV analysis caches results in order to save time and
memory.  This cache however is made invalid by most of the loop
transformations, including removal of code.  If such a transformation is
performed, 'scev_reset' must be called to clean the caches.

 Given an SSA name, its behavior in loops can be analyzed using the
'analyze_scalar_evolution' function.  The returned SCEV however does not
have to be fully analyzed and it may contain references to other SSA
names defined in the loop.  To resolve these (potentially recursive)
references, 'instantiate_parameters' or 'resolve_mixers' functions must
be used.  'instantiate_parameters' is useful when you use the results of
SCEV only for some analysis, and when you work with whole nest of loops
at once.  It will try replacing all SSA names by their SCEV in all
loops, including the super-loops of the current loop, thus providing a
complete information about the behavior of the variable in the loop
nest.  'resolve_mixers' is useful if you work with only one loop at a
time, and if you possibly need to create code based on the value of the
induction variable.  It will only resolve the SSA names defined in the
current loop, leaving the SSA names defined outside unchanged, even if
their evolution in the outer loops is known.

 The SCEV is a normal tree expression, except for the fact that it may
contain several special tree nodes.  One of them is 'SCEV_NOT_KNOWN',
used for SSA names whose value cannot be expressed.  The other one is
'POLYNOMIAL_CHREC'.  Polynomial chrec has three arguments - base, step
and loop (both base and step may contain further polynomial chrecs).
Type of the expression and of base and step must be the same.  A
variable has evolution 'POLYNOMIAL_CHREC(base, step, loop)' if it is (in
the specified loop) equivalent to 'x_1' in the following example

     while (...)
       {
         x_1 = phi (base, x_2);
         x_2 = x_1 + step;
       }

 Note that this includes the language restrictions on the operations.
For example, if we compile C code and 'x' has signed type, then the
overflow in addition would cause undefined behavior, and we may assume
that this does not happen.  Hence, the value with this SCEV cannot
overflow (which restricts the number of iterations of such a loop).

 In many cases, one wants to restrict the attention just to affine
induction variables.  In this case, the extra expressive power of SCEV
is not useful, and may complicate the optimizations.  In this case,
'simple_iv' function may be used to analyze a value - the result is a
loop-invariant base and step.


File: gccint.info,  Node: loop-iv,  Next: Number of iterations,  Prev: Scalar evolutions,  Up: Loop Analysis and Representation

15.6 IV analysis on RTL
=======================

The induction variable on RTL is simple and only allows analysis of
affine induction variables, and only in one loop at once.  The interface
is declared in 'cfgloop.h'.  Before analyzing induction variables in a
loop L, 'iv_analysis_loop_init' function must be called on L. After the
analysis (possibly calling 'iv_analysis_loop_init' for several loops) is
finished, 'iv_analysis_done' should be called.  The following functions
can be used to access the results of the analysis:

   * 'iv_analyze': Analyzes a single register used in the given insn.
     If no use of the register in this insn is found, the following
     insns are scanned, so that this function can be called on the insn
     returned by get_condition.
   * 'iv_analyze_result': Analyzes result of the assignment in the given
     insn.
   * 'iv_analyze_expr': Analyzes a more complicated expression.  All its
     operands are analyzed by 'iv_analyze', and hence they must be used
     in the specified insn or one of the following insns.

 The description of the induction variable is provided in 'struct
rtx_iv'.  In order to handle subregs, the representation is a bit
complicated; if the value of the 'extend' field is not 'UNKNOWN', the
value of the induction variable in the i-th iteration is

     delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)),

 with the following exception: if 'first_special' is true, then the
value in the first iteration (when 'i' is zero) is 'delta + mult *
base'.  However, if 'extend' is equal to 'UNKNOWN', then 'first_special'
must be false, 'delta' 0, 'mult' 1 and the value in the i-th iteration
is

     subreg_{mode} (base + i * step)

 The function 'get_iv_value' can be used to perform these calculations.


File: gccint.info,  Node: Number of iterations,  Next: Dependency analysis,  Prev: loop-iv,  Up: Loop Analysis and Representation

15.7 Number of iterations analysis
==================================

Both on GIMPLE and on RTL, there are functions available to determine
the number of iterations of a loop, with a similar interface.  The
number of iterations of a loop in GCC is defined as the number of
executions of the loop latch.  In many cases, it is not possible to
determine the number of iterations unconditionally - the determined
number is correct only if some assumptions are satisfied.  The analysis
tries to verify these conditions using the information contained in the
program; if it fails, the conditions are returned together with the
result.  The following information and conditions are provided by the
analysis:

   * 'assumptions': If this condition is false, the rest of the
     information is invalid.
   * 'noloop_assumptions' on RTL, 'may_be_zero' on GIMPLE: If this
     condition is true, the loop exits in the first iteration.
   * 'infinite': If this condition is true, the loop is infinite.  This
     condition is only available on RTL.  On GIMPLE, conditions for
     finiteness of the loop are included in 'assumptions'.
   * 'niter_expr' on RTL, 'niter' on GIMPLE: The expression that gives
     number of iterations.  The number of iterations is defined as the
     number of executions of the loop latch.

 Both on GIMPLE and on RTL, it necessary for the induction variable
analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL).
On GIMPLE, the results are stored to 'struct tree_niter_desc' structure.
Number of iterations before the loop is exited through a given exit can
be determined using 'number_of_iterations_exit' function.  On RTL, the
results are returned in 'struct niter_desc' structure.  The
corresponding function is named 'check_simple_exit'.  There are also
functions that pass through all the exits of a loop and try to find one
with easy to determine number of iterations - 'find_loop_niter' on
GIMPLE and 'find_simple_exit' on RTL.  Finally, there are functions that
provide the same information, but additionally cache it, so that
repeated calls to number of iterations are not so costly -
'number_of_latch_executions' on GIMPLE and 'get_simple_loop_desc' on
RTL.

 Note that some of these functions may behave slightly differently than
others - some of them return only the expression for the number of
iterations, and fail if there are some assumptions.  The function
'number_of_latch_executions' works only for single-exit loops.  The
function 'number_of_cond_exit_executions' can be used to determine
number of executions of the exit condition of a single-exit loop (i.e.,
the 'number_of_latch_executions' increased by one).


File: gccint.info,  Node: Dependency analysis,  Prev: Number of iterations,  Up: Loop Analysis and Representation

15.8 Data Dependency Analysis
=============================

The code for the data dependence analysis can be found in
'tree-data-ref.c' and its interface and data structures are described in
'tree-data-ref.h'.  The function that computes the data dependences for
all the array and pointer references for a given loop is
'compute_data_dependences_for_loop'.  This function is currently used by
the linear loop transform and the vectorization passes.  Before calling
this function, one has to allocate two vectors: a first vector will
contain the set of data references that are contained in the analyzed
loop body, and the second vector will contain the dependence relations
between the data references.  Thus if the vector of data references is
of size 'n', the vector containing the dependence relations will contain
'n*n' elements.  However if the analyzed loop contains side effects,
such as calls that potentially can interfere with the data references in
the current analyzed loop, the analysis stops while scanning the loop
body for data references, and inserts a single 'chrec_dont_know' in the
dependence relation array.

 The data references are discovered in a particular order during the
scanning of the loop body: the loop body is analyzed in execution order,
and the data references of each statement are pushed at the end of the
data reference array.  Two data references syntactically occur in the
program in the same order as in the array of data references.  This
syntactic order is important in some classical data dependence tests,
and mapping this order to the elements of this array avoids costly
queries to the loop body representation.

 Three types of data references are currently handled: ARRAY_REF,
INDIRECT_REF and COMPONENT_REF.  The data structure for the data
reference is 'data_reference', where 'data_reference_p' is a name of a
pointer to the data reference structure.  The structure contains the
following elements:

   * 'base_object_info': Provides information about the base object of
     the data reference and its access functions.  These access
     functions represent the evolution of the data reference in the loop
     relative to its base, in keeping with the classical meaning of the
     data reference access function for the support of arrays.  For
     example, for a reference 'a.b[i][j]', the base object is 'a.b' and
     the access functions, one for each array subscript, are: '{i_init,
     + i_step}_1, {j_init, +, j_step}_2'.

   * 'first_location_in_loop': Provides information about the first
     location accessed by the data reference in the loop and about the
     access function used to represent evolution relative to this
     location.  This data is used to support pointers, and is not used
     for arrays (for which we have base objects).  Pointer accesses are
     represented as a one-dimensional access that starts from the first
     location accessed in the loop.  For example:

                for1 i
                   for2 j
                    *((int *)p + i + j) = a[i][j];

     The access function of the pointer access is '{0, + 4B}_for2'
     relative to 'p + i'.  The access functions of the array are
     '{i_init, + i_step}_for1' and '{j_init, +, j_step}_for2' relative
     to 'a'.

     Usually, the object the pointer refers to is either unknown, or we
     can't prove that the access is confined to the boundaries of a
     certain object.

     Two data references can be compared only if at least one of these
     two representations has all its fields filled for both data
     references.

     The current strategy for data dependence tests is as follows: If
     both 'a' and 'b' are represented as arrays, compare 'a.base_object'
     and 'b.base_object'; if they are equal, apply dependence tests (use
     access functions based on base_objects).  Else if both 'a' and 'b'
     are represented as pointers, compare 'a.first_location' and
     'b.first_location'; if they are equal, apply dependence tests (use
     access functions based on first location).  However, if 'a' and 'b'
     are represented differently, only try to prove that the bases are
     definitely different.

   * Aliasing information.
   * Alignment information.

 The structure describing the relation between two data references is
'data_dependence_relation' and the shorter name for a pointer to such a
structure is 'ddr_p'.  This structure contains:

   * a pointer to each data reference,
   * a tree node 'are_dependent' that is set to 'chrec_known' if the
     analysis has proved that there is no dependence between these two
     data references, 'chrec_dont_know' if the analysis was not able to
     determine any useful result and potentially there could exist a
     dependence between these data references, and 'are_dependent' is
     set to 'NULL_TREE' if there exist a dependence relation between the
     data references, and the description of this dependence relation is
     given in the 'subscripts', 'dir_vects', and 'dist_vects' arrays,
   * a boolean that determines whether the dependence relation can be
     represented by a classical distance vector,
   * an array 'subscripts' that contains a description of each subscript
     of the data references.  Given two array accesses a subscript is
     the tuple composed of the access functions for a given dimension.
     For example, given 'A[f1][f2][f3]' and 'B[g1][g2][g3]', there are
     three subscripts: '(f1, g1), (f2, g2), (f3, g3)'.
   * two arrays 'dir_vects' and 'dist_vects' that contain classical
     representations of the data dependences under the form of direction
     and distance dependence vectors,
   * an array of loops 'loop_nest' that contains the loops to which the
     distance and direction vectors refer to.

 Several functions for pretty printing the information extracted by the
data dependence analysis are available: 'dump_ddrs' prints with a
maximum verbosity the details of a data dependence relations array,
'dump_dist_dir_vectors' prints only the classical distance and direction
vectors for a data dependence relations array, and
'dump_data_references' prints the details of the data references
contained in a data reference array.


File: gccint.info,  Node: Machine Desc,  Next: Target Macros,  Prev: Loop Analysis and Representation,  Up: Top

16 Machine Descriptions
***********************

A machine description has two parts: a file of instruction patterns
('.md' file) and a C header file of macro definitions.

 The '.md' file for a target machine contains a pattern for each
instruction that the target machine supports (or at least each
instruction that is worth telling the compiler about).  It may also
contain comments.  A semicolon causes the rest of the line to be a
comment, unless the semicolon is inside a quoted string.

 See the next chapter for information on the C header file.

* Menu:

* Overview::            How the machine description is used.
* Patterns::            How to write instruction patterns.
* Example::             An explained example of a 'define_insn' pattern.
* RTL Template::        The RTL template defines what insns match a pattern.
* Output Template::     The output template says how to make assembler code
                        from such an insn.
* Output Statement::    For more generality, write C code to output
                        the assembler code.
* Predicates::          Controlling what kinds of operands can be used
                        for an insn.
* Constraints::         Fine-tuning operand selection.
* Standard Names::      Names mark patterns to use for code generation.
* Pattern Ordering::    When the order of patterns makes a difference.
* Dependent Patterns::  Having one pattern may make you need another.
* Jump Patterns::       Special considerations for patterns for jump insns.
* Looping Patterns::    How to define patterns for special looping insns.
* Insn Canonicalizations::Canonicalization of Instructions
* Expander Definitions::Generating a sequence of several RTL insns
                        for a standard operation.
* Insn Splitting::      Splitting Instructions into Multiple Instructions.
* Including Patterns::  Including Patterns in Machine Descriptions.
* Peephole Definitions::Defining machine-specific peephole optimizations.
* Insn Attributes::     Specifying the value of attributes for generated insns.
* Conditional Execution::Generating 'define_insn' patterns for
                         predication.
* Define Subst::	Generating 'define_insn' and 'define_expand'
			patterns from other patterns.
* Constant Definitions::Defining symbolic constants that can be used in the
                        md file.
* Iterators::           Using iterators to generate patterns from a template.


File: gccint.info,  Node: Overview,  Next: Patterns,  Up: Machine Desc

16.1 Overview of How the Machine Description is Used
====================================================

There are three main conversions that happen in the compiler:

  1. The front end reads the source code and builds a parse tree.

  2. The parse tree is used to generate an RTL insn list based on named
     instruction patterns.

  3. The insn list is matched against the RTL templates to produce
     assembler code.

 For the generate pass, only the names of the insns matter, from either
a named 'define_insn' or a 'define_expand'.  The compiler will choose
the pattern with the right name and apply the operands according to the
documentation later in this chapter, without regard for the RTL template
or operand constraints.  Note that the names the compiler looks for are
hard-coded in the compiler--it will ignore unnamed patterns and patterns
with names it doesn't know about, but if you don't provide a named
pattern it needs, it will abort.

 If a 'define_insn' is used, the template given is inserted into the
insn list.  If a 'define_expand' is used, one of three things happens,
based on the condition logic.  The condition logic may manually create
new insns for the insn list, say via 'emit_insn()', and invoke 'DONE'.
For certain named patterns, it may invoke 'FAIL' to tell the compiler to
use an alternate way of performing that task.  If it invokes neither
'DONE' nor 'FAIL', the template given in the pattern is inserted, as if
the 'define_expand' were a 'define_insn'.

 Once the insn list is generated, various optimization passes convert,
replace, and rearrange the insns in the insn list.  This is where the
'define_split' and 'define_peephole' patterns get used, for example.

 Finally, the insn list's RTL is matched up with the RTL templates in
the 'define_insn' patterns, and those patterns are used to emit the
final assembly code.  For this purpose, each named 'define_insn' acts
like it's unnamed, since the names are ignored.


File: gccint.info,  Node: Patterns,  Next: Example,  Prev: Overview,  Up: Machine Desc

16.2 Everything about Instruction Patterns
==========================================

A 'define_insn' expression is used to define instruction patterns to
which insns may be matched.  A 'define_insn' expression contains an
incomplete RTL expression, with pieces to be filled in later, operand
constraints that restrict how the pieces can be filled in, and an output
template or C code to generate the assembler output.

 A 'define_insn' is an RTL expression containing four or five operands:

  1. An optional name.  The presence of a name indicate that this
     instruction pattern can perform a certain standard job for the
     RTL-generation pass of the compiler.  This pass knows certain names
     and will use the instruction patterns with those names, if the
     names are defined in the machine description.

     The absence of a name is indicated by writing an empty string where
     the name should go.  Nameless instruction patterns are never used
     for generating RTL code, but they may permit several simpler insns
     to be combined later on.

     Names that are not thus known and used in RTL-generation have no
     effect; they are equivalent to no name at all.

     For the purpose of debugging the compiler, you may also specify a
     name beginning with the '*' character.  Such a name is used only
     for identifying the instruction in RTL dumps; it is equivalent to
     having a nameless pattern for all other purposes.  Names beginning
     with the '*' character are not required to be unique.

  2. The "RTL template": This is a vector of incomplete RTL expressions
     which describe the semantics of the instruction (*note RTL
     Template::).  It is incomplete because it may contain
     'match_operand', 'match_operator', and 'match_dup' expressions that
     stand for operands of the instruction.

     If the vector has multiple elements, the RTL template is treated as
     a 'parallel' expression.

  3. The condition: This is a string which contains a C expression.
     When the compiler attempts to match RTL against a pattern, the
     condition is evaluated.  If the condition evaluates to 'true', the
     match is permitted.  The condition may be an empty string, which is
     treated as always 'true'.

     For a named pattern, the condition may not depend on the data in
     the insn being matched, but only the target-machine-type flags.
     The compiler needs to test these conditions during initialization
     in order to learn exactly which named instructions are available in
     a particular run.

     For nameless patterns, the condition is applied only when matching
     an individual insn, and only after the insn has matched the
     pattern's recognition template.  The insn's operands may be found
     in the vector 'operands'.

     For an insn where the condition has once matched, it cannot later
     be used to control register allocation by excluding certain
     register or value combinations.

  4. The "output template" or "output statement": This is either a
     string, or a fragment of C code which returns a string.

     When simple substitution isn't general enough, you can specify a
     piece of C code to compute the output.  *Note Output Statement::.

  5. The "insn attributes": This is an optional vector containing the
     values of attributes for insns matching this pattern (*note Insn
     Attributes::).


File: gccint.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc

16.3 Example of 'define_insn'
=============================

Here is an example of an instruction pattern, taken from the machine
description for the 68000/68020.

     (define_insn "tstsi"
       [(set (cc0)
             (match_operand:SI 0 "general_operand" "rm"))]
       ""
       "*
     {
       if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
         return \"tstl %0\";
       return \"cmpl #0,%0\";
     }")

This can also be written using braced strings:

     (define_insn "tstsi"
       [(set (cc0)
             (match_operand:SI 0 "general_operand" "rm"))]
       ""
     {
       if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
         return "tstl %0";
       return "cmpl #0,%0";
     })

 This describes an instruction which sets the condition codes based on
the value of a general operand.  It has no condition, so any insn with
an RTL description of the form shown may be matched to this pattern.
The name 'tstsi' means "test a 'SImode' value" and tells the RTL
generation pass that, when it is necessary to test such a value, an insn
to do so can be constructed using this pattern.

 The output control string is a piece of C code which chooses which
output template to return based on the kind of operand and the specific
type of CPU for which code is being generated.

 '"rm"' is an operand constraint.  Its meaning is explained below.


File: gccint.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc

16.4 RTL Template
=================

The RTL template is used to define which insns match the particular
pattern and how to find their operands.  For named patterns, the RTL
template also says how to construct an insn from specified operands.

 Construction involves substituting specified operands into a copy of
the template.  Matching involves determining the values that serve as
the operands in the insn being matched.  Both of these activities are
controlled by special expression types that direct matching and
substitution of the operands.

'(match_operand:M N PREDICATE CONSTRAINT)'
     This expression is a placeholder for operand number N of the insn.
     When constructing an insn, operand number N will be substituted at
     this point.  When matching an insn, whatever appears at this
     position in the insn will be taken as operand number N; but it must
     satisfy PREDICATE or this instruction pattern will not match at
     all.

     Operand numbers must be chosen consecutively counting from zero in
     each instruction pattern.  There may be only one 'match_operand'
     expression in the pattern for each operand number.  Usually
     operands are numbered in the order of appearance in 'match_operand'
     expressions.  In the case of a 'define_expand', any operand numbers
     used only in 'match_dup' expressions have higher values than all
     other operand numbers.

     PREDICATE is a string that is the name of a function that accepts
     two arguments, an expression and a machine mode.  *Note
     Predicates::.  During matching, the function will be called with
     the putative operand as the expression and M as the mode argument
     (if M is not specified, 'VOIDmode' will be used, which normally
     causes PREDICATE to accept any mode).  If it returns zero, this
     instruction pattern fails to match.  PREDICATE may be an empty
     string; then it means no test is to be done on the operand, so
     anything which occurs in this position is valid.

     Most of the time, PREDICATE will reject modes other than M--but not
     always.  For example, the predicate 'address_operand' uses M as the
     mode of memory ref that the address should be valid for.  Many
     predicates accept 'const_int' nodes even though their mode is
     'VOIDmode'.

     CONSTRAINT controls reloading and the choice of the best register
     class to use for a value, as explained later (*note Constraints::).
     If the constraint would be an empty string, it can be omitted.

     People are often unclear on the difference between the constraint
     and the predicate.  The predicate helps decide whether a given insn
     matches the pattern.  The constraint plays no role in this
     decision; instead, it controls various decisions in the case of an
     insn which does match.

'(match_scratch:M N CONSTRAINT)'
     This expression is also a placeholder for operand number N and
     indicates that operand must be a 'scratch' or 'reg' expression.

     When matching patterns, this is equivalent to

          (match_operand:M N "scratch_operand" CONSTRAINT)

     but, when generating RTL, it produces a ('scratch':M) expression.

     If the last few expressions in a 'parallel' are 'clobber'
     expressions whose operands are either a hard register or
     'match_scratch', the combiner can add or delete them when
     necessary.  *Note Side Effects::.

'(match_dup N)'
     This expression is also a placeholder for operand number N.  It is
     used when the operand needs to appear more than once in the insn.

     In construction, 'match_dup' acts just like 'match_operand': the
     operand is substituted into the insn being constructed.  But in
     matching, 'match_dup' behaves differently.  It assumes that operand
     number N has already been determined by a 'match_operand' appearing
     earlier in the recognition template, and it matches only an
     identical-looking expression.

     Note that 'match_dup' should not be used to tell the compiler that
     a particular register is being used for two operands (example:
     'add' that adds one register to another; the second register is
     both an input operand and the output operand).  Use a matching
     constraint (*note Simple Constraints::) for those.  'match_dup' is
     for the cases where one operand is used in two places in the
     template, such as an instruction that computes both a quotient and
     a remainder, where the opcode takes two input operands but the RTL
     template has to refer to each of those twice; once for the quotient
     pattern and once for the remainder pattern.

'(match_operator:M N PREDICATE [OPERANDS...])'
     This pattern is a kind of placeholder for a variable RTL expression
     code.

     When constructing an insn, it stands for an RTL expression whose
     expression code is taken from that of operand N, and whose operands
     are constructed from the patterns OPERANDS.

     When matching an expression, it matches an expression if the
     function PREDICATE returns nonzero on that expression _and_ the
     patterns OPERANDS match the operands of the expression.

     Suppose that the function 'commutative_operator' is defined as
     follows, to match any expression whose operator is one of the
     commutative arithmetic operators of RTL and whose mode is MODE:

          int
          commutative_integer_operator (x, mode)
               rtx x;
               machine_mode mode;
          {
            enum rtx_code code = GET_CODE (x);
            if (GET_MODE (x) != mode)
              return 0;
            return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
                    || code == EQ || code == NE);
          }

     Then the following pattern will match any RTL expression consisting
     of a commutative operator applied to two general operands:

          (match_operator:SI 3 "commutative_operator"
            [(match_operand:SI 1 "general_operand" "g")
             (match_operand:SI 2 "general_operand" "g")])

     Here the vector '[OPERANDS...]' contains two patterns because the
     expressions to be matched all contain two operands.

     When this pattern does match, the two operands of the commutative
     operator are recorded as operands 1 and 2 of the insn.  (This is
     done by the two instances of 'match_operand'.)  Operand 3 of the
     insn will be the entire commutative expression: use 'GET_CODE
     (operands[3])' to see which commutative operator was used.

     The machine mode M of 'match_operator' works like that of
     'match_operand': it is passed as the second argument to the
     predicate function, and that function is solely responsible for
     deciding whether the expression to be matched "has" that mode.

     When constructing an insn, argument 3 of the gen-function will
     specify the operation (i.e. the expression code) for the expression
     to be made.  It should be an RTL expression, whose expression code
     is copied into a new expression whose operands are arguments 1 and
     2 of the gen-function.  The subexpressions of argument 3 are not
     used; only its expression code matters.

     When 'match_operator' is used in a pattern for matching an insn, it
     usually best if the operand number of the 'match_operator' is
     higher than that of the actual operands of the insn.  This improves
     register allocation because the register allocator often looks at
     operands 1 and 2 of insns to see if it can do register tying.

     There is no way to specify constraints in 'match_operator'.  The
     operand of the insn which corresponds to the 'match_operator' never
     has any constraints because it is never reloaded as a whole.
     However, if parts of its OPERANDS are matched by 'match_operand'
     patterns, those parts may have constraints of their own.

'(match_op_dup:M N[OPERANDS...])'
     Like 'match_dup', except that it applies to operators instead of
     operands.  When constructing an insn, operand number N will be
     substituted at this point.  But in matching, 'match_op_dup' behaves
     differently.  It assumes that operand number N has already been
     determined by a 'match_operator' appearing earlier in the
     recognition template, and it matches only an identical-looking
     expression.

'(match_parallel N PREDICATE [SUBPAT...])'
     This pattern is a placeholder for an insn that consists of a
     'parallel' expression with a variable number of elements.  This
     expression should only appear at the top level of an insn pattern.

     When constructing an insn, operand number N will be substituted at
     this point.  When matching an insn, it matches if the body of the
     insn is a 'parallel' expression with at least as many elements as
     the vector of SUBPAT expressions in the 'match_parallel', if each
     SUBPAT matches the corresponding element of the 'parallel', _and_
     the function PREDICATE returns nonzero on the 'parallel' that is
     the body of the insn.  It is the responsibility of the predicate to
     validate elements of the 'parallel' beyond those listed in the
     'match_parallel'.

     A typical use of 'match_parallel' is to match load and store
     multiple expressions, which can contain a variable number of
     elements in a 'parallel'.  For example,

          (define_insn ""
            [(match_parallel 0 "load_multiple_operation"
               [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
                     (match_operand:SI 2 "memory_operand" "m"))
                (use (reg:SI 179))
                (clobber (reg:SI 179))])]
            ""
            "loadm 0,0,%1,%2")

     This example comes from 'a29k.md'.  The function
     'load_multiple_operation' is defined in 'a29k.c' and checks that
     subsequent elements in the 'parallel' are the same as the 'set' in
     the pattern, except that they are referencing subsequent registers
     and memory locations.

     An insn that matches this pattern might look like:

          (parallel
           [(set (reg:SI 20) (mem:SI (reg:SI 100)))
            (use (reg:SI 179))
            (clobber (reg:SI 179))
            (set (reg:SI 21)
                 (mem:SI (plus:SI (reg:SI 100)
                                  (const_int 4))))
            (set (reg:SI 22)
                 (mem:SI (plus:SI (reg:SI 100)
                                  (const_int 8))))])

'(match_par_dup N [SUBPAT...])'
     Like 'match_op_dup', but for 'match_parallel' instead of
     'match_operator'.


File: gccint.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc

16.5 Output Templates and Operand Substitution
==============================================

The "output template" is a string which specifies how to output the
assembler code for an instruction pattern.  Most of the template is a
fixed string which is output literally.  The character '%' is used to
specify where to substitute an operand; it can also be used to identify
places where different variants of the assembler require different
syntax.

 In the simplest case, a '%' followed by a digit N says to output
operand N at that point in the string.

 '%' followed by a letter and a digit says to output an operand in an
alternate fashion.  Four letters have standard, built-in meanings
described below.  The machine description macro 'PRINT_OPERAND' can
define additional letters with nonstandard meanings.

 '%cDIGIT' can be used to substitute an operand that is a constant value
without the syntax that normally indicates an immediate operand.

 '%nDIGIT' is like '%cDIGIT' except that the value of the constant is
negated before printing.

 '%aDIGIT' can be used to substitute an operand as if it were a memory
reference, with the actual operand treated as the address.  This may be
useful when outputting a "load address" instruction, because often the
assembler syntax for such an instruction requires you to write the
operand as if it were a memory reference.

 '%lDIGIT' is used to substitute a 'label_ref' into a jump instruction.

 '%=' outputs a number which is unique to each instruction in the entire
compilation.  This is useful for making local labels to be referred to
more than once in a single template that generates multiple assembler
instructions.

 '%' followed by a punctuation character specifies a substitution that
does not use an operand.  Only one case is standard: '%%' outputs a '%'
into the assembler code.  Other nonstandard cases can be defined in the
'PRINT_OPERAND' macro.  You must also define which punctuation
characters are valid with the 'PRINT_OPERAND_PUNCT_VALID_P' macro.

 The template may generate multiple assembler instructions.  Write the
text for the instructions, with '\;' between them.

 When the RTL contains two operands which are required by constraint to
match each other, the output template must refer only to the
lower-numbered operand.  Matching operands are not always identical, and
the rest of the compiler arranges to put the proper RTL expression for
printing into the lower-numbered operand.

 One use of nonstandard letters or punctuation following '%' is to
distinguish between different assembler languages for the same machine;
for example, Motorola syntax versus MIT syntax for the 68000.  Motorola
syntax requires periods in most opcode names, while MIT syntax does not.
For example, the opcode 'movel' in MIT syntax is 'move.l' in Motorola
syntax.  The same file of patterns is used for both kinds of output
syntax, but the character sequence '%.' is used in each place where
Motorola syntax wants a period.  The 'PRINT_OPERAND' macro for Motorola
syntax defines the sequence to output a period; the macro for MIT syntax
defines it to do nothing.

 As a special case, a template consisting of the single character '#'
instructs the compiler to first split the insn, and then output the
resulting instructions separately.  This helps eliminate redundancy in
the output templates.  If you have a 'define_insn' that needs to emit
multiple assembler instructions, and there is a matching 'define_split'
already defined, then you can simply use '#' as the output template
instead of writing an output template that emits the multiple assembler
instructions.

 If the macro 'ASSEMBLER_DIALECT' is defined, you can use construct of
the form '{option0|option1|option2}' in the templates.  These describe
multiple variants of assembler language syntax.  *Note Instruction
Output::.


File: gccint.info,  Node: Output Statement,  Next: Predicates,  Prev: Output Template,  Up: Machine Desc

16.6 C Statements for Assembler Output
======================================

Often a single fixed template string cannot produce correct and
efficient assembler code for all the cases that are recognized by a
single instruction pattern.  For example, the opcodes may depend on the
kinds of operands; or some unfortunate combinations of operands may
require extra machine instructions.

 If the output control string starts with a '@', then it is actually a
series of templates, each on a separate line.  (Blank lines and leading
spaces and tabs are ignored.)  The templates correspond to the pattern's
constraint alternatives (*note Multi-Alternative::).  For example, if a
target machine has a two-address add instruction 'addr' to add into a
register and another 'addm' to add a register to memory, you might write
this pattern:

     (define_insn "addsi3"
       [(set (match_operand:SI 0 "general_operand" "=r,m")
             (plus:SI (match_operand:SI 1 "general_operand" "0,0")
                      (match_operand:SI 2 "general_operand" "g,r")))]
       ""
       "@
        addr %2,%0
        addm %2,%0")

 If the output control string starts with a '*', then it is not an
output template but rather a piece of C program that should compute a
template.  It should execute a 'return' statement to return the
template-string you want.  Most such templates use C string literals,
which require doublequote characters to delimit them.  To include these
doublequote characters in the string, prefix each one with '\'.

 If the output control string is written as a brace block instead of a
double-quoted string, it is automatically assumed to be C code.  In that
case, it is not necessary to put in a leading asterisk, or to escape the
doublequotes surrounding C string literals.

 The operands may be found in the array 'operands', whose C data type is
'rtx []'.

 It is very common to select different ways of generating assembler code
based on whether an immediate operand is within a certain range.  Be
careful when doing this, because the result of 'INTVAL' is an integer on
the host machine.  If the host machine has more bits in an 'int' than
the target machine has in the mode in which the constant will be used,
then some of the bits you get from 'INTVAL' will be superfluous.  For
proper results, you must carefully disregard the values of those bits.

 It is possible to output an assembler instruction and then go on to
output or compute more of them, using the subroutine 'output_asm_insn'.
This receives two arguments: a template-string and a vector of operands.
The vector may be 'operands', or it may be another array of 'rtx' that
you declare locally and initialize yourself.

 When an insn pattern has multiple alternatives in its constraints,
often the appearance of the assembler code is determined mostly by which
alternative was matched.  When this is so, the C code can test the
variable 'which_alternative', which is the ordinal number of the
alternative that was actually satisfied (0 for the first, 1 for the
second alternative, etc.).

 For example, suppose there are two opcodes for storing zero, 'clrreg'
for registers and 'clrmem' for memory locations.  Here is how a pattern
could use 'which_alternative' to choose between them:

     (define_insn ""
       [(set (match_operand:SI 0 "general_operand" "=r,m")
             (const_int 0))]
       ""
       {
       return (which_alternative == 0
               ? "clrreg %0" : "clrmem %0");
       })

 The example above, where the assembler code to generate was _solely_
determined by the alternative, could also have been specified as
follows, having the output control string start with a '@':

     (define_insn ""
       [(set (match_operand:SI 0 "general_operand" "=r,m")
             (const_int 0))]
       ""
       "@
        clrreg %0
        clrmem %0")

 If you just need a little bit of C code in one (or a few) alternatives,
you can use '*' inside of a '@' multi-alternative template:

     (define_insn ""
       [(set (match_operand:SI 0 "general_operand" "=r,<,m")
             (const_int 0))]
       ""
       "@
        clrreg %0
        * return stack_mem_p (operands[0]) ? \"push 0\" : \"clrmem %0\";
        clrmem %0")


File: gccint.info,  Node: Predicates,  Next: Constraints,  Prev: Output Statement,  Up: Machine Desc

16.7 Predicates
===============

A predicate determines whether a 'match_operand' or 'match_operator'
expression matches, and therefore whether the surrounding instruction
pattern will be used for that combination of operands.  GCC has a number
of machine-independent predicates, and you can define machine-specific
predicates as needed.  By convention, predicates used with
'match_operand' have names that end in '_operand', and those used with
'match_operator' have names that end in '_operator'.

 All predicates are Boolean functions (in the mathematical sense) of two
arguments: the RTL expression that is being considered at that position
in the instruction pattern, and the machine mode that the
'match_operand' or 'match_operator' specifies.  In this section, the
first argument is called OP and the second argument MODE.  Predicates
can be called from C as ordinary two-argument functions; this can be
useful in output templates or other machine-specific code.

 Operand predicates can allow operands that are not actually acceptable
to the hardware, as long as the constraints give reload the ability to
fix them up (*note Constraints::).  However, GCC will usually generate
better code if the predicates specify the requirements of the machine
instructions as closely as possible.  Reload cannot fix up operands that
must be constants ("immediate operands"); you must use a predicate that
allows only constants, or else enforce the requirement in the extra
condition.

 Most predicates handle their MODE argument in a uniform manner.  If
MODE is 'VOIDmode' (unspecified), then OP can have any mode.  If MODE is
anything else, then OP must have the same mode, unless OP is a
'CONST_INT' or integer 'CONST_DOUBLE'.  These RTL expressions always
have 'VOIDmode', so it would be counterproductive to check that their
mode matches.  Instead, predicates that accept 'CONST_INT' and/or
integer 'CONST_DOUBLE' check that the value stored in the constant will
fit in the requested mode.

 Predicates with this behavior are called "normal".  'genrecog' can
optimize the instruction recognizer based on knowledge of how normal
predicates treat modes.  It can also diagnose certain kinds of common
errors in the use of normal predicates; for instance, it is almost
always an error to use a normal predicate without specifying a mode.

 Predicates that do something different with their MODE argument are
called "special".  The generic predicates 'address_operand' and
'pmode_register_operand' are special predicates.  'genrecog' does not do
any optimizations or diagnosis when special predicates are used.

* Menu:

* Machine-Independent Predicates::  Predicates available to all back ends.
* Defining Predicates::             How to write machine-specific predicate
                                    functions.


File: gccint.info,  Node: Machine-Independent Predicates,  Next: Defining Predicates,  Up: Predicates

16.7.1 Machine-Independent Predicates
-------------------------------------

These are the generic predicates available to all back ends.  They are
defined in 'recog.c'.  The first category of predicates allow only
constant, or "immediate", operands.

 -- Function: immediate_operand
     This predicate allows any sort of constant that fits in MODE.  It
     is an appropriate choice for instructions that take operands that
     must be constant.

 -- Function: const_int_operand
     This predicate allows any 'CONST_INT' expression that fits in MODE.
     It is an appropriate choice for an immediate operand that does not
     allow a symbol or label.

 -- Function: const_double_operand
     This predicate accepts any 'CONST_DOUBLE' expression that has
     exactly MODE.  If MODE is 'VOIDmode', it will also accept
     'CONST_INT'.  It is intended for immediate floating point
     constants.

The second category of predicates allow only some kind of machine
register.

 -- Function: register_operand
     This predicate allows any 'REG' or 'SUBREG' expression that is
     valid for MODE.  It is often suitable for arithmetic instruction
     operands on a RISC machine.

 -- Function: pmode_register_operand
     This is a slight variant on 'register_operand' which works around a
     limitation in the machine-description reader.

          (match_operand N "pmode_register_operand" CONSTRAINT)

     means exactly what

          (match_operand:P N "register_operand" CONSTRAINT)

     would mean, if the machine-description reader accepted ':P' mode
     suffixes.  Unfortunately, it cannot, because 'Pmode' is an alias
     for some other mode, and might vary with machine-specific options.
     *Note Misc::.

 -- Function: scratch_operand
     This predicate allows hard registers and 'SCRATCH' expressions, but
     not pseudo-registers.  It is used internally by 'match_scratch'; it
     should not be used directly.

The third category of predicates allow only some kind of memory
reference.

 -- Function: memory_operand
     This predicate allows any valid reference to a quantity of mode
     MODE in memory, as determined by the weak form of
     'GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::).

 -- Function: address_operand
     This predicate is a little unusual; it allows any operand that is a
     valid expression for the _address_ of a quantity of mode MODE,
     again determined by the weak form of 'GO_IF_LEGITIMATE_ADDRESS'.
     To first order, if '(mem:MODE (EXP))' is acceptable to
     'memory_operand', then EXP is acceptable to 'address_operand'.
     Note that EXP does not necessarily have the mode MODE.

 -- Function: indirect_operand
     This is a stricter form of 'memory_operand' which allows only
     memory references with a 'general_operand' as the address
     expression.  New uses of this predicate are discouraged, because
     'general_operand' is very permissive, so it's hard to tell what an
     'indirect_operand' does or does not allow.  If a target has
     different requirements for memory operands for different
     instructions, it is better to define target-specific predicates
     which enforce the hardware's requirements explicitly.

 -- Function: push_operand
     This predicate allows a memory reference suitable for pushing a
     value onto the stack.  This will be a 'MEM' which refers to
     'stack_pointer_rtx', with a side-effect in its address expression
     (*note Incdec::); which one is determined by the 'STACK_PUSH_CODE'
     macro (*note Frame Layout::).

 -- Function: pop_operand
     This predicate allows a memory reference suitable for popping a
     value off the stack.  Again, this will be a 'MEM' referring to
     'stack_pointer_rtx', with a side-effect in its address expression.
     However, this time 'STACK_POP_CODE' is expected.

The fourth category of predicates allow some combination of the above
operands.

 -- Function: nonmemory_operand
     This predicate allows any immediate or register operand valid for
     MODE.

 -- Function: nonimmediate_operand
     This predicate allows any register or memory operand valid for
     MODE.

 -- Function: general_operand
     This predicate allows any immediate, register, or memory operand
     valid for MODE.

Finally, there are two generic operator predicates.

 -- Function: comparison_operator
     This predicate matches any expression which performs an arithmetic
     comparison in MODE; that is, 'COMPARISON_P' is true for the
     expression code.

 -- Function: ordered_comparison_operator
     This predicate matches any expression which performs an arithmetic
     comparison in MODE and whose expression code is valid for integer
     modes; that is, the expression code will be one of 'eq', 'ne',
     'lt', 'ltu', 'le', 'leu', 'gt', 'gtu', 'ge', 'geu'.


File: gccint.info,  Node: Defining Predicates,  Prev: Machine-Independent Predicates,  Up: Predicates

16.7.2 Defining Machine-Specific Predicates
-------------------------------------------

Many machines have requirements for their operands that cannot be
expressed precisely using the generic predicates.  You can define
additional predicates using 'define_predicate' and
'define_special_predicate' expressions.  These expressions have three
operands:

   * The name of the predicate, as it will be referred to in
     'match_operand' or 'match_operator' expressions.

   * An RTL expression which evaluates to true if the predicate allows
     the operand OP, false if it does not.  This expression can only use
     the following RTL codes:

     'MATCH_OPERAND'
          When written inside a predicate expression, a 'MATCH_OPERAND'
          expression evaluates to true if the predicate it names would
          allow OP.  The operand number and constraint are ignored.  Due
          to limitations in 'genrecog', you can only refer to generic
          predicates and predicates that have already been defined.

     'MATCH_CODE'
          This expression evaluates to true if OP or a specified
          subexpression of OP has one of a given list of RTX codes.

          The first operand of this expression is a string constant
          containing a comma-separated list of RTX code names (in lower
          case).  These are the codes for which the 'MATCH_CODE' will be
          true.

          The second operand is a string constant which indicates what
          subexpression of OP to examine.  If it is absent or the empty
          string, OP itself is examined.  Otherwise, the string constant
          must be a sequence of digits and/or lowercase letters.  Each
          character indicates a subexpression to extract from the
          current expression; for the first character this is OP, for
          the second and subsequent characters it is the result of the
          previous character.  A digit N extracts 'XEXP (E, N)'; a
          letter L extracts 'XVECEXP (E, 0, N)' where N is the
          alphabetic ordinal of L (0 for 'a', 1 for 'b', and so on).
          The 'MATCH_CODE' then examines the RTX code of the
          subexpression extracted by the complete string.  It is not
          possible to extract components of an 'rtvec' that is not at
          position 0 within its RTX object.

     'MATCH_TEST'
          This expression has one operand, a string constant containing
          a C expression.  The predicate's arguments, OP and MODE, are
          available with those names in the C expression.  The
          'MATCH_TEST' evaluates to true if the C expression evaluates
          to a nonzero value.  'MATCH_TEST' expressions must not have
          side effects.

     'AND'
     'IOR'
     'NOT'
     'IF_THEN_ELSE'
          The basic 'MATCH_' expressions can be combined using these
          logical operators, which have the semantics of the C operators
          '&&', '||', '!', and '? :' respectively.  As in Common Lisp,
          you may give an 'AND' or 'IOR' expression an arbitrary number
          of arguments; this has exactly the same effect as writing a
          chain of two-argument 'AND' or 'IOR' expressions.

   * An optional block of C code, which should execute 'return true' if
     the predicate is found to match and 'return false' if it does not.
     It must not have any side effects.  The predicate arguments, OP and
     MODE, are available with those names.

     If a code block is present in a predicate definition, then the RTL
     expression must evaluate to true _and_ the code block must execute
     'return true' for the predicate to allow the operand.  The RTL
     expression is evaluated first; do not re-check anything in the code
     block that was checked in the RTL expression.

 The program 'genrecog' scans 'define_predicate' and
'define_special_predicate' expressions to determine which RTX codes are
possibly allowed.  You should always make this explicit in the RTL
predicate expression, using 'MATCH_OPERAND' and 'MATCH_CODE'.

 Here is an example of a simple predicate definition, from the IA64
machine description:

     ;; True if OP is a 'SYMBOL_REF' which refers to the sdata section.
     (define_predicate "small_addr_symbolic_operand"
       (and (match_code "symbol_ref")
            (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))

And here is another, showing the use of the C block.

     ;; True if OP is a register operand that is (or could be) a GR reg.
     (define_predicate "gr_register_operand"
       (match_operand 0 "register_operand")
     {
       unsigned int regno;
       if (GET_CODE (op) == SUBREG)
         op = SUBREG_REG (op);

       regno = REGNO (op);
       return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
     })

 Predicates written with 'define_predicate' automatically include a test
that MODE is 'VOIDmode', or OP has the same mode as MODE, or OP is a
'CONST_INT' or 'CONST_DOUBLE'.  They do _not_ check specifically for
integer 'CONST_DOUBLE', nor do they test that the value of either kind
of constant fits in the requested mode.  This is because target-specific
predicates that take constants usually have to do more stringent value
checks anyway.  If you need the exact same treatment of 'CONST_INT' or
'CONST_DOUBLE' that the generic predicates provide, use a
'MATCH_OPERAND' subexpression to call 'const_int_operand',
'const_double_operand', or 'immediate_operand'.

 Predicates written with 'define_special_predicate' do not get any
automatic mode checks, and are treated as having special mode handling
by 'genrecog'.

 The program 'genpreds' is responsible for generating code to test
predicates.  It also writes a header file containing function
declarations for all machine-specific predicates.  It is not necessary
to declare these predicates in 'CPU-protos.h'.


File: gccint.info,  Node: Constraints,  Next: Standard Names,  Prev: Predicates,  Up: Machine Desc

16.8 Operand Constraints
========================

Each 'match_operand' in an instruction pattern can specify constraints
for the operands allowed.  The constraints allow you to fine-tune
matching within the set of operands allowed by the predicate.

 Constraints can say whether an operand may be in a register, and which
kinds of register; whether the operand can be a memory reference, and
which kinds of address; whether the operand may be an immediate
constant, and which possible values it may have.  Constraints can also
require two operands to match.  Side-effects aren't allowed in operands
of inline 'asm', unless '<' or '>' constraints are used, because there
is no guarantee that the side-effects will happen exactly once in an
instruction that can update the addressing register.

* Menu:

* Simple Constraints::  Basic use of constraints.
* Multi-Alternative::   When an insn has two alternative constraint-patterns.
* Class Preferences::   Constraints guide which hard register to put things in.
* Modifiers::           More precise control over effects of constraints.
* Machine Constraints:: Existing constraints for some particular machines.
* Disable Insn Alternatives:: Disable insn alternatives using attributes.
* Define Constraints::  How to define machine-specific constraints.
* C Constraint Interface:: How to test constraints from C code.


File: gccint.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints

16.8.1 Simple Constraints
-------------------------

The simplest kind of constraint is a string full of letters, each of
which describes one kind of operand that is permitted.  Here are the
letters that are allowed:

whitespace
     Whitespace characters are ignored and can be inserted at any
     position except the first.  This enables each alternative for
     different operands to be visually aligned in the machine
     description even if they have different number of constraints and
     modifiers.

'm'
     A memory operand is allowed, with any kind of address that the
     machine supports in general.  Note that the letter used for the
     general memory constraint can be re-defined by a back end using the
     'TARGET_MEM_CONSTRAINT' macro.

'o'
     A memory operand is allowed, but only if the address is
     "offsettable".  This means that adding a small integer (actually,
     the width in bytes of the operand, as determined by its machine
     mode) may be added to the address and the result is also a valid
     memory address.

     For example, an address which is constant is offsettable; so is an
     address that is the sum of a register and a constant (as long as a
     slightly larger constant is also within the range of
     address-offsets supported by the machine); but an autoincrement or
     autodecrement address is not offsettable.  More complicated
     indirect/indexed addresses may or may not be offsettable depending
     on the other addressing modes that the machine supports.

     Note that in an output operand which can be matched by another
     operand, the constraint letter 'o' is valid only when accompanied
     by both '<' (if the target machine has predecrement addressing) and
     '>' (if the target machine has preincrement addressing).

'V'
     A memory operand that is not offsettable.  In other words, anything
     that would fit the 'm' constraint but not the 'o' constraint.

'<'
     A memory operand with autodecrement addressing (either predecrement
     or postdecrement) is allowed.  In inline 'asm' this constraint is
     only allowed if the operand is used exactly once in an instruction
     that can handle the side-effects.  Not using an operand with '<' in
     constraint string in the inline 'asm' pattern at all or using it in
     multiple instructions isn't valid, because the side-effects
     wouldn't be performed or would be performed more than once.
     Furthermore, on some targets the operand with '<' in constraint
     string must be accompanied by special instruction suffixes like
     '%U0' instruction suffix on PowerPC or '%P0' on IA-64.

'>'
     A memory operand with autoincrement addressing (either preincrement
     or postincrement) is allowed.  In inline 'asm' the same
     restrictions as for '<' apply.

'r'
     A register operand is allowed provided that it is in a general
     register.

'i'
     An immediate integer operand (one with constant value) is allowed.
     This includes symbolic constants whose values will be known only at
     assembly time or later.

'n'
     An immediate integer operand with a known numeric value is allowed.
     Many systems cannot support assembly-time constants for operands
     less than a word wide.  Constraints for these operands should use
     'n' rather than 'i'.

'I', 'J', 'K', ... 'P'
     Other letters in the range 'I' through 'P' may be defined in a
     machine-dependent fashion to permit immediate integer operands with
     explicit integer values in specified ranges.  For example, on the
     68000, 'I' is defined to stand for the range of values 1 to 8.
     This is the range permitted as a shift count in the shift
     instructions.

'E'
     An immediate floating operand (expression code 'const_double') is
     allowed, but only if the target floating point format is the same
     as that of the host machine (on which the compiler is running).

'F'
     An immediate floating operand (expression code 'const_double' or
     'const_vector') is allowed.

'G', 'H'
     'G' and 'H' may be defined in a machine-dependent fashion to permit
     immediate floating operands in particular ranges of values.

's'
     An immediate integer operand whose value is not an explicit integer
     is allowed.

     This might appear strange; if an insn allows a constant operand
     with a value not known at compile time, it certainly must allow any
     known value.  So why use 's' instead of 'i'?  Sometimes it allows
     better code to be generated.

     For example, on the 68000 in a fullword instruction it is possible
     to use an immediate operand; but if the immediate value is between
     -128 and 127, better code results from loading the value into a
     register and using the register.  This is because the load into the
     register can be done with a 'moveq' instruction.  We arrange for
     this to happen by defining the letter 'K' to mean "any integer
     outside the range -128 to 127", and then specifying 'Ks' in the
     operand constraints.

'g'
     Any register, memory or immediate integer operand is allowed,
     except for registers that are not general registers.

'X'
     Any operand whatsoever is allowed, even if it does not satisfy
     'general_operand'.  This is normally used in the constraint of a
     'match_scratch' when certain alternatives will not actually require
     a scratch register.

'0', '1', '2', ... '9'
     An operand that matches the specified operand number is allowed.
     If a digit is used together with letters within the same
     alternative, the digit should come last.

     This number is allowed to be more than a single digit.  If multiple
     digits are encountered consecutively, they are interpreted as a
     single decimal integer.  There is scant chance for ambiguity, since
     to-date it has never been desirable that '10' be interpreted as
     matching either operand 1 _or_ operand 0.  Should this be desired,
     one can use multiple alternatives instead.

     This is called a "matching constraint" and what it really means is
     that the assembler has only a single operand that fills two roles
     considered separate in the RTL insn.  For example, an add insn has
     two input operands and one output operand in the RTL, but on most
     CISC machines an add instruction really has only two operands, one
     of them an input-output operand:

          addl #35,r12

     Matching constraints are used in these circumstances.  More
     precisely, the two operands that match must include one input-only
     operand and one output-only operand.  Moreover, the digit must be a
     smaller number than the number of the operand that uses it in the
     constraint.

     For operands to match in a particular case usually means that they
     are identical-looking RTL expressions.  But in a few special cases
     specific kinds of dissimilarity are allowed.  For example, '*x' as
     an input operand will match '*x++' as an output operand.  For
     proper results in such cases, the output template should always use
     the output-operand's number when printing the operand.

'p'
     An operand that is a valid memory address is allowed.  This is for
     "load address" and "push address" instructions.

     'p' in the constraint must be accompanied by 'address_operand' as
     the predicate in the 'match_operand'.  This predicate interprets
     the mode specified in the 'match_operand' as the mode of the memory
     reference for which the address would be valid.

OTHER-LETTERS
     Other letters can be defined in machine-dependent fashion to stand
     for particular classes of registers or other arbitrary operand
     types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
     for data, address and floating point registers.

 In order to have valid assembler code, each operand must satisfy its
constraint.  But a failure to do so does not prevent the pattern from
applying to an insn.  Instead, it directs the compiler to modify the
code so that the constraint will be satisfied.  Usually this is done by
copying an operand into a register.

 Contrast, therefore, the two instruction patterns that follow:

     (define_insn ""
       [(set (match_operand:SI 0 "general_operand" "=r")
             (plus:SI (match_dup 0)
                      (match_operand:SI 1 "general_operand" "r")))]
       ""
       "...")

which has two operands, one of which must appear in two places, and

     (define_insn ""
       [(set (match_operand:SI 0 "general_operand" "=r")
             (plus:SI (match_operand:SI 1 "general_operand" "0")
                      (match_operand:SI 2 "general_operand" "r")))]
       ""
       "...")

which has three operands, two of which are required by a constraint to
be identical.  If we are considering an insn of the form

     (insn N PREV NEXT
       (set (reg:SI 3)
            (plus:SI (reg:SI 6) (reg:SI 109)))
       ...)

the first pattern would not apply at all, because this insn does not
contain two identical subexpressions in the right place.  The pattern
would say, "That does not look like an add instruction; try other
patterns".  The second pattern would say, "Yes, that's an add
instruction, but there is something wrong with it".  It would direct the
reload pass of the compiler to generate additional insns to make the
constraint true.  The results might look like this:

     (insn N2 PREV N
       (set (reg:SI 3) (reg:SI 6))
       ...)

     (insn N N2 NEXT
       (set (reg:SI 3)
            (plus:SI (reg:SI 3) (reg:SI 109)))
       ...)

 It is up to you to make sure that each operand, in each pattern, has
constraints that can handle any RTL expression that could be present for
that operand.  (When multiple alternatives are in use, each pattern
must, for each possible combination of operand expressions, have at
least one alternative which can handle that combination of operands.)
The constraints don't need to _allow_ any possible operand--when this is
the case, they do not constrain--but they must at least point the way to
reloading any possible operand so that it will fit.

   * If the constraint accepts whatever operands the predicate permits,
     there is no problem: reloading is never necessary for this operand.

     For example, an operand whose constraints permit everything except
     registers is safe provided its predicate rejects registers.

     An operand whose predicate accepts only constant values is safe
     provided its constraints include the letter 'i'.  If any possible
     constant value is accepted, then nothing less than 'i' will do; if
     the predicate is more selective, then the constraints may also be
     more selective.

   * Any operand expression can be reloaded by copying it into a
     register.  So if an operand's constraints allow some kind of
     register, it is certain to be safe.  It need not permit all classes
     of registers; the compiler knows how to copy a register into
     another register of the proper class in order to make an
     instruction valid.

   * A nonoffsettable memory reference can be reloaded by copying the
     address into a register.  So if the constraint uses the letter 'o',
     all memory references are taken care of.

   * A constant operand can be reloaded by allocating space in memory to
     hold it as preinitialized data.  Then the memory reference can be
     used in place of the constant.  So if the constraint uses the
     letters 'o' or 'm', constant operands are not a problem.

   * If the constraint permits a constant and a pseudo register used in
     an insn was not allocated to a hard register and is equivalent to a
     constant, the register will be replaced with the constant.  If the
     predicate does not permit a constant and the insn is re-recognized
     for some reason, the compiler will crash.  Thus the predicate must
     always recognize any objects allowed by the constraint.

 If the operand's predicate can recognize registers, but the constraint
does not permit them, it can make the compiler crash.  When this operand
happens to be a register, the reload pass will be stymied, because it
does not know how to copy a register temporarily into memory.

 If the predicate accepts a unary operator, the constraint applies to
the operand.  For example, the MIPS processor at ISA level 3 supports an
instruction which adds two registers in 'SImode' to produce a 'DImode'
result, but only if the registers are correctly sign extended.  This
predicate for the input operands accepts a 'sign_extend' of an 'SImode'
register.  Write the constraint to indicate the type of register that is
required for the operand of the 'sign_extend'.


File: gccint.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints

16.8.2 Multiple Alternative Constraints
---------------------------------------

Sometimes a single instruction has multiple alternative sets of possible
operands.  For example, on the 68000, a logical-or instruction can
combine register or an immediate value into memory, or it can combine
any kind of operand into a register; but it cannot combine one memory
location into another.

 These constraints are represented as multiple alternatives.  An
alternative can be described by a series of letters for each operand.
The overall constraint for an operand is made from the letters for this
operand from the first alternative, a comma, the letters for this
operand from the second alternative, a comma, and so on until the last
alternative.  All operands for a single instruction must have the same
number of alternatives.  Here is how it is done for fullword logical-or
on the 68000:

     (define_insn "iorsi3"
       [(set (match_operand:SI 0 "general_operand" "=m,d")
             (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
                     (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
       ...)

 The first alternative has 'm' (memory) for operand 0, '0' for operand 1
(meaning it must match operand 0), and 'dKs' for operand 2.  The second
alternative has 'd' (data register) for operand 0, '0' for operand 1,
and 'dmKs' for operand 2.  The '=' and '%' in the constraints apply to
all the alternatives; their meaning is explained in the next section
(*note Class Preferences::).

 If all the operands fit any one alternative, the instruction is valid.
Otherwise, for each alternative, the compiler counts how many
instructions must be added to copy the operands so that that alternative
applies.  The alternative requiring the least copying is chosen.  If two
alternatives need the same amount of copying, the one that comes first
is chosen.  These choices can be altered with the '?' and '!'
characters:

'?'
     Disparage slightly the alternative that the '?' appears in, as a
     choice when no alternative applies exactly.  The compiler regards
     this alternative as one unit more costly for each '?' that appears
     in it.

'!'
     Disparage severely the alternative that the '!' appears in.  This
     alternative can still be used if it fits without reloading, but if
     reloading is needed, some other alternative will be used.

'^'
     This constraint is analogous to '?' but it disparages slightly the
     alternative only if the operand with the '^' needs a reload.

'$'
     This constraint is analogous to '!' but it disparages severely the
     alternative only if the operand with the '$' needs a reload.

 When an insn pattern has multiple alternatives in its constraints,
often the appearance of the assembler code is determined mostly by which
alternative was matched.  When this is so, the C code for writing the
assembler code can use the variable 'which_alternative', which is the
ordinal number of the alternative that was actually satisfied (0 for the
first, 1 for the second alternative, etc.).  *Note Output Statement::.


File: gccint.info,  Node: Class Preferences,  Next: Modifiers,  Prev: Multi-Alternative,  Up: Constraints

16.8.3 Register Class Preferences
---------------------------------

The operand constraints have another function: they enable the compiler
to decide which kind of hardware register a pseudo register is best
allocated to.  The compiler examines the constraints that apply to the
insns that use the pseudo register, looking for the machine-dependent
letters such as 'd' and 'a' that specify classes of registers.  The
pseudo register is put in whichever class gets the most "votes".  The
constraint letters 'g' and 'r' also vote: they vote in favor of a
general register.  The machine description says which registers are
considered general.

 Of course, on some machines all registers are equivalent, and no
register classes are defined.  Then none of this complexity is relevant.


File: gccint.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Class Preferences,  Up: Constraints

16.8.4 Constraint Modifier Characters
-------------------------------------

Here are constraint modifier characters.

'='
     Means that this operand is written to by this instruction: the
     previous value is discarded and replaced by new data.

'+'
     Means that this operand is both read and written by the
     instruction.

     When the compiler fixes up the operands to satisfy the constraints,
     it needs to know which operands are read by the instruction and
     which are written by it.  '=' identifies an operand which is only
     written; '+' identifies an operand that is both read and written;
     all other operands are assumed to only be read.

     If you specify '=' or '+' in a constraint, you put it in the first
     character of the constraint string.

'&'
     Means (in a particular alternative) that this operand is an
     "earlyclobber" operand, which is written before the instruction is
     finished using the input operands.  Therefore, this operand may not
     lie in a register that is read by the instruction or as part of any
     memory address.

     '&' applies only to the alternative in which it is written.  In
     constraints with multiple alternatives, sometimes one alternative
     requires '&' while others do not.  See, for example, the 'movdf'
     insn of the 68000.

     A operand which is read by the instruction can be tied to an
     earlyclobber operand if its only use as an input occurs before the
     early result is written.  Adding alternatives of this form often
     allows GCC to produce better code when only some of the read
     operands can be affected by the earlyclobber.  See, for example,
     the 'mulsi3' insn of the ARM.

     Furthermore, if the "earlyclobber" operand is also a read/write
     operand, then that operand is written only after it's used.

     '&' does not obviate the need to write '=' or '+'.  As
     "earlyclobber" operands are always written, a read-only
     "earlyclobber" operand is ill-formed and will be rejected by the
     compiler.

'%'
     Declares the instruction to be commutative for this operand and the
     following operand.  This means that the compiler may interchange
     the two operands if that is the cheapest way to make all operands
     fit the constraints.  '%' applies to all alternatives and must
     appear as the first character in the constraint.  Only read-only
     operands can use '%'.

     This is often used in patterns for addition instructions that
     really have only two operands: the result must go in one of the
     arguments.  Here for example, is how the 68000 halfword-add
     instruction is defined:

          (define_insn "addhi3"
            [(set (match_operand:HI 0 "general_operand" "=m,r")
               (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
                        (match_operand:HI 2 "general_operand" "di,g")))]
            ...)
     GCC can only handle one commutative pair in an asm; if you use
     more, the compiler may fail.  Note that you need not use the
     modifier if the two alternatives are strictly identical; this would
     only waste time in the reload pass.  The modifier is not
     operational after register allocation, so the result of
     'define_peephole2' and 'define_split's performed after reload
     cannot rely on '%' to make the intended insn match.

'#'
     Says that all following characters, up to the next comma, are to be
     ignored as a constraint.  They are significant only for choosing
     register preferences.

'*'
     Says that the following character should be ignored when choosing
     register preferences.  '*' has no effect on the meaning of the
     constraint as a constraint, and no effect on reloading.  For LRA
     '*' additionally disparages slightly the alternative if the
     following character matches the operand.

     Here is an example: the 68000 has an instruction to sign-extend a
     halfword in a data register, and can also sign-extend a value by
     copying it into an address register.  While either kind of register
     is acceptable, the constraints on an address-register destination
     are less strict, so it is best if register allocation makes an
     address register its goal.  Therefore, '*' is used so that the 'd'
     constraint letter (for data register) is ignored when computing
     register preferences.

          (define_insn "extendhisi2"
            [(set (match_operand:SI 0 "general_operand" "=*d,a")
                  (sign_extend:SI
                   (match_operand:HI 1 "general_operand" "0,g")))]
            ...)


File: gccint.info,  Node: Machine Constraints,  Next: Disable Insn Alternatives,  Prev: Modifiers,  Up: Constraints

16.8.5 Constraints for Particular Machines
------------------------------------------

Whenever possible, you should use the general-purpose constraint letters
in 'asm' arguments, since they will convey meaning more readily to
people reading your code.  Failing that, use the constraint letters that
usually have very similar meanings across architectures.  The most
commonly used constraints are 'm' and 'r' (for memory and
general-purpose registers respectively; *note Simple Constraints::), and
'I', usually the letter indicating the most common immediate-constant
format.

 Each architecture defines additional constraints.  These constraints
are used by the compiler itself for instruction generation, as well as
for 'asm' statements; therefore, some of the constraints are not
particularly useful for 'asm'.  Here is a summary of some of the
machine-dependent constraints available on some particular machines; it
includes both constraints that are useful for 'asm' and constraints that
aren't.  The compiler source file mentioned in the table heading for
each architecture is the definitive reference for the meanings of that
architecture's constraints.

_AArch64 family--'config/aarch64/constraints.md'_
     'k'
          The stack pointer register ('SP')

     'w'
          Floating point or SIMD vector register

     'I'
          Integer constant that is valid as an immediate operand in an
          'ADD' instruction

     'J'
          Integer constant that is valid as an immediate operand in a
          'SUB' instruction (once negated)

     'K'
          Integer constant that can be used with a 32-bit logical
          instruction

     'L'
          Integer constant that can be used with a 64-bit logical
          instruction

     'M'
          Integer constant that is valid as an immediate operand in a
          32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
          to one of several different machine instructions depending on
          the value

     'N'
          Integer constant that is valid as an immediate operand in a
          64-bit 'MOV' pseudo instruction

     'S'
          An absolute symbolic address or a label reference

     'Y'
          Floating point constant zero

     'Z'
          Integer constant zero

     'Ush'
          The high part (bits 12 and upwards) of the pc-relative address
          of a symbol within 4GB of the instruction

     'Q'
          A memory address which uses a single base register with no
          offset

     'Ump'
          A memory address suitable for a load/store pair instruction in
          SI, DI, SF and DF modes

_ARC --'config/arc/constraints.md'_
     'q'
          Registers usable in ARCompact 16-bit instructions: 'r0'-'r3',
          'r12'-'r15'.  This constraint can only match when the '-mq'
          option is in effect.

     'e'
          Registers usable as base-regs of memory addresses in ARCompact
          16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'.
          This constraint can only match when the '-mq' option is in
          effect.
     'D'
          ARC FPX (dpfp) 64-bit registers.  'D0', 'D1'.

     'I'
          A signed 12-bit integer constant.

     'Cal'
          constant for arithmetic/logical operations.  This might be any
          constant that can be put into a long immediate by the assmbler
          or linker without involving a PIC relocation.

     'K'
          A 3-bit unsigned integer constant.

     'L'
          A 6-bit unsigned integer constant.

     'CnL'
          One's complement of a 6-bit unsigned integer constant.

     'CmL'
          Two's complement of a 6-bit unsigned integer constant.

     'M'
          A 5-bit unsigned integer constant.

     'O'
          A 7-bit unsigned integer constant.

     'P'
          A 8-bit unsigned integer constant.

     'H'
          Any const_double value.

_ARM family--'config/arm/constraints.md'_

     'h'
          In Thumb state, the core registers 'r8'-'r15'.

     'k'
          The stack pointer register.

     'l'
          In Thumb State the core registers 'r0'-'r7'.  In ARM state
          this is an alias for the 'r' constraint.

     't'
          VFP floating-point registers 's0'-'s31'.  Used for 32 bit
          values.

     'w'
          VFP floating-point registers 'd0'-'d31' and the appropriate
          subset 'd0'-'d15' based on command line options.  Used for 64
          bit values only.  Not valid for Thumb1.

     'y'
          The iWMMX co-processor registers.

     'z'
          The iWMMX GR registers.

     'G'
          The floating-point constant 0.0

     'I'
          Integer that is valid as an immediate operand in a data
          processing instruction.  That is, an integer in the range 0 to
          255 rotated by a multiple of 2

     'J'
          Integer in the range -4095 to 4095

     'K'
          Integer that satisfies constraint 'I' when inverted (ones
          complement)

     'L'
          Integer that satisfies constraint 'I' when negated (twos
          complement)

     'M'
          Integer in the range 0 to 32

     'Q'
          A memory reference where the exact address is in a single
          register (''m'' is preferable for 'asm' statements)

     'R'
          An item in the constant pool

     'S'
          A symbol in the text segment of the current file

     'Uv'
          A memory reference suitable for VFP load/store insns
          (reg+constant offset)

     'Uy'
          A memory reference suitable for iWMMXt load/store
          instructions.

     'Uq'
          A memory reference suitable for the ARMv4 ldrsb instruction.

_AVR family--'config/avr/constraints.md'_
     'l'
          Registers from r0 to r15

     'a'
          Registers from r16 to r23

     'd'
          Registers from r16 to r31

     'w'
          Registers from r24 to r31.  These registers can be used in
          'adiw' command

     'e'
          Pointer register (r26-r31)

     'b'
          Base pointer register (r28-r31)

     'q'
          Stack pointer register (SPH:SPL)

     't'
          Temporary register r0

     'x'
          Register pair X (r27:r26)

     'y'
          Register pair Y (r29:r28)

     'z'
          Register pair Z (r31:r30)

     'I'
          Constant greater than -1, less than 64

     'J'
          Constant greater than -64, less than 1

     'K'
          Constant integer 2

     'L'
          Constant integer 0

     'M'
          Constant that fits in 8 bits

     'N'
          Constant integer -1

     'O'
          Constant integer 8, 16, or 24

     'P'
          Constant integer 1

     'G'
          A floating point constant 0.0

     'Q'
          A memory address based on Y or Z pointer with displacement.

_Blackfin family--'config/bfin/constraints.md'_
     'a'
          P register

     'd'
          D register

     'z'
          A call clobbered P register.

     'qN'
          A single register.  If N is in the range 0 to 7, the
          corresponding D register.  If it is 'A', then the register P0.

     'D'
          Even-numbered D register

     'W'
          Odd-numbered D register

     'e'
          Accumulator register.

     'A'
          Even-numbered accumulator register.

     'B'
          Odd-numbered accumulator register.

     'b'
          I register

     'v'
          B register

     'f'
          M register

     'c'
          Registers used for circular buffering, i.e.  I, B, or L
          registers.

     'C'
          The CC register.

     't'
          LT0 or LT1.

     'k'
          LC0 or LC1.

     'u'
          LB0 or LB1.

     'x'
          Any D, P, B, M, I or L register.

     'y'
          Additional registers typically used only in prologues and
          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
          USP.

     'w'
          Any register except accumulators or CC.

     'Ksh'
          Signed 16 bit integer (in the range -32768 to 32767)

     'Kuh'
          Unsigned 16 bit integer (in the range 0 to 65535)

     'Ks7'
          Signed 7 bit integer (in the range -64 to 63)

     'Ku7'
          Unsigned 7 bit integer (in the range 0 to 127)

     'Ku5'
          Unsigned 5 bit integer (in the range 0 to 31)

     'Ks4'
          Signed 4 bit integer (in the range -8 to 7)

     'Ks3'
          Signed 3 bit integer (in the range -3 to 4)

     'Ku3'
          Unsigned 3 bit integer (in the range 0 to 7)

     'PN'
          Constant N, where N is a single-digit constant in the range 0
          to 4.

     'PA'
          An integer equal to one of the MACFLAG_XXX constants that is
          suitable for use with either accumulator.

     'PB'
          An integer equal to one of the MACFLAG_XXX constants that is
          suitable for use only with accumulator A1.

     'M1'
          Constant 255.

     'M2'
          Constant 65535.

     'J'
          An integer constant with exactly a single bit set.

     'L'
          An integer constant with all bits set except exactly one.

     'H'

     'Q'
          Any SYMBOL_REF.

_CR16 Architecture--'config/cr16/cr16.h'_

     'b'
          Registers from r0 to r14 (registers without stack pointer)

     't'
          Register from r0 to r11 (all 16-bit registers)

     'p'
          Register from r12 to r15 (all 32-bit registers)

     'I'
          Signed constant that fits in 4 bits

     'J'
          Signed constant that fits in 5 bits

     'K'
          Signed constant that fits in 6 bits

     'L'
          Unsigned constant that fits in 4 bits

     'M'
          Signed constant that fits in 32 bits

     'N'
          Check for 64 bits wide constants for add/sub instructions

     'G'
          Floating point constant that is legal for store immediate

_Epiphany--'config/epiphany/constraints.md'_
     'U16'
          An unsigned 16-bit constant.

     'K'
          An unsigned 5-bit constant.

     'L'
          A signed 11-bit constant.

     'Cm1'
          A signed 11-bit constant added to -1.  Can only match when the
          '-m1reg-REG' option is active.

     'Cl1'
          Left-shift of -1, i.e., a bit mask with a block of leading
          ones, the rest being a block of trailing zeroes.  Can only
          match when the '-m1reg-REG' option is active.

     'Cr1'
          Right-shift of -1, i.e., a bit mask with a trailing block of
          ones, the rest being zeroes.  Or to put it another way, one
          less than a power of two.  Can only match when the
          '-m1reg-REG' option is active.

     'Cal'
          Constant for arithmetic/logical operations.  This is like 'i',
          except that for position independent code, no symbols /
          expressions needing relocations are allowed.

     'Csy'
          Symbolic constant for call/jump instruction.

     'Rcs'
          The register class usable in short insns.  This is a register
          class constraint, and can thus drive register allocation.
          This constraint won't match unless '-mprefer-short-insn-regs'
          is in effect.

     'Rsc'
          The the register class of registers that can be used to hold a
          sibcall call address.  I.e., a caller-saved register.

     'Rct'
          Core control register class.

     'Rgs'
          The register group usable in short insns.  This constraint
          does not use a register class, so that it only passively
          matches suitable registers, and doesn't drive register
          allocation.

     'Car'
          Constant suitable for the addsi3_r pattern.  This is a valid
          offset For byte, halfword, or word addressing.

     'Rra'
          Matches the return address if it can be replaced with the link
          register.

     'Rcc'
          Matches the integer condition code register.

     'Sra'
          Matches the return address if it is in a stack slot.

     'Cfm'
          Matches control register values to switch fp mode, which are
          encapsulated in 'UNSPEC_FP_MODE'.

_FRV--'config/frv/frv.h'_
     'a'
          Register in the class 'ACC_REGS' ('acc0' to 'acc7').

     'b'
          Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').

     'c'
          Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
          to 'icc3').

     'd'
          Register in the class 'GPR_REGS' ('gr0' to 'gr63').

     'e'
          Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
          registers are excluded not in the class but through the use of
          a machine mode larger than 4 bytes.

     'f'
          Register in the class 'FPR_REGS' ('fr0' to 'fr63').

     'h'
          Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
          registers are excluded not in the class but through the use of
          a machine mode larger than 4 bytes.

     'l'
          Register in the class 'LR_REG' (the 'lr' register).

     'q'
          Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
          numbers not divisible by 4 are excluded not in the class but
          through the use of a machine mode larger than 8 bytes.

     't'
          Register in the class 'ICC_REGS' ('icc0' to 'icc3').

     'u'
          Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').

     'v'
          Register in the class 'ICR_REGS' ('cc4' to 'cc7').

     'w'
          Register in the class 'FCR_REGS' ('cc0' to 'cc3').

     'x'
          Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
          Register numbers not divisible by 4 are excluded not in the
          class but through the use of a machine mode larger than 8
          bytes.

     'z'
          Register in the class 'SPR_REGS' ('lcr' and 'lr').

     'A'
          Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').

     'B'
          Register in the class 'ACCG_REGS' ('accg0' to 'accg7').

     'C'
          Register in the class 'CR_REGS' ('cc0' to 'cc7').

     'G'
          Floating point constant zero

     'I'
          6-bit signed integer constant

     'J'
          10-bit signed integer constant

     'L'
          16-bit signed integer constant

     'M'
          16-bit unsigned integer constant

     'N'
          12-bit signed integer constant that is negative--i.e. in the
          range of -2048 to -1

     'O'
          Constant zero

     'P'
          12-bit signed integer constant that is greater than zero--i.e.
          in the range of 1 to 2047.

_FT32--'config/ft32/constraints.md'_
     'A'
          An absolute address

     'B'
          An offset address

     'W'
          A register indirect memory operand

     'e'
          An offset address.

     'f'
          An offset address.

     'O'
          The constant zero or one

     'I'
          A 16-bit signed constant (-32768 ... 32767)

     'w'
          A bitfield mask suitable for bext or bins

     'x'
          An inverted bitfield mask suitable for bext or bins

     'L'
          A 16-bit unsigned constant, multiple of 4 (0 ... 65532)

     'S'
          A 20-bit signed constant (-524288 ... 524287)

     'b'
          A constant for a bitfield width (1 ... 16)

     'KA'
          A 10-bit signed constant (-512 ... 511)

_Hewlett-Packard PA-RISC--'config/pa/pa.h'_
     'a'
          General register 1

     'f'
          Floating point register

     'q'
          Shift amount register

     'x'
          Floating point register (deprecated)

     'y'
          Upper floating point register (32-bit), floating point
          register (64-bit)

     'Z'
          Any register

     'I'
          Signed 11-bit integer constant

     'J'
          Signed 14-bit integer constant

     'K'
          Integer constant that can be deposited with a 'zdepi'
          instruction

     'L'
          Signed 5-bit integer constant

     'M'
          Integer constant 0

     'N'
          Integer constant that can be loaded with a 'ldil' instruction

     'O'
          Integer constant whose value plus one is a power of 2

     'P'
          Integer constant that can be used for 'and' operations in
          'depi' and 'extru' instructions

     'S'
          Integer constant 31

     'U'
          Integer constant 63

     'G'
          Floating-point constant 0.0

     'A'
          A 'lo_sum' data-linkage-table memory operand

     'Q'
          A memory operand that can be used as the destination operand
          of an integer store instruction

     'R'
          A scaled or unscaled indexed memory operand

     'T'
          A memory operand for floating-point loads and stores

     'W'
          A register indirect memory operand

_Intel IA-64--'config/ia64/ia64.h'_
     'a'
          General register 'r0' to 'r3' for 'addl' instruction

     'b'
          Branch register

     'c'
          Predicate register ('c' as in "conditional")

     'd'
          Application register residing in M-unit

     'e'
          Application register residing in I-unit

     'f'
          Floating-point register

     'm'
          Memory operand.  If used together with '<' or '>', the operand
          can have postincrement and postdecrement which require
          printing with '%Pn' on IA-64.

     'G'
          Floating-point constant 0.0 or 1.0

     'I'
          14-bit signed integer constant

     'J'
          22-bit signed integer constant

     'K'
          8-bit signed integer constant for logical instructions

     'L'
          8-bit adjusted signed integer constant for compare pseudo-ops

     'M'
          6-bit unsigned integer constant for shift counts

     'N'
          9-bit signed integer constant for load and store
          postincrements

     'O'
          The constant zero

     'P'
          0 or -1 for 'dep' instruction

     'Q'
          Non-volatile memory for floating-point loads and stores

     'R'
          Integer constant in the range 1 to 4 for 'shladd' instruction

     'S'
          Memory operand except postincrement and postdecrement.  This
          is now roughly the same as 'm' when not used together with '<'
          or '>'.

_M32C--'config/m32c/m32c.c'_
     'Rsp'
     'Rfb'
     'Rsb'
          '$sp', '$fb', '$sb'.

     'Rcr'
          Any control register, when they're 16 bits wide (nothing if
          control registers are 24 bits wide)

     'Rcl'
          Any control register, when they're 24 bits wide.

     'R0w'
     'R1w'
     'R2w'
     'R3w'
          $r0, $r1, $r2, $r3.

     'R02'
          $r0 or $r2, or $r2r0 for 32 bit values.

     'R13'
          $r1 or $r3, or $r3r1 for 32 bit values.

     'Rdi'
          A register that can hold a 64 bit value.

     'Rhl'
          $r0 or $r1 (registers with addressable high/low bytes)

     'R23'
          $r2 or $r3

     'Raa'
          Address registers

     'Raw'
          Address registers when they're 16 bits wide.

     'Ral'
          Address registers when they're 24 bits wide.

     'Rqi'
          Registers that can hold QI values.

     'Rad'
          Registers that can be used with displacements ($a0, $a1, $sb).

     'Rsi'
          Registers that can hold 32 bit values.

     'Rhi'
          Registers that can hold 16 bit values.

     'Rhc'
          Registers chat can hold 16 bit values, including all control
          registers.

     'Rra'
          $r0 through R1, plus $a0 and $a1.

     'Rfl'
          The flags register.

     'Rmm'
          The memory-based pseudo-registers $mem0 through $mem15.

     'Rpi'
          Registers that can hold pointers (16 bit registers for r8c,
          m16c; 24 bit registers for m32cm, m32c).

     'Rpa'
          Matches multiple registers in a PARALLEL to form a larger
          register.  Used to match function return values.

     'Is3'
          -8 ... 7

     'IS1'
          -128 ... 127

     'IS2'
          -32768 ... 32767

     'IU2'
          0 ... 65535

     'In4'
          -8 ... -1 or 1 ... 8

     'In5'
          -16 ... -1 or 1 ... 16

     'In6'
          -32 ... -1 or 1 ... 32

     'IM2'
          -65536 ... -1

     'Ilb'
          An 8 bit value with exactly one bit set.

     'Ilw'
          A 16 bit value with exactly one bit set.

     'Sd'
          The common src/dest memory addressing modes.

     'Sa'
          Memory addressed using $a0 or $a1.

     'Si'
          Memory addressed with immediate addresses.

     'Ss'
          Memory addressed using the stack pointer ($sp).

     'Sf'
          Memory addressed using the frame base register ($fb).

     'Ss'
          Memory addressed using the small base register ($sb).

     'S1'
          $r1h

_MeP--'config/mep/constraints.md'_

     'a'
          The $sp register.

     'b'
          The $tp register.

     'c'
          Any control register.

     'd'
          Either the $hi or the $lo register.

     'em'
          Coprocessor registers that can be directly loaded ($c0-$c15).

     'ex'
          Coprocessor registers that can be moved to each other.

     'er'
          Coprocessor registers that can be moved to core registers.

     'h'
          The $hi register.

     'j'
          The $rpc register.

     'l'
          The $lo register.

     't'
          Registers which can be used in $tp-relative addressing.

     'v'
          The $gp register.

     'x'
          The coprocessor registers.

     'y'
          The coprocessor control registers.

     'z'
          The $0 register.

     'A'
          User-defined register set A.

     'B'
          User-defined register set B.

     'C'
          User-defined register set C.

     'D'
          User-defined register set D.

     'I'
          Offsets for $gp-rel addressing.

     'J'
          Constants that can be used directly with boolean insns.

     'K'
          Constants that can be moved directly to registers.

     'L'
          Small constants that can be added to registers.

     'M'
          Long shift counts.

     'N'
          Small constants that can be compared to registers.

     'O'
          Constants that can be loaded into the top half of registers.

     'S'
          Signed 8-bit immediates.

     'T'
          Symbols encoded for $tp-rel or $gp-rel addressing.

     'U'
          Non-constant addresses for loading/saving coprocessor
          registers.

     'W'
          The top half of a symbol's value.

     'Y'
          A register indirect address without offset.

     'Z'
          Symbolic references to the control bus.

_MicroBlaze--'config/microblaze/constraints.md'_
     'd'
          A general register ('r0' to 'r31').

     'z'
          A status register ('rmsr', '$fcc1' to '$fcc7').

_MIPS--'config/mips/constraints.md'_
     'd'
          An address register.  This is equivalent to 'r' unless
          generating MIPS16 code.

     'f'
          A floating-point register (if available).

     'h'
          Formerly the 'hi' register.  This constraint is no longer
          supported.

     'l'
          The 'lo' register.  Use this register to store values that are
          no bigger than a word.

     'x'
          The concatenated 'hi' and 'lo' registers.  Use this register
          to store doubleword values.

     'c'
          A register suitable for use in an indirect jump.  This will
          always be '$25' for '-mabicalls'.

     'v'
          Register '$3'.  Do not use this constraint in new code; it is
          retained only for compatibility with glibc.

     'y'
          Equivalent to 'r'; retained for backwards compatibility.

     'z'
          A floating-point condition code register.

     'I'
          A signed 16-bit constant (for arithmetic instructions).

     'J'
          Integer zero.

     'K'
          An unsigned 16-bit constant (for logic instructions).

     'L'
          A signed 32-bit constant in which the lower 16 bits are zero.
          Such constants can be loaded using 'lui'.

     'M'
          A constant that cannot be loaded using 'lui', 'addiu' or
          'ori'.

     'N'
          A constant in the range -65535 to -1 (inclusive).

     'O'
          A signed 15-bit constant.

     'P'
          A constant in the range 1 to 65535 (inclusive).

     'G'
          Floating-point zero.

     'R'
          An address that can be used in a non-macro load or store.

     'ZC'
          A memory operand whose address is formed by a base register
          and offset that is suitable for use in instructions with the
          same addressing mode as 'll' and 'sc'.

     'ZD'
          An address suitable for a 'prefetch' instruction, or for any
          other instruction with the same addressing mode as 'prefetch'.

_Motorola 680x0--'config/m68k/constraints.md'_
     'a'
          Address register

     'd'
          Data register

     'f'
          68881 floating-point register, if available

     'I'
          Integer in the range 1 to 8

     'J'
          16-bit signed number

     'K'
          Signed number whose magnitude is greater than 0x80

     'L'
          Integer in the range -8 to -1

     'M'
          Signed number whose magnitude is greater than 0x100

     'N'
          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate

     'O'
          16 (for rotate using swap)

     'P'
          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate

     'R'
          Numbers that mov3q can handle

     'G'
          Floating point constant that is not a 68881 constant

     'S'
          Operands that satisfy 'm' when -mpcrel is in effect

     'T'
          Operands that satisfy 's' when -mpcrel is not in effect

     'Q'
          Address register indirect addressing mode

     'U'
          Register offset addressing

     'W'
          const_call_operand

     'Cs'
          symbol_ref or const

     'Ci'
          const_int

     'C0'
          const_int 0

     'Cj'
          Range of signed numbers that don't fit in 16 bits

     'Cmvq'
          Integers valid for mvq

     'Capsw'
          Integers valid for a moveq followed by a swap

     'Cmvz'
          Integers valid for mvz

     'Cmvs'
          Integers valid for mvs

     'Ap'
          push_operand

     'Ac'
          Non-register operands allowed in clr

_Moxie--'config/moxie/constraints.md'_
     'A'
          An absolute address

     'B'
          An offset address

     'W'
          A register indirect memory operand

     'I'
          A constant in the range of 0 to 255.

     'N'
          A constant in the range of 0 to -255.

_MSP430-'config/msp430/constraints.md'_

     'R12'
          Register R12.

     'R13'
          Register R13.

     'K'
          Integer constant 1.

     'L'
          Integer constant -1^20..1^19.

     'M'
          Integer constant 1-4.

     'Ya'
          Memory references which do not require an extended MOVX
          instruction.

     'Yl'
          Memory reference, labels only.

     'Ys'
          Memory reference, stack only.

_NDS32--'config/nds32/constraints.md'_
     'w'
          LOW register class $r0 to $r7 constraint for V3/V3M ISA.
     'l'
          LOW register class $r0 to $r7.
     'd'
          MIDDLE register class $r0 to $r11, $r16 to $r19.
     'h'
          HIGH register class $r12 to $r14, $r20 to $r31.
     't'
          Temporary assist register $ta (i.e. $r15).
     'k'
          Stack register $sp.
     'Iu03'
          Unsigned immediate 3-bit value.
     'In03'
          Negative immediate 3-bit value in the range of -7-0.
     'Iu04'
          Unsigned immediate 4-bit value.
     'Is05'
          Signed immediate 5-bit value.
     'Iu05'
          Unsigned immediate 5-bit value.
     'In05'
          Negative immediate 5-bit value in the range of -31-0.
     'Ip05'
          Unsigned immediate 5-bit value for movpi45 instruction with
          range 16-47.
     'Iu06'
          Unsigned immediate 6-bit value constraint for addri36.sp
          instruction.
     'Iu08'
          Unsigned immediate 8-bit value.
     'Iu09'
          Unsigned immediate 9-bit value.
     'Is10'
          Signed immediate 10-bit value.
     'Is11'
          Signed immediate 11-bit value.
     'Is15'
          Signed immediate 15-bit value.
     'Iu15'
          Unsigned immediate 15-bit value.
     'Ic15'
          A constant which is not in the range of imm15u but ok for bclr
          instruction.
     'Ie15'
          A constant which is not in the range of imm15u but ok for bset
          instruction.
     'It15'
          A constant which is not in the range of imm15u but ok for btgl
          instruction.
     'Ii15'
          A constant whose compliment value is in the range of imm15u
          and ok for bitci instruction.
     'Is16'
          Signed immediate 16-bit value.
     'Is17'
          Signed immediate 17-bit value.
     'Is19'
          Signed immediate 19-bit value.
     'Is20'
          Signed immediate 20-bit value.
     'Ihig'
          The immediate value that can be simply set high 20-bit.
     'Izeb'
          The immediate value 0xff.
     'Izeh'
          The immediate value 0xffff.
     'Ixls'
          The immediate value 0x01.
     'Ix11'
          The immediate value 0x7ff.
     'Ibms'
          The immediate value with power of 2.
     'Ifex'
          The immediate value with power of 2 minus 1.
     'U33'
          Memory constraint for 333 format.
     'U45'
          Memory constraint for 45 format.
     'U37'
          Memory constraint for 37 format.

_Nios II family--'config/nios2/constraints.md'_

     'I'
          Integer that is valid as an immediate operand in an
          instruction taking a signed 16-bit number.  Range -32768 to
          32767.

     'J'
          Integer that is valid as an immediate operand in an
          instruction taking an unsigned 16-bit number.  Range 0 to
          65535.

     'K'
          Integer that is valid as an immediate operand in an
          instruction taking only the upper 16-bits of a 32-bit number.
          Range 32-bit numbers with the lower 16-bits being 0.

     'L'
          Integer that is valid as an immediate operand for a shift
          instruction.  Range 0 to 31.

     'M'
          Integer that is valid as an immediate operand for only the
          value 0.  Can be used in conjunction with the format modifier
          'z' to use 'r0' instead of '0' in the assembly output.

     'N'
          Integer that is valid as an immediate operand for a custom
          instruction opcode.  Range 0 to 255.

     'P'
          An immediate operand for R2 andchi/andci instructions.

     'S'
          Matches immediates which are addresses in the small data
          section and therefore can be added to 'gp' as a 16-bit
          immediate to re-create their 32-bit value.

     'U'
          Matches constants suitable as an operand for the rdprs and
          cache instructions.

     'v'
          A memory operand suitable for Nios II R2 load/store exclusive
          instructions.

     'w'
          A memory operand suitable for load/store IO and cache
          instructions.

     'T'
          A 'const' wrapped 'UNSPEC' expression, representing a
          supported PIC or TLS relocation.

_PDP-11--'config/pdp11/constraints.md'_
     'a'
          Floating point registers AC0 through AC3.  These can be loaded
          from/to memory with a single instruction.

     'd'
          Odd numbered general registers (R1, R3, R5).  These are used
          for 16-bit multiply operations.

     'f'
          Any of the floating point registers (AC0 through AC5).

     'G'
          Floating point constant 0.

     'I'
          An integer constant that fits in 16 bits.

     'J'
          An integer constant whose low order 16 bits are zero.

     'K'
          An integer constant that does not meet the constraints for
          codes 'I' or 'J'.

     'L'
          The integer constant 1.

     'M'
          The integer constant -1.

     'N'
          The integer constant 0.

     'O'
          Integer constants -4 through -1 and 1 through 4; shifts by
          these amounts are handled as multiple single-bit shifts rather
          than a single variable-length shift.

     'Q'
          A memory reference which requires an additional word (address
          or offset) after the opcode.

     'R'
          A memory reference that is encoded within the opcode.

_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
     'b'
          Address base register

     'd'
          Floating point register (containing 64-bit value)

     'f'
          Floating point register (containing 32-bit value)

     'v'
          Altivec vector register

     'wa'
          Any VSX register if the -mvsx option was used or NO_REGS.

          When using any of the register constraints ('wa', 'wd', 'wf',
          'wg', 'wh', 'wi', 'wj', 'wk', 'wl', 'wm', 'wo', 'wp', 'wq',
          'ws', 'wt', 'wu', 'wv', 'ww', or 'wy') that take VSX
          registers, you must use '%x<n>' in the template so that the
          correct register is used.  Otherwise the register number
          output in the assembly file will be incorrect if an Altivec
          register is an operand of a VSX instruction that expects VSX
          register numbering.

               asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3));

          is correct, but:

               asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3));

          is not correct.

          If an instruction only takes Altivec registers, you do not
          want to use '%x<n>'.

               asm ("xsaddqp %0,%1,%2" : "=v" (v1) : "v" (v2), "v" (v3));

          is correct because the 'xsaddqp' instruction only takes
          Altivec registers, while:

               asm ("xsaddqp %x0,%x1,%x2" : "=v" (v1) : "v" (v2), "v" (v3));

          is incorrect.

     'wb'
          Altivec register if '-mpower9-dform' is used or NO_REGS.

     'wd'
          VSX vector register to hold vector double data or NO_REGS.

     'we'
          VSX register if the '-mpower9-vector' and '-m64' options were
          used or NO_REGS.

     'wf'
          VSX vector register to hold vector float data or NO_REGS.

     'wg'
          If '-mmfpgpr' was used, a floating point register or NO_REGS.

     'wh'
          Floating point register if direct moves are available, or
          NO_REGS.

     'wi'
          FP or VSX register to hold 64-bit integers for VSX insns or
          NO_REGS.

     'wj'
          FP or VSX register to hold 64-bit integers for direct moves or
          NO_REGS.

     'wk'
          FP or VSX register to hold 64-bit doubles for direct moves or
          NO_REGS.

     'wl'
          Floating point register if the LFIWAX instruction is enabled
          or NO_REGS.

     'wm'
          VSX register if direct move instructions are enabled, or
          NO_REGS.

     'wn'
          No register (NO_REGS).

     'wo'
          VSX register to use for ISA 3.0 vector instructions, or
          NO_REGS.

     'wp'
          VSX register to use for IEEE 128-bit floating point TFmode, or
          NO_REGS.

     'wq'
          VSX register to use for IEEE 128-bit floating point, or
          NO_REGS.

     'wr'
          General purpose register if 64-bit instructions are enabled or
          NO_REGS.

     'ws'
          VSX vector register to hold scalar double values or NO_REGS.

     'wt'
          VSX vector register to hold 128 bit integer or NO_REGS.

     'wu'
          Altivec register to use for float/32-bit int loads/stores or
          NO_REGS.

     'wv'
          Altivec register to use for double loads/stores or NO_REGS.

     'ww'
          FP or VSX register to perform float operations under '-mvsx'
          or NO_REGS.

     'wx'
          Floating point register if the STFIWX instruction is enabled
          or NO_REGS.

     'wy'
          FP or VSX register to perform ISA 2.07 float ops or NO_REGS.

     'wz'
          Floating point register if the LFIWZX instruction is enabled
          or NO_REGS.

     'wD'
          Int constant that is the element number of the 64-bit scalar
          in a vector.

     'wE'
          Vector constant that can be loaded with the XXSPLTIB
          instruction.

     'wF'
          Memory operand suitable for power9 fusion load/stores.

     'wG'
          Memory operand suitable for TOC fusion memory references.

     'wL'
          Int constant that is the element number that the MFVSRLD
          instruction.  targets.

     'wM'
          Match vector constant with all 1's if the XXLORC instruction
          is available.

     'wO'
          A memory operand suitable for the ISA 3.0 vector d-form
          instructions.

     'wQ'
          A memory address that will work with the 'lq' and 'stq'
          instructions.

     'wS'
          Vector constant that can be loaded with XXSPLTIB & sign
          extension.

     'h'
          'MQ', 'CTR', or 'LINK' register

     'c'
          'CTR' register

     'l'
          'LINK' register

     'x'
          'CR' register (condition register) number 0

     'y'
          'CR' register (condition register)

     'z'
          'XER[CA]' carry bit (part of the XER register)

     'I'
          Signed 16-bit constant

     'J'
          Unsigned 16-bit constant shifted left 16 bits (use 'L' instead
          for 'SImode' constants)

     'K'
          Unsigned 16-bit constant

     'L'
          Signed 16-bit constant shifted left 16 bits

     'M'
          Constant larger than 31

     'N'
          Exact power of 2

     'O'
          Zero

     'P'
          Constant whose negation is a signed 16-bit constant

     'G'
          Floating point constant that can be loaded into a register
          with one instruction per word

     'H'
          Integer/Floating point constant that can be loaded into a
          register using three instructions

     'm'
          Memory operand.  Normally, 'm' does not allow addresses that
          update the base register.  If '<' or '>' constraint is also
          used, they are allowed and therefore on PowerPC targets in
          that case it is only safe to use 'm<>' in an 'asm' statement
          if that 'asm' statement accesses the operand exactly once.
          The 'asm' statement must also use '%U<OPNO>' as a placeholder
          for the "update" flag in the corresponding load or store
          instruction.  For example:

               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));

          is correct but:

               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));

          is not.

     'es'
          A "stable" memory operand; that is, one which does not include
          any automodification of the base register.  This used to be
          useful when 'm' allowed automodification of the base register,
          but as those are now only allowed when '<' or '>' is used,
          'es' is basically the same as 'm' without '<' and '>'.

     'Q'
          Memory operand that is an offset from a register (it is
          usually better to use 'm' or 'es' in 'asm' statements)

     'Z'
          Memory operand that is an indexed or indirect from a register
          (it is usually better to use 'm' or 'es' in 'asm' statements)

     'R'
          AIX TOC entry

     'a'
          Address operand that is an indexed or indirect from a register
          ('p' is preferable for 'asm' statements)

     'U'
          System V Release 4 small data area reference

     'W'
          Vector constant that does not require memory

     'j'
          Vector constant that is all zeros.

_RL78--'config/rl78/constraints.md'_

     'Int3'
          An integer constant in the range 1 ... 7.
     'Int8'
          An integer constant in the range 0 ... 255.
     'J'
          An integer constant in the range -255 ... 0
     'K'
          The integer constant 1.
     'L'
          The integer constant -1.
     'M'
          The integer constant 0.
     'N'
          The integer constant 2.
     'O'
          The integer constant -2.
     'P'
          An integer constant in the range 1 ... 15.
     'Qbi'
          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
     'Qsc'
          The synthetic compare types-gt, lt, ge, and le.
     'Wab'
          A memory reference with an absolute address.
     'Wbc'
          A memory reference using 'BC' as a base register, with an
          optional offset.
     'Wca'
          A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
          address, for calls.
     'Wcv'
          A memory reference using any 16-bit register pair for the
          address, for calls.
     'Wd2'
          A memory reference using 'DE' as a base register, with an
          optional offset.
     'Wde'
          A memory reference using 'DE' as a base register, without any
          offset.
     'Wfr'
          Any memory reference to an address in the far address space.
     'Wh1'
          A memory reference using 'HL' as a base register, with an
          optional one-byte offset.
     'Whb'
          A memory reference using 'HL' as a base register, with 'B' or
          'C' as the index register.
     'Whl'
          A memory reference using 'HL' as a base register, without any
          offset.
     'Ws1'
          A memory reference using 'SP' as a base register, with an
          optional one-byte offset.
     'Y'
          Any memory reference to an address in the near address space.
     'A'
          The 'AX' register.
     'B'
          The 'BC' register.
     'D'
          The 'DE' register.
     'R'
          'A' through 'L' registers.
     'S'
          The 'SP' register.
     'T'
          The 'HL' register.
     'Z08W'
          The 16-bit 'R8' register.
     'Z10W'
          The 16-bit 'R10' register.
     'Zint'
          The registers reserved for interrupts ('R24' to 'R31').
     'a'
          The 'A' register.
     'b'
          The 'B' register.
     'c'
          The 'C' register.
     'd'
          The 'D' register.
     'e'
          The 'E' register.
     'h'
          The 'H' register.
     'l'
          The 'L' register.
     'v'
          The virtual registers.
     'w'
          The 'PSW' register.
     'x'
          The 'X' register.

_RX--'config/rx/constraints.md'_
     'Q'
          An address which does not involve register indirect addressing
          or pre/post increment/decrement addressing.

     'Symbol'
          A symbol reference.

     'Int08'
          A constant in the range -256 to 255, inclusive.

     'Sint08'
          A constant in the range -128 to 127, inclusive.

     'Sint16'
          A constant in the range -32768 to 32767, inclusive.

     'Sint24'
          A constant in the range -8388608 to 8388607, inclusive.

     'Uint04'
          A constant in the range 0 to 15, inclusive.

_S/390 and zSeries--'config/s390/s390.h'_
     'a'
          Address register (general purpose register except r0)

     'c'
          Condition code register

     'd'
          Data register (arbitrary general purpose register)

     'f'
          Floating-point register

     'I'
          Unsigned 8-bit constant (0-255)

     'J'
          Unsigned 12-bit constant (0-4095)

     'K'
          Signed 16-bit constant (-32768-32767)

     'L'
          Value appropriate as displacement.
          '(0..4095)'
               for short displacement
          '(-524288..524287)'
               for long displacement

     'M'
          Constant integer with a value of 0x7fffffff.

     'N'
          Multiple letter constraint followed by 4 parameter letters.
          '0..9:'
               number of the part counting from most to least
               significant
          'H,Q:'
               mode of the part
          'D,S,H:'
               mode of the containing operand
          '0,F:'
               value of the other parts (F--all bits set)
          The constraint matches if the specified part of a constant has
          a value different from its other parts.

     'Q'
          Memory reference without index register and with short
          displacement.

     'R'
          Memory reference with index register and short displacement.

     'S'
          Memory reference without index register but with long
          displacement.

     'T'
          Memory reference with index register and long displacement.

     'U'
          Pointer with short displacement.

     'W'
          Pointer with long displacement.

     'Y'
          Shift count operand.

_SPARC--'config/sparc/sparc.h'_
     'f'
          Floating-point register on the SPARC-V8 architecture and lower
          floating-point register on the SPARC-V9 architecture.

     'e'
          Floating-point register.  It is equivalent to 'f' on the
          SPARC-V8 architecture and contains both lower and upper
          floating-point registers on the SPARC-V9 architecture.

     'c'
          Floating-point condition code register.

     'd'
          Lower floating-point register.  It is only valid on the
          SPARC-V9 architecture when the Visual Instruction Set is
          available.

     'b'
          Floating-point register.  It is only valid on the SPARC-V9
          architecture when the Visual Instruction Set is available.

     'h'
          64-bit global or out register for the SPARC-V8+ architecture.

     'C'
          The constant all-ones, for floating-point.

     'A'
          Signed 5-bit constant

     'D'
          A vector constant

     'I'
          Signed 13-bit constant

     'J'
          Zero

     'K'
          32-bit constant with the low 12 bits clear (a constant that
          can be loaded with the 'sethi' instruction)

     'L'
          A constant in the range supported by 'movcc' instructions
          (11-bit signed immediate)

     'M'
          A constant in the range supported by 'movrcc' instructions
          (10-bit signed immediate)

     'N'
          Same as 'K', except that it verifies that bits that are not in
          the lower 32-bit range are all zero.  Must be used instead of
          'K' for modes wider than 'SImode'

     'O'
          The constant 4096

     'G'
          Floating-point zero

     'H'
          Signed 13-bit constant, sign-extended to 32 or 64 bits

     'P'
          The constant -1

     'Q'
          Floating-point constant whose integral representation can be
          moved into an integer register using a single sethi
          instruction

     'R'
          Floating-point constant whose integral representation can be
          moved into an integer register using a single mov instruction

     'S'
          Floating-point constant whose integral representation can be
          moved into an integer register using a high/lo_sum instruction
          sequence

     'T'
          Memory address aligned to an 8-byte boundary

     'U'
          Even register

     'W'
          Memory address for 'e' constraint registers

     'w'
          Memory address with only a base register

     'Y'
          Vector zero

_SPU--'config/spu/spu.h'_
     'a'
          An immediate which can be loaded with the il/ila/ilh/ilhu
          instructions.  const_int is treated as a 64 bit value.

     'c'
          An immediate for and/xor/or instructions.  const_int is
          treated as a 64 bit value.

     'd'
          An immediate for the 'iohl' instruction.  const_int is treated
          as a 64 bit value.

     'f'
          An immediate which can be loaded with 'fsmbi'.

     'A'
          An immediate which can be loaded with the il/ila/ilh/ilhu
          instructions.  const_int is treated as a 32 bit value.

     'B'
          An immediate for most arithmetic instructions.  const_int is
          treated as a 32 bit value.

     'C'
          An immediate for and/xor/or instructions.  const_int is
          treated as a 32 bit value.

     'D'
          An immediate for the 'iohl' instruction.  const_int is treated
          as a 32 bit value.

     'I'
          A constant in the range [-64, 63] for shift/rotate
          instructions.

     'J'
          An unsigned 7-bit constant for conversion/nop/channel
          instructions.

     'K'
          A signed 10-bit constant for most arithmetic instructions.

     'M'
          A signed 16 bit immediate for 'stop'.

     'N'
          An unsigned 16-bit constant for 'iohl' and 'fsmbi'.

     'O'
          An unsigned 7-bit constant whose 3 least significant bits are
          0.

     'P'
          An unsigned 3-bit constant for 16-byte rotates and shifts

     'R'
          Call operand, reg, for indirect calls

     'S'
          Call operand, symbol, for relative calls.

     'T'
          Call operand, const_int, for absolute calls.

     'U'
          An immediate which can be loaded with the il/ila/ilh/ilhu
          instructions.  const_int is sign extended to 128 bit.

     'W'
          An immediate for shift and rotate instructions.  const_int is
          treated as a 32 bit value.

     'Y'
          An immediate for and/xor/or instructions.  const_int is sign
          extended as a 128 bit.

     'Z'
          An immediate for the 'iohl' instruction.  const_int is sign
          extended to 128 bit.

_TI C6X family--'config/c6x/constraints.md'_
     'a'
          Register file A (A0-A31).

     'b'
          Register file B (B0-B31).

     'A'
          Predicate registers in register file A (A0-A2 on C64X and
          higher, A1 and A2 otherwise).

     'B'
          Predicate registers in register file B (B0-B2).

     'C'
          A call-used register in register file B (B0-B9, B16-B31).

     'Da'
          Register file A, excluding predicate registers (A3-A31, plus
          A0 if not C64X or higher).

     'Db'
          Register file B, excluding predicate registers (B3-B31).

     'Iu4'
          Integer constant in the range 0 ... 15.

     'Iu5'
          Integer constant in the range 0 ... 31.

     'In5'
          Integer constant in the range -31 ... 0.

     'Is5'
          Integer constant in the range -16 ... 15.

     'I5x'
          Integer constant that can be the operand of an ADDA or a SUBA
          insn.

     'IuB'
          Integer constant in the range 0 ... 65535.

     'IsB'
          Integer constant in the range -32768 ... 32767.

     'IsC'
          Integer constant in the range -2^{20} ... 2^{20} - 1.

     'Jc'
          Integer constant that is a valid mask for the clr instruction.

     'Js'
          Integer constant that is a valid mask for the set instruction.

     'Q'
          Memory location with A base register.

     'R'
          Memory location with B base register.

     'S0'
          On C64x+ targets, a GP-relative small data reference.

     'S1'
          Any kind of 'SYMBOL_REF', for use in a call address.

     'Si'
          Any kind of immediate operand, unless it matches the S0
          constraint.

     'T'
          Memory location with B base register, but not using a long
          offset.

     'W'
          A memory operand with an address that can't be used in an
          unaligned access.

     'Z'
          Register B14 (aka DP).

_TILE-Gx--'config/tilegx/constraints.md'_
     'R00'
     'R01'
     'R02'
     'R03'
     'R04'
     'R05'
     'R06'
     'R07'
     'R08'
     'R09'
     'R10'
          Each of these represents a register constraint for an
          individual register, from r0 to r10.

     'I'
          Signed 8-bit integer constant.

     'J'
          Signed 16-bit integer constant.

     'K'
          Unsigned 16-bit integer constant.

     'L'
          Integer constant that fits in one signed byte when incremented
          by one (-129 ... 126).

     'm'
          Memory operand.  If used together with '<' or '>', the operand
          can have postincrement which requires printing with '%In' and
          '%in' on TILE-Gx.  For example:

               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));

     'M'
          A bit mask suitable for the BFINS instruction.

     'N'
          Integer constant that is a byte tiled out eight times.

     'O'
          The integer zero constant.

     'P'
          Integer constant that is a sign-extended byte tiled out as
          four shorts.

     'Q'
          Integer constant that fits in one signed byte when incremented
          (-129 ... 126), but excluding -1.

     'S'
          Integer constant that has all 1 bits consecutive and starting
          at bit 0.

     'T'
          A 16-bit fragment of a got, tls, or pc-relative reference.

     'U'
          Memory operand except postincrement.  This is roughly the same
          as 'm' when not used together with '<' or '>'.

     'W'
          An 8-element vector constant with identical elements.

     'Y'
          A 4-element vector constant with identical elements.

     'Z0'
          The integer constant 0xffffffff.

     'Z1'
          The integer constant 0xffffffff00000000.

_TILEPro--'config/tilepro/constraints.md'_
     'R00'
     'R01'
     'R02'
     'R03'
     'R04'
     'R05'
     'R06'
     'R07'
     'R08'
     'R09'
     'R10'
          Each of these represents a register constraint for an
          individual register, from r0 to r10.

     'I'
          Signed 8-bit integer constant.

     'J'
          Signed 16-bit integer constant.

     'K'
          Nonzero integer constant with low 16 bits zero.

     'L'
          Integer constant that fits in one signed byte when incremented
          by one (-129 ... 126).

     'm'
          Memory operand.  If used together with '<' or '>', the operand
          can have postincrement which requires printing with '%In' and
          '%in' on TILEPro.  For example:

               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));

     'M'
          A bit mask suitable for the MM instruction.

     'N'
          Integer constant that is a byte tiled out four times.

     'O'
          The integer zero constant.

     'P'
          Integer constant that is a sign-extended byte tiled out as two
          shorts.

     'Q'
          Integer constant that fits in one signed byte when incremented
          (-129 ... 126), but excluding -1.

     'T'
          A symbolic operand, or a 16-bit fragment of a got, tls, or
          pc-relative reference.

     'U'
          Memory operand except postincrement.  This is roughly the same
          as 'm' when not used together with '<' or '>'.

     'W'
          A 4-element vector constant with identical elements.

     'Y'
          A 2-element vector constant with identical elements.

_Visium--'config/visium/constraints.md'_
     'b'
          EAM register 'mdb'

     'c'
          EAM register 'mdc'

     'f'
          Floating point register

     'k'
          Register for sibcall optimization

     'l'
          General register, but not 'r29', 'r30' and 'r31'

     't'
          Register 'r1'

     'u'
          Register 'r2'

     'v'
          Register 'r3'

     'G'
          Floating-point constant 0.0

     'J'
          Integer constant in the range 0 ..  65535 (16-bit immediate)

     'K'
          Integer constant in the range 1 ..  31 (5-bit immediate)

     'L'
          Integer constant in the range -65535 ..  -1 (16-bit negative
          immediate)

     'M'
          Integer constant -1

     'O'
          Integer constant 0

     'P'
          Integer constant 32

_x86 family--'config/i386/constraints.md'_
     'R'
          Legacy register--the eight integer registers available on all
          i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').

     'q'
          Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
          'c', and 'd'; in 64-bit mode, any integer register.

     'Q'
          Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.

     'l'
          Any register that can be used as the index in a base+index
          memory access: that is, any general register except the stack
          pointer.

     'a'
          The 'a' register.

     'b'
          The 'b' register.

     'c'
          The 'c' register.

     'd'
          The 'd' register.

     'S'
          The 'si' register.

     'D'
          The 'di' register.

     'A'
          The 'a' and 'd' registers.  This class is used for
          instructions that return double word results in the 'ax:dx'
          register pair.  Single word values will be allocated either in
          'ax' or 'dx'.  For example on i386 the following implements
          'rdtsc':

               unsigned long long rdtsc (void)
               {
                 unsigned long long tick;
                 __asm__ __volatile__("rdtsc":"=A"(tick));
                 return tick;
               }

          This is not correct on x86-64 as it would allocate tick in
          either 'ax' or 'dx'.  You have to use the following variant
          instead:

               unsigned long long rdtsc (void)
               {
                 unsigned int tickl, tickh;
                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
                 return ((unsigned long long)tickh << 32)|tickl;
               }

     'f'
          Any 80387 floating-point (stack) register.

     't'
          Top of 80387 floating-point stack ('%st(0)').

     'u'
          Second from top of 80387 floating-point stack ('%st(1)').

     'y'
          Any MMX register.

     'x'
          Any SSE register.

     'Yz'
          First SSE register ('%xmm0').

     'Y2'
          Any SSE register, when SSE2 is enabled.

     'Yi'
          Any SSE register, when SSE2 and inter-unit moves are enabled.

     'Ym'
          Any MMX register, when inter-unit moves are enabled.

     'I'
          Integer constant in the range 0 ... 31, for 32-bit shifts.

     'J'
          Integer constant in the range 0 ... 63, for 64-bit shifts.

     'K'
          Signed 8-bit integer constant.

     'L'
          '0xFF' or '0xFFFF', for andsi as a zero-extending move.

     'M'
          0, 1, 2, or 3 (shifts for the 'lea' instruction).

     'N'
          Unsigned 8-bit integer constant (for 'in' and 'out'
          instructions).

     'O'
          Integer constant in the range 0 ... 127, for 128-bit shifts.

     'G'
          Standard 80387 floating point constant.

     'C'
          SSE constant zero operand.

     'e'
          32-bit signed integer constant, or a symbolic reference known
          to fit that range (for immediate operands in sign-extending
          x86-64 instructions).

     'Z'
          32-bit unsigned integer constant, or a symbolic reference
          known to fit that range (for immediate operands in
          zero-extending x86-64 instructions).

_Xstormy16--'config/stormy16/stormy16.h'_
     'a'
          Register r0.

     'b'
          Register r1.

     'c'
          Register r2.

     'd'
          Register r8.

     'e'
          Registers r0 through r7.

     't'
          Registers r0 and r1.

     'y'
          The carry register.

     'z'
          Registers r8 and r9.

     'I'
          A constant between 0 and 3 inclusive.

     'J'
          A constant that has exactly one bit set.

     'K'
          A constant that has exactly one bit clear.

     'L'
          A constant between 0 and 255 inclusive.

     'M'
          A constant between -255 and 0 inclusive.

     'N'
          A constant between -3 and 0 inclusive.

     'O'
          A constant between 1 and 4 inclusive.

     'P'
          A constant between -4 and -1 inclusive.

     'Q'
          A memory reference that is a stack push.

     'R'
          A memory reference that is a stack pop.

     'S'
          A memory reference that refers to a constant address of known
          value.

     'T'
          The register indicated by Rx (not implemented yet).

     'U'
          A constant that is not between 2 and 15 inclusive.

     'Z'
          The constant 0.

_Xtensa--'config/xtensa/constraints.md'_
     'a'
          General-purpose 32-bit register

     'b'
          One-bit boolean register

     'A'
          MAC16 40-bit accumulator register

     'I'
          Signed 12-bit integer constant, for use in MOVI instructions

     'J'
          Signed 8-bit integer constant, for use in ADDI instructions

     'K'
          Integer constant valid for BccI instructions

     'L'
          Unsigned constant valid for BccUI instructions


File: gccint.info,  Node: Disable Insn Alternatives,  Next: Define Constraints,  Prev: Machine Constraints,  Up: Constraints

16.8.6 Disable insn alternatives using the 'enabled' attribute
--------------------------------------------------------------

There are three insn attributes that may be used to selectively disable
instruction alternatives:

'enabled'
     Says whether an alternative is available on the current subtarget.

'preferred_for_size'
     Says whether an enabled alternative should be used in code that is
     optimized for size.

'preferred_for_speed'
     Says whether an enabled alternative should be used in code that is
     optimized for speed.

 All these attributes should use '(const_int 1)' to allow an alternative
or '(const_int 0)' to disallow it.  The attributes must be a static
property of the subtarget; they cannot for example depend on the current
operands, on the current optimization level, on the location of the insn
within the body of a loop, on whether register allocation has finished,
or on the current compiler pass.

 The 'enabled' attribute is a correctness property.  It tells GCC to act
as though the disabled alternatives were never defined in the first
place.  This is useful when adding new instructions to an existing
pattern in cases where the new instructions are only available for
certain cpu architecture levels (typically mapped to the '-march='
command-line option).

 In contrast, the 'preferred_for_size' and 'preferred_for_speed'
attributes are strong optimization hints rather than correctness
properties.  'preferred_for_size' tells GCC which alternatives to
consider when adding or modifying an instruction that GCC wants to
optimize for size.  'preferred_for_speed' does the same thing for speed.
Note that things like code motion can lead to cases where code optimized
for size uses alternatives that are not preferred for size, and
similarly for speed.

 Although 'define_insn's can in principle specify the 'enabled'
attribute directly, it is often clearer to have subsiduary attributes
for each architectural feature of interest.  The 'define_insn's can then
use these subsiduary attributes to say which alternatives require which
features.  The example below does this for 'cpu_facility'.

 E.g.  the following two patterns could easily be merged using the
'enabled' attribute:


     (define_insn "*movdi_old"
       [(set (match_operand:DI 0 "register_operand" "=d")
             (match_operand:DI 1 "register_operand" " d"))]
       "!TARGET_NEW"
       "lgr %0,%1")

     (define_insn "*movdi_new"
       [(set (match_operand:DI 0 "register_operand" "=d,f,d")
             (match_operand:DI 1 "register_operand" " d,d,f"))]
       "TARGET_NEW"
       "@
        lgr  %0,%1
        ldgr %0,%1
        lgdr %0,%1")


 to:


     (define_insn "*movdi_combined"
       [(set (match_operand:DI 0 "register_operand" "=d,f,d")
             (match_operand:DI 1 "register_operand" " d,d,f"))]
       ""
       "@
        lgr  %0,%1
        ldgr %0,%1
        lgdr %0,%1"
       [(set_attr "cpu_facility" "*,new,new")])


 with the 'enabled' attribute defined like this:


     (define_attr "cpu_facility" "standard,new" (const_string "standard"))

     (define_attr "enabled" ""
       (cond [(eq_attr "cpu_facility" "standard") (const_int 1)
              (and (eq_attr "cpu_facility" "new")
                   (ne (symbol_ref "TARGET_NEW") (const_int 0)))
              (const_int 1)]
             (const_int 0)))



File: gccint.info,  Node: Define Constraints,  Next: C Constraint Interface,  Prev: Disable Insn Alternatives,  Up: Constraints

16.8.7 Defining Machine-Specific Constraints
--------------------------------------------

Machine-specific constraints fall into two categories: register and
non-register constraints.  Within the latter category, constraints which
allow subsets of all possible memory or address operands should be
specially marked, to give 'reload' more information.

 Machine-specific constraints can be given names of arbitrary length,
but they must be entirely composed of letters, digits, underscores
('_'), and angle brackets ('< >').  Like C identifiers, they must begin
with a letter or underscore.

 In order to avoid ambiguity in operand constraint strings, no
constraint can have a name that begins with any other constraint's name.
For example, if 'x' is defined as a constraint name, 'xy' may not be,
and vice versa.  As a consequence of this rule, no constraint may begin
with one of the generic constraint letters: 'E F V X g i m n o p r s'.

 Register constraints correspond directly to register classes.  *Note
Register Classes::.  There is thus not much flexibility in their
definitions.

 -- MD Expression: define_register_constraint name regclass docstring
     All three arguments are string constants.  NAME is the name of the
     constraint, as it will appear in 'match_operand' expressions.  If
     NAME is a multi-letter constraint its length shall be the same for
     all constraints starting with the same letter.  REGCLASS can be
     either the name of the corresponding register class (*note Register
     Classes::), or a C expression which evaluates to the appropriate
     register class.  If it is an expression, it must have no side
     effects, and it cannot look at the operand.  The usual use of
     expressions is to map some register constraints to 'NO_REGS' when
     the register class is not available on a given subarchitecture.

     DOCSTRING is a sentence documenting the meaning of the constraint.
     Docstrings are explained further below.

 Non-register constraints are more like predicates: the constraint
definition gives a Boolean expression which indicates whether the
constraint matches.

 -- MD Expression: define_constraint name docstring exp
     The NAME and DOCSTRING arguments are the same as for
     'define_register_constraint', but note that the docstring comes
     immediately after the name for these expressions.  EXP is an RTL
     expression, obeying the same rules as the RTL expressions in
     predicate definitions.  *Note Defining Predicates::, for details.
     If it evaluates true, the constraint matches; if it evaluates
     false, it doesn't.  Constraint expressions should indicate which
     RTL codes they might match, just like predicate expressions.

     'match_test' C expressions have access to the following variables:

     OP
          The RTL object defining the operand.
     MODE
          The machine mode of OP.
     IVAL
          'INTVAL (OP)', if OP is a 'const_int'.
     HVAL
          'CONST_DOUBLE_HIGH (OP)', if OP is an integer 'const_double'.
     LVAL
          'CONST_DOUBLE_LOW (OP)', if OP is an integer 'const_double'.
     RVAL
          'CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point
          'const_double'.

     The *VAL variables should only be used once another piece of the
     expression has verified that OP is the appropriate kind of RTL
     object.

 Most non-register constraints should be defined with
'define_constraint'.  The remaining two definition expressions are only
appropriate for constraints that should be handled specially by 'reload'
if they fail to match.

 -- MD Expression: define_memory_constraint name docstring exp
     Use this expression for constraints that match a subset of all
     memory operands: that is, 'reload' can make them match by
     converting the operand to the form '(mem (reg X))', where X is a
     base register (from the register class specified by
     'BASE_REG_CLASS', *note Register Classes::).

     For example, on the S/390, some instructions do not accept
     arbitrary memory references, but only those that do not make use of
     an index register.  The constraint letter 'Q' is defined to
     represent a memory address of this type.  If 'Q' is defined with
     'define_memory_constraint', a 'Q' constraint can handle any memory
     operand, because 'reload' knows it can simply copy the memory
     address into a base register if required.  This is analogous to the
     way an 'o' constraint can handle any memory operand.

     The syntax and semantics are otherwise identical to
     'define_constraint'.

 -- MD Expression: define_special_memory_constraint name docstring exp
     Use this expression for constraints that match a subset of all
     memory operands: that is, 'reload' can not make them match by
     reloading the address as it is described for
     'define_memory_constraint' or such address reload is undesirable
     with the performance point of view.

     For example, 'define_special_memory_constraint' can be useful if
     specifically aligned memory is necessary or desirable for some insn
     operand.

     The syntax and semantics are otherwise identical to
     'define_constraint'.

 -- MD Expression: define_address_constraint name docstring exp
     Use this expression for constraints that match a subset of all
     address operands: that is, 'reload' can make the constraint match
     by converting the operand to the form '(reg X)', again with X a
     base register.

     Constraints defined with 'define_address_constraint' can only be
     used with the 'address_operand' predicate, or machine-specific
     predicates that work the same way.  They are treated analogously to
     the generic 'p' constraint.

     The syntax and semantics are otherwise identical to
     'define_constraint'.

 For historical reasons, names beginning with the letters 'G H' are
reserved for constraints that match only 'const_double's, and names
beginning with the letters 'I J K L M N O P' are reserved for
constraints that match only 'const_int's.  This may change in the
future.  For the time being, constraints with these names must be
written in a stylized form, so that 'genpreds' can tell you did it
correctly:

     (define_constraint "[GHIJKLMNOP]..."
       "DOC..."
       (and (match_code "const_int")  ; 'const_double' for G/H
            CONDITION...))            ; usually a 'match_test'

 It is fine to use names beginning with other letters for constraints
that match 'const_double's or 'const_int's.

 Each docstring in a constraint definition should be one or more
complete sentences, marked up in Texinfo format.  _They are currently
unused._  In the future they will be copied into the GCC manual, in
*note Machine Constraints::, replacing the hand-maintained tables
currently found in that section.  Also, in the future the compiler may
use this to give more helpful diagnostics when poor choice of 'asm'
constraints causes a reload failure.

 If you put the pseudo-Texinfo directive '@internal' at the beginning of
a docstring, then (in the future) it will appear only in the internals
manual's version of the machine-specific constraint tables.  Use this
for constraints that should not appear in 'asm' statements.


File: gccint.info,  Node: C Constraint Interface,  Prev: Define Constraints,  Up: Constraints

16.8.8 Testing constraints from C
---------------------------------

It is occasionally useful to test a constraint from C code rather than
implicitly via the constraint string in a 'match_operand'.  The
generated file 'tm_p.h' declares a few interfaces for working with
constraints.  At present these are defined for all constraints except
'g' (which is equivalent to 'general_operand').

 Some valid constraint names are not valid C identifiers, so there is a
mangling scheme for referring to them from C.  Constraint names that do
not contain angle brackets or underscores are left unchanged.
Underscores are doubled, each '<' is replaced with '_l', and each '>'
with '_g'.  Here are some examples:

     *Original* *Mangled*  
     x          x       
     P42x       P42x    
     P4_x       P4__x   
     P4>x       P4_gx   
     P4>>       P4_g_g  
     P4_g>      P4__g_g 

 Throughout this section, the variable C is either a constraint in the
abstract sense, or a constant from 'enum constraint_num'; the variable M
is a mangled constraint name (usually as part of a larger identifier).

 -- Enum: constraint_num
     For each constraint except 'g', there is a corresponding
     enumeration constant: 'CONSTRAINT_' plus the mangled name of the
     constraint.  Functions that take an 'enum constraint_num' as an
     argument expect one of these constants.

 -- Function: inline bool satisfies_constraint_M (rtx EXP)
     For each non-register constraint M except 'g', there is one of
     these functions; it returns 'true' if EXP satisfies the constraint.
     These functions are only visible if 'rtl.h' was included before
     'tm_p.h'.

 -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num
          C)
     Like the 'satisfies_constraint_M' functions, but the constraint to
     test is given as an argument, C.  If C specifies a register
     constraint, this function will always return 'false'.

 -- Function: enum reg_class reg_class_for_constraint (enum
          constraint_num C)
     Returns the register class associated with C.  If C is not a
     register constraint, or those registers are not available for the
     currently selected subtarget, returns 'NO_REGS'.

 Here is an example use of 'satisfies_constraint_M'.  In peephole
optimizations (*note Peephole Definitions::), operand constraint strings
are ignored, so if there are relevant constraints, they must be tested
in the C condition.  In the example, the optimization is applied if
operand 2 does _not_ satisfy the 'K' constraint.  (This is a simplified
version of a peephole definition from the i386 machine description.)

     (define_peephole2
       [(match_scratch:SI 3 "r")
        (set (match_operand:SI 0 "register_operand" "")
             (mult:SI (match_operand:SI 1 "memory_operand" "")
                      (match_operand:SI 2 "immediate_operand" "")))]

       "!satisfies_constraint_K (operands[2])"

       [(set (match_dup 3) (match_dup 1))
        (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))]

       "")


File: gccint.info,  Node: Standard Names,  Next: Pattern Ordering,  Prev: Constraints,  Up: Machine Desc

16.9 Standard Pattern Names For Generation
==========================================

Here is a table of the instruction names that are meaningful in the RTL
generation pass of the compiler.  Giving one of these names to an
instruction pattern tells the RTL generation pass that it can use the
pattern to accomplish a certain task.

'movM'
     Here M stands for a two-letter machine mode name, in lowercase.
     This instruction pattern moves data with that machine mode from
     operand 1 to operand 0.  For example, 'movsi' moves full-word data.

     If operand 0 is a 'subreg' with mode M of a register whose own mode
     is wider than M, the effect of this instruction is to store the
     specified value in the part of the register that corresponds to
     mode M.  Bits outside of M, but which are within the same target
     word as the 'subreg' are undefined.  Bits which are outside the
     target word are left unchanged.

     This class of patterns is special in several ways.  First of all,
     each of these names up to and including full word size _must_ be
     defined, because there is no other way to copy a datum from one
     place to another.  If there are patterns accepting operands in
     larger modes, 'movM' must be defined for integer modes of those
     sizes.

     Second, these patterns are not used solely in the RTL generation
     pass.  Even the reload pass can generate move insns to copy values
     from stack slots into temporary registers.  When it does so, one of
     the operands is a hard register and the other is an operand that
     can need to be reloaded into a register.

     Therefore, when given such a pair of operands, the pattern must
     generate RTL which needs no reloading and needs no temporary
     registers--no registers other than the operands.  For example, if
     you support the pattern with a 'define_expand', then in such a case
     the 'define_expand' mustn't call 'force_reg' or any other such
     function which might generate new pseudo registers.

     This requirement exists even for subword modes on a RISC machine
     where fetching those modes from memory normally requires several
     insns and some temporary registers.

     During reload a memory reference with an invalid address may be
     passed as an operand.  Such an address will be replaced with a
     valid address later in the reload pass.  In this case, nothing may
     be done with the address except to use it as it stands.  If it is
     copied, it will not be replaced with a valid address.  No attempt
     should be made to make such an address into a valid address and no
     routine (such as 'change_address') that will do so may be called.
     Note that 'general_operand' will fail when applied to such an
     address.

     The global variable 'reload_in_progress' (which must be explicitly
     declared if required) can be used to determine whether such special
     handling is required.

     The variety of operands that have reloads depends on the rest of
     the machine description, but typically on a RISC machine these can
     only be pseudo registers that did not get hard registers, while on
     other machines explicit memory references will get optional
     reloads.

     If a scratch register is required to move an object to or from
     memory, it can be allocated using 'gen_reg_rtx' prior to life
     analysis.

     If there are cases which need scratch registers during or after
     reload, you must provide an appropriate secondary_reload target
     hook.

     The macro 'can_create_pseudo_p' can be used to determine if it is
     unsafe to create new pseudo registers.  If this variable is
     nonzero, then it is unsafe to call 'gen_reg_rtx' to allocate a new
     pseudo.

     The constraints on a 'movM' must permit moving any hard register to
     any other hard register provided that 'HARD_REGNO_MODE_OK' permits
     mode M in both registers and 'TARGET_REGISTER_MOVE_COST' applied to
     their classes returns a value of 2.

     It is obligatory to support floating point 'movM' instructions into
     and out of any registers that can hold fixed point values, because
     unions and structures (which have modes 'SImode' or 'DImode') can
     be in those registers and they may have floating point members.

     There may also be a need to support fixed point 'movM' instructions
     in and out of floating point registers.  Unfortunately, I have
     forgotten why this was so, and I don't know whether it is still
     true.  If 'HARD_REGNO_MODE_OK' rejects fixed point values in
     floating point registers, then the constraints of the fixed point
     'movM' instructions must be designed to avoid ever trying to reload
     into a floating point register.

'reload_inM'
'reload_outM'
     These named patterns have been obsoleted by the target hook
     'secondary_reload'.

     Like 'movM', but used when a scratch register is required to move
     between operand 0 and operand 1.  Operand 2 describes the scratch
     register.  See the discussion of the 'SECONDARY_RELOAD_CLASS' macro
     in *note Register Classes::.

     There are special restrictions on the form of the 'match_operand's
     used in these patterns.  First, only the predicate for the reload
     operand is examined, i.e., 'reload_in' examines operand 1, but not
     the predicates for operand 0 or 2.  Second, there may be only one
     alternative in the constraints.  Third, only a single register
     class letter may be used for the constraint; subsequent constraint
     letters are ignored.  As a special exception, an empty constraint
     string matches the 'ALL_REGS' register class.  This may relieve
     ports of the burden of defining an 'ALL_REGS' constraint letter
     just for these patterns.

'movstrictM'
     Like 'movM' except that if operand 0 is a 'subreg' with mode M of a
     register whose natural mode is wider, the 'movstrictM' instruction
     is guaranteed not to alter any of the register except the part
     which belongs to mode M.

'movmisalignM'
     This variant of a move pattern is designed to load or store a value
     from a memory address that is not naturally aligned for its mode.
     For a store, the memory will be in operand 0; for a load, the
     memory will be in operand 1.  The other operand is guaranteed not
     to be a memory, so that it's easy to tell whether this is a load or
     store.

     This pattern is used by the autovectorizer, and when expanding a
     'MISALIGNED_INDIRECT_REF' expression.

'load_multiple'
     Load several consecutive memory locations into consecutive
     registers.  Operand 0 is the first of the consecutive registers,
     operand 1 is the first memory location, and operand 2 is a
     constant: the number of consecutive registers.

     Define this only if the target machine really has such an
     instruction; do not define this if the most efficient way of
     loading consecutive registers from memory is to do them one at a
     time.

     On some machines, there are restrictions as to which consecutive
     registers can be stored into memory, such as particular starting or
     ending register numbers or only a range of valid counts.  For those
     machines, use a 'define_expand' (*note Expander Definitions::) and
     make the pattern fail if the restrictions are not met.

     Write the generated insn as a 'parallel' with elements being a
     'set' of one register from the appropriate memory location (you may
     also need 'use' or 'clobber' elements).  Use a 'match_parallel'
     (*note RTL Template::) to recognize the insn.  See 'rs6000.md' for
     examples of the use of this insn pattern.

'store_multiple'
     Similar to 'load_multiple', but store several consecutive registers
     into consecutive memory locations.  Operand 0 is the first of the
     consecutive memory locations, operand 1 is the first register, and
     operand 2 is a constant: the number of consecutive registers.

'vec_load_lanesMN'
     Perform an interleaved load of several vectors from memory operand
     1 into register operand 0.  Both operands have mode M.  The
     register operand is viewed as holding consecutive vectors of mode
     N, while the memory operand is a flat array that contains the same
     number of elements.  The operation is equivalent to:

          int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N);
          for (j = 0; j < GET_MODE_NUNITS (N); j++)
            for (i = 0; i < c; i++)
              operand0[i][j] = operand1[j * c + i];

     For example, 'vec_load_lanestiv4hi' loads 8 16-bit values from
     memory into a register of mode 'TI'.  The register contains two
     consecutive vectors of mode 'V4HI'.

     This pattern can only be used if:
          TARGET_ARRAY_MODE_SUPPORTED_P (N, C)
     is true.  GCC assumes that, if a target supports this kind of
     instruction for some mode N, it also supports unaligned loads for
     vectors of mode N.

     This pattern is not allowed to 'FAIL'.

'vec_store_lanesMN'
     Equivalent to 'vec_load_lanesMN', with the memory and register
     operands reversed.  That is, the instruction is equivalent to:

          int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N);
          for (j = 0; j < GET_MODE_NUNITS (N); j++)
            for (i = 0; i < c; i++)
              operand0[j * c + i] = operand1[i][j];

     for a memory operand 0 and register operand 1.

     This pattern is not allowed to 'FAIL'.

'vec_setM'
     Set given field in the vector value.  Operand 0 is the vector to
     modify, operand 1 is new value of field and operand 2 specify the
     field index.

'vec_extractM'
     Extract given field from the vector value.  Operand 1 is the
     vector, operand 2 specify field index and operand 0 place to store
     value into.

'vec_initM'
     Initialize the vector to given values.  Operand 0 is the vector to
     initialize and operand 1 is parallel containing values for
     individual fields.

'vec_cmpMN'
     Output a vector comparison.  Operand 0 of mode N is the destination
     for predicate in operand 1 which is a signed vector comparison with
     operands of mode M in operands 2 and 3.  Predicate is computed by
     element-wise evaluation of the vector comparison with a truth value
     of all-ones and a false value of all-zeros.

'vec_cmpuMN'
     Similar to 'vec_cmpMN' but perform unsigned vector comparison.

'vcondMN'
     Output a conditional vector move.  Operand 0 is the destination to
     receive a combination of operand 1 and operand 2, which are of mode
     M, dependent on the outcome of the predicate in operand 3 which is
     a signed vector comparison with operands of mode N in operands 4
     and 5.  The modes M and N should have the same size.  Operand 0
     will be set to the value OP1 & MSK | OP2 & ~MSK where MSK is
     computed by element-wise evaluation of the vector comparison with a
     truth value of all-ones and a false value of all-zeros.

'vconduMN'
     Similar to 'vcondMN' but performs unsigned vector comparison.

'vcond_mask_MN'
     Similar to 'vcondMN' but operand 3 holds a pre-computed result of
     vector comparison.

'maskloadMN'
     Perform a masked load of vector from memory operand 1 of mode M
     into register operand 0.  Mask is provided in register operand 2 of
     mode N.

     This pattern is not allowed to 'FAIL'.

'maskstoreMN'
     Perform a masked store of vector from register operand 1 of mode M
     into memory operand 0.  Mask is provided in register operand 2 of
     mode N.

     This pattern is not allowed to 'FAIL'.

'vec_permM'
     Output a (variable) vector permutation.  Operand 0 is the
     destination to receive elements from operand 1 and operand 2, which
     are of mode M.  Operand 3 is the "selector".  It is an integral
     mode vector of the same width and number of elements as mode M.

     The input elements are numbered from 0 in operand 1 through 2*N-1
     in operand 2.  The elements of the selector must be computed modulo
     2*N.  Note that if 'rtx_equal_p(operand1, operand2)', this can be
     implemented with just operand 1 and selector elements modulo N.

     In order to make things easy for a number of targets, if there is
     no 'vec_perm' pattern for mode M, but there is for mode Q where Q
     is a vector of 'QImode' of the same width as M, the middle-end will
     lower the mode M 'VEC_PERM_EXPR' to mode Q.

'vec_perm_constM'
     Like 'vec_perm' except that the permutation is a compile-time
     constant.  That is, operand 3, the "selector", is a 'CONST_VECTOR'.

     Some targets cannot perform a permutation with a variable selector,
     but can efficiently perform a constant permutation.  Further, the
     target hook 'vec_perm_ok' is queried to determine if the specific
     constant permutation is available efficiently; the named pattern is
     never expanded without 'vec_perm_ok' returning true.

     There is no need for a target to supply both 'vec_permM' and
     'vec_perm_constM' if the former can trivially implement the
     operation with, say, the vector constant loaded into a register.

'pushM1'
     Output a push instruction.  Operand 0 is value to push.  Used only
     when 'PUSH_ROUNDING' is defined.  For historical reason, this
     pattern may be missing and in such case an 'mov' expander is used
     instead, with a 'MEM' expression forming the push operation.  The
     'mov' expander method is deprecated.

'addM3'
     Add operand 2 and operand 1, storing the result in operand 0.  All
     operands must have mode M.  This can be used even on two-address
     machines, by means of constraints requiring operands 1 and 0 to be
     the same location.

'ssaddM3', 'usaddM3'
'subM3', 'sssubM3', 'ussubM3'
'mulM3', 'ssmulM3', 'usmulM3'
'divM3', 'ssdivM3'
'udivM3', 'usdivM3'
'modM3', 'umodM3'
'uminM3', 'umaxM3'
'andM3', 'iorM3', 'xorM3'
     Similar, for other arithmetic operations.

'addvM4'
     Like 'addM3' but takes a 'code_label' as operand 3 and emits code
     to jump to it if signed overflow occurs during the addition.  This
     pattern is used to implement the built-in functions performing
     signed integer addition with overflow checking.

'subvM4', 'mulvM4'
     Similar, for other signed arithmetic operations.

'uaddvM4'
     Like 'addvM4' but for unsigned addition.  That is to say, the
     operation is the same as signed addition but the jump is taken only
     on unsigned overflow.

'usubvM4', 'umulvM4'
     Similar, for other unsigned arithmetic operations.

'addptrM3'
     Like 'addM3' but is guaranteed to only be used for address
     calculations.  The expanded code is not allowed to clobber the
     condition code.  It only needs to be defined if 'addM3' sets the
     condition code.  If adds used for address calculations and normal
     adds are not compatible it is required to expand a distinct pattern
     (e.g.  using an unspec).  The pattern is used by LRA to emit
     address calculations.  'addM3' is used if 'addptrM3' is not
     defined.

'fmaM4'
     Multiply operand 2 and operand 1, then add operand 3, storing the
     result in operand 0 without doing an intermediate rounding step.
     All operands must have mode M.  This pattern is used to implement
     the 'fma', 'fmaf', and 'fmal' builtin functions from the ISO C99
     standard.

'fmsM4'
     Like 'fmaM4', except operand 3 subtracted from the product instead
     of added to the product.  This is represented in the rtl as

          (fma:M OP1 OP2 (neg:M OP3))

'fnmaM4'
     Like 'fmaM4' except that the intermediate product is negated before
     being added to operand 3.  This is represented in the rtl as

          (fma:M (neg:M OP1) OP2 OP3)

'fnmsM4'
     Like 'fmsM4' except that the intermediate product is negated before
     subtracting operand 3.  This is represented in the rtl as

          (fma:M (neg:M OP1) OP2 (neg:M OP3))

'sminM3', 'smaxM3'
     Signed minimum and maximum operations.  When used with floating
     point, if both operands are zeros, or if either operand is 'NaN',
     then it is unspecified which of the two operands is returned as the
     result.

'fminM3', 'fmaxM3'
     IEEE-conformant minimum and maximum operations.  If one operand is
     a quiet 'NaN', then the other operand is returned.  If both
     operands are quiet 'NaN', then a quiet 'NaN' is returned.  In the
     case when gcc supports signalling 'NaN' (-fsignaling-nans) an
     invalid floating point exception is raised and a quiet 'NaN' is
     returned.

     All operands have mode M, which is a scalar or vector
     floating-point mode.  These patterns are not allowed to 'FAIL'.

'reduc_smin_scal_M', 'reduc_smax_scal_M'
     Find the signed minimum/maximum of the elements of a vector.  The
     vector is operand 1, and operand 0 is the scalar result, with mode
     equal to the mode of the elements of the input vector.

'reduc_umin_scal_M', 'reduc_umax_scal_M'
     Find the unsigned minimum/maximum of the elements of a vector.  The
     vector is operand 1, and operand 0 is the scalar result, with mode
     equal to the mode of the elements of the input vector.

'reduc_plus_scal_M'
     Compute the sum of the elements of a vector.  The vector is operand
     1, and operand 0 is the scalar result, with mode equal to the mode
     of the elements of the input vector.

'sdot_prodM'
'udot_prodM'
     Compute the sum of the products of two signed/unsigned elements.
     Operand 1 and operand 2 are of the same mode.  Their product, which
     is of a wider mode, is computed and added to operand 3.  Operand 3
     is of a mode equal or wider than the mode of the product.  The
     result is placed in operand 0, which is of the same mode as operand
     3.

'ssadM'
'usadM'
     Compute the sum of absolute differences of two signed/unsigned
     elements.  Operand 1 and operand 2 are of the same mode.  Their
     absolute difference, which is of a wider mode, is computed and
     added to operand 3.  Operand 3 is of a mode equal or wider than the
     mode of the absolute difference.  The result is placed in operand
     0, which is of the same mode as operand 3.

'widen_ssumM3'
'widen_usumM3'
     Operands 0 and 2 are of the same mode, which is wider than the mode
     of operand 1.  Add operand 1 to operand 2 and place the widened
     result in operand 0.  (This is used express accumulation of
     elements into an accumulator of a wider mode.)

'vec_shr_M'
     Whole vector right shift in bits, i.e.  towards element 0.  Operand
     1 is a vector to be shifted.  Operand 2 is an integer shift amount
     in bits.  Operand 0 is where the resulting shifted vector is
     stored.  The output and input vectors should have the same modes.

'vec_pack_trunc_M'
     Narrow (demote) and merge the elements of two vectors.  Operands 1
     and 2 are vectors of the same mode having N integral or floating
     point elements of size S.  Operand 0 is the resulting vector in
     which 2*N elements of size N/2 are concatenated after narrowing
     them down using truncation.

'vec_pack_ssat_M', 'vec_pack_usat_M'
     Narrow (demote) and merge the elements of two vectors.  Operands 1
     and 2 are vectors of the same mode having N integral elements of
     size S. Operand 0 is the resulting vector in which the elements of
     the two input vectors are concatenated after narrowing them down
     using signed/unsigned saturating arithmetic.

'vec_pack_sfix_trunc_M', 'vec_pack_ufix_trunc_M'
     Narrow, convert to signed/unsigned integral type and merge the
     elements of two vectors.  Operands 1 and 2 are vectors of the same
     mode having N floating point elements of size S.  Operand 0 is the
     resulting vector in which 2*N elements of size N/2 are
     concatenated.

'vec_unpacks_hi_M', 'vec_unpacks_lo_M'
     Extract and widen (promote) the high/low part of a vector of signed
     integral or floating point elements.  The input vector (operand 1)
     has N elements of size S.  Widen (promote) the high/low elements of
     the vector using signed or floating point extension and place the
     resulting N/2 values of size 2*S in the output vector (operand 0).

'vec_unpacku_hi_M', 'vec_unpacku_lo_M'
     Extract and widen (promote) the high/low part of a vector of
     unsigned integral elements.  The input vector (operand 1) has N
     elements of size S. Widen (promote) the high/low elements of the
     vector using zero extension and place the resulting N/2 values of
     size 2*S in the output vector (operand 0).

'vec_unpacks_float_hi_M', 'vec_unpacks_float_lo_M'
'vec_unpacku_float_hi_M', 'vec_unpacku_float_lo_M'
     Extract, convert to floating point type and widen the high/low part
     of a vector of signed/unsigned integral elements.  The input vector
     (operand 1) has N elements of size S.  Convert the high/low
     elements of the vector using floating point conversion and place
     the resulting N/2 values of size 2*S in the output vector (operand
     0).

'vec_widen_umult_hi_M', 'vec_widen_umult_lo_M'
'vec_widen_smult_hi_M', 'vec_widen_smult_lo_M'
'vec_widen_umult_even_M', 'vec_widen_umult_odd_M'
'vec_widen_smult_even_M', 'vec_widen_smult_odd_M'
     Signed/Unsigned widening multiplication.  The two inputs (operands
     1 and 2) are vectors with N signed/unsigned elements of size S.
     Multiply the high/low or even/odd elements of the two vectors, and
     put the N/2 products of size 2*S in the output vector (operand 0).
     A target shouldn't implement even/odd pattern pair if it is less
     efficient than lo/hi one.

'vec_widen_ushiftl_hi_M', 'vec_widen_ushiftl_lo_M'
'vec_widen_sshiftl_hi_M', 'vec_widen_sshiftl_lo_M'
     Signed/Unsigned widening shift left.  The first input (operand 1)
     is a vector with N signed/unsigned elements of size S.  Operand 2
     is a constant.  Shift the high/low elements of operand 1, and put
     the N/2 results of size 2*S in the output vector (operand 0).

'mulhisi3'
     Multiply operands 1 and 2, which have mode 'HImode', and store a
     'SImode' product in operand 0.

'mulqihi3', 'mulsidi3'
     Similar widening-multiplication instructions of other widths.

'umulqihi3', 'umulhisi3', 'umulsidi3'
     Similar widening-multiplication instructions that do unsigned
     multiplication.

'usmulqihi3', 'usmulhisi3', 'usmulsidi3'
     Similar widening-multiplication instructions that interpret the
     first operand as unsigned and the second operand as signed, then do
     a signed multiplication.

'smulM3_highpart'
     Perform a signed multiplication of operands 1 and 2, which have
     mode M, and store the most significant half of the product in
     operand 0.  The least significant half of the product is discarded.

'umulM3_highpart'
     Similar, but the multiplication is unsigned.

'maddMN4'
     Multiply operands 1 and 2, sign-extend them to mode N, add operand
     3, and store the result in operand 0.  Operands 1 and 2 have mode M
     and operands 0 and 3 have mode N.  Both modes must be integer or
     fixed-point modes and N must be twice the size of M.

     In other words, 'maddMN4' is like 'mulMN3' except that it also adds
     operand 3.

     These instructions are not allowed to 'FAIL'.

'umaddMN4'
     Like 'maddMN4', but zero-extend the multiplication operands instead
     of sign-extending them.

'ssmaddMN4'
     Like 'maddMN4', but all involved operations must be
     signed-saturating.

'usmaddMN4'
     Like 'umaddMN4', but all involved operations must be
     unsigned-saturating.

'msubMN4'
     Multiply operands 1 and 2, sign-extend them to mode N, subtract the
     result from operand 3, and store the result in operand 0.  Operands
     1 and 2 have mode M and operands 0 and 3 have mode N.  Both modes
     must be integer or fixed-point modes and N must be twice the size
     of M.

     In other words, 'msubMN4' is like 'mulMN3' except that it also
     subtracts the result from operand 3.

     These instructions are not allowed to 'FAIL'.

'umsubMN4'
     Like 'msubMN4', but zero-extend the multiplication operands instead
     of sign-extending them.

'ssmsubMN4'
     Like 'msubMN4', but all involved operations must be
     signed-saturating.

'usmsubMN4'
     Like 'umsubMN4', but all involved operations must be
     unsigned-saturating.

'divmodM4'
     Signed division that produces both a quotient and a remainder.
     Operand 1 is divided by operand 2 to produce a quotient stored in
     operand 0 and a remainder stored in operand 3.

     For machines with an instruction that produces both a quotient and
     a remainder, provide a pattern for 'divmodM4' but do not provide
     patterns for 'divM3' and 'modM3'.  This allows optimization in the
     relatively common case when both the quotient and remainder are
     computed.

     If an instruction that just produces a quotient or just a remainder
     exists and is more efficient than the instruction that produces
     both, write the output routine of 'divmodM4' to call
     'find_reg_note' and look for a 'REG_UNUSED' note on the quotient or
     remainder and generate the appropriate instruction.

'udivmodM4'
     Similar, but does unsigned division.

'ashlM3', 'ssashlM3', 'usashlM3'
     Arithmetic-shift operand 1 left by a number of bits specified by
     operand 2, and store the result in operand 0.  Here M is the mode
     of operand 0 and operand 1; operand 2's mode is specified by the
     instruction pattern, and the compiler will convert the operand to
     that mode before generating the instruction.  The shift or rotate
     expander or instruction pattern should explicitly specify the mode
     of the operand 2, it should never be 'VOIDmode'.  The meaning of
     out-of-range shift counts can optionally be specified by
     'TARGET_SHIFT_TRUNCATION_MASK'.  *Note
     TARGET_SHIFT_TRUNCATION_MASK::.  Operand 2 is always a scalar type.

'ashrM3', 'lshrM3', 'rotlM3', 'rotrM3'
     Other shift and rotate instructions, analogous to the 'ashlM3'
     instructions.  Operand 2 is always a scalar type.

'vashlM3', 'vashrM3', 'vlshrM3', 'vrotlM3', 'vrotrM3'
     Vector shift and rotate instructions that take vectors as operand 2
     instead of a scalar type.

'bswapM2'
     Reverse the order of bytes of operand 1 and store the result in
     operand 0.

'negM2', 'ssnegM2', 'usnegM2'
     Negate operand 1 and store the result in operand 0.

'negvM3'
     Like 'negM2' but takes a 'code_label' as operand 2 and emits code
     to jump to it if signed overflow occurs during the negation.

'absM2'
     Store the absolute value of operand 1 into operand 0.

'sqrtM2'
     Store the square root of operand 1 into operand 0.  Both operands
     have mode M, which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'rsqrtM2'
     Store the reciprocal of the square root of operand 1 into operand
     0.  Both operands have mode M, which is a scalar or vector
     floating-point mode.

     On most architectures this pattern is only approximate, so either
     its C condition or the 'TARGET_OPTAB_SUPPORTED_P' hook should check
     for the appropriate math flags.  (Using the C condition is more
     direct, but using 'TARGET_OPTAB_SUPPORTED_P' can be useful if a
     target-specific built-in also uses the 'rsqrtM2' pattern.)

     This pattern is not allowed to 'FAIL'.

'fmodM3'
     Store the remainder of dividing operand 1 by operand 2 into operand
     0, rounded towards zero to an integer.  All operands have mode M,
     which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'remainderM3'
     Store the remainder of dividing operand 1 by operand 2 into operand
     0, rounded to the nearest integer.  All operands have mode M, which
     is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'scalbM3'
     Raise 'FLT_RADIX' to the power of operand 2, multiply it by operand
     1, and store the result in operand 0.  All operands have mode M,
     which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'ldexpM3'
     Raise 2 to the power of operand 2, multiply it by operand 1, and
     store the result in operand 0.  Operands 0 and 1 have mode M, which
     is a scalar or vector floating-point mode.  Operand 2's mode has
     the same number of elements as M and each element is wide enough to
     store an 'int'.  The integers are signed.

     This pattern is not allowed to 'FAIL'.

'cosM2'
     Store the cosine of operand 1 into operand 0.  Both operands have
     mode M, which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'sinM2'
     Store the sine of operand 1 into operand 0.  Both operands have
     mode M, which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'sincosM3'
     Store the cosine of operand 2 into operand 0 and the sine of
     operand 2 into operand 1.  All operands have mode M, which is a
     scalar or vector floating-point mode.

     Targets that can calculate the sine and cosine simultaneously can
     implement this pattern as opposed to implementing individual
     'sinM2' and 'cosM2' patterns.  The 'sin' and 'cos' built-in
     functions will then be expanded to the 'sincosM3' pattern, with one
     of the output values left unused.

'tanM2'
     Store the tangent of operand 1 into operand 0.  Both operands have
     mode M, which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'asinM2'
     Store the arc sine of operand 1 into operand 0.  Both operands have
     mode M, which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'acosM2'
     Store the arc cosine of operand 1 into operand 0.  Both operands
     have mode M, which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'atanM2'
     Store the arc tangent of operand 1 into operand 0.  Both operands
     have mode M, which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'expM2'
     Raise e (the base of natural logarithms) to the power of operand 1
     and store the result in operand 0.  Both operands have mode M,
     which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'expm1M2'
     Raise e (the base of natural logarithms) to the power of operand 1,
     subtract 1, and store the result in operand 0.  Both operands have
     mode M, which is a scalar or vector floating-point mode.

     For inputs close to zero, the pattern is expected to be more
     accurate than a separate 'expM2' and 'subM3' would be.

     This pattern is not allowed to 'FAIL'.

'exp10M2'
     Raise 10 to the power of operand 1 and store the result in operand
     0.  Both operands have mode M, which is a scalar or vector
     floating-point mode.

     This pattern is not allowed to 'FAIL'.

'exp2M2'
     Raise 2 to the power of operand 1 and store the result in operand
     0.  Both operands have mode M, which is a scalar or vector
     floating-point mode.

     This pattern is not allowed to 'FAIL'.

'logM2'
     Store the natural logarithm of operand 1 into operand 0.  Both
     operands have mode M, which is a scalar or vector floating-point
     mode.

     This pattern is not allowed to 'FAIL'.

'log1pM2'
     Add 1 to operand 1, compute the natural logarithm, and store the
     result in operand 0.  Both operands have mode M, which is a scalar
     or vector floating-point mode.

     For inputs close to zero, the pattern is expected to be more
     accurate than a separate 'addM3' and 'logM2' would be.

     This pattern is not allowed to 'FAIL'.

'log10M2'
     Store the base-10 logarithm of operand 1 into operand 0.  Both
     operands have mode M, which is a scalar or vector floating-point
     mode.

     This pattern is not allowed to 'FAIL'.

'log2M2'
     Store the base-2 logarithm of operand 1 into operand 0.  Both
     operands have mode M, which is a scalar or vector floating-point
     mode.

     This pattern is not allowed to 'FAIL'.

'logbM2'
     Store the base-'FLT_RADIX' logarithm of operand 1 into operand 0.
     Both operands have mode M, which is a scalar or vector
     floating-point mode.

     This pattern is not allowed to 'FAIL'.

'significandM2'
     Store the significand of floating-point operand 1 in operand 0.
     Both operands have mode M, which is a scalar or vector
     floating-point mode.

     This pattern is not allowed to 'FAIL'.

'powM3'
     Store the value of operand 1 raised to the exponent operand 2 into
     operand 0.  All operands have mode M, which is a scalar or vector
     floating-point mode.

     This pattern is not allowed to 'FAIL'.

'atan2M3'
     Store the arc tangent (inverse tangent) of operand 1 divided by
     operand 2 into operand 0, using the signs of both arguments to
     determine the quadrant of the result.  All operands have mode M,
     which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'floorM2'
     Store the largest integral value not greater than operand 1 in
     operand 0.  Both operands have mode M, which is a scalar or vector
     floating-point mode.

     This pattern is not allowed to 'FAIL'.

'btruncM2'
     Round operand 1 to an integer, towards zero, and store the result
     in operand 0.  Both operands have mode M, which is a scalar or
     vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'roundM2'
     Round operand 1 to the nearest integer, rounding away from zero in
     the event of a tie, and store the result in operand 0.  Both
     operands have mode M, which is a scalar or vector floating-point
     mode.

     This pattern is not allowed to 'FAIL'.

'ceilM2'
     Store the smallest integral value not less than operand 1 in
     operand 0.  Both operands have mode M, which is a scalar or vector
     floating-point mode.

     This pattern is not allowed to 'FAIL'.

'nearbyintM2'
     Round operand 1 to an integer, using the current rounding mode, and
     store the result in operand 0.  Do not raise an inexact condition
     when the result is different from the argument.  Both operands have
     mode M, which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'rintM2'
     Round operand 1 to an integer, using the current rounding mode, and
     store the result in operand 0.  Raise an inexact condition when the
     result is different from the argument.  Both operands have mode M,
     which is a scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'lrintMN2'
     Convert operand 1 (valid for floating point mode M) to fixed point
     mode N as a signed number according to the current rounding mode
     and store in operand 0 (which has mode N).

'lroundMN2'
     Convert operand 1 (valid for floating point mode M) to fixed point
     mode N as a signed number rounding to nearest and away from zero
     and store in operand 0 (which has mode N).

'lfloorMN2'
     Convert operand 1 (valid for floating point mode M) to fixed point
     mode N as a signed number rounding down and store in operand 0
     (which has mode N).

'lceilMN2'
     Convert operand 1 (valid for floating point mode M) to fixed point
     mode N as a signed number rounding up and store in operand 0 (which
     has mode N).

'copysignM3'
     Store a value with the magnitude of operand 1 and the sign of
     operand 2 into operand 0.  All operands have mode M, which is a
     scalar or vector floating-point mode.

     This pattern is not allowed to 'FAIL'.

'ffsM2'
     Store into operand 0 one plus the index of the least significant
     1-bit of operand 1.  If operand 1 is zero, store zero.

     M is either a scalar or vector integer mode.  When it is a scalar,
     operand 1 has mode M but operand 0 can have whatever scalar integer
     mode is suitable for the target.  The compiler will insert
     conversion instructions as necessary (typically to convert the
     result to the same width as 'int').  When M is a vector, both
     operands must have mode M.

     This pattern is not allowed to 'FAIL'.

'clrsbM2'
     Count leading redundant sign bits.  Store into operand 0 the number
     of redundant sign bits in operand 1, starting at the most
     significant bit position.  A redundant sign bit is defined as any
     sign bit after the first.  As such, this count will be one less
     than the count of leading sign bits.

     M is either a scalar or vector integer mode.  When it is a scalar,
     operand 1 has mode M but operand 0 can have whatever scalar integer
     mode is suitable for the target.  The compiler will insert
     conversion instructions as necessary (typically to convert the
     result to the same width as 'int').  When M is a vector, both
     operands must have mode M.

     This pattern is not allowed to 'FAIL'.

'clzM2'
     Store into operand 0 the number of leading 0-bits in operand 1,
     starting at the most significant bit position.  If operand 1 is 0,
     the 'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
     result is undefined or has a useful value.

     M is either a scalar or vector integer mode.  When it is a scalar,
     operand 1 has mode M but operand 0 can have whatever scalar integer
     mode is suitable for the target.  The compiler will insert
     conversion instructions as necessary (typically to convert the
     result to the same width as 'int').  When M is a vector, both
     operands must have mode M.

     This pattern is not allowed to 'FAIL'.

'ctzM2'
     Store into operand 0 the number of trailing 0-bits in operand 1,
     starting at the least significant bit position.  If operand 1 is 0,
     the 'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
     result is undefined or has a useful value.

     M is either a scalar or vector integer mode.  When it is a scalar,
     operand 1 has mode M but operand 0 can have whatever scalar integer
     mode is suitable for the target.  The compiler will insert
     conversion instructions as necessary (typically to convert the
     result to the same width as 'int').  When M is a vector, both
     operands must have mode M.

     This pattern is not allowed to 'FAIL'.

'popcountM2'
     Store into operand 0 the number of 1-bits in operand 1.

     M is either a scalar or vector integer mode.  When it is a scalar,
     operand 1 has mode M but operand 0 can have whatever scalar integer
     mode is suitable for the target.  The compiler will insert
     conversion instructions as necessary (typically to convert the
     result to the same width as 'int').  When M is a vector, both
     operands must have mode M.

     This pattern is not allowed to 'FAIL'.

'parityM2'
     Store into operand 0 the parity of operand 1, i.e. the number of
     1-bits in operand 1 modulo 2.

     M is either a scalar or vector integer mode.  When it is a scalar,
     operand 1 has mode M but operand 0 can have whatever scalar integer
     mode is suitable for the target.  The compiler will insert
     conversion instructions as necessary (typically to convert the
     result to the same width as 'int').  When M is a vector, both
     operands must have mode M.

     This pattern is not allowed to 'FAIL'.

'one_cmplM2'
     Store the bitwise-complement of operand 1 into operand 0.

'movmemM'
     Block move instruction.  The destination and source blocks of
     memory are the first two operands, and both are 'mem:BLK's with an
     address in mode 'Pmode'.

     The number of bytes to move is the third operand, in mode M.
     Usually, you specify 'Pmode' for M.  However, if you can generate
     better code knowing the range of valid lengths is smaller than
     those representable in a full Pmode pointer, you should provide a
     pattern with a mode corresponding to the range of values you can
     handle efficiently (e.g., 'QImode' for values in the range 0-127;
     note we avoid numbers that appear negative) and also a pattern with
     'Pmode'.

     The fourth operand is the known shared alignment of the source and
     destination, in the form of a 'const_int' rtx.  Thus, if the
     compiler knows that both source and destination are word-aligned,
     it may provide the value 4 for this operand.

     Optional operands 5 and 6 specify expected alignment and size of
     block respectively.  The expected alignment differs from alignment
     in operand 4 in a way that the blocks are not required to be
     aligned according to it in all cases.  This expected alignment is
     also in bytes, just like operand 4.  Expected size, when unknown,
     is set to '(const_int -1)'.

     Descriptions of multiple 'movmemM' patterns can only be beneficial
     if the patterns for smaller modes have fewer restrictions on their
     first, second and fourth operands.  Note that the mode M in
     'movmemM' does not impose any restriction on the mode of
     individually moved data units in the block.

     These patterns need not give special consideration to the
     possibility that the source and destination strings might overlap.

'movstr'
     String copy instruction, with 'stpcpy' semantics.  Operand 0 is an
     output operand in mode 'Pmode'.  The addresses of the destination
     and source strings are operands 1 and 2, and both are 'mem:BLK's
     with addresses in mode 'Pmode'.  The execution of the expansion of
     this pattern should store in operand 0 the address in which the
     'NUL' terminator was stored in the destination string.

     This patern has also several optional operands that are same as in
     'setmem'.

'setmemM'
     Block set instruction.  The destination string is the first
     operand, given as a 'mem:BLK' whose address is in mode 'Pmode'.
     The number of bytes to set is the second operand, in mode M.  The
     value to initialize the memory with is the third operand.  Targets
     that only support the clearing of memory should reject any value
     that is not the constant 0.  See 'movmemM' for a discussion of the
     choice of mode.

     The fourth operand is the known alignment of the destination, in
     the form of a 'const_int' rtx.  Thus, if the compiler knows that
     the destination is word-aligned, it may provide the value 4 for
     this operand.

     Optional operands 5 and 6 specify expected alignment and size of
     block respectively.  The expected alignment differs from alignment
     in operand 4 in a way that the blocks are not required to be
     aligned according to it in all cases.  This expected alignment is
     also in bytes, just like operand 4.  Expected size, when unknown,
     is set to '(const_int -1)'.  Operand 7 is the minimal size of the
     block and operand 8 is the maximal size of the block (NULL if it
     can not be represented as CONST_INT). Operand 9 is the probable
     maximal size (i.e.  we can not rely on it for correctness, but it
     can be used for choosing proper code sequence for a given size).

     The use for multiple 'setmemM' is as for 'movmemM'.

'cmpstrnM'
     String compare instruction, with five operands.  Operand 0 is the
     output; it has mode M.  The remaining four operands are like the
     operands of 'movmemM'.  The two memory blocks specified are
     compared byte by byte in lexicographic order starting at the
     beginning of each string.  The instruction is not allowed to
     prefetch more than one byte at a time since either string may end
     in the first byte and reading past that may access an invalid page
     or segment and cause a fault.  The comparison terminates early if
     the fetched bytes are different or if they are equal to zero.  The
     effect of the instruction is to store a value in operand 0 whose
     sign indicates the result of the comparison.

'cmpstrM'
     String compare instruction, without known maximum length.  Operand
     0 is the output; it has mode M.  The second and third operand are
     the blocks of memory to be compared; both are 'mem:BLK' with an
     address in mode 'Pmode'.

     The fourth operand is the known shared alignment of the source and
     destination, in the form of a 'const_int' rtx.  Thus, if the
     compiler knows that both source and destination are word-aligned,
     it may provide the value 4 for this operand.

     The two memory blocks specified are compared byte by byte in
     lexicographic order starting at the beginning of each string.  The
     instruction is not allowed to prefetch more than one byte at a time
     since either string may end in the first byte and reading past that
     may access an invalid page or segment and cause a fault.  The
     comparison will terminate when the fetched bytes are different or
     if they are equal to zero.  The effect of the instruction is to
     store a value in operand 0 whose sign indicates the result of the
     comparison.

'cmpmemM'
     Block compare instruction, with five operands like the operands of
     'cmpstrM'.  The two memory blocks specified are compared byte by
     byte in lexicographic order starting at the beginning of each
     block.  Unlike 'cmpstrM' the instruction can prefetch any bytes in
     the two memory blocks.  Also unlike 'cmpstrM' the comparison will
     not stop if both bytes are zero.  The effect of the instruction is
     to store a value in operand 0 whose sign indicates the result of
     the comparison.

'strlenM'
     Compute the length of a string, with three operands.  Operand 0 is
     the result (of mode M), operand 1 is a 'mem' referring to the first
     character of the string, operand 2 is the character to search for
     (normally zero), and operand 3 is a constant describing the known
     alignment of the beginning of the string.

'floatMN2'
     Convert signed integer operand 1 (valid for fixed point mode M) to
     floating point mode N and store in operand 0 (which has mode N).

'floatunsMN2'
     Convert unsigned integer operand 1 (valid for fixed point mode M)
     to floating point mode N and store in operand 0 (which has mode N).

'fixMN2'
     Convert operand 1 (valid for floating point mode M) to fixed point
     mode N as a signed number and store in operand 0 (which has mode
     N).  This instruction's result is defined only when the value of
     operand 1 is an integer.

     If the machine description defines this pattern, it also needs to
     define the 'ftrunc' pattern.

'fixunsMN2'
     Convert operand 1 (valid for floating point mode M) to fixed point
     mode N as an unsigned number and store in operand 0 (which has mode
     N).  This instruction's result is defined only when the value of
     operand 1 is an integer.

'ftruncM2'
     Convert operand 1 (valid for floating point mode M) to an integer
     value, still represented in floating point mode M, and store it in
     operand 0 (valid for floating point mode M).

'fix_truncMN2'
     Like 'fixMN2' but works for any floating point value of mode M by
     converting the value to an integer.

'fixuns_truncMN2'
     Like 'fixunsMN2' but works for any floating point value of mode M
     by converting the value to an integer.

'truncMN2'
     Truncate operand 1 (valid for mode M) to mode N and store in
     operand 0 (which has mode N).  Both modes must be fixed point or
     both floating point.

'extendMN2'
     Sign-extend operand 1 (valid for mode M) to mode N and store in
     operand 0 (which has mode N).  Both modes must be fixed point or
     both floating point.

'zero_extendMN2'
     Zero-extend operand 1 (valid for mode M) to mode N and store in
     operand 0 (which has mode N).  Both modes must be fixed point.

'fractMN2'
     Convert operand 1 of mode M to mode N and store in operand 0 (which
     has mode N).  Mode M and mode N could be fixed-point to
     fixed-point, signed integer to fixed-point, fixed-point to signed
     integer, floating-point to fixed-point, or fixed-point to
     floating-point.  When overflows or underflows happen, the results
     are undefined.

'satfractMN2'
     Convert operand 1 of mode M to mode N and store in operand 0 (which
     has mode N).  Mode M and mode N could be fixed-point to
     fixed-point, signed integer to fixed-point, or floating-point to
     fixed-point.  When overflows or underflows happen, the instruction
     saturates the results to the maximum or the minimum.

'fractunsMN2'
     Convert operand 1 of mode M to mode N and store in operand 0 (which
     has mode N).  Mode M and mode N could be unsigned integer to
     fixed-point, or fixed-point to unsigned integer.  When overflows or
     underflows happen, the results are undefined.

'satfractunsMN2'
     Convert unsigned integer operand 1 of mode M to fixed-point mode N
     and store in operand 0 (which has mode N).  When overflows or
     underflows happen, the instruction saturates the results to the
     maximum or the minimum.

'extvM'
     Extract a bit-field from register operand 1, sign-extend it, and
     store it in operand 0.  Operand 2 specifies the width of the field
     in bits and operand 3 the starting bit, which counts from the most
     significant bit if 'BITS_BIG_ENDIAN' is true and from the least
     significant bit otherwise.

     Operands 0 and 1 both have mode M.  Operands 2 and 3 have a
     target-specific mode.

'extvmisalignM'
     Extract a bit-field from memory operand 1, sign extend it, and
     store it in operand 0.  Operand 2 specifies the width in bits and
     operand 3 the starting bit.  The starting bit is always somewhere
     in the first byte of operand 1; it counts from the most significant
     bit if 'BITS_BIG_ENDIAN' is true and from the least significant bit
     otherwise.

     Operand 0 has mode M while operand 1 has 'BLK' mode.  Operands 2
     and 3 have a target-specific mode.

     The instruction must not read beyond the last byte of the
     bit-field.

'extzvM'
     Like 'extvM' except that the bit-field value is zero-extended.

'extzvmisalignM'
     Like 'extvmisalignM' except that the bit-field value is
     zero-extended.

'insvM'
     Insert operand 3 into a bit-field of register operand 0.  Operand 1
     specifies the width of the field in bits and operand 2 the starting
     bit, which counts from the most significant bit if
     'BITS_BIG_ENDIAN' is true and from the least significant bit
     otherwise.

     Operands 0 and 3 both have mode M.  Operands 1 and 2 have a
     target-specific mode.

'insvmisalignM'
     Insert operand 3 into a bit-field of memory operand 0.  Operand 1
     specifies the width of the field in bits and operand 2 the starting
     bit.  The starting bit is always somewhere in the first byte of
     operand 0; it counts from the most significant bit if
     'BITS_BIG_ENDIAN' is true and from the least significant bit
     otherwise.

     Operand 3 has mode M while operand 0 has 'BLK' mode.  Operands 1
     and 2 have a target-specific mode.

     The instruction must not read or write beyond the last byte of the
     bit-field.

'extv'
     Extract a bit-field from operand 1 (a register or memory operand),
     where operand 2 specifies the width in bits and operand 3 the
     starting bit, and store it in operand 0.  Operand 0 must have mode
     'word_mode'.  Operand 1 may have mode 'byte_mode' or 'word_mode';
     often 'word_mode' is allowed only for registers.  Operands 2 and 3
     must be valid for 'word_mode'.

     The RTL generation pass generates this instruction only with
     constants for operands 2 and 3 and the constant is never zero for
     operand 2.

     The bit-field value is sign-extended to a full word integer before
     it is stored in operand 0.

     This pattern is deprecated; please use 'extvM' and 'extvmisalignM'
     instead.

'extzv'
     Like 'extv' except that the bit-field value is zero-extended.

     This pattern is deprecated; please use 'extzvM' and
     'extzvmisalignM' instead.

'insv'
     Store operand 3 (which must be valid for 'word_mode') into a
     bit-field in operand 0, where operand 1 specifies the width in bits
     and operand 2 the starting bit.  Operand 0 may have mode
     'byte_mode' or 'word_mode'; often 'word_mode' is allowed only for
     registers.  Operands 1 and 2 must be valid for 'word_mode'.

     The RTL generation pass generates this instruction only with
     constants for operands 1 and 2 and the constant is never zero for
     operand 1.

     This pattern is deprecated; please use 'insvM' and 'insvmisalignM'
     instead.

'movMODEcc'
     Conditionally move operand 2 or operand 3 into operand 0 according
     to the comparison in operand 1.  If the comparison is true, operand
     2 is moved into operand 0, otherwise operand 3 is moved.

     The mode of the operands being compared need not be the same as the
     operands being moved.  Some machines, sparc64 for example, have
     instructions that conditionally move an integer value based on the
     floating point condition codes and vice versa.

     If the machine does not have conditional move instructions, do not
     define these patterns.

'addMODEcc'
     Similar to 'movMODEcc' but for conditional addition.  Conditionally
     move operand 2 or (operands 2 + operand 3) into operand 0 according
     to the comparison in operand 1.  If the comparison is false,
     operand 2 is moved into operand 0, otherwise (operand 2 + operand
     3) is moved.

'negMODEcc'
     Similar to 'movMODEcc' but for conditional negation.  Conditionally
     move the negation of operand 2 or the unchanged operand 3 into
     operand 0 according to the comparison in operand 1.  If the
     comparison is true, the negation of operand 2 is moved into operand
     0, otherwise operand 3 is moved.

'notMODEcc'
     Similar to 'negMODEcc' but for conditional complement.
     Conditionally move the bitwise complement of operand 2 or the
     unchanged operand 3 into operand 0 according to the comparison in
     operand 1.  If the comparison is true, the complement of operand 2
     is moved into operand 0, otherwise operand 3 is moved.

'cstoreMODE4'
     Store zero or nonzero in operand 0 according to whether a
     comparison is true.  Operand 1 is a comparison operator.  Operand 2
     and operand 3 are the first and second operand of the comparison,
     respectively.  You specify the mode that operand 0 must have when
     you write the 'match_operand' expression.  The compiler
     automatically sees which mode you have used and supplies an operand
     of that mode.

     The value stored for a true condition must have 1 as its low bit,
     or else must be negative.  Otherwise the instruction is not
     suitable and you should omit it from the machine description.  You
     describe to the compiler exactly which value is stored by defining
     the macro 'STORE_FLAG_VALUE' (*note Misc::).  If a description
     cannot be found that can be used for all the possible comparison
     operators, you should pick one and use a 'define_expand' to map all
     results onto the one you chose.

     These operations may 'FAIL', but should do so only in relatively
     uncommon cases; if they would 'FAIL' for common cases involving
     integer comparisons, it is best to restrict the predicates to not
     allow these operands.  Likewise if a given comparison operator will
     always fail, independent of the operands (for floating-point modes,
     the 'ordered_comparison_operator' predicate is often useful in this
     case).

     If this pattern is omitted, the compiler will generate a
     conditional branch--for example, it may copy a constant one to the
     target and branching around an assignment of zero to the target--or
     a libcall.  If the predicate for operand 1 only rejects some
     operators, it will also try reordering the operands and/or
     inverting the result value (e.g. by an exclusive OR). These
     possibilities could be cheaper or equivalent to the instructions
     used for the 'cstoreMODE4' pattern followed by those required to
     convert a positive result from 'STORE_FLAG_VALUE' to 1; in this
     case, you can and should make operand 1's predicate reject some
     operators in the 'cstoreMODE4' pattern, or remove the pattern
     altogether from the machine description.

'cbranchMODE4'
     Conditional branch instruction combined with a compare instruction.
     Operand 0 is a comparison operator.  Operand 1 and operand 2 are
     the first and second operands of the comparison, respectively.
     Operand 3 is the 'code_label' to jump to.

'jump'
     A jump inside a function; an unconditional branch.  Operand 0 is
     the 'code_label' to jump to.  This pattern name is mandatory on all
     machines.

'call'
     Subroutine call instruction returning no value.  Operand 0 is the
     function to call; operand 1 is the number of bytes of arguments
     pushed as a 'const_int'; operand 2 is the number of registers used
     as operands.

     On most machines, operand 2 is not actually stored into the RTL
     pattern.  It is supplied for the sake of some RISC machines which
     need to put this information into the assembler code; they can put
     it in the RTL instead of operand 1.

     Operand 0 should be a 'mem' RTX whose address is the address of the
     function.  Note, however, that this address can be a 'symbol_ref'
     expression even if it would not be a legitimate memory address on
     the target machine.  If it is also not a valid argument for a call
     instruction, the pattern for this operation should be a
     'define_expand' (*note Expander Definitions::) that places the
     address into a register and uses that register in the call
     instruction.

'call_value'
     Subroutine call instruction returning a value.  Operand 0 is the
     hard register in which the value is returned.  There are three more
     operands, the same as the three operands of the 'call' instruction
     (but with numbers increased by one).

     Subroutines that return 'BLKmode' objects use the 'call' insn.

'call_pop', 'call_value_pop'
     Similar to 'call' and 'call_value', except used if defined and if
     'RETURN_POPS_ARGS' is nonzero.  They should emit a 'parallel' that
     contains both the function call and a 'set' to indicate the
     adjustment made to the frame pointer.

     For machines where 'RETURN_POPS_ARGS' can be nonzero, the use of
     these patterns increases the number of functions for which the
     frame pointer can be eliminated, if desired.

'untyped_call'
     Subroutine call instruction returning a value of any type.  Operand
     0 is the function to call; operand 1 is a memory location where the
     result of calling the function is to be stored; operand 2 is a
     'parallel' expression where each element is a 'set' expression that
     indicates the saving of a function return value into the result
     block.

     This instruction pattern should be defined to support
     '__builtin_apply' on machines where special instructions are needed
     to call a subroutine with arbitrary arguments or to save the value
     returned.  This instruction pattern is required on machines that
     have multiple registers that can hold a return value (i.e.
     'FUNCTION_VALUE_REGNO_P' is true for more than one register).

'return'
     Subroutine return instruction.  This instruction pattern name
     should be defined only if a single instruction can do all the work
     of returning from a function.

     Like the 'movM' patterns, this pattern is also used after the RTL
     generation phase.  In this case it is to support machines where
     multiple instructions are usually needed to return from a function,
     but some class of functions only requires one instruction to
     implement a return.  Normally, the applicable functions are those
     which do not need to save any registers or allocate stack space.

     It is valid for this pattern to expand to an instruction using
     'simple_return' if no epilogue is required.

'simple_return'
     Subroutine return instruction.  This instruction pattern name
     should be defined only if a single instruction can do all the work
     of returning from a function on a path where no epilogue is
     required.  This pattern is very similar to the 'return' instruction
     pattern, but it is emitted only by the shrink-wrapping optimization
     on paths where the function prologue has not been executed, and a
     function return should occur without any of the effects of the
     epilogue.  Additional uses may be introduced on paths where both
     the prologue and the epilogue have executed.

     For such machines, the condition specified in this pattern should
     only be true when 'reload_completed' is nonzero and the function's
     epilogue would only be a single instruction.  For machines with
     register windows, the routine 'leaf_function_p' may be used to
     determine if a register window push is required.

     Machines that have conditional return instructions should define
     patterns such as

          (define_insn ""
            [(set (pc)
                  (if_then_else (match_operator
                                   0 "comparison_operator"
                                   [(cc0) (const_int 0)])
                                (return)
                                (pc)))]
            "CONDITION"
            "...")

     where CONDITION would normally be the same condition specified on
     the named 'return' pattern.

'untyped_return'
     Untyped subroutine return instruction.  This instruction pattern
     should be defined to support '__builtin_return' on machines where
     special instructions are needed to return a value of any type.

     Operand 0 is a memory location where the result of calling a
     function with '__builtin_apply' is stored; operand 1 is a
     'parallel' expression where each element is a 'set' expression that
     indicates the restoring of a function return value from the result
     block.

'nop'
     No-op instruction.  This instruction pattern name should always be
     defined to output a no-op in assembler code.  '(const_int 0)' will
     do as an RTL pattern.

'indirect_jump'
     An instruction to jump to an address which is operand zero.  This
     pattern name is mandatory on all machines.

'casesi'
     Instruction to jump through a dispatch table, including bounds
     checking.  This instruction takes five operands:

       1. The index to dispatch on, which has mode 'SImode'.

       2. The lower bound for indices in the table, an integer constant.

       3. The total range of indices in the table--the largest index
          minus the smallest one (both inclusive).

       4. A label that precedes the table itself.

       5. A label to jump to if the index has a value outside the
          bounds.

     The table is an 'addr_vec' or 'addr_diff_vec' inside of a
     'jump_table_data'.  The number of elements in the table is one plus
     the difference between the upper bound and the lower bound.

'tablejump'
     Instruction to jump to a variable address.  This is a low-level
     capability which can be used to implement a dispatch table when
     there is no 'casesi' pattern.

     This pattern requires two operands: the address or offset, and a
     label which should immediately precede the jump table.  If the
     macro 'CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then
     the first operand is an offset which counts from the address of the
     table; otherwise, it is an absolute address to jump to.  In either
     case, the first operand has mode 'Pmode'.

     The 'tablejump' insn is always the last insn before the jump table
     it uses.  Its assembler code normally has no need to use the second
     operand, but you should incorporate it in the RTL pattern so that
     the jump optimizer will not delete the table as unreachable code.

'decrement_and_branch_until_zero'
     Conditional branch instruction that decrements a register and jumps
     if the register is nonzero.  Operand 0 is the register to decrement
     and test; operand 1 is the label to jump to if the register is
     nonzero.  *Note Looping Patterns::.

     This optional instruction pattern is only used by the combiner,
     typically for loops reversed by the loop optimizer when strength
     reduction is enabled.

'doloop_end'
     Conditional branch instruction that decrements a register and jumps
     if the register is nonzero.  Operand 0 is the register to decrement
     and test; operand 1 is the label to jump to if the register is
     nonzero.  *Note Looping Patterns::.

     This optional instruction pattern should be defined for machines
     with low-overhead looping instructions as the loop optimizer will
     try to modify suitable loops to utilize it.  The target hook
     'TARGET_CAN_USE_DOLOOP_P' controls the conditions under which
     low-overhead loops can be used.

'doloop_begin'
     Companion instruction to 'doloop_end' required for machines that
     need to perform some initialization, such as loading a special
     counter register.  Operand 1 is the associated 'doloop_end' pattern
     and operand 0 is the register that it decrements.

     If initialization insns do not always need to be emitted, use a
     'define_expand' (*note Expander Definitions::) and make it fail.

'canonicalize_funcptr_for_compare'
     Canonicalize the function pointer in operand 1 and store the result
     into operand 0.

     Operand 0 is always a 'reg' and has mode 'Pmode'; operand 1 may be
     a 'reg', 'mem', 'symbol_ref', 'const_int', etc and also has mode
     'Pmode'.

     Canonicalization of a function pointer usually involves computing
     the address of the function which would be called if the function
     pointer were used in an indirect call.

     Only define this pattern if function pointers on the target machine
     can have different values but still call the same function when
     used in an indirect call.

'save_stack_block'
'save_stack_function'
'save_stack_nonlocal'
'restore_stack_block'
'restore_stack_function'
'restore_stack_nonlocal'
     Most machines save and restore the stack pointer by copying it to
     or from an object of mode 'Pmode'.  Do not define these patterns on
     such machines.

     Some machines require special handling for stack pointer saves and
     restores.  On those machines, define the patterns corresponding to
     the non-standard cases by using a 'define_expand' (*note Expander
     Definitions::) that produces the required insns.  The three types
     of saves and restores are:

       1. 'save_stack_block' saves the stack pointer at the start of a
          block that allocates a variable-sized object, and
          'restore_stack_block' restores the stack pointer when the
          block is exited.

       2. 'save_stack_function' and 'restore_stack_function' do a
          similar job for the outermost block of a function and are used
          when the function allocates variable-sized objects or calls
          'alloca'.  Only the epilogue uses the restored stack pointer,
          allowing a simpler save or restore sequence on some machines.

       3. 'save_stack_nonlocal' is used in functions that contain labels
          branched to by nested functions.  It saves the stack pointer
          in such a way that the inner function can use
          'restore_stack_nonlocal' to restore the stack pointer.  The
          compiler generates code to restore the frame and argument
          pointer registers, but some machines require saving and
          restoring additional data such as register window information
          or stack backchains.  Place insns in these patterns to save
          and restore any such required data.

     When saving the stack pointer, operand 0 is the save area and
     operand 1 is the stack pointer.  The mode used to allocate the save
     area defaults to 'Pmode' but you can override that choice by
     defining the 'STACK_SAVEAREA_MODE' macro (*note Storage Layout::).
     You must specify an integral mode, or 'VOIDmode' if no save area is
     needed for a particular type of save (either because no save is
     needed or because a machine-specific save area can be used).
     Operand 0 is the stack pointer and operand 1 is the save area for
     restore operations.  If 'save_stack_block' is defined, operand 0
     must not be 'VOIDmode' since these saves can be arbitrarily nested.

     A save area is a 'mem' that is at a constant offset from
     'virtual_stack_vars_rtx' when the stack pointer is saved for use by
     nonlocal gotos and a 'reg' in the other two cases.

'allocate_stack'
     Subtract (or add if 'STACK_GROWS_DOWNWARD' is undefined) operand 1
     from the stack pointer to create space for dynamically allocated
     data.

     Store the resultant pointer to this space into operand 0.  If you
     are allocating space from the main stack, do this by emitting a
     move insn to copy 'virtual_stack_dynamic_rtx' to operand 0.  If you
     are allocating the space elsewhere, generate code to copy the
     location of the space to operand 0.  In the latter case, you must
     ensure this space gets freed when the corresponding space on the
     main stack is free.

     Do not define this pattern if all that must be done is the
     subtraction.  Some machines require other operations such as stack
     probes or maintaining the back chain.  Define this pattern to emit
     those operations in addition to updating the stack pointer.

'check_stack'
     If stack checking (*note Stack Checking::) cannot be done on your
     system by probing the stack, define this pattern to perform the
     needed check and signal an error if the stack has overflowed.  The
     single operand is the address in the stack farthest from the
     current stack pointer that you need to validate.  Normally, on
     platforms where this pattern is needed, you would obtain the stack
     limit from a global or thread-specific variable or register.

'probe_stack_address'
     If stack checking (*note Stack Checking::) can be done on your
     system by probing the stack but without the need to actually access
     it, define this pattern and signal an error if the stack has
     overflowed.  The single operand is the memory address in the stack
     that needs to be probed.

'probe_stack'
     If stack checking (*note Stack Checking::) can be done on your
     system by probing the stack but doing it with a "store zero"
     instruction is not valid or optimal, define this pattern to do the
     probing differently and signal an error if the stack has
     overflowed.  The single operand is the memory reference in the
     stack that needs to be probed.

'nonlocal_goto'
     Emit code to generate a non-local goto, e.g., a jump from one
     function to a label in an outer function.  This pattern has four
     arguments, each representing a value to be used in the jump.  The
     first argument is to be loaded into the frame pointer, the second
     is the address to branch to (code to dispatch to the actual label),
     the third is the address of a location where the stack is saved,
     and the last is the address of the label, to be placed in the
     location for the incoming static chain.

     On most machines you need not define this pattern, since GCC will
     already generate the correct code, which is to load the frame
     pointer and static chain, restore the stack (using the
     'restore_stack_nonlocal' pattern, if defined), and jump indirectly
     to the dispatcher.  You need only define this pattern if this code
     will not work on your machine.

'nonlocal_goto_receiver'
     This pattern, if defined, contains code needed at the target of a
     nonlocal goto after the code already generated by GCC.  You will
     not normally need to define this pattern.  A typical reason why you
     might need this pattern is if some value, such as a pointer to a
     global table, must be restored when the frame pointer is restored.
     Note that a nonlocal goto only occurs within a unit-of-translation,
     so a global table pointer that is shared by all functions of a
     given module need not be restored.  There are no arguments.

'exception_receiver'
     This pattern, if defined, contains code needed at the site of an
     exception handler that isn't needed at the site of a nonlocal goto.
     You will not normally need to define this pattern.  A typical
     reason why you might need this pattern is if some value, such as a
     pointer to a global table, must be restored after control flow is
     branched to the handler of an exception.  There are no arguments.

'builtin_setjmp_setup'
     This pattern, if defined, contains additional code needed to
     initialize the 'jmp_buf'.  You will not normally need to define
     this pattern.  A typical reason why you might need this pattern is
     if some value, such as a pointer to a global table, must be
     restored.  Though it is preferred that the pointer value be
     recalculated if possible (given the address of a label for
     instance).  The single argument is a pointer to the 'jmp_buf'.
     Note that the buffer is five words long and that the first three
     are normally used by the generic mechanism.

'builtin_setjmp_receiver'
     This pattern, if defined, contains code needed at the site of a
     built-in setjmp that isn't needed at the site of a nonlocal goto.
     You will not normally need to define this pattern.  A typical
     reason why you might need this pattern is if some value, such as a
     pointer to a global table, must be restored.  It takes one
     argument, which is the label to which builtin_longjmp transferred
     control; this pattern may be emitted at a small offset from that
     label.

'builtin_longjmp'
     This pattern, if defined, performs the entire action of the
     longjmp.  You will not normally need to define this pattern unless
     you also define 'builtin_setjmp_setup'.  The single argument is a
     pointer to the 'jmp_buf'.

'eh_return'
     This pattern, if defined, affects the way '__builtin_eh_return',
     and thence the call frame exception handling library routines, are
     built.  It is intended to handle non-trivial actions needed along
     the abnormal return path.

     The address of the exception handler to which the function should
     return is passed as operand to this pattern.  It will normally need
     to copied by the pattern to some special register or memory
     location.  If the pattern needs to determine the location of the
     target call frame in order to do so, it may use
     'EH_RETURN_STACKADJ_RTX', if defined; it will have already been
     assigned.

     If this pattern is not defined, the default action will be to
     simply copy the return address to 'EH_RETURN_HANDLER_RTX'.  Either
     that macro or this pattern needs to be defined if call frame
     exception handling is to be used.

'prologue'
     This pattern, if defined, emits RTL for entry to a function.  The
     function entry is responsible for setting up the stack frame,
     initializing the frame pointer register, saving callee saved
     registers, etc.

     Using a prologue pattern is generally preferred over defining
     'TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the
     prologue.

     The 'prologue' pattern is particularly useful for targets which
     perform instruction scheduling.

'window_save'
     This pattern, if defined, emits RTL for a register window save.  It
     should be defined if the target machine has register windows but
     the window events are decoupled from calls to subroutines.  The
     canonical example is the SPARC architecture.

'epilogue'
     This pattern emits RTL for exit from a function.  The function exit
     is responsible for deallocating the stack frame, restoring callee
     saved registers and emitting the return instruction.

     Using an epilogue pattern is generally preferred over defining
     'TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the
     epilogue.

     The 'epilogue' pattern is particularly useful for targets which
     perform instruction scheduling or which have delay slots for their
     return instruction.

'sibcall_epilogue'
     This pattern, if defined, emits RTL for exit from a function
     without the final branch back to the calling function.  This
     pattern will be emitted before any sibling call (aka tail call)
     sites.

     The 'sibcall_epilogue' pattern must not clobber any arguments used
     for parameter passing or any stack slots for arguments passed to
     the current function.

'trap'
     This pattern, if defined, signals an error, typically by causing
     some kind of signal to be raised.  Among other places, it is used
     by the Java front end to signal 'invalid array index' exceptions.

'ctrapMM4'
     Conditional trap instruction.  Operand 0 is a piece of RTL which
     performs a comparison, and operands 1 and 2 are the arms of the
     comparison.  Operand 3 is the trap code, an integer.

     A typical 'ctrap' pattern looks like

          (define_insn "ctrapsi4"
            [(trap_if (match_operator 0 "trap_operator"
                       [(match_operand 1 "register_operand")
                        (match_operand 2 "immediate_operand")])
                      (match_operand 3 "const_int_operand" "i"))]
            ""
            "...")

'prefetch'
     This pattern, if defined, emits code for a non-faulting data
     prefetch instruction.  Operand 0 is the address of the memory to
     prefetch.  Operand 1 is a constant 1 if the prefetch is preparing
     for a write to the memory address, or a constant 0 otherwise.
     Operand 2 is the expected degree of temporal locality of the data
     and is a value between 0 and 3, inclusive; 0 means that the data
     has no temporal locality, so it need not be left in the cache after
     the access; 3 means that the data has a high degree of temporal
     locality and should be left in all levels of cache possible; 1 and
     2 mean, respectively, a low or moderate degree of temporal
     locality.

     Targets that do not support write prefetches or locality hints can
     ignore the values of operands 1 and 2.

'blockage'
     This pattern defines a pseudo insn that prevents the instruction
     scheduler and other passes from moving instructions and using
     register equivalences across the boundary defined by the blockage
     insn.  This needs to be an UNSPEC_VOLATILE pattern or a volatile
     ASM.

'memory_barrier'
     If the target memory model is not fully synchronous, then this
     pattern should be defined to an instruction that orders both loads
     and stores before the instruction with respect to loads and stores
     after the instruction.  This pattern has no operands.

'sync_compare_and_swapMODE'
     This pattern, if defined, emits code for an atomic compare-and-swap
     operation.  Operand 1 is the memory on which the atomic operation
     is performed.  Operand 2 is the "old" value to be compared against
     the current contents of the memory location.  Operand 3 is the
     "new" value to store in the memory if the compare succeeds.
     Operand 0 is the result of the operation; it should contain the
     contents of the memory before the operation.  If the compare
     succeeds, this should obviously be a copy of operand 2.

     This pattern must show that both operand 0 and operand 1 are
     modified.

     This pattern must issue any memory barrier instructions such that
     all memory operations before the atomic operation occur before the
     atomic operation and all memory operations after the atomic
     operation occur after the atomic operation.

     For targets where the success or failure of the compare-and-swap
     operation is available via the status flags, it is possible to
     avoid a separate compare operation and issue the subsequent branch
     or store-flag operation immediately after the compare-and-swap.  To
     this end, GCC will look for a 'MODE_CC' set in the output of
     'sync_compare_and_swapMODE'; if the machine description includes
     such a set, the target should also define special 'cbranchcc4'
     and/or 'cstorecc4' instructions.  GCC will then be able to take the
     destination of the 'MODE_CC' set and pass it to the 'cbranchcc4' or
     'cstorecc4' pattern as the first operand of the comparison (the
     second will be '(const_int 0)').

     For targets where the operating system may provide support for this
     operation via library calls, the 'sync_compare_and_swap_optab' may
     be initialized to a function with the same interface as the
     '__sync_val_compare_and_swap_N' built-in.  If the entire set of
     __SYNC builtins are supported via library calls, the target can
     initialize all of the optabs at once with 'init_sync_libfuncs'.
     For the purposes of C++11 'std::atomic::is_lock_free', it is
     assumed that these library calls do _not_ use any kind of
     interruptable locking.

'sync_addMODE', 'sync_subMODE'
'sync_iorMODE', 'sync_andMODE'
'sync_xorMODE', 'sync_nandMODE'
     These patterns emit code for an atomic operation on memory.
     Operand 0 is the memory on which the atomic operation is performed.
     Operand 1 is the second operand to the binary operator.

     This pattern must issue any memory barrier instructions such that
     all memory operations before the atomic operation occur before the
     atomic operation and all memory operations after the atomic
     operation occur after the atomic operation.

     If these patterns are not defined, the operation will be
     constructed from a compare-and-swap operation, if defined.

'sync_old_addMODE', 'sync_old_subMODE'
'sync_old_iorMODE', 'sync_old_andMODE'
'sync_old_xorMODE', 'sync_old_nandMODE'
     These patterns emit code for an atomic operation on memory, and
     return the value that the memory contained before the operation.
     Operand 0 is the result value, operand 1 is the memory on which the
     atomic operation is performed, and operand 2 is the second operand
     to the binary operator.

     This pattern must issue any memory barrier instructions such that
     all memory operations before the atomic operation occur before the
     atomic operation and all memory operations after the atomic
     operation occur after the atomic operation.

     If these patterns are not defined, the operation will be
     constructed from a compare-and-swap operation, if defined.

'sync_new_addMODE', 'sync_new_subMODE'
'sync_new_iorMODE', 'sync_new_andMODE'
'sync_new_xorMODE', 'sync_new_nandMODE'
     These patterns are like their 'sync_old_OP' counterparts, except
     that they return the value that exists in the memory location after
     the operation, rather than before the operation.

'sync_lock_test_and_setMODE'
     This pattern takes two forms, based on the capabilities of the
     target.  In either case, operand 0 is the result of the operand,
     operand 1 is the memory on which the atomic operation is performed,
     and operand 2 is the value to set in the lock.

     In the ideal case, this operation is an atomic exchange operation,
     in which the previous value in memory operand is copied into the
     result operand, and the value operand is stored in the memory
     operand.

     For less capable targets, any value operand that is not the
     constant 1 should be rejected with 'FAIL'.  In this case the target
     may use an atomic test-and-set bit operation.  The result operand
     should contain 1 if the bit was previously set and 0 if the bit was
     previously clear.  The true contents of the memory operand are
     implementation defined.

     This pattern must issue any memory barrier instructions such that
     the pattern as a whole acts as an acquire barrier, that is all
     memory operations after the pattern do not occur until the lock is
     acquired.

     If this pattern is not defined, the operation will be constructed
     from a compare-and-swap operation, if defined.

'sync_lock_releaseMODE'
     This pattern, if defined, releases a lock set by
     'sync_lock_test_and_setMODE'.  Operand 0 is the memory that
     contains the lock; operand 1 is the value to store in the lock.

     If the target doesn't implement full semantics for
     'sync_lock_test_and_setMODE', any value operand which is not the
     constant 0 should be rejected with 'FAIL', and the true contents of
     the memory operand are implementation defined.

     This pattern must issue any memory barrier instructions such that
     the pattern as a whole acts as a release barrier, that is the lock
     is released only after all previous memory operations have
     completed.

     If this pattern is not defined, then a 'memory_barrier' pattern
     will be emitted, followed by a store of the value to the memory
     operand.

'atomic_compare_and_swapMODE'
     This pattern, if defined, emits code for an atomic compare-and-swap
     operation with memory model semantics.  Operand 2 is the memory on
     which the atomic operation is performed.  Operand 0 is an output
     operand which is set to true or false based on whether the
     operation succeeded.  Operand 1 is an output operand which is set
     to the contents of the memory before the operation was attempted.
     Operand 3 is the value that is expected to be in memory.  Operand 4
     is the value to put in memory if the expected value is found there.
     Operand 5 is set to 1 if this compare and swap is to be treated as
     a weak operation.  Operand 6 is the memory model to be used if the
     operation is a success.  Operand 7 is the memory model to be used
     if the operation fails.

     If memory referred to in operand 2 contains the value in operand 3,
     then operand 4 is stored in memory pointed to by operand 2 and
     fencing based on the memory model in operand 6 is issued.

     If memory referred to in operand 2 does not contain the value in
     operand 3, then fencing based on the memory model in operand 7 is
     issued.

     If a target does not support weak compare-and-swap operations, or
     the port elects not to implement weak operations, the argument in
     operand 5 can be ignored.  Note a strong implementation must be
     provided.

     If this pattern is not provided, the '__atomic_compare_exchange'
     built-in functions will utilize the legacy 'sync_compare_and_swap'
     pattern with an '__ATOMIC_SEQ_CST' memory model.

'atomic_loadMODE'
     This pattern implements an atomic load operation with memory model
     semantics.  Operand 1 is the memory address being loaded from.
     Operand 0 is the result of the load.  Operand 2 is the memory model
     to be used for the load operation.

     If not present, the '__atomic_load' built-in function will either
     resort to a normal load with memory barriers, or a compare-and-swap
     operation if a normal load would not be atomic.

'atomic_storeMODE'
     This pattern implements an atomic store operation with memory model
     semantics.  Operand 0 is the memory address being stored to.
     Operand 1 is the value to be written.  Operand 2 is the memory
     model to be used for the operation.

     If not present, the '__atomic_store' built-in function will attempt
     to perform a normal store and surround it with any required memory
     fences.  If the store would not be atomic, then an
     '__atomic_exchange' is attempted with the result being ignored.

'atomic_exchangeMODE'
     This pattern implements an atomic exchange operation with memory
     model semantics.  Operand 1 is the memory location the operation is
     performed on.  Operand 0 is an output operand which is set to the
     original value contained in the memory pointed to by operand 1.
     Operand 2 is the value to be stored.  Operand 3 is the memory model
     to be used.

     If this pattern is not present, the built-in function
     '__atomic_exchange' will attempt to preform the operation with a
     compare and swap loop.

'atomic_addMODE', 'atomic_subMODE'
'atomic_orMODE', 'atomic_andMODE'
'atomic_xorMODE', 'atomic_nandMODE'
     These patterns emit code for an atomic operation on memory with
     memory model semantics.  Operand 0 is the memory on which the
     atomic operation is performed.  Operand 1 is the second operand to
     the binary operator.  Operand 2 is the memory model to be used by
     the operation.

     If these patterns are not defined, attempts will be made to use
     legacy 'sync' patterns, or equivalent patterns which return a
     result.  If none of these are available a compare-and-swap loop
     will be used.

'atomic_fetch_addMODE', 'atomic_fetch_subMODE'
'atomic_fetch_orMODE', 'atomic_fetch_andMODE'
'atomic_fetch_xorMODE', 'atomic_fetch_nandMODE'
     These patterns emit code for an atomic operation on memory with
     memory model semantics, and return the original value.  Operand 0
     is an output operand which contains the value of the memory
     location before the operation was performed.  Operand 1 is the
     memory on which the atomic operation is performed.  Operand 2 is
     the second operand to the binary operator.  Operand 3 is the memory
     model to be used by the operation.

     If these patterns are not defined, attempts will be made to use
     legacy 'sync' patterns.  If none of these are available a
     compare-and-swap loop will be used.

'atomic_add_fetchMODE', 'atomic_sub_fetchMODE'
'atomic_or_fetchMODE', 'atomic_and_fetchMODE'
'atomic_xor_fetchMODE', 'atomic_nand_fetchMODE'
     These patterns emit code for an atomic operation on memory with
     memory model semantics and return the result after the operation is
     performed.  Operand 0 is an output operand which contains the value
     after the operation.  Operand 1 is the memory on which the atomic
     operation is performed.  Operand 2 is the second operand to the
     binary operator.  Operand 3 is the memory model to be used by the
     operation.

     If these patterns are not defined, attempts will be made to use
     legacy 'sync' patterns, or equivalent patterns which return the
     result before the operation followed by the arithmetic operation
     required to produce the result.  If none of these are available a
     compare-and-swap loop will be used.

'atomic_test_and_set'
     This pattern emits code for '__builtin_atomic_test_and_set'.
     Operand 0 is an output operand which is set to true if the previous
     previous contents of the byte was "set", and false otherwise.
     Operand 1 is the 'QImode' memory to be modified.  Operand 2 is the
     memory model to be used.

     The specific value that defines "set" is implementation defined,
     and is normally based on what is performed by the native atomic
     test and set instruction.

'mem_thread_fenceMODE'
     This pattern emits code required to implement a thread fence with
     memory model semantics.  Operand 0 is the memory model to be used.

     If this pattern is not specified, all memory models except
     '__ATOMIC_RELAXED' will result in issuing a 'sync_synchronize'
     barrier pattern.

'mem_signal_fenceMODE'
     This pattern emits code required to implement a signal fence with
     memory model semantics.  Operand 0 is the memory model to be used.

     This pattern should impact the compiler optimizers the same way
     that mem_signal_fence does, but it does not need to issue any
     barrier instructions.

     If this pattern is not specified, all memory models except
     '__ATOMIC_RELAXED' will result in issuing a 'sync_synchronize'
     barrier pattern.

'get_thread_pointerMODE'
'set_thread_pointerMODE'
     These patterns emit code that reads/sets the TLS thread pointer.
     Currently, these are only needed if the target needs to support the
     '__builtin_thread_pointer' and '__builtin_set_thread_pointer'
     builtins.

     The get/set patterns have a single output/input operand
     respectively, with MODE intended to be 'Pmode'.

'stack_protect_set'
     This pattern, if defined, moves a 'ptr_mode' value from the memory
     in operand 1 to the memory in operand 0 without leaving the value
     in a register afterward.  This is to avoid leaking the value some
     place that an attacker might use to rewrite the stack guard slot
     after having clobbered it.

     If this pattern is not defined, then a plain move pattern is
     generated.

'stack_protect_test'
     This pattern, if defined, compares a 'ptr_mode' value from the
     memory in operand 1 with the memory in operand 0 without leaving
     the value in a register afterward and branches to operand 2 if the
     values were equal.

     If this pattern is not defined, then a plain compare pattern and
     conditional branch pattern is used.

'clear_cache'
     This pattern, if defined, flushes the instruction cache for a
     region of memory.  The region is bounded to by the Pmode pointers
     in operand 0 inclusive and operand 1 exclusive.

     If this pattern is not defined, a call to the library function
     '__clear_cache' is used.


File: gccint.info,  Node: Pattern Ordering,  Next: Dependent Patterns,  Prev: Standard Names,  Up: Machine Desc

16.10 When the Order of Patterns Matters
========================================

Sometimes an insn can match more than one instruction pattern.  Then the
pattern that appears first in the machine description is the one used.
Therefore, more specific patterns (patterns that will match fewer
things) and faster instructions (those that will produce better code
when they do match) should usually go first in the description.

 In some cases the effect of ordering the patterns can be used to hide a
pattern when it is not valid.  For example, the 68000 has an instruction
for converting a fullword to floating point and another for converting a
byte to floating point.  An instruction converting an integer to
floating point could match either one.  We put the pattern to convert
the fullword first to make sure that one will be used rather than the
other.  (Otherwise a large integer might be generated as a single-byte
immediate quantity, which would not work.)  Instead of using this
pattern ordering it would be possible to make the pattern for
convert-a-byte smart enough to deal properly with any constant value.


File: gccint.info,  Node: Dependent Patterns,  Next: Jump Patterns,  Prev: Pattern Ordering,  Up: Machine Desc

16.11 Interdependence of Patterns
=================================

In some cases machines support instructions identical except for the
machine mode of one or more operands.  For example, there may be
"sign-extend halfword" and "sign-extend byte" instructions whose
patterns are

     (set (match_operand:SI 0 ...)
          (extend:SI (match_operand:HI 1 ...)))

     (set (match_operand:SI 0 ...)
          (extend:SI (match_operand:QI 1 ...)))

Constant integers do not specify a machine mode, so an instruction to
extend a constant value could match either pattern.  The pattern it
actually will match is the one that appears first in the file.  For
correct results, this must be the one for the widest possible mode
('HImode', here).  If the pattern matches the 'QImode' instruction, the
results will be incorrect if the constant value does not actually fit
that mode.

 Such instructions to extend constants are rarely generated because they
are optimized away, but they do occasionally happen in nonoptimized
compilations.

 If a constraint in a pattern allows a constant, the reload pass may
replace a register with a constant permitted by the constraint in some
cases.  Similarly for memory references.  Because of this substitution,
you should not provide separate patterns for increment and decrement
instructions.  Instead, they should be generated from the same pattern
that supports register-register add insns by examining the operands and
generating the appropriate machine instruction.


File: gccint.info,  Node: Jump Patterns,  Next: Looping Patterns,  Prev: Dependent Patterns,  Up: Machine Desc

16.12 Defining Jump Instruction Patterns
========================================

GCC does not assume anything about how the machine realizes jumps.  The
machine description should define a single pattern, usually a
'define_expand', which expands to all the required insns.

 Usually, this would be a comparison insn to set the condition code and
a separate branch insn testing the condition code and branching or not
according to its value.  For many machines, however, separating compares
and branches is limiting, which is why the more flexible approach with
one 'define_expand' is used in GCC. The machine description becomes
clearer for architectures that have compare-and-branch instructions but
no condition code.  It also works better when different sets of
comparison operators are supported by different kinds of conditional
branches (e.g.  integer vs.  floating-point), or by conditional branches
with respect to conditional stores.

 Two separate insns are always used if the machine description
represents a condition code register using the legacy RTL expression
'(cc0)', and on most machines that use a separate condition code
register (*note Condition Code::).  For machines that use '(cc0)', in
fact, the set and use of the condition code must be separate and
adjacent(1), thus allowing flags in 'cc_status' to be used (*note
Condition Code::) and so that the comparison and branch insns could be
located from each other by using the functions 'prev_cc0_setter' and
'next_cc0_user'.

 Even in this case having a single entry point for conditional branches
is advantageous, because it handles equally well the case where a single
comparison instruction records the results of both signed and unsigned
comparison of the given operands (with the branch insns coming in
distinct signed and unsigned flavors) as in the x86 or SPARC, and the
case where there are distinct signed and unsigned compare instructions
and only one set of conditional branch instructions as in the PowerPC.

   ---------- Footnotes ----------

   (1) 'note' insns can separate them, though.


File: gccint.info,  Node: Looping Patterns,  Next: Insn Canonicalizations,  Prev: Jump Patterns,  Up: Machine Desc

16.13 Defining Looping Instruction Patterns
===========================================

Some machines have special jump instructions that can be utilized to
make loops more efficient.  A common example is the 68000 'dbra'
instruction which performs a decrement of a register and a branch if the
result was greater than zero.  Other machines, in particular digital
signal processors (DSPs), have special block repeat instructions to
provide low-overhead loop support.  For example, the TI TMS320C3x/C4x
DSPs have a block repeat instruction that loads special registers to
mark the top and end of a loop and to count the number of loop
iterations.  This avoids the need for fetching and executing a
'dbra'-like instruction and avoids pipeline stalls associated with the
jump.

 GCC has three special named patterns to support low overhead looping.
They are 'decrement_and_branch_until_zero', 'doloop_begin', and
'doloop_end'.  The first pattern, 'decrement_and_branch_until_zero', is
not emitted during RTL generation but may be emitted during the
instruction combination phase.  This requires the assistance of the loop
optimizer, using information collected during strength reduction, to
reverse a loop to count down to zero.  Some targets also require the
loop optimizer to add a 'REG_NONNEG' note to indicate that the iteration
count is always positive.  This is needed if the target performs a
signed loop termination test.  For example, the 68000 uses a pattern
similar to the following for its 'dbra' instruction:

     (define_insn "decrement_and_branch_until_zero"
       [(set (pc)
             (if_then_else
               (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
                            (const_int -1))
                   (const_int 0))
               (label_ref (match_operand 1 "" ""))
               (pc)))
        (set (match_dup 0)
             (plus:SI (match_dup 0)
                      (const_int -1)))]
       "find_reg_note (insn, REG_NONNEG, 0)"
       "...")

 Note that since the insn is both a jump insn and has an output, it must
deal with its own reloads, hence the 'm' constraints.  Also note that
since this insn is generated by the instruction combination phase
combining two sequential insns together into an implicit parallel insn,
the iteration counter needs to be biased by the same amount as the
decrement operation, in this case -1.  Note that the following similar
pattern will not be matched by the combiner.

     (define_insn "decrement_and_branch_until_zero"
       [(set (pc)
             (if_then_else
               (ge (match_operand:SI 0 "general_operand" "+d*am")
                   (const_int 1))
               (label_ref (match_operand 1 "" ""))
               (pc)))
        (set (match_dup 0)
             (plus:SI (match_dup 0)
                      (const_int -1)))]
       "find_reg_note (insn, REG_NONNEG, 0)"
       "...")

 The other two special looping patterns, 'doloop_begin' and
'doloop_end', are emitted by the loop optimizer for certain well-behaved
loops with a finite number of loop iterations using information
collected during strength reduction.

 The 'doloop_end' pattern describes the actual looping instruction (or
the implicit looping operation) and the 'doloop_begin' pattern is an
optional companion pattern that can be used for initialization needed
for some low-overhead looping instructions.

 Note that some machines require the actual looping instruction to be
emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs).  Emitting
the true RTL for a looping instruction at the top of the loop can cause
problems with flow analysis.  So instead, a dummy 'doloop' insn is
emitted at the end of the loop.  The machine dependent reorg pass checks
for the presence of this 'doloop' insn and then searches back to the top
of the loop, where it inserts the true looping insn (provided there are
no instructions in the loop which would cause problems).  Any additional
labels can be emitted at this point.  In addition, if the desired
special iteration counter register was not allocated, this machine
dependent reorg pass could emit a traditional compare and jump
instruction pair.

 The essential difference between the 'decrement_and_branch_until_zero'
and the 'doloop_end' patterns is that the loop optimizer allocates an
additional pseudo register for the latter as an iteration counter.  This
pseudo register cannot be used within the loop (i.e., general induction
variables cannot be derived from it), however, in many cases the loop
induction variable may become redundant and removed by the flow pass.


File: gccint.info,  Node: Insn Canonicalizations,  Next: Expander Definitions,  Prev: Looping Patterns,  Up: Machine Desc

16.14 Canonicalization of Instructions
======================================

There are often cases where multiple RTL expressions could represent an
operation performed by a single machine instruction.  This situation is
most commonly encountered with logical, branch, and multiply-accumulate
instructions.  In such cases, the compiler attempts to convert these
multiple RTL expressions into a single canonical form to reduce the
number of insn patterns required.

 In addition to algebraic simplifications, following canonicalizations
are performed:

   * For commutative and comparison operators, a constant is always made
     the second operand.  If a machine only supports a constant as the
     second operand, only patterns that match a constant in the second
     operand need be supplied.

   * For associative operators, a sequence of operators will always
     chain to the left; for instance, only the left operand of an
     integer 'plus' can itself be a 'plus'.  'and', 'ior', 'xor',
     'plus', 'mult', 'smin', 'smax', 'umin', and 'umax' are associative
     when applied to integers, and sometimes to floating-point.

   * For these operators, if only one operand is a 'neg', 'not', 'mult',
     'plus', or 'minus' expression, it will be the first operand.

   * In combinations of 'neg', 'mult', 'plus', and 'minus', the 'neg'
     operations (if any) will be moved inside the operations as far as
     possible.  For instance, '(neg (mult A B))' is canonicalized as
     '(mult (neg A) B)', but '(plus (mult (neg B) C) A)' is
     canonicalized as '(minus A (mult B C))'.

   * For the 'compare' operator, a constant is always the second operand
     if the first argument is a condition code register or '(cc0)'.

   * An operand of 'neg', 'not', 'mult', 'plus', or 'minus' is made the
     first operand under the same conditions as above.

   * '(ltu (plus A B) B)' is converted to '(ltu (plus A B) A)'.
     Likewise with 'geu' instead of 'ltu'.

   * '(minus X (const_int N))' is converted to '(plus X (const_int
     -N))'.

   * Within address computations (i.e., inside 'mem'), a left shift is
     converted into the appropriate multiplication by a power of two.

   * De Morgan's Law is used to move bitwise negation inside a bitwise
     logical-and or logical-or operation.  If this results in only one
     operand being a 'not' expression, it will be the first one.

     A machine that has an instruction that performs a bitwise
     logical-and of one operand with the bitwise negation of the other
     should specify the pattern for that instruction as

          (define_insn ""
            [(set (match_operand:M 0 ...)
                  (and:M (not:M (match_operand:M 1 ...))
                               (match_operand:M 2 ...)))]
            "..."
            "...")

     Similarly, a pattern for a "NAND" instruction should be written

          (define_insn ""
            [(set (match_operand:M 0 ...)
                  (ior:M (not:M (match_operand:M 1 ...))
                               (not:M (match_operand:M 2 ...))))]
            "..."
            "...")

     In both cases, it is not necessary to include patterns for the many
     logically equivalent RTL expressions.

   * The only possible RTL expressions involving both bitwise
     exclusive-or and bitwise negation are '(xor:M X Y)' and '(not:M
     (xor:M X Y))'.

   * The sum of three items, one of which is a constant, will only
     appear in the form

          (plus:M (plus:M X Y) CONSTANT)

   * Equality comparisons of a group of bits (usually a single bit) with
     zero will be written using 'zero_extract' rather than the
     equivalent 'and' or 'sign_extract' operations.

   * '(sign_extend:M1 (mult:M2 (sign_extend:M2 X) (sign_extend:M2 Y)))'
     is converted to '(mult:M1 (sign_extend:M1 X) (sign_extend:M1 Y))',
     and likewise for 'zero_extend'.

   * '(sign_extend:M1 (mult:M2 (ashiftrt:M2 X S) (sign_extend:M2 Y)))'
     is converted to '(mult:M1 (sign_extend:M1 (ashiftrt:M2 X S))
     (sign_extend:M1 Y))', and likewise for patterns using 'zero_extend'
     and 'lshiftrt'.  If the second operand of 'mult' is also a shift,
     then that is extended also.  This transformation is only applied
     when it can be proven that the original operation had sufficient
     precision to prevent overflow.

 Further canonicalization rules are defined in the function
'commutative_operand_precedence' in 'gcc/rtlanal.c'.


File: gccint.info,  Node: Expander Definitions,  Next: Insn Splitting,  Prev: Insn Canonicalizations,  Up: Machine Desc

16.15 Defining RTL Sequences for Code Generation
================================================

On some target machines, some standard pattern names for RTL generation
cannot be handled with single insn, but a sequence of RTL insns can
represent them.  For these target machines, you can write a
'define_expand' to specify how to generate the sequence of RTL.

 A 'define_expand' is an RTL expression that looks almost like a
'define_insn'; but, unlike the latter, a 'define_expand' is used only
for RTL generation and it can produce more than one RTL insn.

 A 'define_expand' RTX has four operands:

   * The name.  Each 'define_expand' must have a name, since the only
     use for it is to refer to it by name.

   * The RTL template.  This is a vector of RTL expressions representing
     a sequence of separate instructions.  Unlike 'define_insn', there
     is no implicit surrounding 'PARALLEL'.

   * The condition, a string containing a C expression.  This expression
     is used to express how the availability of this pattern depends on
     subclasses of target machine, selected by command-line options when
     GCC is run.  This is just like the condition of a 'define_insn'
     that has a standard name.  Therefore, the condition (if present)
     may not depend on the data in the insn being matched, but only the
     target-machine-type flags.  The compiler needs to test these
     conditions during initialization in order to learn exactly which
     named instructions are available in a particular run.

   * The preparation statements, a string containing zero or more C
     statements which are to be executed before RTL code is generated
     from the RTL template.

     Usually these statements prepare temporary registers for use as
     internal operands in the RTL template, but they can also generate
     RTL insns directly by calling routines such as 'emit_insn', etc.
     Any such insns precede the ones that come from the RTL template.

   * Optionally, a vector containing the values of attributes.  *Note
     Insn Attributes::.

 Every RTL insn emitted by a 'define_expand' must match some
'define_insn' in the machine description.  Otherwise, the compiler will
crash when trying to generate code for the insn or trying to optimize
it.

 The RTL template, in addition to controlling generation of RTL insns,
also describes the operands that need to be specified when this pattern
is used.  In particular, it gives a predicate for each operand.

 A true operand, which needs to be specified in order to generate RTL
from the pattern, should be described with a 'match_operand' in its
first occurrence in the RTL template.  This enters information on the
operand's predicate into the tables that record such things.  GCC uses
the information to preload the operand into a register if that is
required for valid RTL code.  If the operand is referred to more than
once, subsequent references should use 'match_dup'.

 The RTL template may also refer to internal "operands" which are
temporary registers or labels used only within the sequence made by the
'define_expand'.  Internal operands are substituted into the RTL
template with 'match_dup', never with 'match_operand'.  The values of
the internal operands are not passed in as arguments by the compiler
when it requests use of this pattern.  Instead, they are computed within
the pattern, in the preparation statements.  These statements compute
the values and store them into the appropriate elements of 'operands' so
that 'match_dup' can find them.

 There are two special macros defined for use in the preparation
statements: 'DONE' and 'FAIL'.  Use them with a following semicolon, as
a statement.

'DONE'
     Use the 'DONE' macro to end RTL generation for the pattern.  The
     only RTL insns resulting from the pattern on this occasion will be
     those already emitted by explicit calls to 'emit_insn' within the
     preparation statements; the RTL template will not be generated.

'FAIL'
     Make the pattern fail on this occasion.  When a pattern fails, it
     means that the pattern was not truly available.  The calling
     routines in the compiler will try other strategies for code
     generation using other patterns.

     Failure is currently supported only for binary (addition,
     multiplication, shifting, etc.)  and bit-field ('extv', 'extzv',
     and 'insv') operations.

 If the preparation falls through (invokes neither 'DONE' nor 'FAIL'),
then the 'define_expand' acts like a 'define_insn' in that the RTL
template is used to generate the insn.

 The RTL template is not used for matching, only for generating the
initial insn list.  If the preparation statement always invokes 'DONE'
or 'FAIL', the RTL template may be reduced to a simple list of operands,
such as this example:

     (define_expand "addsi3"
       [(match_operand:SI 0 "register_operand" "")
        (match_operand:SI 1 "register_operand" "")
        (match_operand:SI 2 "register_operand" "")]
       ""
       "
     {
       handle_add (operands[0], operands[1], operands[2]);
       DONE;
     }")

 Here is an example, the definition of left-shift for the SPUR chip:

     (define_expand "ashlsi3"
       [(set (match_operand:SI 0 "register_operand" "")
             (ashift:SI
               (match_operand:SI 1 "register_operand" "")
               (match_operand:SI 2 "nonmemory_operand" "")))]
       ""
       "

     {
       if (GET_CODE (operands[2]) != CONST_INT
           || (unsigned) INTVAL (operands[2]) > 3)
         FAIL;
     }")

This example uses 'define_expand' so that it can generate an RTL insn
for shifting when the shift-count is in the supported range of 0 to 3
but fail in other cases where machine insns aren't available.  When it
fails, the compiler tries another strategy using different patterns
(such as, a library call).

 If the compiler were able to handle nontrivial condition-strings in
patterns with names, then it would be possible to use a 'define_insn' in
that case.  Here is another case (zero-extension on the 68000) which
makes more use of the power of 'define_expand':

     (define_expand "zero_extendhisi2"
       [(set (match_operand:SI 0 "general_operand" "")
             (const_int 0))
        (set (strict_low_part
               (subreg:HI
                 (match_dup 0)
                 0))
             (match_operand:HI 1 "general_operand" ""))]
       ""
       "operands[1] = make_safe_from (operands[1], operands[0]);")

Here two RTL insns are generated, one to clear the entire output operand
and the other to copy the input operand into its low half.  This
sequence is incorrect if the input operand refers to [the old value of]
the output operand, so the preparation statement makes sure this isn't
so.  The function 'make_safe_from' copies the 'operands[1]' into a
temporary register if it refers to 'operands[0]'.  It does this by
emitting another RTL insn.

 Finally, a third example shows the use of an internal operand.
Zero-extension on the SPUR chip is done by 'and'-ing the result against
a halfword mask.  But this mask cannot be represented by a 'const_int'
because the constant value is too large to be legitimate on this
machine.  So it must be copied into a register with 'force_reg' and then
the register used in the 'and'.

     (define_expand "zero_extendhisi2"
       [(set (match_operand:SI 0 "register_operand" "")
             (and:SI (subreg:SI
                       (match_operand:HI 1 "register_operand" "")
                       0)
                     (match_dup 2)))]
       ""
       "operands[2]
          = force_reg (SImode, GEN_INT (65535)); ")

 _Note:_ If the 'define_expand' is used to serve a standard binary or
unary arithmetic operation or a bit-field operation, then the last insn
it generates must not be a 'code_label', 'barrier' or 'note'.  It must
be an 'insn', 'jump_insn' or 'call_insn'.  If you don't need a real insn
at the end, emit an insn to copy the result of the operation into
itself.  Such an insn will generate no code, but it can avoid problems
in the compiler.


File: gccint.info,  Node: Insn Splitting,  Next: Including Patterns,  Prev: Expander Definitions,  Up: Machine Desc

16.16 Defining How to Split Instructions
========================================

There are two cases where you should specify how to split a pattern into
multiple insns.  On machines that have instructions requiring delay
slots (*note Delay Slots::) or that have instructions whose output is
not available for multiple cycles (*note Processor pipeline
description::), the compiler phases that optimize these cases need to be
able to move insns into one-instruction delay slots.  However, some
insns may generate more than one machine instruction.  These insns
cannot be placed into a delay slot.

 Often you can rewrite the single insn as a list of individual insns,
each corresponding to one machine instruction.  The disadvantage of
doing so is that it will cause the compilation to be slower and require
more space.  If the resulting insns are too complex, it may also
suppress some optimizations.  The compiler splits the insn if there is a
reason to believe that it might improve instruction or delay slot
scheduling.

 The insn combiner phase also splits putative insns.  If three insns are
merged into one insn with a complex expression that cannot be matched by
some 'define_insn' pattern, the combiner phase attempts to split the
complex pattern into two insns that are recognized.  Usually it can
break the complex pattern into two patterns by splitting out some
subexpression.  However, in some other cases, such as performing an
addition of a large constant in two insns on a RISC machine, the way to
split the addition into two insns is machine-dependent.

 The 'define_split' definition tells the compiler how to split a complex
insn into several simpler insns.  It looks like this:

     (define_split
       [INSN-PATTERN]
       "CONDITION"
       [NEW-INSN-PATTERN-1
        NEW-INSN-PATTERN-2
        ...]
       "PREPARATION-STATEMENTS")

 INSN-PATTERN is a pattern that needs to be split and CONDITION is the
final condition to be tested, as in a 'define_insn'.  When an insn
matching INSN-PATTERN and satisfying CONDITION is found, it is replaced
in the insn list with the insns given by NEW-INSN-PATTERN-1,
NEW-INSN-PATTERN-2, etc.

 The PREPARATION-STATEMENTS are similar to those statements that are
specified for 'define_expand' (*note Expander Definitions::) and are
executed before the new RTL is generated to prepare for the generated
code or emit some insns whose pattern is not fixed.  Unlike those in
'define_expand', however, these statements must not generate any new
pseudo-registers.  Once reload has completed, they also must not
allocate any space in the stack frame.

 Patterns are matched against INSN-PATTERN in two different
circumstances.  If an insn needs to be split for delay slot scheduling
or insn scheduling, the insn is already known to be valid, which means
that it must have been matched by some 'define_insn' and, if
'reload_completed' is nonzero, is known to satisfy the constraints of
that 'define_insn'.  In that case, the new insn patterns must also be
insns that are matched by some 'define_insn' and, if 'reload_completed'
is nonzero, must also satisfy the constraints of those definitions.

 As an example of this usage of 'define_split', consider the following
example from 'a29k.md', which splits a 'sign_extend' from 'HImode' to
'SImode' into a pair of shift insns:

     (define_split
       [(set (match_operand:SI 0 "gen_reg_operand" "")
             (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
       ""
       [(set (match_dup 0)
             (ashift:SI (match_dup 1)
                        (const_int 16)))
        (set (match_dup 0)
             (ashiftrt:SI (match_dup 0)
                          (const_int 16)))]
       "
     { operands[1] = gen_lowpart (SImode, operands[1]); }")

 When the combiner phase tries to split an insn pattern, it is always
the case that the pattern is _not_ matched by any 'define_insn'.  The
combiner pass first tries to split a single 'set' expression and then
the same 'set' expression inside a 'parallel', but followed by a
'clobber' of a pseudo-reg to use as a scratch register.  In these cases,
the combiner expects exactly two new insn patterns to be generated.  It
will verify that these patterns match some 'define_insn' definitions, so
you need not do this test in the 'define_split' (of course, there is no
point in writing a 'define_split' that will never produce insns that
match).

 Here is an example of this use of 'define_split', taken from
'rs6000.md':

     (define_split
       [(set (match_operand:SI 0 "gen_reg_operand" "")
             (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
                      (match_operand:SI 2 "non_add_cint_operand" "")))]
       ""
       [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
        (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
     "
     {
       int low = INTVAL (operands[2]) & 0xffff;
       int high = (unsigned) INTVAL (operands[2]) >> 16;

       if (low & 0x8000)
         high++, low |= 0xffff0000;

       operands[3] = GEN_INT (high << 16);
       operands[4] = GEN_INT (low);
     }")

 Here the predicate 'non_add_cint_operand' matches any 'const_int' that
is _not_ a valid operand of a single add insn.  The add with the smaller
displacement is written so that it can be substituted into the address
of a subsequent operation.

 An example that uses a scratch register, from the same file, generates
an equality comparison of a register and a large constant:

     (define_split
       [(set (match_operand:CC 0 "cc_reg_operand" "")
             (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
                         (match_operand:SI 2 "non_short_cint_operand" "")))
        (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
       "find_single_use (operands[0], insn, 0)
        && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
            || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
       [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
        (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
       "
     {
       /* Get the constant we are comparing against, C, and see what it
          looks like sign-extended to 16 bits.  Then see what constant
          could be XOR'ed with C to get the sign-extended value.  */

       int c = INTVAL (operands[2]);
       int sextc = (c << 16) >> 16;
       int xorv = c ^ sextc;

       operands[4] = GEN_INT (xorv);
       operands[5] = GEN_INT (sextc);
     }")

 To avoid confusion, don't write a single 'define_split' that accepts
some insns that match some 'define_insn' as well as some insns that
don't.  Instead, write two separate 'define_split' definitions, one for
the insns that are valid and one for the insns that are not valid.

 The splitter is allowed to split jump instructions into sequence of
jumps or create new jumps in while splitting non-jump instructions.  As
the central flowgraph and branch prediction information needs to be
updated, several restriction apply.

 Splitting of jump instruction into sequence that over by another jump
instruction is always valid, as compiler expect identical behavior of
new jump.  When new sequence contains multiple jump instructions or new
labels, more assistance is needed.  Splitter is required to create only
unconditional jumps, or simple conditional jump instructions.
Additionally it must attach a 'REG_BR_PROB' note to each conditional
jump.  A global variable 'split_branch_probability' holds the
probability of the original branch in case it was a simple conditional
jump, -1 otherwise.  To simplify recomputing of edge frequencies, the
new sequence is required to have only forward jumps to the newly created
labels.

 For the common case where the pattern of a define_split exactly matches
the pattern of a define_insn, use 'define_insn_and_split'.  It looks
like this:

     (define_insn_and_split
       [INSN-PATTERN]
       "CONDITION"
       "OUTPUT-TEMPLATE"
       "SPLIT-CONDITION"
       [NEW-INSN-PATTERN-1
        NEW-INSN-PATTERN-2
        ...]
       "PREPARATION-STATEMENTS"
       [INSN-ATTRIBUTES])


 INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used
as in 'define_insn'.  The NEW-INSN-PATTERN vector and the
PREPARATION-STATEMENTS are used as in a 'define_split'.  The
SPLIT-CONDITION is also used as in 'define_split', with the additional
behavior that if the condition starts with '&&', the condition used for
the split will be the constructed as a logical "and" of the split
condition with the insn condition.  For example, from i386.md:

     (define_insn_and_split "zero_extendhisi2_and"
       [(set (match_operand:SI 0 "register_operand" "=r")
          (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
        (clobber (reg:CC 17))]
       "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
       "#"
       "&& reload_completed"
       [(parallel [(set (match_dup 0)
                        (and:SI (match_dup 0) (const_int 65535)))
                   (clobber (reg:CC 17))])]
       ""
       [(set_attr "type" "alu1")])


 In this case, the actual split condition will be
'TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'.

 The 'define_insn_and_split' construction provides exactly the same
functionality as two separate 'define_insn' and 'define_split' patterns.
It exists for compactness, and as a maintenance tool to prevent having
to ensure the two patterns' templates match.


File: gccint.info,  Node: Including Patterns,  Next: Peephole Definitions,  Prev: Insn Splitting,  Up: Machine Desc

16.17 Including Patterns in Machine Descriptions.
=================================================

The 'include' pattern tells the compiler tools where to look for
patterns that are in files other than in the file '.md'.  This is used
only at build time and there is no preprocessing allowed.

 It looks like:


     (include
       PATHNAME)

 For example:


     (include "filestuff")


 Where PATHNAME is a string that specifies the location of the file,
specifies the include file to be in 'gcc/config/target/filestuff'.  The
directory 'gcc/config/target' is regarded as the default directory.

 Machine descriptions may be split up into smaller more manageable
subsections and placed into subdirectories.

 By specifying:


     (include "BOGUS/filestuff")


 the include file is specified to be in
'gcc/config/TARGET/BOGUS/filestuff'.

 Specifying an absolute path for the include file such as;

     (include "/u2/BOGUS/filestuff")

 is permitted but is not encouraged.

16.17.1 RTL Generation Tool Options for Directory Search
--------------------------------------------------------

The '-IDIR' option specifies directories to search for machine
descriptions.  For example:


     genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md


 Add the directory DIR to the head of the list of directories to be
searched for header files.  This can be used to override a system
machine definition file, substituting your own version, since these
directories are searched before the default machine description file
directories.  If you use more than one '-I' option, the directories are
scanned in left-to-right order; the standard default directory come
after.


File: gccint.info,  Node: Peephole Definitions,  Next: Insn Attributes,  Prev: Including Patterns,  Up: Machine Desc

16.18 Machine-Specific Peephole Optimizers
==========================================

In addition to instruction patterns the 'md' file may contain
definitions of machine-specific peephole optimizations.

 The combiner does not notice certain peephole optimizations when the
data flow in the program does not suggest that it should try them.  For
example, sometimes two consecutive insns related in purpose can be
combined even though the second one does not appear to use a register
computed in the first one.  A machine-specific peephole optimizer can
detect such opportunities.

 There are two forms of peephole definitions that may be used.  The
original 'define_peephole' is run at assembly output time to match insns
and substitute assembly text.  Use of 'define_peephole' is deprecated.

 A newer 'define_peephole2' matches insns and substitutes new insns.
The 'peephole2' pass is run after register allocation but before
scheduling, which may result in much better code for targets that do
scheduling.

* Menu:

* define_peephole::     RTL to Text Peephole Optimizers
* define_peephole2::    RTL to RTL Peephole Optimizers


File: gccint.info,  Node: define_peephole,  Next: define_peephole2,  Up: Peephole Definitions

16.18.1 RTL to Text Peephole Optimizers
---------------------------------------

A definition looks like this:

     (define_peephole
       [INSN-PATTERN-1
        INSN-PATTERN-2
        ...]
       "CONDITION"
       "TEMPLATE"
       "OPTIONAL-INSN-ATTRIBUTES")

The last string operand may be omitted if you are not using any
machine-specific information in this machine description.  If present,
it must obey the same rules as in a 'define_insn'.

 In this skeleton, INSN-PATTERN-1 and so on are patterns to match
consecutive insns.  The optimization applies to a sequence of insns when
INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next,
and so on.

 Each of the insns matched by a peephole must also match a
'define_insn'.  Peepholes are checked only at the last stage just before
code generation, and only optionally.  Therefore, any insn which would
match a peephole but no 'define_insn' will cause a crash in code
generation in an unoptimized compilation, or at various optimization
stages.

 The operands of the insns are matched with 'match_operands',
'match_operator', and 'match_dup', as usual.  What is not usual is that
the operand numbers apply to all the insn patterns in the definition.
So, you can check for identical operands in two insns by using
'match_operand' in one insn and 'match_dup' in the other.

 The operand constraints used in 'match_operand' patterns do not have
any direct effect on the applicability of the peephole, but they will be
validated afterward, so make sure your constraints are general enough to
apply whenever the peephole matches.  If the peephole matches but the
constraints are not satisfied, the compiler will crash.

 It is safe to omit constraints in all the operands of the peephole; or
you can write constraints which serve as a double-check on the criteria
previously tested.

 Once a sequence of insns matches the patterns, the CONDITION is
checked.  This is a C expression which makes the final decision whether
to perform the optimization (we do so if the expression is nonzero).  If
CONDITION is omitted (in other words, the string is empty) then the
optimization is applied to every sequence of insns that matches the
patterns.

 The defined peephole optimizations are applied after register
allocation is complete.  Therefore, the peephole definition can check
which operands have ended up in which kinds of registers, just by
looking at the operands.

 The way to refer to the operands in CONDITION is to write 'operands[I]'
for operand number I (as matched by '(match_operand I ...)').  Use the
variable 'insn' to refer to the last of the insns being matched; use
'prev_active_insn' to find the preceding insns.

 When optimizing computations with intermediate results, you can use
CONDITION to match only when the intermediate results are not used
elsewhere.  Use the C expression 'dead_or_set_p (INSN, OP)', where INSN
is the insn in which you expect the value to be used for the last time
(from the value of 'insn', together with use of 'prev_nonnote_insn'),
and OP is the intermediate value (from 'operands[I]').

 Applying the optimization means replacing the sequence of insns with
one new insn.  The TEMPLATE controls ultimate output of assembler code
for this combined insn.  It works exactly like the template of a
'define_insn'.  Operand numbers in this template are the same ones used
in matching the original sequence of insns.

 The result of a defined peephole optimizer does not need to match any
of the insn patterns in the machine description; it does not even have
an opportunity to match them.  The peephole optimizer definition itself
serves as the insn pattern to control how the insn is output.

 Defined peephole optimizers are run as assembler code is being output,
so the insns they produce are never combined or rearranged in any way.

 Here is an example, taken from the 68000 machine description:

     (define_peephole
       [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
        (set (match_operand:DF 0 "register_operand" "=f")
             (match_operand:DF 1 "register_operand" "ad"))]
       "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
     {
       rtx xoperands[2];
       xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
     #ifdef MOTOROLA
       output_asm_insn ("move.l %1,(sp)", xoperands);
       output_asm_insn ("move.l %1,-(sp)", operands);
       return "fmove.d (sp)+,%0";
     #else
       output_asm_insn ("movel %1,sp@", xoperands);
       output_asm_insn ("movel %1,sp@-", operands);
       return "fmoved sp@+,%0";
     #endif
     })

 The effect of this optimization is to change

     jbsr _foobar
     addql #4,sp
     movel d1,sp@-
     movel d0,sp@-
     fmoved sp@+,fp0

into

     jbsr _foobar
     movel d1,sp@
     movel d0,sp@-
     fmoved sp@+,fp0

 INSN-PATTERN-1 and so on look _almost_ like the second operand of
'define_insn'.  There is one important difference: the second operand of
'define_insn' consists of one or more RTX's enclosed in square brackets.
Usually, there is only one: then the same action can be written as an
element of a 'define_peephole'.  But when there are multiple actions in
a 'define_insn', they are implicitly enclosed in a 'parallel'.  Then you
must explicitly write the 'parallel', and the square brackets within it,
in the 'define_peephole'.  Thus, if an insn pattern looks like this,

     (define_insn "divmodsi4"
       [(set (match_operand:SI 0 "general_operand" "=d")
             (div:SI (match_operand:SI 1 "general_operand" "0")
                     (match_operand:SI 2 "general_operand" "dmsK")))
        (set (match_operand:SI 3 "general_operand" "=d")
             (mod:SI (match_dup 1) (match_dup 2)))]
       "TARGET_68020"
       "divsl%.l %2,%3:%0")

then the way to mention this insn in a peephole is as follows:

     (define_peephole
       [...
        (parallel
         [(set (match_operand:SI 0 "general_operand" "=d")
               (div:SI (match_operand:SI 1 "general_operand" "0")
                       (match_operand:SI 2 "general_operand" "dmsK")))
          (set (match_operand:SI 3 "general_operand" "=d")
               (mod:SI (match_dup 1) (match_dup 2)))])
        ...]
       ...)


File: gccint.info,  Node: define_peephole2,  Prev: define_peephole,  Up: Peephole Definitions

16.18.2 RTL to RTL Peephole Optimizers
--------------------------------------

The 'define_peephole2' definition tells the compiler how to substitute
one sequence of instructions for another sequence, what additional
scratch registers may be needed and what their lifetimes must be.

     (define_peephole2
       [INSN-PATTERN-1
        INSN-PATTERN-2
        ...]
       "CONDITION"
       [NEW-INSN-PATTERN-1
        NEW-INSN-PATTERN-2
        ...]
       "PREPARATION-STATEMENTS")

 The definition is almost identical to 'define_split' (*note Insn
Splitting::) except that the pattern to match is not a single
instruction, but a sequence of instructions.

 It is possible to request additional scratch registers for use in the
output template.  If appropriate registers are not free, the pattern
will simply not match.

 Scratch registers are requested with a 'match_scratch' pattern at the
top level of the input pattern.  The allocated register (initially) will
be dead at the point requested within the original sequence.  If the
scratch is used at more than a single point, a 'match_dup' pattern at
the top level of the input pattern marks the last position in the input
sequence at which the register must be available.

 Here is an example from the IA-32 machine description:

     (define_peephole2
       [(match_scratch:SI 2 "r")
        (parallel [(set (match_operand:SI 0 "register_operand" "")
                        (match_operator:SI 3 "arith_or_logical_operator"
                          [(match_dup 0)
                           (match_operand:SI 1 "memory_operand" "")]))
                   (clobber (reg:CC 17))])]
       "! optimize_size && ! TARGET_READ_MODIFY"
       [(set (match_dup 2) (match_dup 1))
        (parallel [(set (match_dup 0)
                        (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
                   (clobber (reg:CC 17))])]
       "")

This pattern tries to split a load from its use in the hopes that we'll
be able to schedule around the memory load latency.  It allocates a
single 'SImode' register of class 'GENERAL_REGS' ('"r"') that needs to
be live only at the point just before the arithmetic.

 A real example requiring extended scratch lifetimes is harder to come
by, so here's a silly made-up example:

     (define_peephole2
       [(match_scratch:SI 4 "r")
        (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
        (set (match_operand:SI 2 "" "") (match_dup 1))
        (match_dup 4)
        (set (match_operand:SI 3 "" "") (match_dup 1))]
       "/* determine 1 does not overlap 0 and 2 */"
       [(set (match_dup 4) (match_dup 1))
        (set (match_dup 0) (match_dup 4))
        (set (match_dup 2) (match_dup 4))
        (set (match_dup 3) (match_dup 4))]
       "")

If we had not added the '(match_dup 4)' in the middle of the input
sequence, it might have been the case that the register we chose at the
beginning of the sequence is killed by the first or second 'set'.


File: gccint.info,  Node: Insn Attributes,  Next: Conditional Execution,  Prev: Peephole Definitions,  Up: Machine Desc

16.19 Instruction Attributes
============================

In addition to describing the instruction supported by the target
machine, the 'md' file also defines a group of "attributes" and a set of
values for each.  Every generated insn is assigned a value for each
attribute.  One possible attribute would be the effect that the insn has
on the machine's condition code.  This attribute can then be used by
'NOTICE_UPDATE_CC' to track the condition codes.

* Menu:

* Defining Attributes:: Specifying attributes and their values.
* Expressions::         Valid expressions for attribute values.
* Tagging Insns::       Assigning attribute values to insns.
* Attr Example::        An example of assigning attributes.
* Insn Lengths::        Computing the length of insns.
* Constant Attributes:: Defining attributes that are constant.
* Mnemonic Attribute::  Obtain the instruction mnemonic as attribute value.
* Delay Slots::         Defining delay slots required for a machine.
* Processor pipeline description:: Specifying information for insn scheduling.


File: gccint.info,  Node: Defining Attributes,  Next: Expressions,  Up: Insn Attributes

16.19.1 Defining Attributes and their Values
--------------------------------------------

The 'define_attr' expression is used to define each attribute required
by the target machine.  It looks like:

     (define_attr NAME LIST-OF-VALUES DEFAULT)

 NAME is a string specifying the name of the attribute being defined.
Some attributes are used in a special way by the rest of the compiler.
The 'enabled' attribute can be used to conditionally enable or disable
insn alternatives (*note Disable Insn Alternatives::).  The 'predicable'
attribute, together with a suitable 'define_cond_exec' (*note
Conditional Execution::), can be used to automatically generate
conditional variants of instruction patterns.  The 'mnemonic' attribute
can be used to check for the instruction mnemonic (*note Mnemonic
Attribute::).  The compiler internally uses the names 'ce_enabled' and
'nonce_enabled', so they should not be used elsewhere as alternative
names.

 LIST-OF-VALUES is either a string that specifies a comma-separated list
of values that can be assigned to the attribute, or a null string to
indicate that the attribute takes numeric values.

 DEFAULT is an attribute expression that gives the value of this
attribute for insns that match patterns whose definition does not
include an explicit value for this attribute.  *Note Attr Example::, for
more information on the handling of defaults.  *Note Constant
Attributes::, for information on attributes that do not depend on any
particular insn.

 For each defined attribute, a number of definitions are written to the
'insn-attr.h' file.  For cases where an explicit set of values is
specified for an attribute, the following are defined:

   * A '#define' is written for the symbol 'HAVE_ATTR_NAME'.

   * An enumerated class is defined for 'attr_NAME' with elements of the
     form 'UPPER-NAME_UPPER-VALUE' where the attribute name and value
     are first converted to uppercase.

   * A function 'get_attr_NAME' is defined that is passed an insn and
     returns the attribute value for that insn.

 For example, if the following is present in the 'md' file:

     (define_attr "type" "branch,fp,load,store,arith" ...)

the following lines will be written to the file 'insn-attr.h'.

     #define HAVE_ATTR_type 1
     enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
                      TYPE_STORE, TYPE_ARITH};
     extern enum attr_type get_attr_type ();

 If the attribute takes numeric values, no 'enum' type will be defined
and the function to obtain the attribute's value will return 'int'.

 There are attributes which are tied to a specific meaning.  These
attributes are not free to use for other purposes:

'length'
     The 'length' attribute is used to calculate the length of emitted
     code chunks.  This is especially important when verifying branch
     distances.  *Note Insn Lengths::.

'enabled'
     The 'enabled' attribute can be defined to prevent certain
     alternatives of an insn definition from being used during code
     generation.  *Note Disable Insn Alternatives::.

'mnemonic'
     The 'mnemonic' attribute can be defined to implement instruction
     specific checks in e.g.  the pipeline description.  *Note Mnemonic
     Attribute::.

 For each of these special attributes, the corresponding
'HAVE_ATTR_NAME' '#define' is also written when the attribute is not
defined; in that case, it is defined as '0'.

 Another way of defining an attribute is to use:

     (define_enum_attr "ATTR" "ENUM" DEFAULT)

 This works in just the same way as 'define_attr', except that the list
of values is taken from a separate enumeration called ENUM (*note
define_enum::).  This form allows you to use the same list of values for
several attributes without having to repeat the list each time.  For
example:

     (define_enum "processor" [
       model_a
       model_b
       ...
     ])
     (define_enum_attr "arch" "processor"
       (const (symbol_ref "target_arch")))
     (define_enum_attr "tune" "processor"
       (const (symbol_ref "target_tune")))

 defines the same attributes as:

     (define_attr "arch" "model_a,model_b,..."
       (const (symbol_ref "target_arch")))
     (define_attr "tune" "model_a,model_b,..."
       (const (symbol_ref "target_tune")))

 but without duplicating the processor list.  The second example defines
two separate C enums ('attr_arch' and 'attr_tune') whereas the first
defines a single C enum ('processor').


File: gccint.info,  Node: Expressions,  Next: Tagging Insns,  Prev: Defining Attributes,  Up: Insn Attributes

16.19.2 Attribute Expressions
-----------------------------

RTL expressions used to define attributes use the codes described above
plus a few specific to attribute definitions, to be discussed below.
Attribute value expressions must have one of the following forms:

'(const_int I)'
     The integer I specifies the value of a numeric attribute.  I must
     be non-negative.

     The value of a numeric attribute can be specified either with a
     'const_int', or as an integer represented as a string in
     'const_string', 'eq_attr' (see below), 'attr', 'symbol_ref', simple
     arithmetic expressions, and 'set_attr' overrides on specific
     instructions (*note Tagging Insns::).

'(const_string VALUE)'
     The string VALUE specifies a constant attribute value.  If VALUE is
     specified as '"*"', it means that the default value of the
     attribute is to be used for the insn containing this expression.
     '"*"' obviously cannot be used in the DEFAULT expression of a
     'define_attr'.

     If the attribute whose value is being specified is numeric, VALUE
     must be a string containing a non-negative integer (normally
     'const_int' would be used in this case).  Otherwise, it must
     contain one of the valid values for the attribute.

'(if_then_else TEST TRUE-VALUE FALSE-VALUE)'
     TEST specifies an attribute test, whose format is defined below.
     The value of this expression is TRUE-VALUE if TEST is true,
     otherwise it is FALSE-VALUE.

'(cond [TEST1 VALUE1 ...] DEFAULT)'
     The first operand of this expression is a vector containing an even
     number of expressions and consisting of pairs of TEST and VALUE
     expressions.  The value of the 'cond' expression is that of the
     VALUE corresponding to the first true TEST expression.  If none of
     the TEST expressions are true, the value of the 'cond' expression
     is that of the DEFAULT expression.

 TEST expressions can have one of the following forms:

'(const_int I)'
     This test is true if I is nonzero and false otherwise.

'(not TEST)'
'(ior TEST1 TEST2)'
'(and TEST1 TEST2)'
     These tests are true if the indicated logical function is true.

'(match_operand:M N PRED CONSTRAINTS)'
     This test is true if operand N of the insn whose attribute value is
     being determined has mode M (this part of the test is ignored if M
     is 'VOIDmode') and the function specified by the string PRED
     returns a nonzero value when passed operand N and mode M (this part
     of the test is ignored if PRED is the null string).

     The CONSTRAINTS operand is ignored and should be the null string.

'(match_test C-EXPR)'
     The test is true if C expression C-EXPR is true.  In non-constant
     attributes, C-EXPR has access to the following variables:

     INSN
          The rtl instruction under test.
     WHICH_ALTERNATIVE
          The 'define_insn' alternative that INSN matches.  *Note Output
          Statement::.
     OPERANDS
          An array of INSN's rtl operands.

     C-EXPR behaves like the condition in a C 'if' statement, so there
     is no need to explicitly convert the expression into a boolean 0 or
     1 value.  For example, the following two tests are equivalent:

          (match_test "x & 2")
          (match_test "(x & 2) != 0")

'(le ARITH1 ARITH2)'
'(leu ARITH1 ARITH2)'
'(lt ARITH1 ARITH2)'
'(ltu ARITH1 ARITH2)'
'(gt ARITH1 ARITH2)'
'(gtu ARITH1 ARITH2)'
'(ge ARITH1 ARITH2)'
'(geu ARITH1 ARITH2)'
'(ne ARITH1 ARITH2)'
'(eq ARITH1 ARITH2)'
     These tests are true if the indicated comparison of the two
     arithmetic expressions is true.  Arithmetic expressions are formed
     with 'plus', 'minus', 'mult', 'div', 'mod', 'abs', 'neg', 'and',
     'ior', 'xor', 'not', 'ashift', 'lshiftrt', and 'ashiftrt'
     expressions.

     'const_int' and 'symbol_ref' are always valid terms (*note Insn
     Lengths::,for additional forms).  'symbol_ref' is a string denoting
     a C expression that yields an 'int' when evaluated by the
     'get_attr_...' routine.  It should normally be a global variable.

'(eq_attr NAME VALUE)'
     NAME is a string specifying the name of an attribute.

     VALUE is a string that is either a valid value for attribute NAME,
     a comma-separated list of values, or '!' followed by a value or
     list.  If VALUE does not begin with a '!', this test is true if the
     value of the NAME attribute of the current insn is in the list
     specified by VALUE.  If VALUE begins with a '!', this test is true
     if the attribute's value is _not_ in the specified list.

     For example,

          (eq_attr "type" "load,store")

     is equivalent to

          (ior (eq_attr "type" "load") (eq_attr "type" "store"))

     If NAME specifies an attribute of 'alternative', it refers to the
     value of the compiler variable 'which_alternative' (*note Output
     Statement::) and the values must be small integers.  For example,

          (eq_attr "alternative" "2,3")

     is equivalent to

          (ior (eq (symbol_ref "which_alternative") (const_int 2))
               (eq (symbol_ref "which_alternative") (const_int 3)))

     Note that, for most attributes, an 'eq_attr' test is simplified in
     cases where the value of the attribute being tested is known for
     all insns matching a particular pattern.  This is by far the most
     common case.

'(attr_flag NAME)'
     The value of an 'attr_flag' expression is true if the flag
     specified by NAME is true for the 'insn' currently being scheduled.

     NAME is a string specifying one of a fixed set of flags to test.
     Test the flags 'forward' and 'backward' to determine the direction
     of a conditional branch.

     This example describes a conditional branch delay slot which can be
     nullified for forward branches that are taken (annul-true) or for
     backward branches which are not taken (annul-false).

          (define_delay (eq_attr "type" "cbranch")
            [(eq_attr "in_branch_delay" "true")
             (and (eq_attr "in_branch_delay" "true")
                  (attr_flag "forward"))
             (and (eq_attr "in_branch_delay" "true")
                  (attr_flag "backward"))])

     The 'forward' and 'backward' flags are false if the current 'insn'
     being scheduled is not a conditional branch.

     'attr_flag' is only used during delay slot scheduling and has no
     meaning to other passes of the compiler.

'(attr NAME)'
     The value of another attribute is returned.  This is most useful
     for numeric attributes, as 'eq_attr' and 'attr_flag' produce more
     efficient code for non-numeric attributes.


File: gccint.info,  Node: Tagging Insns,  Next: Attr Example,  Prev: Expressions,  Up: Insn Attributes

16.19.3 Assigning Attribute Values to Insns
-------------------------------------------

The value assigned to an attribute of an insn is primarily determined by
which pattern is matched by that insn (or which 'define_peephole'
generated it).  Every 'define_insn' and 'define_peephole' can have an
optional last argument to specify the values of attributes for matching
insns.  The value of any attribute not specified in a particular insn is
set to the default value for that attribute, as specified in its
'define_attr'.  Extensive use of default values for attributes permits
the specification of the values for only one or two attributes in the
definition of most insn patterns, as seen in the example in the next
section.

 The optional last argument of 'define_insn' and 'define_peephole' is a
vector of expressions, each of which defines the value for a single
attribute.  The most general way of assigning an attribute's value is to
use a 'set' expression whose first operand is an 'attr' expression
giving the name of the attribute being set.  The second operand of the
'set' is an attribute expression (*note Expressions::) giving the value
of the attribute.

 When the attribute value depends on the 'alternative' attribute (i.e.,
which is the applicable alternative in the constraint of the insn), the
'set_attr_alternative' expression can be used.  It allows the
specification of a vector of attribute expressions, one for each
alternative.

 When the generality of arbitrary attribute expressions is not required,
the simpler 'set_attr' expression can be used, which allows specifying a
string giving either a single attribute value or a list of attribute
values, one for each alternative.

 The form of each of the above specifications is shown below.  In each
case, NAME is a string specifying the attribute to be set.

'(set_attr NAME VALUE-STRING)'
     VALUE-STRING is either a string giving the desired attribute value,
     or a string containing a comma-separated list giving the values for
     succeeding alternatives.  The number of elements must match the
     number of alternatives in the constraint of the insn pattern.

     Note that it may be useful to specify '*' for some alternative, in
     which case the attribute will assume its default value for insns
     matching that alternative.

'(set_attr_alternative NAME [VALUE1 VALUE2 ...])'
     Depending on the alternative of the insn, the value will be one of
     the specified values.  This is a shorthand for using a 'cond' with
     tests on the 'alternative' attribute.

'(set (attr NAME) VALUE)'
     The first operand of this 'set' must be the special RTL expression
     'attr', whose sole operand is a string giving the name of the
     attribute being set.  VALUE is the value of the attribute.

 The following shows three different ways of representing the same
attribute value specification:

     (set_attr "type" "load,store,arith")

     (set_attr_alternative "type"
                           [(const_string "load") (const_string "store")
                            (const_string "arith")])

     (set (attr "type")
          (cond [(eq_attr "alternative" "1") (const_string "load")
                 (eq_attr "alternative" "2") (const_string "store")]
                (const_string "arith")))

 The 'define_asm_attributes' expression provides a mechanism to specify
the attributes assigned to insns produced from an 'asm' statement.  It
has the form:

     (define_asm_attributes [ATTR-SETS])

where ATTR-SETS is specified the same as for both the 'define_insn' and
the 'define_peephole' expressions.

 These values will typically be the "worst case" attribute values.  For
example, they might indicate that the condition code will be clobbered.

 A specification for a 'length' attribute is handled specially.  The way
to compute the length of an 'asm' insn is to multiply the length
specified in the expression 'define_asm_attributes' by the number of
machine instructions specified in the 'asm' statement, determined by
counting the number of semicolons and newlines in the string.
Therefore, the value of the 'length' attribute specified in a
'define_asm_attributes' should be the maximum possible length of a
single machine instruction.


File: gccint.info,  Node: Attr Example,  Next: Insn Lengths,  Prev: Tagging Insns,  Up: Insn Attributes

16.19.4 Example of Attribute Specifications
-------------------------------------------

The judicious use of defaulting is important in the efficient use of
insn attributes.  Typically, insns are divided into "types" and an
attribute, customarily called 'type', is used to represent this value.
This attribute is normally used only to define the default value for
other attributes.  An example will clarify this usage.

 Assume we have a RISC machine with a condition code and in which only
full-word operations are performed in registers.  Let us assume that we
can divide all insns into loads, stores, (integer) arithmetic
operations, floating point operations, and branches.

 Here we will concern ourselves with determining the effect of an insn
on the condition code and will limit ourselves to the following possible
effects: The condition code can be set unpredictably (clobbered), not be
changed, be set to agree with the results of the operation, or only
changed if the item previously set into the condition code has been
modified.

 Here is part of a sample 'md' file for such a machine:

     (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))

     (define_attr "cc" "clobber,unchanged,set,change0"
                  (cond [(eq_attr "type" "load")
                             (const_string "change0")
                         (eq_attr "type" "store,branch")
                             (const_string "unchanged")
                         (eq_attr "type" "arith")
                             (if_then_else (match_operand:SI 0 "" "")
                                           (const_string "set")
                                           (const_string "clobber"))]
                        (const_string "clobber")))

     (define_insn ""
       [(set (match_operand:SI 0 "general_operand" "=r,r,m")
             (match_operand:SI 1 "general_operand" "r,m,r"))]
       ""
       "@
        move %0,%1
        load %0,%1
        store %0,%1"
       [(set_attr "type" "arith,load,store")])

 Note that we assume in the above example that arithmetic operations
performed on quantities smaller than a machine word clobber the
condition code since they will set the condition code to a value
corresponding to the full-word result.


File: gccint.info,  Node: Insn Lengths,  Next: Constant Attributes,  Prev: Attr Example,  Up: Insn Attributes

16.19.5 Computing the Length of an Insn
---------------------------------------

For many machines, multiple types of branch instructions are provided,
each for different length branch displacements.  In most cases, the
assembler will choose the correct instruction to use.  However, when the
assembler cannot do so, GCC can when a special attribute, the 'length'
attribute, is defined.  This attribute must be defined to have numeric
values by specifying a null string in its 'define_attr'.

 In the case of the 'length' attribute, two additional forms of
arithmetic terms are allowed in test expressions:

'(match_dup N)'
     This refers to the address of operand N of the current insn, which
     must be a 'label_ref'.

'(pc)'
     For non-branch instructions and backward branch instructions, this
     refers to the address of the current insn.  But for forward branch
     instructions, this refers to the address of the next insn, because
     the length of the current insn is to be computed.

 For normal insns, the length will be determined by value of the
'length' attribute.  In the case of 'addr_vec' and 'addr_diff_vec' insn
patterns, the length is computed as the number of vectors multiplied by
the size of each vector.

 Lengths are measured in addressable storage units (bytes).

 Note that it is possible to call functions via the 'symbol_ref'
mechanism to compute the length of an insn.  However, if you use this
mechanism you must provide dummy clauses to express the maximum length
without using the function call.  You can an example of this in the 'pa'
machine description for the 'call_symref' pattern.

 The following macros can be used to refine the length computation:

'ADJUST_INSN_LENGTH (INSN, LENGTH)'
     If defined, modifies the length assigned to instruction INSN as a
     function of the context in which it is used.  LENGTH is an lvalue
     that contains the initially computed length of the insn and should
     be updated with the correct length of the insn.

     This macro will normally not be required.  A case in which it is
     required is the ROMP.  On this machine, the size of an 'addr_vec'
     insn must be increased by two to compensate for the fact that
     alignment may be required.

 The routine that returns 'get_attr_length' (the value of the 'length'
attribute) can be used by the output routine to determine the form of
the branch instruction to be written, as the example below illustrates.

 As an example of the specification of variable-length branches,
consider the IBM 360.  If we adopt the convention that a register will
be set to the starting address of a function, we can jump to labels
within 4k of the start using a four-byte instruction.  Otherwise, we
need a six-byte sequence to load the address from memory and then branch
to it.

 On such a machine, a pattern for a branch instruction might be
specified as follows:

     (define_insn "jump"
       [(set (pc)
             (label_ref (match_operand 0 "" "")))]
       ""
     {
        return (get_attr_length (insn) == 4
                ? "b %l0" : "l r15,=a(%l0); br r15");
     }
       [(set (attr "length")
             (if_then_else (lt (match_dup 0) (const_int 4096))
                           (const_int 4)
                           (const_int 6)))])


File: gccint.info,  Node: Constant Attributes,  Next: Mnemonic Attribute,  Prev: Insn Lengths,  Up: Insn Attributes

16.19.6 Constant Attributes
---------------------------

A special form of 'define_attr', where the expression for the default
value is a 'const' expression, indicates an attribute that is constant
for a given run of the compiler.  Constant attributes may be used to
specify which variety of processor is used.  For example,

     (define_attr "cpu" "m88100,m88110,m88000"
      (const
       (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
              (symbol_ref "TARGET_88110") (const_string "m88110")]
             (const_string "m88000"))))

     (define_attr "memory" "fast,slow"
      (const
       (if_then_else (symbol_ref "TARGET_FAST_MEM")
                     (const_string "fast")
                     (const_string "slow"))))

 The routine generated for constant attributes has no parameters as it
does not depend on any particular insn.  RTL expressions used to define
the value of a constant attribute may use the 'symbol_ref' form, but may
not use either the 'match_operand' form or 'eq_attr' forms involving
insn attributes.


File: gccint.info,  Node: Mnemonic Attribute,  Next: Delay Slots,  Prev: Constant Attributes,  Up: Insn Attributes

16.19.7 Mnemonic Attribute
--------------------------

The 'mnemonic' attribute is a string type attribute holding the
instruction mnemonic for an insn alternative.  The attribute values will
automatically be generated by the machine description parser if there is
an attribute definition in the md file:

     (define_attr "mnemonic" "unknown" (const_string "unknown"))

 The default value can be freely chosen as long as it does not collide
with any of the instruction mnemonics.  This value will be used whenever
the machine description parser is not able to determine the mnemonic
string.  This might be the case for output templates containing more
than a single instruction as in '"mvcle\t%0,%1,0\;jo\t.-4"'.

 The 'mnemonic' attribute set is not generated automatically if the
instruction string is generated via C code.

 An existing 'mnemonic' attribute set in an insn definition will not be
overriden by the md file parser.  That way it is possible to manually
set the instruction mnemonics for the cases where the md file parser
fails to determine it automatically.

 The 'mnemonic' attribute is useful for dealing with instruction
specific properties in the pipeline description without defining
additional insn attributes.

     (define_attr "ooo_expanded" ""
       (cond [(eq_attr "mnemonic" "dlr,dsgr,d,dsgf,stam,dsgfr,dlgr")
              (const_int 1)]
             (const_int 0)))


File: gccint.info,  Node: Delay Slots,  Next: Processor pipeline description,  Prev: Mnemonic Attribute,  Up: Insn Attributes

16.19.8 Delay Slot Scheduling
-----------------------------

The insn attribute mechanism can be used to specify the requirements for
delay slots, if any, on a target machine.  An instruction is said to
require a "delay slot" if some instructions that are physically after
the instruction are executed as if they were located before it.  Classic
examples are branch and call instructions, which often execute the
following instruction before the branch or call is performed.

 On some machines, conditional branch instructions can optionally
"annul" instructions in the delay slot.  This means that the instruction
will not be executed for certain branch outcomes.  Both instructions
that annul if the branch is true and instructions that annul if the
branch is false are supported.

 Delay slot scheduling differs from instruction scheduling in that
determining whether an instruction needs a delay slot is dependent only
on the type of instruction being generated, not on data flow between the
instructions.  See the next section for a discussion of data-dependent
instruction scheduling.

 The requirement of an insn needing one or more delay slots is indicated
via the 'define_delay' expression.  It has the following form:

     (define_delay TEST
                   [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
                    DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
                    ...])

 TEST is an attribute test that indicates whether this 'define_delay'
applies to a particular insn.  If so, the number of required delay slots
is determined by the length of the vector specified as the second
argument.  An insn placed in delay slot N must satisfy attribute test
DELAY-N.  ANNUL-TRUE-N is an attribute test that specifies which insns
may be annulled if the branch is true.  Similarly, ANNUL-FALSE-N
specifies which insns in the delay slot may be annulled if the branch is
false.  If annulling is not supported for that delay slot, '(nil)'
should be coded.

 For example, in the common case where branch and call insns require a
single delay slot, which may contain any insn other than a branch or
call, the following would be placed in the 'md' file:

     (define_delay (eq_attr "type" "branch,call")
                   [(eq_attr "type" "!branch,call") (nil) (nil)])

 Multiple 'define_delay' expressions may be specified.  In this case,
each such expression specifies different delay slot requirements and
there must be no insn for which tests in two 'define_delay' expressions
are both true.

 For example, if we have a machine that requires one delay slot for
branches but two for calls, no delay slot can contain a branch or call
insn, and any valid insn in the delay slot for the branch can be
annulled if the branch is true, we might represent this as follows:

     (define_delay (eq_attr "type" "branch")
        [(eq_attr "type" "!branch,call")
         (eq_attr "type" "!branch,call")
         (nil)])

     (define_delay (eq_attr "type" "call")
                   [(eq_attr "type" "!branch,call") (nil) (nil)
                    (eq_attr "type" "!branch,call") (nil) (nil)])


File: gccint.info,  Node: Processor pipeline description,  Prev: Delay Slots,  Up: Insn Attributes

16.19.9 Specifying processor pipeline description
-------------------------------------------------

To achieve better performance, most modern processors (super-pipelined,
superscalar RISC, and VLIW processors) have many "functional units" on
which several instructions can be executed simultaneously.  An
instruction starts execution if its issue conditions are satisfied.  If
not, the instruction is stalled until its conditions are satisfied.
Such "interlock (pipeline) delay" causes interruption of the fetching of
successor instructions (or demands nop instructions, e.g. for some MIPS
processors).

 There are two major kinds of interlock delays in modern processors.
The first one is a data dependence delay determining "instruction
latency time".  The instruction execution is not started until all
source data have been evaluated by prior instructions (there are more
complex cases when the instruction execution starts even when the data
are not available but will be ready in given time after the instruction
execution start).  Taking the data dependence delays into account is
simple.  The data dependence (true, output, and anti-dependence) delay
between two instructions is given by a constant.  In most cases this
approach is adequate.  The second kind of interlock delays is a
reservation delay.  The reservation delay means that two instructions
under execution will be in need of shared processors resources, i.e.
buses, internal registers, and/or functional units, which are reserved
for some time.  Taking this kind of delay into account is complex
especially for modern RISC processors.

 The task of exploiting more processor parallelism is solved by an
instruction scheduler.  For a better solution to this problem, the
instruction scheduler has to have an adequate description of the
processor parallelism (or "pipeline description").  GCC machine
descriptions describe processor parallelism and functional unit
reservations for groups of instructions with the aid of "regular
expressions".

 The GCC instruction scheduler uses a "pipeline hazard recognizer" to
figure out the possibility of the instruction issue by the processor on
a given simulated processor cycle.  The pipeline hazard recognizer is
automatically generated from the processor pipeline description.  The
pipeline hazard recognizer generated from the machine description is
based on a deterministic finite state automaton (DFA): the instruction
issue is possible if there is a transition from one automaton state to
another one.  This algorithm is very fast, and furthermore, its speed is
not dependent on processor complexity(1).

 The rest of this section describes the directives that constitute an
automaton-based processor pipeline description.  The order of these
constructions within the machine description file is not important.

 The following optional construction describes names of automata
generated and used for the pipeline hazards recognition.  Sometimes the
generated finite state automaton used by the pipeline hazard recognizer
is large.  If we use more than one automaton and bind functional units
to the automata, the total size of the automata is usually less than the
size of the single automaton.  If there is no one such construction,
only one finite state automaton is generated.

     (define_automaton AUTOMATA-NAMES)

 AUTOMATA-NAMES is a string giving names of the automata.  The names are
separated by commas.  All the automata should have unique names.  The
automaton name is used in the constructions 'define_cpu_unit' and
'define_query_cpu_unit'.

 Each processor functional unit used in the description of instruction
reservations should be described by the following construction.

     (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME])

 UNIT-NAMES is a string giving the names of the functional units
separated by commas.  Don't use name 'nothing', it is reserved for other
goals.

 AUTOMATON-NAME is a string giving the name of the automaton with which
the unit is bound.  The automaton should be described in construction
'define_automaton'.  You should give "automaton-name", if there is a
defined automaton.

 The assignment of units to automata are constrained by the uses of the
units in insn reservations.  The most important constraint is: if a unit
reservation is present on a particular cycle of an alternative for an
insn reservation, then some unit from the same automaton must be present
on the same cycle for the other alternatives of the insn reservation.
The rest of the constraints are mentioned in the description of the
subsequent constructions.

 The following construction describes CPU functional units analogously
to 'define_cpu_unit'.  The reservation of such units can be queried for
an automaton state.  The instruction scheduler never queries reservation
of functional units for given automaton state.  So as a rule, you don't
need this construction.  This construction could be used for future code
generation goals (e.g. to generate VLIW insn templates).

     (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME])

 UNIT-NAMES is a string giving names of the functional units separated
by commas.

 AUTOMATON-NAME is a string giving the name of the automaton with which
the unit is bound.

 The following construction is the major one to describe pipeline
characteristics of an instruction.

     (define_insn_reservation INSN-NAME DEFAULT_LATENCY
                              CONDITION REGEXP)

 DEFAULT_LATENCY is a number giving latency time of the instruction.
There is an important difference between the old description and the
automaton based pipeline description.  The latency time is used for all
dependencies when we use the old description.  In the automaton based
pipeline description, the given latency time is only used for true
dependencies.  The cost of anti-dependencies is always zero and the cost
of output dependencies is the difference between latency times of the
producing and consuming insns (if the difference is negative, the cost
is considered to be zero).  You can always change the default costs for
any description by using the target hook 'TARGET_SCHED_ADJUST_COST'
(*note Scheduling::).

 INSN-NAME is a string giving the internal name of the insn.  The
internal names are used in constructions 'define_bypass' and in the
automaton description file generated for debugging.  The internal name
has nothing in common with the names in 'define_insn'.  It is a good
practice to use insn classes described in the processor manual.

 CONDITION defines what RTL insns are described by this construction.
You should remember that you will be in trouble if CONDITION for two or
more different 'define_insn_reservation' constructions is TRUE for an
insn.  In this case what reservation will be used for the insn is not
defined.  Such cases are not checked during generation of the pipeline
hazards recognizer because in general recognizing that two conditions
may have the same value is quite difficult (especially if the conditions
contain 'symbol_ref').  It is also not checked during the pipeline
hazard recognizer work because it would slow down the recognizer
considerably.

 REGEXP is a string describing the reservation of the cpu's functional
units by the instruction.  The reservations are described by a regular
expression according to the following syntax:

            regexp = regexp "," oneof
                   | oneof

            oneof = oneof "|" allof
                  | allof

            allof = allof "+" repeat
                  | repeat

            repeat = element "*" number
                   | element

            element = cpu_function_unit_name
                    | reservation_name
                    | result_name
                    | "nothing"
                    | "(" regexp ")"

   * ',' is used for describing the start of the next cycle in the
     reservation.

   * '|' is used for describing a reservation described by the first
     regular expression *or* a reservation described by the second
     regular expression *or* etc.

   * '+' is used for describing a reservation described by the first
     regular expression *and* a reservation described by the second
     regular expression *and* etc.

   * '*' is used for convenience and simply means a sequence in which
     the regular expression are repeated NUMBER times with cycle
     advancing (see ',').

   * 'cpu_function_unit_name' denotes reservation of the named
     functional unit.

   * 'reservation_name' -- see description of construction
     'define_reservation'.

   * 'nothing' denotes no unit reservations.

 Sometimes unit reservations for different insns contain common parts.
In such case, you can simplify the pipeline description by describing
the common part by the following construction

     (define_reservation RESERVATION-NAME REGEXP)

 RESERVATION-NAME is a string giving name of REGEXP.  Functional unit
names and reservation names are in the same name space.  So the
reservation names should be different from the functional unit names and
can not be the reserved name 'nothing'.

 The following construction is used to describe exceptions in the
latency time for given instruction pair.  This is so called bypasses.

     (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES
                    [GUARD])

 NUMBER defines when the result generated by the instructions given in
string OUT_INSN_NAMES will be ready for the instructions given in string
IN_INSN_NAMES.  Each of these strings is a comma-separated list of
filename-style globs and they refer to the names of
'define_insn_reservation's.  For example:
     (define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*")
 defines a bypass between instructions that start with 'cpu1_load_' or
'cpu1_store_' and those that start with 'cpu1_load_'.

 GUARD is an optional string giving the name of a C function which
defines an additional guard for the bypass.  The function will get the
two insns as parameters.  If the function returns zero the bypass will
be ignored for this case.  The additional guard is necessary to
recognize complicated bypasses, e.g. when the consumer is only an
address of insn 'store' (not a stored value).

 If there are more one bypass with the same output and input insns, the
chosen bypass is the first bypass with a guard in description whose
guard function returns nonzero.  If there is no such bypass, then bypass
without the guard function is chosen.

 The following five constructions are usually used to describe VLIW
processors, or more precisely, to describe a placement of small
instructions into VLIW instruction slots.  They can be used for RISC
processors, too.

     (exclusion_set UNIT-NAMES UNIT-NAMES)
     (presence_set UNIT-NAMES PATTERNS)
     (final_presence_set UNIT-NAMES PATTERNS)
     (absence_set UNIT-NAMES PATTERNS)
     (final_absence_set UNIT-NAMES PATTERNS)

 UNIT-NAMES is a string giving names of functional units separated by
commas.

 PATTERNS is a string giving patterns of functional units separated by
comma.  Currently pattern is one unit or units separated by
white-spaces.

 The first construction ('exclusion_set') means that each functional
unit in the first string can not be reserved simultaneously with a unit
whose name is in the second string and vice versa.  For example, the
construction is useful for describing processors (e.g. some SPARC
processors) with a fully pipelined floating point functional unit which
can execute simultaneously only single floating point insns or only
double floating point insns.

 The second construction ('presence_set') means that each functional
unit in the first string can not be reserved unless at least one of
pattern of units whose names are in the second string is reserved.  This
is an asymmetric relation.  For example, it is useful for description
that VLIW 'slot1' is reserved after 'slot0' reservation.  We could
describe it by the following construction

     (presence_set "slot1" "slot0")

 Or 'slot1' is reserved only after 'slot0' and unit 'b0' reservation.
In this case we could write

     (presence_set "slot1" "slot0 b0")

 The third construction ('final_presence_set') is analogous to
'presence_set'.  The difference between them is when checking is done.
When an instruction is issued in given automaton state reflecting all
current and planned unit reservations, the automaton state is changed.
The first state is a source state, the second one is a result state.
Checking for 'presence_set' is done on the source state reservation,
checking for 'final_presence_set' is done on the result reservation.
This construction is useful to describe a reservation which is actually
two subsequent reservations.  For example, if we use

     (presence_set "slot1" "slot0")

 the following insn will be never issued (because 'slot1' requires
'slot0' which is absent in the source state).

     (define_reservation "insn_and_nop" "slot0 + slot1")

 but it can be issued if we use analogous 'final_presence_set'.

 The forth construction ('absence_set') means that each functional unit
in the first string can be reserved only if each pattern of units whose
names are in the second string is not reserved.  This is an asymmetric
relation (actually 'exclusion_set' is analogous to this one but it is
symmetric).  For example it might be useful in a VLIW description to say
that 'slot0' cannot be reserved after either 'slot1' or 'slot2' have
been reserved.  This can be described as:

     (absence_set "slot0" "slot1, slot2")

 Or 'slot2' can not be reserved if 'slot0' and unit 'b0' are reserved or
'slot1' and unit 'b1' are reserved.  In this case we could write

     (absence_set "slot2" "slot0 b0, slot1 b1")

 All functional units mentioned in a set should belong to the same
automaton.

 The last construction ('final_absence_set') is analogous to
'absence_set' but checking is done on the result (state) reservation.
See comments for 'final_presence_set'.

 You can control the generator of the pipeline hazard recognizer with
the following construction.

     (automata_option OPTIONS)

 OPTIONS is a string giving options which affect the generated code.
Currently there are the following options:

   * "no-minimization" makes no minimization of the automaton.  This is
     only worth to do when we are debugging the description and need to
     look more accurately at reservations of states.

   * "time" means printing time statistics about the generation of
     automata.

   * "stats" means printing statistics about the generated automata such
     as the number of DFA states, NDFA states and arcs.

   * "v" means a generation of the file describing the result automata.
     The file has suffix '.dfa' and can be used for the description
     verification and debugging.

   * "w" means a generation of warning instead of error for non-critical
     errors.

   * "no-comb-vect" prevents the automaton generator from generating two
     data structures and comparing them for space efficiency.  Using a
     comb vector to represent transitions may be better, but it can be
     very expensive to construct.  This option is useful if the build
     process spends an unacceptably long time in genautomata.

   * "ndfa" makes nondeterministic finite state automata.  This affects
     the treatment of operator '|' in the regular expressions.  The
     usual treatment of the operator is to try the first alternative
     and, if the reservation is not possible, the second alternative.
     The nondeterministic treatment means trying all alternatives, some
     of them may be rejected by reservations in the subsequent insns.

   * "collapse-ndfa" modifies the behavior of the generator when
     producing an automaton.  An additional state transition to collapse
     a nondeterministic NDFA state to a deterministic DFA state is
     generated.  It can be triggered by passing 'const0_rtx' to
     state_transition.  In such an automaton, cycle advance transitions
     are available only for these collapsed states.  This option is
     useful for ports that want to use the 'ndfa' option, but also want
     to use 'define_query_cpu_unit' to assign units to insns issued in a
     cycle.

   * "progress" means output of a progress bar showing how many states
     were generated so far for automaton being processed.  This is
     useful during debugging a DFA description.  If you see too many
     generated states, you could interrupt the generator of the pipeline
     hazard recognizer and try to figure out a reason for generation of
     the huge automaton.

 As an example, consider a superscalar RISC machine which can issue
three insns (two integer insns and one floating point insn) on the cycle
but can finish only two insns.  To describe this, we define the
following functional units.

     (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
     (define_cpu_unit "port0, port1")

 All simple integer insns can be executed in any integer pipeline and
their result is ready in two cycles.  The simple integer insns are
issued into the first pipeline unless it is reserved, otherwise they are
issued into the second pipeline.  Integer division and multiplication
insns can be executed only in the second integer pipeline and their
results are ready correspondingly in 8 and 4 cycles.  The integer
division is not pipelined, i.e. the subsequent integer division insn can
not be issued until the current division insn finished.  Floating point
insns are fully pipelined and their results are ready in 3 cycles.
Where the result of a floating point insn is used by an integer insn, an
additional delay of one cycle is incurred.  To describe all of this we
could specify

     (define_cpu_unit "div")

     (define_insn_reservation "simple" 2 (eq_attr "type" "int")
                              "(i0_pipeline | i1_pipeline), (port0 | port1)")

     (define_insn_reservation "mult" 4 (eq_attr "type" "mult")
                              "i1_pipeline, nothing*2, (port0 | port1)")

     (define_insn_reservation "div" 8 (eq_attr "type" "div")
                              "i1_pipeline, div*7, div + (port0 | port1)")

     (define_insn_reservation "float" 3 (eq_attr "type" "float")
                              "f_pipeline, nothing, (port0 | port1))

     (define_bypass 4 "float" "simple,mult,div")

 To simplify the description we could describe the following reservation

     (define_reservation "finish" "port0|port1")

 and use it in all 'define_insn_reservation' as in the following
construction

     (define_insn_reservation "simple" 2 (eq_attr "type" "int")
                              "(i0_pipeline | i1_pipeline), finish")

   ---------- Footnotes ----------

   (1) However, the size of the automaton depends on processor
complexity.  To limit this effect, machine descriptions can split
orthogonal parts of the machine description among several automata: but
then, since each of these must be stepped independently, this does cause
a small decrease in the algorithm's performance.


File: gccint.info,  Node: Conditional Execution,  Next: Define Subst,  Prev: Insn Attributes,  Up: Machine Desc

16.20 Conditional Execution
===========================

A number of architectures provide for some form of conditional
execution, or predication.  The hallmark of this feature is the ability
to nullify most of the instructions in the instruction set.  When the
instruction set is large and not entirely symmetric, it can be quite
tedious to describe these forms directly in the '.md' file.  An
alternative is the 'define_cond_exec' template.

     (define_cond_exec
       [PREDICATE-PATTERN]
       "CONDITION"
       "OUTPUT-TEMPLATE"
       "OPTIONAL-INSN-ATTRIBUES")

 PREDICATE-PATTERN is the condition that must be true for the insn to be
executed at runtime and should match a relational operator.  One can use
'match_operator' to match several relational operators at once.  Any
'match_operand' operands must have no more than one alternative.

 CONDITION is a C expression that must be true for the generated pattern
to match.

 OUTPUT-TEMPLATE is a string similar to the 'define_insn' output
template (*note Output Template::), except that the '*' and '@' special
cases do not apply.  This is only useful if the assembly text for the
predicate is a simple prefix to the main insn.  In order to handle the
general case, there is a global variable 'current_insn_predicate' that
will contain the entire predicate if the current insn is predicated, and
will otherwise be 'NULL'.

 OPTIONAL-INSN-ATTRIBUTES is an optional vector of attributes that gets
appended to the insn attributes of the produced cond_exec rtx.  It can
be used to add some distinguishing attribute to cond_exec rtxs produced
that way.  An example usage would be to use this attribute in
conjunction with attributes on the main pattern to disable particular
alternatives under certain conditions.

 When 'define_cond_exec' is used, an implicit reference to the
'predicable' instruction attribute is made.  *Note Insn Attributes::.
This attribute must be a boolean (i.e. have exactly two elements in its
LIST-OF-VALUES), with the possible values being 'no' and 'yes'.  The
default and all uses in the insns must be a simple constant, not a
complex expressions.  It may, however, depend on the alternative, by
using a comma-separated list of values.  If that is the case, the port
should also define an 'enabled' attribute (*note Disable Insn
Alternatives::), which should also allow only 'no' and 'yes' as its
values.

 For each 'define_insn' for which the 'predicable' attribute is true, a
new 'define_insn' pattern will be generated that matches a predicated
version of the instruction.  For example,

     (define_insn "addsi"
       [(set (match_operand:SI 0 "register_operand" "r")
             (plus:SI (match_operand:SI 1 "register_operand" "r")
                      (match_operand:SI 2 "register_operand" "r")))]
       "TEST1"
       "add %2,%1,%0")

     (define_cond_exec
       [(ne (match_operand:CC 0 "register_operand" "c")
            (const_int 0))]
       "TEST2"
       "(%0)")

generates a new pattern

     (define_insn ""
       [(cond_exec
          (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
          (set (match_operand:SI 0 "register_operand" "r")
               (plus:SI (match_operand:SI 1 "register_operand" "r")
                        (match_operand:SI 2 "register_operand" "r"))))]
       "(TEST2) && (TEST1)"
       "(%3) add %2,%1,%0")


File: gccint.info,  Node: Define Subst,  Next: Constant Definitions,  Prev: Conditional Execution,  Up: Machine Desc

16.21 RTL Templates Transformations
===================================

For some hardware architectures there are common cases when the RTL
templates for the instructions can be derived from the other RTL
templates using simple transformations.  E.g., 'i386.md' contains an RTL
template for the ordinary 'sub' instruction-- '*subsi_1', and for the
'sub' instruction with subsequent zero-extension--'*subsi_1_zext'.  Such
cases can be easily implemented by a single meta-template capable of
generating a modified case based on the initial one:

     (define_subst "NAME"
       [INPUT-TEMPLATE]
       "CONDITION"
       [OUTPUT-TEMPLATE])
 INPUT-TEMPLATE is a pattern describing the source RTL template, which
will be transformed.

 CONDITION is a C expression that is conjunct with the condition from
the input-template to generate a condition to be used in the
output-template.

 OUTPUT-TEMPLATE is a pattern that will be used in the resulting
template.

 'define_subst' mechanism is tightly coupled with the notion of the
subst attribute (*note Subst Iterators::).  The use of 'define_subst' is
triggered by a reference to a subst attribute in the transforming RTL
template.  This reference initiates duplication of the source RTL
template and substitution of the attributes with their values.  The
source RTL template is left unchanged, while the copy is transformed by
'define_subst'.  This transformation can fail in the case when the
source RTL template is not matched against the input-template of the
'define_subst'.  In such case the copy is deleted.

 'define_subst' can be used only in 'define_insn' and 'define_expand',
it cannot be used in other expressions (e.g.  in
'define_insn_and_split').

* Menu:

* Define Subst Example::	    Example of 'define_subst' work.
* Define Subst Pattern Matching::   Process of template comparison.
* Define Subst Output Template::    Generation of output template.


File: gccint.info,  Node: Define Subst Example,  Next: Define Subst Pattern Matching,  Up: Define Subst

16.21.1 'define_subst' Example
------------------------------

To illustrate how 'define_subst' works, let us examine a simple template
transformation.

 Suppose there are two kinds of instructions: one that touches flags and
the other that does not.  The instructions of the second type could be
generated with the following 'define_subst':

     (define_subst "add_clobber_subst"
       [(set (match_operand:SI 0 "" "")
             (match_operand:SI 1 "" ""))]
       ""
       [(set (match_dup 0)
             (match_dup 1))
        (clobber (reg:CC FLAGS_REG))]

 This 'define_subst' can be applied to any RTL pattern containing 'set'
of mode SI and generates a copy with clobber when it is applied.

 Assume there is an RTL template for a 'max' instruction to be used in
'define_subst' mentioned above:

     (define_insn "maxsi"
       [(set (match_operand:SI 0 "register_operand" "=r")
             (max:SI
               (match_operand:SI 1 "register_operand" "r")
               (match_operand:SI 2 "register_operand" "r")))]
       ""
       "max\t{%2, %1, %0|%0, %1, %2}"
      [...])

 To mark the RTL template for 'define_subst' application,
subst-attributes are used.  They should be declared in advance:

     (define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber")

 Here 'add_clobber_name' is the attribute name, 'add_clobber_subst' is
the name of the corresponding 'define_subst', the third argument
('_noclobber') is the attribute value that would be substituted into the
unchanged version of the source RTL template, and the last argument
('_clobber') is the value that would be substituted into the second,
transformed, version of the RTL template.

 Once the subst-attribute has been defined, it should be used in RTL
templates which need to be processed by the 'define_subst'.  So, the
original RTL template should be changed:

     (define_insn "maxsi<add_clobber_name>"
       [(set (match_operand:SI 0 "register_operand" "=r")
             (max:SI
               (match_operand:SI 1 "register_operand" "r")
               (match_operand:SI 2 "register_operand" "r")))]
       ""
       "max\t{%2, %1, %0|%0, %1, %2}"
      [...])

 The result of the 'define_subst' usage would look like the following:

     (define_insn "maxsi_noclobber"
       [(set (match_operand:SI 0 "register_operand" "=r")
             (max:SI
               (match_operand:SI 1 "register_operand" "r")
               (match_operand:SI 2 "register_operand" "r")))]
       ""
       "max\t{%2, %1, %0|%0, %1, %2}"
      [...])
     (define_insn "maxsi_clobber"
       [(set (match_operand:SI 0 "register_operand" "=r")
             (max:SI
               (match_operand:SI 1 "register_operand" "r")
               (match_operand:SI 2 "register_operand" "r")))
        (clobber (reg:CC FLAGS_REG))]
       ""
       "max\t{%2, %1, %0|%0, %1, %2}"
      [...])


File: gccint.info,  Node: Define Subst Pattern Matching,  Next: Define Subst Output Template,  Prev: Define Subst Example,  Up: Define Subst

16.21.2 Pattern Matching in 'define_subst'
------------------------------------------

All expressions, allowed in 'define_insn' or 'define_expand', are
allowed in the input-template of 'define_subst', except 'match_par_dup',
'match_scratch', 'match_parallel'.  The meanings of expressions in the
input-template were changed:

 'match_operand' matches any expression (possibly, a subtree in
RTL-template), if modes of the 'match_operand' and this expression are
the same, or mode of the 'match_operand' is 'VOIDmode', or this
expression is 'match_dup', 'match_op_dup'.  If the expression is
'match_operand' too, and predicate of 'match_operand' from the input
pattern is not empty, then the predicates are compared.  That can be
used for more accurate filtering of accepted RTL-templates.

 'match_operator' matches common operators (like 'plus', 'minus'),
'unspec', 'unspec_volatile' operators and 'match_operator's from the
original pattern if the modes match and 'match_operator' from the input
pattern has the same number of operands as the operator from the
original pattern.


File: gccint.info,  Node: Define Subst Output Template,  Prev: Define Subst Pattern Matching,  Up: Define Subst

16.21.3 Generation of output template in 'define_subst'
-------------------------------------------------------

If all necessary checks for 'define_subst' application pass, a new
RTL-pattern, based on the output-template, is created to replace the old
template.  Like in input-patterns, meanings of some RTL expressions are
changed when they are used in output-patterns of a 'define_subst'.
Thus, 'match_dup' is used for copying the whole expression from the
original pattern, which matched corresponding 'match_operand' from the
input pattern.

 'match_dup N' is used in the output template to be replaced with the
expression from the original pattern, which matched 'match_operand N'
from the input pattern.  As a consequence, 'match_dup' cannot be used to
point to 'match_operand's from the output pattern, it should always
refer to a 'match_operand' from the input pattern.

 In the output template one can refer to the expressions from the
original pattern and create new ones.  For instance, some operands could
be added by means of standard 'match_operand'.

 After replacing 'match_dup' with some RTL-subtree from the original
pattern, it could happen that several 'match_operand's in the output
pattern have the same indexes.  It is unknown, how many and what indexes
would be used in the expression which would replace 'match_dup', so such
conflicts in indexes are inevitable.  To overcome this issue,
'match_operands' and 'match_operators', which were introduced into the
output pattern, are renumerated when all 'match_dup's are replaced.

 Number of alternatives in 'match_operand's introduced into the output
template 'M' could differ from the number of alternatives in the
original pattern 'N', so in the resultant pattern there would be 'N*M'
alternatives.  Thus, constraints from the original pattern would be
duplicated 'N' times, constraints from the output pattern would be
duplicated 'M' times, producing all possible combinations.


File: gccint.info,  Node: Constant Definitions,  Next: Iterators,  Prev: Define Subst,  Up: Machine Desc

16.22 Constant Definitions
==========================

Using literal constants inside instruction patterns reduces legibility
and can be a maintenance problem.

 To overcome this problem, you may use the 'define_constants'
expression.  It contains a vector of name-value pairs.  From that point
on, wherever any of the names appears in the MD file, it is as if the
corresponding value had been written instead.  You may use
'define_constants' multiple times; each appearance adds more constants
to the table.  It is an error to redefine a constant with a different
value.

 To come back to the a29k load multiple example, instead of

     (define_insn ""
       [(match_parallel 0 "load_multiple_operation"
          [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
                (match_operand:SI 2 "memory_operand" "m"))
           (use (reg:SI 179))
           (clobber (reg:SI 179))])]
       ""
       "loadm 0,0,%1,%2")

 You could write:

     (define_constants [
         (R_BP 177)
         (R_FC 178)
         (R_CR 179)
         (R_Q  180)
     ])

     (define_insn ""
       [(match_parallel 0 "load_multiple_operation"
          [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
                (match_operand:SI 2 "memory_operand" "m"))
           (use (reg:SI R_CR))
           (clobber (reg:SI R_CR))])]
       ""
       "loadm 0,0,%1,%2")

 The constants that are defined with a define_constant are also output
in the insn-codes.h header file as #defines.

 You can also use the machine description file to define enumerations.
Like the constants defined by 'define_constant', these enumerations are
visible to both the machine description file and the main C code.

 The syntax is as follows:

     (define_c_enum "NAME" [
       VALUE0
       VALUE1
       ...
       VALUEN
     ])

 This definition causes the equivalent of the following C code to appear
in 'insn-constants.h':

     enum NAME {
       VALUE0 = 0,
       VALUE1 = 1,
       ...
       VALUEN = N
     };
     #define NUM_CNAME_VALUES (N + 1)

 where CNAME is the capitalized form of NAME.  It also makes each VALUEI
available in the machine description file, just as if it had been
declared with:

     (define_constants [(VALUEI I)])

 Each VALUEI is usually an upper-case identifier and usually begins with
CNAME.

 You can split the enumeration definition into as many statements as you
like.  The above example is directly equivalent to:

     (define_c_enum "NAME" [VALUE0])
     (define_c_enum "NAME" [VALUE1])
     ...
     (define_c_enum "NAME" [VALUEN])

 Splitting the enumeration helps to improve the modularity of each
individual '.md' file.  For example, if a port defines its
synchronization instructions in a separate 'sync.md' file, it is
convenient to define all synchronization-specific enumeration values in
'sync.md' rather than in the main '.md' file.

 Some enumeration names have special significance to GCC:

'unspecv'
     If an enumeration called 'unspecv' is defined, GCC will use it when
     printing out 'unspec_volatile' expressions.  For example:

          (define_c_enum "unspecv" [
            UNSPECV_BLOCKAGE
          ])

     causes GCC to print '(unspec_volatile ... 0)' as:

          (unspec_volatile ... UNSPECV_BLOCKAGE)

'unspec'
     If an enumeration called 'unspec' is defined, GCC will use it when
     printing out 'unspec' expressions.  GCC will also use it when
     printing out 'unspec_volatile' expressions unless an 'unspecv'
     enumeration is also defined.  You can therefore decide whether to
     keep separate enumerations for volatile and non-volatile
     expressions or whether to use the same enumeration for both.

 Another way of defining an enumeration is to use 'define_enum':

     (define_enum "NAME" [
       VALUE0
       VALUE1
       ...
       VALUEN
     ])

 This directive implies:

     (define_c_enum "NAME" [
       CNAME_CVALUE0
       CNAME_CVALUE1
       ...
       CNAME_CVALUEN
     ])

 where CVALUEI is the capitalized form of VALUEI.  However, unlike
'define_c_enum', the enumerations defined by 'define_enum' can be used
in attribute specifications (*note define_enum_attr::).


File: gccint.info,  Node: Iterators,  Prev: Constant Definitions,  Up: Machine Desc

16.23 Iterators
===============

Ports often need to define similar patterns for more than one machine
mode or for more than one rtx code.  GCC provides some simple iterator
facilities to make this process easier.

* Menu:

* Mode Iterators::         Generating variations of patterns for different modes.
* Code Iterators::         Doing the same for codes.
* Int Iterators::          Doing the same for integers.
* Subst Iterators::	   Generating variations of patterns for define_subst.


File: gccint.info,  Node: Mode Iterators,  Next: Code Iterators,  Up: Iterators

16.23.1 Mode Iterators
----------------------

Ports often need to define similar patterns for two or more different
modes.  For example:

   * If a processor has hardware support for both single and double
     floating-point arithmetic, the 'SFmode' patterns tend to be very
     similar to the 'DFmode' ones.

   * If a port uses 'SImode' pointers in one configuration and 'DImode'
     pointers in another, it will usually have very similar 'SImode' and
     'DImode' patterns for manipulating pointers.

 Mode iterators allow several patterns to be instantiated from one '.md'
file template.  They can be used with any type of rtx-based construct,
such as a 'define_insn', 'define_split', or 'define_peephole2'.

* Menu:

* Defining Mode Iterators:: Defining a new mode iterator.
* Substitutions::           Combining mode iterators with substitutions
* Examples::                Examples


File: gccint.info,  Node: Defining Mode Iterators,  Next: Substitutions,  Up: Mode Iterators

16.23.1.1 Defining Mode Iterators
.................................

The syntax for defining a mode iterator is:

     (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")])

 This allows subsequent '.md' file constructs to use the mode suffix
':NAME'.  Every construct that does so will be expanded N times, once
with every use of ':NAME' replaced by ':MODE1', once with every use
replaced by ':MODE2', and so on.  In the expansion for a particular
MODEI, every C condition will also require that CONDI be true.

 For example:

     (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])

 defines a new mode suffix ':P'.  Every construct that uses ':P' will be
expanded twice, once with every ':P' replaced by ':SI' and once with
every ':P' replaced by ':DI'.  The ':SI' version will only apply if
'Pmode == SImode' and the ':DI' version will only apply if 'Pmode ==
DImode'.

 As with other '.md' conditions, an empty string is treated as "always
true".  '(MODE "")' can also be abbreviated to 'MODE'.  For example:

     (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])

 means that the ':DI' expansion only applies if 'TARGET_64BIT' but that
the ':SI' expansion has no such constraint.

 Iterators are applied in the order they are defined.  This can be
significant if two iterators are used in a construct that requires
substitutions.  *Note Substitutions::.


File: gccint.info,  Node: Substitutions,  Next: Examples,  Prev: Defining Mode Iterators,  Up: Mode Iterators

16.23.1.2 Substitution in Mode Iterators
........................................

If an '.md' file construct uses mode iterators, each version of the
construct will often need slightly different strings or modes.  For
example:

   * When a 'define_expand' defines several 'addM3' patterns (*note
     Standard Names::), each expander will need to use the appropriate
     mode name for M.

   * When a 'define_insn' defines several instruction patterns, each
     instruction will often use a different assembler mnemonic.

   * When a 'define_insn' requires operands with different modes, using
     an iterator for one of the operand modes usually requires a
     specific mode for the other operand(s).

 GCC supports such variations through a system of "mode attributes".
There are two standard attributes: 'mode', which is the name of the mode
in lower case, and 'MODE', which is the same thing in upper case.  You
can define other attributes using:

     (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")])

 where NAME is the name of the attribute and VALUEI is the value
associated with MODEI.

 When GCC replaces some :ITERATOR with :MODE, it will scan each string
and mode in the pattern for sequences of the form '<ITERATOR:ATTR>',
where ATTR is the name of a mode attribute.  If the attribute is defined
for MODE, the whole '<...>' sequence will be replaced by the appropriate
attribute value.

 For example, suppose an '.md' file has:

     (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
     (define_mode_attr load [(SI "lw") (DI "ld")])

 If one of the patterns that uses ':P' contains the string
'"<P:load>\t%0,%1"', the 'SI' version of that pattern will use
'"lw\t%0,%1"' and the 'DI' version will use '"ld\t%0,%1"'.

 Here is an example of using an attribute for a mode:

     (define_mode_iterator LONG [SI DI])
     (define_mode_attr SHORT [(SI "HI") (DI "SI")])
     (define_insn ...
       (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...)

 The 'ITERATOR:' prefix may be omitted, in which case the substitution
will be attempted for every iterator expansion.


File: gccint.info,  Node: Examples,  Prev: Substitutions,  Up: Mode Iterators

16.23.1.3 Mode Iterator Examples
................................

Here is an example from the MIPS port.  It defines the following modes
and attributes (among others):

     (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
     (define_mode_attr d [(SI "") (DI "d")])

 and uses the following template to define both 'subsi3' and 'subdi3':

     (define_insn "sub<mode>3"
       [(set (match_operand:GPR 0 "register_operand" "=d")
             (minus:GPR (match_operand:GPR 1 "register_operand" "d")
                        (match_operand:GPR 2 "register_operand" "d")))]
       ""
       "<d>subu\t%0,%1,%2"
       [(set_attr "type" "arith")
        (set_attr "mode" "<MODE>")])

 This is exactly equivalent to:

     (define_insn "subsi3"
       [(set (match_operand:SI 0 "register_operand" "=d")
             (minus:SI (match_operand:SI 1 "register_operand" "d")
                       (match_operand:SI 2 "register_operand" "d")))]
       ""
       "subu\t%0,%1,%2"
       [(set_attr "type" "arith")
        (set_attr "mode" "SI")])

     (define_insn "subdi3"
       [(set (match_operand:DI 0 "register_operand" "=d")
             (minus:DI (match_operand:DI 1 "register_operand" "d")
                       (match_operand:DI 2 "register_operand" "d")))]
       ""
       "dsubu\t%0,%1,%2"
       [(set_attr "type" "arith")
        (set_attr "mode" "DI")])


File: gccint.info,  Node: Code Iterators,  Next: Int Iterators,  Prev: Mode Iterators,  Up: Iterators

16.23.2 Code Iterators
----------------------

Code iterators operate in a similar way to mode iterators.  *Note Mode
Iterators::.

 The construct:

     (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")])

 defines a pseudo rtx code NAME that can be instantiated as CODEI if
condition CONDI is true.  Each CODEI must have the same rtx format.
*Note RTL Classes::.

 As with mode iterators, each pattern that uses NAME will be expanded N
times, once with all uses of NAME replaced by CODE1, once with all uses
replaced by CODE2, and so on.  *Note Defining Mode Iterators::.

 It is possible to define attributes for codes as well as for modes.
There are two standard code attributes: 'code', the name of the code in
lower case, and 'CODE', the name of the code in upper case.  Other
attributes are defined using:

     (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")])

 Here's an example of code iterators in action, taken from the MIPS
port:

     (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt
                                     eq ne gt ge lt le gtu geu ltu leu])

     (define_expand "b<code>"
       [(set (pc)
             (if_then_else (any_cond:CC (cc0)
                                        (const_int 0))
                           (label_ref (match_operand 0 ""))
                           (pc)))]
       ""
     {
       gen_conditional_branch (operands, <CODE>);
       DONE;
     })

 This is equivalent to:

     (define_expand "bunordered"
       [(set (pc)
             (if_then_else (unordered:CC (cc0)
                                         (const_int 0))
                           (label_ref (match_operand 0 ""))
                           (pc)))]
       ""
     {
       gen_conditional_branch (operands, UNORDERED);
       DONE;
     })

     (define_expand "bordered"
       [(set (pc)
             (if_then_else (ordered:CC (cc0)
                                       (const_int 0))
                           (label_ref (match_operand 0 ""))
                           (pc)))]
       ""
     {
       gen_conditional_branch (operands, ORDERED);
       DONE;
     })

     ...


File: gccint.info,  Node: Int Iterators,  Next: Subst Iterators,  Prev: Code Iterators,  Up: Iterators

16.23.3 Int Iterators
---------------------

Int iterators operate in a similar way to code iterators.  *Note Code
Iterators::.

 The construct:

     (define_int_iterator NAME [(INT1 "COND1") ... (INTN "CONDN")])

 defines a pseudo integer constant NAME that can be instantiated as INTI
if condition CONDI is true.  Each INT must have the same rtx format.
*Note RTL Classes::.  Int iterators can appear in only those rtx fields
that have 'i' as the specifier.  This means that each INT has to be a
constant defined using define_constant or define_c_enum.

 As with mode and code iterators, each pattern that uses NAME will be
expanded N times, once with all uses of NAME replaced by INT1, once with
all uses replaced by INT2, and so on.  *Note Defining Mode Iterators::.

 It is possible to define attributes for ints as well as for codes and
modes.  Attributes are defined using:

     (define_int_attr NAME [(INT1 "VALUE1") ... (INTN "VALUEN")])

 Here's an example of int iterators in action, taken from the ARM port:

     (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG])

     (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")])

     (define_insn "neon_vq<absneg><mode>"
       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
     		       (match_operand:SI 2 "immediate_operand" "i")]
     		      QABSNEG))]
       "TARGET_NEON"
       "vq<absneg>.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
       [(set_attr "type" "neon_vqneg_vqabs")]
     )


 This is equivalent to:

     (define_insn "neon_vqabs<mode>"
       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
     		       (match_operand:SI 2 "immediate_operand" "i")]
     		      UNSPEC_VQABS))]
       "TARGET_NEON"
       "vqabs.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
       [(set_attr "type" "neon_vqneg_vqabs")]
     )

     (define_insn "neon_vqneg<mode>"
       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
     		       (match_operand:SI 2 "immediate_operand" "i")]
     		      UNSPEC_VQNEG))]
       "TARGET_NEON"
       "vqneg.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
       [(set_attr "type" "neon_vqneg_vqabs")]
     )



File: gccint.info,  Node: Subst Iterators,  Prev: Int Iterators,  Up: Iterators

16.23.4 Subst Iterators
-----------------------

Subst iterators are special type of iterators with the following
restrictions: they could not be declared explicitly, they always have
only two values, and they do not have explicit dedicated name.
Subst-iterators are triggered only when corresponding subst-attribute is
used in RTL-pattern.

 Subst iterators transform templates in the following way: the templates
are duplicated, the subst-attributes in these templates are replaced
with the corresponding values, and a new attribute is implicitly added
to the given 'define_insn'/'define_expand'.  The name of the added
attribute matches the name of 'define_subst'.  Such attributes are
declared implicitly, and it is not allowed to have a 'define_attr' named
as a 'define_subst'.

 Each subst iterator is linked to a 'define_subst'.  It is declared
implicitly by the first appearance of the corresponding
'define_subst_attr', and it is not allowed to define it explicitly.

 Declarations of subst-attributes have the following syntax:

     (define_subst_attr "NAME"
       "SUBST-NAME"
       "NO-SUBST-VALUE"
       "SUBST-APPLIED-VALUE")

 NAME is a string with which the given subst-attribute could be referred
to.

 SUBST-NAME shows which 'define_subst' should be applied to an
RTL-template if the given subst-attribute is present in the
RTL-template.

 NO-SUBST-VALUE is a value with which subst-attribute would be replaced
in the first copy of the original RTL-template.

 SUBST-APPLIED-VALUE is a value with which subst-attribute would be
replaced in the second copy of the original RTL-template.


File: gccint.info,  Node: Target Macros,  Next: Host Config,  Prev: Machine Desc,  Up: Top

17 Target Description Macros and Functions
******************************************

In addition to the file 'MACHINE.md', a machine description includes a C
header file conventionally given the name 'MACHINE.h' and a C source
file named 'MACHINE.c'.  The header file defines numerous macros that
convey the information about the target machine that does not fit into
the scheme of the '.md' file.  The file 'tm.h' should be a link to
'MACHINE.h'.  The header file 'config.h' includes 'tm.h' and most
compiler source files include 'config.h'.  The source file defines a
variable 'targetm', which is a structure containing pointers to
functions and data relating to the target machine.  'MACHINE.c' should
also contain their definitions, if they are not defined elsewhere in
GCC, and other functions called through the macros defined in the '.h'
file.

* Menu:

* Target Structure::    The 'targetm' variable.
* Driver::              Controlling how the driver runs the compilation passes.
* Run-time Target::     Defining '-m' options like '-m68000' and '-m68020'.
* Per-Function Data::   Defining data structures for per-function information.
* Storage Layout::      Defining sizes and alignments of data.
* Type Layout::         Defining sizes and properties of basic user data types.
* Registers::           Naming and describing the hardware registers.
* Register Classes::    Defining the classes of hardware registers.
* Stack and Calling::   Defining which way the stack grows and by how much.
* Varargs::             Defining the varargs macros.
* Trampolines::         Code set up at run time to enter a nested function.
* Library Calls::       Controlling how library routines are implicitly called.
* Addressing Modes::    Defining addressing modes valid for memory operands.
* Anchored Addresses::  Defining how '-fsection-anchors' should work.
* Condition Code::      Defining how insns update the condition code.
* Costs::               Defining relative costs of different operations.
* Scheduling::          Adjusting the behavior of the instruction scheduler.
* Sections::            Dividing storage into text, data, and other sections.
* PIC::                 Macros for position independent code.
* Assembler Format::    Defining how to write insns and pseudo-ops to output.
* Debugging Info::      Defining the format of debugging output.
* Floating Point::      Handling floating point for cross-compilers.
* Mode Switching::      Insertion of mode-switching instructions.
* Target Attributes::   Defining target-specific uses of '__attribute__'.
* Emulated TLS::        Emulated TLS support.
* MIPS Coprocessors::   MIPS coprocessor support and how to customize it.
* PCH Target::          Validity checking for precompiled headers.
* C++ ABI::             Controlling C++ ABI changes.
* Named Address Spaces:: Adding support for named address spaces
* Misc::                Everything else.


File: gccint.info,  Node: Target Structure,  Next: Driver,  Up: Target Macros

17.1 The Global 'targetm' Variable
==================================

 -- Variable: struct gcc_target targetm
     The target '.c' file must define the global 'targetm' variable
     which contains pointers to functions and data relating to the
     target machine.  The variable is declared in 'target.h';
     'target-def.h' defines the macro 'TARGET_INITIALIZER' which is used
     to initialize the variable, and macros for the default initializers
     for elements of the structure.  The '.c' file should override those
     macros for which the default definition is inappropriate.  For
     example:
          #include "target.h"
          #include "target-def.h"

          /* Initialize the GCC target structure.  */

          #undef TARGET_COMP_TYPE_ATTRIBUTES
          #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes

          struct gcc_target targetm = TARGET_INITIALIZER;

 Where a macro should be defined in the '.c' file in this manner to form
part of the 'targetm' structure, it is documented below as a "Target
Hook" with a prototype.  Many macros will change in future from being
defined in the '.h' file to being part of the 'targetm' structure.

 Similarly, there is a 'targetcm' variable for hooks that are specific
to front ends for C-family languages, documented as "C Target Hook".
This is declared in 'c-family/c-target.h', the initializer
'TARGETCM_INITIALIZER' in 'c-family/c-target-def.h'.  If targets
initialize 'targetcm' themselves, they should set
'target_has_targetcm=yes' in 'config.gcc'; otherwise a default
definition is used.

 Similarly, there is a '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 'common/common-target.h',
the initializer 'TARGETM_COMMON_INITIALIZER' in
'common/common-target-def.h'.  If targets initialize 'targetm_common'
themselves, they should set 'target_has_targetm_common=yes' in
'config.gcc'; otherwise a default definition is used.


File: gccint.info,  Node: Driver,  Next: Run-time Target,  Prev: Target Structure,  Up: Target Macros

17.2 Controlling the Compilation Driver, 'gcc'
==============================================

You can control the compilation driver.

 -- Macro: DRIVER_SELF_SPECS
     A list of specs for the driver itself.  It should be a suitable
     initializer for an array of strings, with no surrounding braces.

     The driver applies these specs to its own command line between
     loading default 'specs' files (but not command-line specified ones)
     and choosing the multilib directory or running any subcommands.  It
     applies them in the order given, so each spec can depend on the
     options added by earlier ones.  It is also possible to remove
     options using '%<OPTION' in the usual way.

     This macro can be useful when a port has several interdependent
     target options.  It provides a way of standardizing the command
     line so that the other specs are easier to write.

     Do not define this macro if it does not need to do anything.

 -- Macro: OPTION_DEFAULT_SPECS
     A list of specs used to support configure-time default options
     (i.e. '--with' options) in the driver.  It should be a suitable
     initializer for an array of structures, each containing two
     strings, without the outermost pair of surrounding braces.

     The first item in the pair is the name of the default.  This must
     match the code in 'config.gcc' for the target.  The second item is
     a spec to apply if a default with this name was specified.  The
     string '%(VALUE)' in the spec will be replaced by the value of the
     default everywhere it occurs.

     The driver will apply these specs to its own command line between
     loading default 'specs' files and processing 'DRIVER_SELF_SPECS',
     using the same mechanism as 'DRIVER_SELF_SPECS'.

     Do not define this macro if it does not need to do anything.

 -- Macro: CPP_SPEC
     A C string constant that tells the GCC driver program options to
     pass to CPP.  It can also specify how to translate options you give
     to GCC into options for GCC to pass to the CPP.

     Do not define this macro if it does not need to do anything.

 -- Macro: CPLUSPLUS_CPP_SPEC
     This macro is just like 'CPP_SPEC', but is used for C++, rather
     than C.  If you do not define this macro, then the value of
     'CPP_SPEC' (if any) will be used instead.

 -- Macro: CC1_SPEC
     A C string constant that tells the GCC driver program options to
     pass to 'cc1', 'cc1plus', 'f771', and the other language front
     ends.  It can also specify how to translate options you give to GCC
     into options for GCC to pass to front ends.

     Do not define this macro if it does not need to do anything.

 -- Macro: CC1PLUS_SPEC
     A C string constant that tells the GCC driver program options to
     pass to 'cc1plus'.  It can also specify how to translate options
     you give to GCC into options for GCC to pass to the 'cc1plus'.

     Do not define this macro if it does not need to do anything.  Note
     that everything defined in CC1_SPEC is already passed to 'cc1plus'
     so there is no need to duplicate the contents of CC1_SPEC in
     CC1PLUS_SPEC.

 -- Macro: ASM_SPEC
     A C string constant that tells the GCC driver program options to
     pass to the assembler.  It can also specify how to translate
     options you give to GCC into options for GCC to pass to the
     assembler.  See the file 'sun3.h' for an example of this.

     Do not define this macro if it does not need to do anything.

 -- Macro: ASM_FINAL_SPEC
     A C string constant that tells the GCC driver program how to run
     any programs which cleanup after the normal assembler.  Normally,
     this is not needed.  See the file 'mips.h' for an example of this.

     Do not define this macro if it does not need to do anything.

 -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT
     Define this macro, with no value, if the driver should give the
     assembler an argument consisting of a single dash, '-', to instruct
     it to read from its standard input (which will be a pipe connected
     to the output of the compiler proper).  This argument is given
     after any '-o' option specifying the name of the output file.

     If you do not define this macro, the assembler is assumed to read
     its standard input if given no non-option arguments.  If your
     assembler cannot read standard input at all, use a '%{pipe:%e}'
     construct; see 'mips.h' for instance.

 -- Macro: LINK_SPEC
     A C string constant that tells the GCC driver program options to
     pass to the linker.  It can also specify how to translate options
     you give to GCC into options for GCC to pass to the linker.

     Do not define this macro if it does not need to do anything.

 -- Macro: LIB_SPEC
     Another C string constant used much like 'LINK_SPEC'.  The
     difference between the two is that 'LIB_SPEC' is used at the end of
     the command given to the linker.

     If this macro is not defined, a default is provided that loads the
     standard C library from the usual place.  See 'gcc.c'.

 -- Macro: LIBGCC_SPEC
     Another C string constant that tells the GCC driver program how and
     when to place a reference to 'libgcc.a' into the linker command
     line.  This constant is placed both before and after the value of
     'LIB_SPEC'.

     If this macro is not defined, the GCC driver provides a default
     that passes the string '-lgcc' to the linker.

 -- Macro: REAL_LIBGCC_SPEC
     By default, if 'ENABLE_SHARED_LIBGCC' is defined, the 'LIBGCC_SPEC'
     is not directly used by the driver program but is instead modified
     to refer to different versions of 'libgcc.a' depending on the
     values of the command line flags '-static', '-shared',
     '-static-libgcc', and '-shared-libgcc'.  On targets where these
     modifications are inappropriate, define 'REAL_LIBGCC_SPEC' instead.
     'REAL_LIBGCC_SPEC' tells the driver how to place a reference to
     'libgcc' on the link command line, but, unlike 'LIBGCC_SPEC', it is
     used unmodified.

 -- Macro: USE_LD_AS_NEEDED
     A macro that controls the modifications to 'LIBGCC_SPEC' mentioned
     in 'REAL_LIBGCC_SPEC'.  If nonzero, a spec will be generated that
     uses '--as-needed' or equivalent options and the shared 'libgcc' in
     place of the static exception handler library, when linking without
     any of '-static', '-static-libgcc', or '-shared-libgcc'.

 -- Macro: LINK_EH_SPEC
     If defined, this C string constant is added to 'LINK_SPEC'.  When
     'USE_LD_AS_NEEDED' is zero or undefined, it also affects the
     modifications to 'LIBGCC_SPEC' mentioned in 'REAL_LIBGCC_SPEC'.

 -- Macro: STARTFILE_SPEC
     Another C string constant used much like 'LINK_SPEC'.  The
     difference between the two is that 'STARTFILE_SPEC' is used at the
     very beginning of the command given to the linker.

     If this macro is not defined, a default is provided that loads the
     standard C startup file from the usual place.  See 'gcc.c'.

 -- Macro: ENDFILE_SPEC
     Another C string constant used much like 'LINK_SPEC'.  The
     difference between the two is that 'ENDFILE_SPEC' is used at the
     very end of the command given to the linker.

     Do not define this macro if it does not need to do anything.

 -- Macro: THREAD_MODEL_SPEC
     GCC '-v' will print the thread model GCC was configured to use.
     However, this doesn't work on platforms that are multilibbed on
     thread models, such as AIX 4.3.  On such platforms, define
     'THREAD_MODEL_SPEC' such that it evaluates to a string without
     blanks that names one of the recognized thread models.  '%*', the
     default value of this macro, will expand to the value of
     'thread_file' set in 'config.gcc'.

 -- Macro: SYSROOT_SUFFIX_SPEC
     Define this macro to add a suffix to the target sysroot when GCC is
     configured with a sysroot.  This will cause GCC to search for
     usr/lib, et al, within sysroot+suffix.

 -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC
     Define this macro to add a headers_suffix to the target sysroot
     when GCC is configured with a sysroot.  This will cause GCC to pass
     the updated sysroot+headers_suffix to CPP, causing it to search for
     usr/include, et al, within sysroot+headers_suffix.

 -- Macro: EXTRA_SPECS
     Define this macro to provide additional specifications to put in
     the 'specs' file that can be used in various specifications like
     'CC1_SPEC'.

     The definition should be an initializer for an array of structures,
     containing a string constant, that defines the specification name,
     and a string constant that provides the specification.

     Do not define this macro if it does not need to do anything.

     'EXTRA_SPECS' is useful when an architecture contains several
     related targets, which have various '..._SPECS' which are similar
     to each other, and the maintainer would like one central place to
     keep these definitions.

     For example, the PowerPC System V.4 targets use 'EXTRA_SPECS' to
     define either '_CALL_SYSV' when the System V calling sequence is
     used or '_CALL_AIX' when the older AIX-based calling sequence is
     used.

     The 'config/rs6000/rs6000.h' target file defines:

          #define EXTRA_SPECS \
            { "cpp_sysv_default", CPP_SYSV_DEFAULT },

          #define CPP_SYS_DEFAULT ""

     The 'config/rs6000/sysv.h' target file defines:
          #undef CPP_SPEC
          #define CPP_SPEC \
          "%{posix: -D_POSIX_SOURCE } \
          %{mcall-sysv: -D_CALL_SYSV } \
          %{!mcall-sysv: %(cpp_sysv_default) } \
          %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}"

          #undef CPP_SYSV_DEFAULT
          #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"

     while the 'config/rs6000/eabiaix.h' target file defines
     'CPP_SYSV_DEFAULT' as:

          #undef CPP_SYSV_DEFAULT
          #define CPP_SYSV_DEFAULT "-D_CALL_AIX"

 -- Macro: LINK_LIBGCC_SPECIAL_1
     Define this macro if the driver program should find the library
     'libgcc.a'.  If you do not define this macro, the driver program
     will pass the argument '-lgcc' to tell the linker to do the search.

 -- Macro: LINK_GCC_C_SEQUENCE_SPEC
     The sequence in which libgcc and libc are specified to the linker.
     By default this is '%G %L %G'.

 -- Macro: POST_LINK_SPEC
     Define this macro to add additional steps to be executed after
     linker.  The default value of this macro is empty string.

 -- Macro: LINK_COMMAND_SPEC
     A C string constant giving the complete command line need to
     execute the linker.  When you do this, you will need to update your
     port each time a change is made to the link command line within
     'gcc.c'.  Therefore, define this macro only if you need to
     completely redefine the command line for invoking the linker and
     there is no other way to accomplish the effect you need.
     Overriding this macro may be avoidable by overriding
     'LINK_GCC_C_SEQUENCE_SPEC' instead.

 -- Common Target Hook: bool TARGET_ALWAYS_STRIP_DOTDOT
     True if '..' 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.

 -- Macro: 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 target and thus do not need to be handled specially when using
     'MULTILIB_OPTIONS'.

     Do not define this macro if 'MULTILIB_OPTIONS' is not defined in
     the target makefile fragment or if none of the options listed in
     'MULTILIB_OPTIONS' are set by default.  *Note Target Fragment::.

 -- Macro: RELATIVE_PREFIX_NOT_LINKDIR
     Define this macro to tell 'gcc' that it should only translate a
     '-B' prefix into a '-L' linker option if the prefix indicates an
     absolute file name.

 -- Macro: MD_EXEC_PREFIX
     If defined, this macro is an additional prefix to try after
     'STANDARD_EXEC_PREFIX'.  'MD_EXEC_PREFIX' is not searched when the
     compiler is built as a cross compiler.  If you define
     'MD_EXEC_PREFIX', then be sure to add it to the list of directories
     used to find the assembler in 'configure.ac'.

 -- Macro: STANDARD_STARTFILE_PREFIX
     Define this macro as a C string constant if you wish to override
     the standard choice of 'libdir' as the default prefix to try when
     searching for startup files such as 'crt0.o'.
     'STANDARD_STARTFILE_PREFIX' is not searched when the compiler is
     built as a cross compiler.

 -- Macro: STANDARD_STARTFILE_PREFIX_1
     Define this macro as a C string constant if you wish to override
     the standard choice of '/lib' as a prefix to try after the default
     prefix when searching for startup files such as 'crt0.o'.
     'STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is
     built as a cross compiler.

 -- Macro: STANDARD_STARTFILE_PREFIX_2
     Define this macro as a C string constant if you wish to override
     the standard choice of '/lib' as yet another prefix to try after
     the default prefix when searching for startup files such as
     'crt0.o'.  'STANDARD_STARTFILE_PREFIX_2' is not searched when the
     compiler is built as a cross compiler.

 -- Macro: MD_STARTFILE_PREFIX
     If defined, this macro supplies an additional prefix to try after
     the standard prefixes.  'MD_EXEC_PREFIX' is not searched when the
     compiler is built as a cross compiler.

 -- Macro: MD_STARTFILE_PREFIX_1
     If defined, this macro supplies yet another prefix to try after the
     standard prefixes.  It is not searched when the compiler is built
     as a cross compiler.

 -- Macro: INIT_ENVIRONMENT
     Define this macro as a C string constant if you wish to set
     environment variables for programs called by the driver, such as
     the assembler and loader.  The driver passes the value of this
     macro to 'putenv' to initialize the necessary environment
     variables.

 -- Macro: LOCAL_INCLUDE_DIR
     Define this macro as a C string constant if you wish to override
     the standard choice of '/usr/local/include' as the default prefix
     to try when searching for local header files.  'LOCAL_INCLUDE_DIR'
     comes before 'NATIVE_SYSTEM_HEADER_DIR' (set in 'config.gcc',
     normally '/usr/include') in the search order.

     Cross compilers do not search either '/usr/local/include' or its
     replacement.

 -- Macro: NATIVE_SYSTEM_HEADER_COMPONENT
     The "component" corresponding to 'NATIVE_SYSTEM_HEADER_DIR'.  See
     'INCLUDE_DEFAULTS', below, for the description of components.  If
     you do not define this macro, no component is used.

 -- Macro: INCLUDE_DEFAULTS
     Define this macro if you wish to override the entire default search
     path for include files.  For a native compiler, the default search
     path usually consists of 'GCC_INCLUDE_DIR', 'LOCAL_INCLUDE_DIR',
     'GPLUSPLUS_INCLUDE_DIR', and 'NATIVE_SYSTEM_HEADER_DIR'.  In
     addition, 'GPLUSPLUS_INCLUDE_DIR' and 'GCC_INCLUDE_DIR' are defined
     automatically by 'Makefile', and specify private search areas for
     GCC.  The directory 'GPLUSPLUS_INCLUDE_DIR' is used only for C++
     programs.

     The definition should be an initializer for an array of structures.
     Each array element should have four elements: the directory name (a
     string constant), the component name (also a string constant), a
     flag for C++-only directories, and a flag showing that the includes
     in the directory don't need to be wrapped in 'extern 'C'' when
     compiling C++.  Mark the end of the array with a null element.

     The component name denotes what GNU package the include file is
     part of, if any, in all uppercase letters.  For example, it might
     be 'GCC' or 'BINUTILS'.  If the package is part of a
     vendor-supplied operating system, code the component name as '0'.

     For example, here is the definition used for VAX/VMS:

          #define INCLUDE_DEFAULTS \
          {                                       \
            { "GNU_GXX_INCLUDE:", "G++", 1, 1},   \
            { "GNU_CC_INCLUDE:", "GCC", 0, 0},    \
            { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0},  \
            { ".", 0, 0, 0},                      \
            { 0, 0, 0, 0}                         \
          }

 Here is the order of prefixes tried for exec files:

  1. Any prefixes specified by the user with '-B'.

  2. The environment variable 'GCC_EXEC_PREFIX' or, if 'GCC_EXEC_PREFIX'
     is not set and the compiler has not been installed in the
     configure-time PREFIX, the location in which the compiler has
     actually been installed.

  3. The directories specified by the environment variable
     'COMPILER_PATH'.

  4. The macro 'STANDARD_EXEC_PREFIX', if the compiler has been
     installed in the configured-time PREFIX.

  5. The location '/usr/libexec/gcc/', but only if this is a native
     compiler.

  6. The location '/usr/lib/gcc/', but only if this is a native
     compiler.

  7. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a
     native compiler.

 Here is the order of prefixes tried for startfiles:

  1. Any prefixes specified by the user with '-B'.

  2. The environment variable 'GCC_EXEC_PREFIX' or its automatically
     determined value based on the installed toolchain location.

  3. The directories specified by the environment variable
     'LIBRARY_PATH' (or port-specific name; native only, cross compilers
     do not use this).

  4. The macro 'STANDARD_EXEC_PREFIX', but only if the toolchain is
     installed in the configured PREFIX or this is a native compiler.

  5. The location '/usr/lib/gcc/', but only if this is a native
     compiler.

  6. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a
     native compiler.

  7. The macro 'MD_STARTFILE_PREFIX', if defined, but only if this is a
     native compiler, or we have a target system root.

  8. The macro 'MD_STARTFILE_PREFIX_1', if defined, but only if this is
     a native compiler, or we have a target system root.

  9. The macro 'STANDARD_STARTFILE_PREFIX', with any sysroot
     modifications.  If this path is relative it will be prefixed by
     'GCC_EXEC_PREFIX' and the machine suffix or 'STANDARD_EXEC_PREFIX'
     and the machine suffix.

  10. The macro 'STANDARD_STARTFILE_PREFIX_1', but only if this is a
     native compiler, or we have a target system root.  The default for
     this macro is '/lib/'.

  11. The macro 'STANDARD_STARTFILE_PREFIX_2', but only if this is a
     native compiler, or we have a target system root.  The default for
     this macro is '/usr/lib/'.


File: gccint.info,  Node: Run-time Target,  Next: Per-Function Data,  Prev: Driver,  Up: Target Macros

17.3 Run-time Target Specification
==================================

Here are run-time target specifications.

 -- Macro: TARGET_CPU_CPP_BUILTINS ()
     This function-like macro expands to a block of code that defines
     built-in preprocessor macros and assertions for the target CPU,
     using the functions 'builtin_define', 'builtin_define_std' and
     'builtin_assert'.  When the front end calls this macro it provides
     a trailing semicolon, and since it has finished command line option
     processing your code can use those results freely.

     'builtin_assert' takes a string in the form you pass to the
     command-line option '-A', such as 'cpu=mips', and creates the
     assertion.  'builtin_define' takes a string in the form accepted by
     option '-D' and unconditionally defines the macro.

     'builtin_define_std' takes a string representing the name of an
     object-like macro.  If it doesn't lie in the user's namespace,
     'builtin_define_std' defines it unconditionally.  Otherwise, it
     defines a version with two leading underscores, and another version
     with two leading and trailing underscores, and defines the original
     only if an ISO standard was not requested on the command line.  For
     example, passing 'unix' defines '__unix', '__unix__' and possibly
     'unix'; passing '_mips' defines '__mips', '__mips__' and possibly
     '_mips', and passing '_ABI64' defines only '_ABI64'.

     You can also test for the C dialect being compiled.  The variable
     'c_language' is set to one of 'clk_c', 'clk_cplusplus' or
     'clk_objective_c'.  Note that if we are preprocessing assembler,
     this variable will be 'clk_c' but the function-like macro
     'preprocessing_asm_p()' will return true, so you might want to
     check for that first.  If you need to check for strict ANSI, the
     variable 'flag_iso' can be used.  The function-like macro
     'preprocessing_trad_p()' can be used to check for traditional
     preprocessing.

 -- Macro: TARGET_OS_CPP_BUILTINS ()
     Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional
     and is used for the target operating system instead.

 -- Macro: TARGET_OBJFMT_CPP_BUILTINS ()
     Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional
     and is used for the target object format.  'elfos.h' uses this
     macro to define '__ELF__', so you probably do not need to define it
     yourself.

 -- Variable: extern int target_flags
     This variable is declared in 'options.h', which is included before
     any target-specific headers.

 -- Common Target Hook: int TARGET_DEFAULT_TARGET_FLAGS
     This variable specifies the initial value of 'target_flags'.  Its
     default setting is 0.

 -- Common Target Hook: bool TARGET_HANDLE_OPTION (struct gcc_options
          *OPTS, struct gcc_options *OPTS_SET, const struct
          cl_decoded_option *DECODED, location_t LOC)
     This hook is called whenever the user specifies one of the
     target-specific options described by the '.opt' definition files
     (*note 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.

     DECODED specifies the option and its arguments.  OPTS and OPTS_SET
     are the 'gcc_options' structures to be used for storing option
     state, and LOC is the location at which the option was passed
     ('UNKNOWN_LOCATION' except for options passed via attributes).

 -- C Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char
          *ARG, int VALUE)
     This target hook is called whenever the user specifies one of the
     target-specific C language family options described by the '.opt'
     definition files(*note Options::).  It has the opportunity to do
     some option-specific processing and should return true if the
     option is valid.  The arguments are like for
     'TARGET_HANDLE_OPTION'.  The default definition does nothing but
     return false.

     In general, you should use 'TARGET_HANDLE_OPTION' to handle
     options.  However, if processing an option requires routines that
     are only available in the C (and related language) front ends, then
     you should use 'TARGET_HANDLE_C_OPTION' instead.

 -- C Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree
          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
     'NSString' ('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 STRING.  At present, the hook is used by
     Objective-C only, to obtain a common-format string object when the
     target provides one.

 -- C Target Hook: void TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE
          (const char *CLASSNAME)
     Declare that Objective C class CLASSNAME is referenced by the
     current TU.

 -- C Target Hook: void TARGET_OBJC_DECLARE_CLASS_DEFINITION (const char
          *CLASSNAME)
     Declare that Objective C class CLASSNAME is defined by the current
     TU.

 -- C Target Hook: bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree
          STRINGREF)
     If a target implements string objects then this hook should return
     'true' if STRINGREF is a valid reference to such an object.

 -- C Target Hook: void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree
          FORMAT_ARG, tree ARGS_LIST)
     If a target implements string objects then this hook should should
     provide a facility to check the function arguments in ARGS_LIST
     against the format specifiers in FORMAT_ARG where the type of
     FORMAT_ARG is one recognized as a valid string reference type.

 -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void)
     This target function is similar to the hook
     'TARGET_OPTION_OVERRIDE' but is called when the optimize level is
     changed via an attribute or pragma or when it is reset at the end
     of the code affected by the attribute or pragma.  It is not called
     at the beginning of compilation when 'TARGET_OPTION_OVERRIDE' is
     called so if you want to perform these actions then, you should
     have 'TARGET_OPTION_OVERRIDE' call
     'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'.

 -- Macro: C_COMMON_OVERRIDE_OPTIONS
     This is similar to the 'TARGET_OPTION_OVERRIDE' hook but is only
     used in the C language frontends (C, Objective-C, C++,
     Objective-C++) and so can be used to alter option flag variables
     which only exist in those frontends.

 -- 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 options are processed once just after the
     optimization level is determined and before the remainder of the
     command options have been parsed, so may be overridden by other
     options passed explicitly.

     This processing is run once at program startup and when the
     optimization options are changed via '#pragma GCC optimize' or by
     using the 'optimize' attribute.

 -- Common Target Hook: void TARGET_OPTION_INIT_STRUCT (struct
          gcc_options *OPTS)
     Set target-dependent initial values of fields in OPTS.

 -- Common Target Hook: void TARGET_OPTION_DEFAULT_PARAMS (void)
     Set target-dependent default values for '--param' settings, using
     calls to 'set_default_param_value'.

 -- Macro: SWITCHABLE_TARGET
     Some targets need to switch between substantially different
     subtargets during compilation.  For example, the MIPS target has
     one subtarget for the traditional MIPS architecture and another for
     MIPS16.  Source code can switch between these two subarchitectures
     using the 'mips16' and 'nomips16' attributes.

     Such subtargets can differ in things like the set of available
     registers, the set of available instructions, the costs of various
     operations, and so on.  GCC caches a lot of this type of
     information in global variables, and recomputing them for each
     subtarget takes a significant amount of time.  The compiler
     therefore provides a facility for maintaining several versions of
     the global variables and quickly switching between them; see
     'target-globals.h' for details.

     Define this macro to 1 if your target needs this facility.  The
     default is 0.

 -- Target Hook: bool TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P
          (void)
     Returns true if the target supports IEEE 754 floating-point
     exceptions and rounding modes, false otherwise.  This is intended
     to relate to the 'float' and 'double' types, but not necessarily
     'long double'.  By default, returns true if the 'adddf3'
     instruction pattern is available and false otherwise, on the
     assumption that hardware floating point supports exceptions and
     rounding modes but software floating point does not.


File: gccint.info,  Node: Per-Function Data,  Next: Storage Layout,  Prev: Run-time Target,  Up: Target Macros

17.4 Defining data structures for per-function information.
===========================================================

If the target needs to store information on a per-function basis, GCC
provides a macro and a couple of variables to allow this.  Note, just
using statics to store the information is a bad idea, since GCC supports
nested functions, so you can be halfway through encoding one function
when another one comes along.

 GCC defines a data structure called 'struct function' which contains
all of the data specific to an individual function.  This structure
contains a field called 'machine' whose type is 'struct machine_function
*', which can be used by targets to point to their own specific data.

 If a target needs per-function specific data it should define the type
'struct machine_function' and also the macro 'INIT_EXPANDERS'.  This
macro should be used to initialize the function pointer
'init_machine_status'.  This pointer is explained below.

 One typical use of per-function, target specific data is to create an
RTX to hold the register containing the function's return address.  This
RTX can then be used to implement the '__builtin_return_address'
function, for level 0.

 Note--earlier implementations of GCC used a single data area to hold
all of the per-function information.  Thus when processing of a nested
function began the old per-function data had to be pushed onto a stack,
and when the processing was finished, it had to be popped off the stack.
GCC used to provide function pointers called 'save_machine_status' and
'restore_machine_status' to handle the saving and restoring of the
target specific information.  Since the single data area approach is no
longer used, these pointers are no longer supported.

 -- Macro: INIT_EXPANDERS
     Macro called to initialize any target specific information.  This
     macro is called once per function, before generation of any RTL has
     begun.  The intention of this macro is to allow the initialization
     of the function pointer 'init_machine_status'.

 -- Variable: void (*)(struct function *) init_machine_status
     If this function pointer is non-'NULL' it will be called once per
     function, before function compilation starts, in order to allow the
     target to perform any target specific initialization of the 'struct
     function' structure.  It is intended that this would be used to
     initialize the 'machine' of that structure.

     'struct machine_function' structures are expected to be freed by
     GC.  Generally, any memory that they reference must be allocated by
     using GC allocation, including the structure itself.


File: gccint.info,  Node: Storage Layout,  Next: Type Layout,  Prev: Per-Function Data,  Up: Target Macros

17.5 Storage Layout
===================

Note that the definitions of the macros in this table which are sizes or
alignments measured in bits do not need to be constant.  They can be C
expressions that refer to static variables, such as the 'target_flags'.
*Note Run-time Target::.

 -- Macro: BITS_BIG_ENDIAN
     Define this macro to have the value 1 if the most significant bit
     in a byte has the lowest number; otherwise define it to have the
     value zero.  This means that bit-field instructions count from the
     most significant bit.  If the machine has no bit-field
     instructions, then this must still be defined, but it doesn't
     matter which value it is defined to.  This macro need not be a
     constant.

     This macro does not affect the way structure fields are packed into
     bytes or words; that is controlled by 'BYTES_BIG_ENDIAN'.

 -- Macro: BYTES_BIG_ENDIAN
     Define this macro to have the value 1 if the most significant byte
     in a word has the lowest number.  This macro need not be a
     constant.

 -- Macro: 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; see '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.

 -- Macro: 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
     'WORDS_BIG_ENDIAN' controls the order of words in memory.

 -- Macro: FLOAT_WORDS_BIG_ENDIAN
     Define this macro to have the value 1 if 'DFmode', 'XFmode' or
     'TFmode' floating point numbers are stored in memory with the word
     containing the sign bit at the lowest address; otherwise define it
     to have the value 0.  This macro need not be a constant.

     You need not define this macro if the ordering is the same as for
     multi-word integers.

 -- Macro: BITS_PER_WORD
     Number of bits in a word.  If you do not define this macro, the
     default is 'BITS_PER_UNIT * UNITS_PER_WORD'.

 -- Macro: MAX_BITS_PER_WORD
     Maximum number of bits in a word.  If this is undefined, the
     default is 'BITS_PER_WORD'.  Otherwise, it is the constant value
     that is the largest value that 'BITS_PER_WORD' can have at
     run-time.

 -- Macro: UNITS_PER_WORD
     Number of storage units in a word; normally the size of a
     general-purpose register, a power of two from 1 or 8.

 -- Macro: MIN_UNITS_PER_WORD
     Minimum number of units in a word.  If this is undefined, the
     default is 'UNITS_PER_WORD'.  Otherwise, it is the constant value
     that is the smallest value that 'UNITS_PER_WORD' can have at
     run-time.

 -- Macro: POINTER_SIZE
     Width of a pointer, in bits.  You must specify a value no wider
     than the width of 'Pmode'.  If it is not equal to the width of
     'Pmode', you must define 'POINTERS_EXTEND_UNSIGNED'.  If you do not
     specify a value the default is 'BITS_PER_WORD'.

 -- Macro: POINTERS_EXTEND_UNSIGNED
     A C expression that determines how pointers should be extended from
     'ptr_mode' to either 'Pmode' or 'word_mode'.  It is greater than
     zero if pointers should be zero-extended, zero if they should be
     sign-extended, and negative if some other sort of conversion is
     needed.  In the last case, the extension is done by the target's
     'ptr_extend' instruction.

     You need not define this macro if the 'ptr_mode', 'Pmode' and
     'word_mode' are all the same width.

 -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE)
     A macro to update M and UNSIGNEDP when an object whose type is TYPE
     and which has the specified mode and signedness is to be stored in
     a register.  This macro is only called when TYPE is a scalar type.

     On most RISC machines, which only have operations that operate on a
     full register, define this macro to set M to 'word_mode' if M is an
     integer mode narrower than 'BITS_PER_WORD'.  In most cases, only
     integer modes should be widened because wider-precision
     floating-point operations are usually more expensive than their
     narrower counterparts.

     For most machines, the macro definition does not change UNSIGNEDP.
     However, some machines, have instructions that preferentially
     handle either signed or unsigned quantities of certain modes.  For
     example, on the DEC Alpha, 32-bit loads from memory and 32-bit add
     instructions sign-extend the result to 64 bits.  On such machines,
     set UNSIGNEDP according to which kind of extension is more
     efficient.

     Do not define this macro if it would never modify M.

 -- Target Hook: machine_mode TARGET_PROMOTE_FUNCTION_MODE (const_tree
          TYPE, machine_mode MODE, int *PUNSIGNEDP, const_tree FUNTYPE,
          int FOR_RETURN)
     Like 'PROMOTE_MODE', but it is applied to outgoing function
     arguments or function return values.  The target hook should return
     the new mode and possibly change '*PUNSIGNEDP' if the promotion
     should change signedness.  This function is called only for scalar
     _or pointer_ types.

     FOR_RETURN allows to distinguish the promotion of arguments and
     return values.  If it is '1', a return value is being promoted and
     'TARGET_FUNCTION_VALUE' must perform the same promotions done here.
     If it is '2', the returned mode should be that of the register in
     which an incoming parameter is copied, or the outgoing result is
     computed; then the hook should return the same mode as
     'promote_mode', though the signedness may be different.

     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
     'default_promote_function_mode_always_promote' if you would like to
     apply the same rules given by 'PROMOTE_MODE'.

 -- Macro: PARM_BOUNDARY
     Normal alignment required for function parameters on the stack, in
     bits.  All stack parameters receive at least this much alignment
     regardless of data type.  On most machines, this is the same as the
     size of an integer.

 -- Macro: STACK_BOUNDARY
     Define this macro to the minimum alignment enforced by hardware for
     the stack pointer on this machine.  The definition is a C
     expression for the desired alignment (measured in bits).  This
     value is used as a default if 'PREFERRED_STACK_BOUNDARY' is not
     defined.  On most machines, this should be the same as
     'PARM_BOUNDARY'.

 -- Macro: PREFERRED_STACK_BOUNDARY
     Define this macro if you wish to preserve a certain alignment for
     the stack pointer, greater than what the hardware enforces.  The
     definition is a C expression for the desired alignment (measured in
     bits).  This macro must evaluate to a value equal to or larger than
     'STACK_BOUNDARY'.

 -- Macro: INCOMING_STACK_BOUNDARY
     Define this macro if the incoming stack boundary may be different
     from 'PREFERRED_STACK_BOUNDARY'.  This macro must evaluate to a
     value equal to or larger than 'STACK_BOUNDARY'.

 -- Macro: FUNCTION_BOUNDARY
     Alignment required for a function entry point, in bits.

 -- Macro: BIGGEST_ALIGNMENT
     Biggest alignment that any data type can require on this machine,
     in bits.  Note that this is not the biggest alignment that is
     supported, just the biggest alignment that, when violated, may
     cause a fault.

 -- Target Hook: HOST_WIDE_INT TARGET_ABSOLUTE_BIGGEST_ALIGNMENT
     If defined, this target hook specifies the absolute biggest
     alignment that a type or variable can have on this machine,
     otherwise, 'BIGGEST_ALIGNMENT' is used.

 -- Macro: MALLOC_ABI_ALIGNMENT
     Alignment, in bits, a C conformant malloc implementation has to
     provide.  If not defined, the default value is 'BITS_PER_WORD'.

 -- Macro: ATTRIBUTE_ALIGNED_VALUE
     Alignment used by the '__attribute__ ((aligned))' construct.  If
     not defined, the default value is 'BIGGEST_ALIGNMENT'.

 -- Macro: MINIMUM_ATOMIC_ALIGNMENT
     If defined, the smallest alignment, in bits, that can be given to
     an object that can be referenced in one operation, without
     disturbing any nearby object.  Normally, this is 'BITS_PER_UNIT',
     but may be larger on machines that don't have byte or half-word
     store operations.

 -- Macro: BIGGEST_FIELD_ALIGNMENT
     Biggest alignment that any structure or union field can require on
     this machine, in bits.  If defined, this overrides
     'BIGGEST_ALIGNMENT' for structure and union fields only, unless the
     field alignment has been set by the '__attribute__ ((aligned (N)))'
     construct.

 -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED)
     An expression for the alignment of a structure field FIELD if the
     alignment computed in the usual way (including applying of
     'BIGGEST_ALIGNMENT' and 'BIGGEST_FIELD_ALIGNMENT' to the alignment)
     is COMPUTED.  It overrides alignment only if the field alignment
     has not been set by the '__attribute__ ((aligned (N)))' construct.

 -- Macro: MAX_STACK_ALIGNMENT
     Biggest stack alignment guaranteed by the backend.  Use this macro
     to specify the maximum alignment of a variable on stack.

     If not defined, the default value is 'STACK_BOUNDARY'.

 -- Macro: MAX_OFILE_ALIGNMENT
     Biggest alignment supported by the object file format of this
     machine.  Use this macro to limit the alignment which can be
     specified using the '__attribute__ ((aligned (N)))' construct.  If
     not defined, the default value is 'BIGGEST_ALIGNMENT'.

     On systems that use ELF, the default (in 'config/elfos.h') is the
     largest supported 32-bit ELF section alignment representable on a
     32-bit host e.g.  '(((uint64_t) 1 << 28) * 8)'.  On 32-bit ELF the
     largest supported section alignment in bits is '(0x80000000 * 8)',
     but this is not representable on 32-bit hosts.

 -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN)
     If defined, a C expression to compute the alignment for a variable
     in the static store.  TYPE is the data type, and BASIC-ALIGN is the
     alignment that the object would ordinarily have.  The value of this
     macro is used instead of that alignment to align the object.

     If this macro is not defined, then BASIC-ALIGN is used.

     One use of this macro is to increase alignment of medium-size data
     to make it all fit in fewer cache lines.  Another is to cause
     character arrays to be word-aligned so that 'strcpy' calls that
     copy constants to character arrays can be done inline.

 -- Macro: DATA_ABI_ALIGNMENT (TYPE, BASIC-ALIGN)
     Similar to 'DATA_ALIGNMENT', but for the cases where the ABI
     mandates some alignment increase, instead of optimization only
     purposes.  E.g. AMD x86-64 psABI says that variables with array
     type larger than 15 bytes must be aligned to 16 byte boundaries.

     If this macro is not defined, then BASIC-ALIGN is used.

 -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN)
     If defined, a C expression to compute the alignment given to a
     constant that is being placed in memory.  CONSTANT is the constant
     and BASIC-ALIGN is the alignment that the object would ordinarily
     have.  The value of this macro is used instead of that alignment to
     align the object.

     The default definition just returns BASIC-ALIGN.

     The typical use of this macro is to increase alignment for string
     constants to be word aligned so that 'strcpy' calls that copy
     constants can be done inline.

 -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN)
     If defined, a C expression to compute the alignment for a variable
     in the local store.  TYPE is the data type, and BASIC-ALIGN is the
     alignment that the object would ordinarily have.  The value of this
     macro is used instead of that alignment to align the object.

     If this macro is not defined, then BASIC-ALIGN is used.

     One use of this macro is to increase alignment of medium-size data
     to make it all fit in fewer cache lines.

     If the value of this macro has a type, it should be an unsigned
     type.

 -- Target Hook: HOST_WIDE_INT TARGET_VECTOR_ALIGNMENT (const_tree TYPE)
     This hook can be used to define the alignment for a vector of type
     TYPE, in order to comply with a platform ABI. The default is to
     require natural alignment for vector types.  The alignment returned
     by this hook must be a power-of-two multiple of the default
     alignment of the vector element type.

 -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN)
     If defined, a C expression to compute the alignment for stack slot.
     TYPE is the data type, MODE is the widest mode available, and
     BASIC-ALIGN is the alignment that the slot would ordinarily have.
     The value of this macro is used instead of that alignment to align
     the slot.

     If this macro is not defined, then BASIC-ALIGN is used when TYPE is
     'NULL'.  Otherwise, 'LOCAL_ALIGNMENT' will be used.

     This macro is to set alignment of stack slot to the maximum
     alignment of all possible modes which the slot may have.

     If the value of this macro has a type, it should be an unsigned
     type.

 -- Macro: LOCAL_DECL_ALIGNMENT (DECL)
     If defined, a C expression to compute the alignment for a local
     variable DECL.

     If this macro is not defined, then 'LOCAL_ALIGNMENT (TREE_TYPE
     (DECL), DECL_ALIGN (DECL))' is used.

     One use of this macro is to increase alignment of medium-size data
     to make it all fit in fewer cache lines.

     If the value of this macro has a type, it should be an unsigned
     type.

 -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN)
     If defined, a C expression to compute the minimum required
     alignment for dynamic stack realignment purposes for EXP (a type or
     decl), MODE, assuming normal alignment ALIGN.

     If this macro is not defined, then ALIGN will be used.

 -- Macro: EMPTY_FIELD_BOUNDARY
     Alignment in bits to be given to a structure bit-field that follows
     an empty field such as 'int : 0;'.

     If 'PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro.

 -- Macro: STRUCTURE_SIZE_BOUNDARY
     Number of bits which any structure or union's size must be a
     multiple of.  Each structure or union's size is rounded up to a
     multiple of this.

     If you do not define this macro, the default is the same as
     'BITS_PER_UNIT'.

 -- Macro: STRICT_ALIGNMENT
     Define this macro to be the value 1 if instructions will fail to
     work if given data not on the nominal alignment.  If instructions
     will merely go slower in that case, define this macro as 0.

 -- Macro: PCC_BITFIELD_TYPE_MATTERS
     Define this if you wish to imitate the way many other C compilers
     handle alignment of bit-fields and the structures that contain
     them.

     The behavior is that the type written for a named bit-field ('int',
     'short', or other integer type) imposes an alignment for the entire
     structure, as if the structure really did contain an ordinary field
     of that type.  In addition, the bit-field is placed within the
     structure so that it would fit within such a field, not crossing a
     boundary for it.

     Thus, on most machines, a named bit-field whose type is written as
     'int' would not cross a four-byte boundary, and would force
     four-byte alignment for the whole structure.  (The alignment used
     may not be four bytes; it is controlled by the other alignment
     parameters.)

     An unnamed bit-field will not affect the alignment of the
     containing structure.

     If the macro is defined, its definition should be a C expression; a
     nonzero value for the expression enables this behavior.

     Note that if this macro is not defined, or its value is zero, some
     bit-fields may cross more than one alignment boundary.  The
     compiler can support such references if there are 'insv', 'extv',
     and 'extzv' insns that can directly reference memory.

     The other known way of making bit-fields work is to define
     'STRUCTURE_SIZE_BOUNDARY' as large as 'BIGGEST_ALIGNMENT'.  Then
     every structure can be accessed with fullwords.

     Unless the machine has bit-field instructions or you define
     'STRUCTURE_SIZE_BOUNDARY' that way, you must define
     'PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value.

     If your aim is to make GCC use the same conventions for laying out
     bit-fields as are used by another compiler, here is how to
     investigate what the other compiler does.  Compile and run this
     program:

          struct foo1
          {
            char x;
            char :0;
            char y;
          };

          struct foo2
          {
            char x;
            int :0;
            char y;
          };

          main ()
          {
            printf ("Size of foo1 is %d\n",
                    sizeof (struct foo1));
            printf ("Size of foo2 is %d\n",
                    sizeof (struct foo2));
            exit (0);
          }

     If this prints 2 and 5, then the compiler's behavior is what you
     would get from 'PCC_BITFIELD_TYPE_MATTERS'.

 -- Macro: BITFIELD_NBYTES_LIMITED
     Like 'PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited
     to aligning a bit-field within the structure.

 -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void)
     When 'PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine
     whether unnamed bitfields affect the alignment of the containing
     structure.  The hook should return true if the structure should
     inherit the alignment requirements of an unnamed bitfield's type.

 -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void)
     This target hook should return 'true' if accesses to volatile
     bitfields should use the narrowest mode possible.  It should return
     'false' if these accesses should use the bitfield container type.

     The default is 'false'.

 -- Target Hook: bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree FIELD,
          machine_mode MODE)
     Return true if a structure, union or array containing FIELD should
     be accessed using 'BLKMODE'.

     If FIELD is the only field in the structure, MODE is its mode,
     otherwise MODE is VOIDmode.  MODE is provided in the case where
     structures of one field would require the structure's mode to
     retain the field's mode.

     Normally, this is not needed.

 -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED)
     Define this macro as an expression for the alignment of a type
     (given by TYPE as a tree node) if the alignment computed in the
     usual way is COMPUTED and the alignment explicitly specified was
     SPECIFIED.

     The default is to use SPECIFIED if it is larger; otherwise, use the
     smaller of COMPUTED and 'BIGGEST_ALIGNMENT'

 -- Macro: MAX_FIXED_MODE_SIZE
     An integer expression for the size in bits of the largest integer
     machine mode that should actually be used.  All integer machine
     modes of this size or smaller can be used for structures and unions
     with the appropriate sizes.  If this macro is undefined,
     'GET_MODE_BITSIZE (DImode)' is assumed.

 -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL)
     If defined, an expression of type 'machine_mode' that specifies the
     mode of the save area operand of a 'save_stack_LEVEL' named pattern
     (*note Standard Names::).  SAVE_LEVEL is one of 'SAVE_BLOCK',
     'SAVE_FUNCTION', or 'SAVE_NONLOCAL' and selects which of the three
     named patterns is having its mode specified.

     You need not define this macro if it always returns 'Pmode'.  You
     would most commonly define this macro if the 'save_stack_LEVEL'
     patterns need to support both a 32- and a 64-bit mode.

 -- Macro: STACK_SIZE_MODE
     If defined, an expression of type 'machine_mode' that specifies the
     mode of the size increment operand of an 'allocate_stack' named
     pattern (*note Standard Names::).

     You need not define this macro if it always returns 'word_mode'.
     You would most commonly define this macro if the 'allocate_stack'
     pattern needs to support both a 32- and a 64-bit mode.

 -- Target Hook: machine_mode TARGET_LIBGCC_CMP_RETURN_MODE (void)
     This target hook should return the mode to be used for the return
     value of compare instructions expanded to libgcc calls.  If not
     defined 'word_mode' is returned which is the right choice for a
     majority of targets.

 -- Target Hook: machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void)
     This target hook should return the mode to be used for the shift
     count operand of shift instructions expanded to libgcc calls.  If
     not defined 'word_mode' is returned which is the right choice for a
     majority of targets.

 -- Target Hook: machine_mode TARGET_UNWIND_WORD_MODE (void)
     Return machine mode to be used for '_Unwind_Word' type.  The
     default is to use 'word_mode'.

 -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree
          RECORD_TYPE)
     This target hook returns 'true' if bit-fields in the given
     RECORD_TYPE are to be laid out following the rules of Microsoft
     Visual C/C++, namely: (i) a bit-field won't share the same storage
     unit with the previous bit-field if their underlying types have
     different sizes, and the bit-field will be aligned to the highest
     alignment of the underlying types of itself and of the previous
     bit-field; (ii) a zero-sized bit-field will affect the alignment of
     the whole enclosing structure, even if it is unnamed; except that
     (iii) a zero-sized bit-field will be disregarded unless it follows
     another bit-field of nonzero size.  If this hook returns 'true',
     other macros that control bit-field layout are ignored.

     When a bit-field is inserted into a packed record, the whole size
     of the underlying type is used by one or more same-size adjacent
     bit-fields (that is, if its long:3, 32 bits is used in the record,
     and any additional adjacent long bit-fields are packed into the
     same chunk of 32 bits.  However, if the size changes, a new field
     of that size is allocated).  In an unpacked record, this is the
     same as using alignment, but not equivalent when packing.

     If both MS bit-fields and '__attribute__((packed))' are used, the
     latter will take precedence.  If '__attribute__((packed))' is used
     on a single field when MS bit-fields are in use, it will take
     precedence for that field, but the alignment of the rest of the
     structure may affect its placement.

 -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void)
     Returns true if the target supports decimal floating point.

 -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void)
     Returns true if the target supports fixed-point arithmetic.

 -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void)
     This hook is called just before expansion into rtl, allowing the
     target to perform additional initializations or analysis before the
     expansion.  For example, the rs6000 port uses it to allocate a
     scratch stack slot for use in copying SDmode values between memory
     and floating point registers whenever the function being expanded
     has any SDmode usage.

 -- Target Hook: void TARGET_INSTANTIATE_DECLS (void)
     This hook allows the backend to perform additional instantiations
     on rtl that are not actually in any insns yet, but will be later.

 -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE)
     If your target defines any fundamental types, or any types your
     target uses should be mangled differently from the default, define
     this hook to return the appropriate encoding for these types as
     part of a C++ mangled name.  The TYPE argument is the tree
     structure representing the type to be mangled.  The hook may be
     applied to trees which are not target-specific fundamental types;
     it should return 'NULL' for all such types, as well as arguments it
     does not recognize.  If the return value is not 'NULL', it must
     point to a statically-allocated string constant.

     Target-specific fundamental types might be new fundamental types or
     qualified versions of ordinary fundamental types.  Encode new
     fundamental types as 'u N NAME', where NAME is the name used for
     the type in source code, and N is the length of NAME in decimal.
     Encode qualified versions of ordinary types as 'U N NAME CODE',
     where NAME is the name used for the type qualifier in source code,
     N is the length of NAME as above, and CODE is the code used to
     represent the unqualified version of this type.  (See
     'write_builtin_type' in 'cp/mangle.c' for the list of codes.)  In
     both cases the spaces are for clarity; do not include any spaces in
     your string.

     This hook is applied to types prior to typedef resolution.  If the
     mangled name for a particular type depends only on that type's main
     variant, you can perform typedef resolution yourself using
     'TYPE_MAIN_VARIANT' before mangling.

     The default version of this hook always returns 'NULL', which is
     appropriate for a target that does not define any new fundamental
     types.


File: gccint.info,  Node: Type Layout,  Next: Registers,  Prev: Storage Layout,  Up: Target Macros

17.6 Layout of Source Language Data Types
=========================================

These macros define the sizes and other characteristics of the standard
basic data types used in programs being compiled.  Unlike the macros in
the previous section, these apply to specific features of C and related
languages, rather than to fundamental aspects of storage layout.

 -- Macro: INT_TYPE_SIZE
     A C expression for the size in bits of the type 'int' on the target
     machine.  If you don't define this, the default is one word.

 -- Macro: SHORT_TYPE_SIZE
     A C expression for the size in bits of the type 'short' on the
     target machine.  If you don't define this, the default is half a
     word.  (If this would be less than one storage unit, it is rounded
     up to one unit.)

 -- Macro: LONG_TYPE_SIZE
     A C expression for the size in bits of the type 'long' on the
     target machine.  If you don't define this, the default is one word.

 -- Macro: ADA_LONG_TYPE_SIZE
     On some machines, the size used for the Ada equivalent of the type
     'long' by a native Ada compiler differs from that used by C.  In
     that situation, define this macro to be a C expression to be used
     for the size of that type.  If you don't define this, the default
     is the value of 'LONG_TYPE_SIZE'.

 -- Macro: LONG_LONG_TYPE_SIZE
     A C expression for the size in bits of the type 'long long' on the
     target machine.  If you don't define this, the default is two
     words.  If you want to support GNU Ada on your machine, the value
     of this macro must be at least 64.

 -- Macro: CHAR_TYPE_SIZE
     A C expression for the size in bits of the type 'char' on the
     target machine.  If you don't define this, the default is
     'BITS_PER_UNIT'.

 -- Macro: BOOL_TYPE_SIZE
     A C expression for the size in bits of the C++ type 'bool' and C99
     type '_Bool' on the target machine.  If you don't define this, and
     you probably shouldn't, the default is 'CHAR_TYPE_SIZE'.

 -- Macro: FLOAT_TYPE_SIZE
     A C expression for the size in bits of the type 'float' on the
     target machine.  If you don't define this, the default is one word.

 -- Macro: DOUBLE_TYPE_SIZE
     A C expression for the size in bits of the type 'double' on the
     target machine.  If you don't define this, the default is two
     words.

 -- Macro: LONG_DOUBLE_TYPE_SIZE
     A C expression for the size in bits of the type 'long double' on
     the target machine.  If you don't define this, the default is two
     words.

 -- Macro: SHORT_FRACT_TYPE_SIZE
     A C expression for the size in bits of the type 'short _Fract' on
     the target machine.  If you don't define this, the default is
     'BITS_PER_UNIT'.

 -- Macro: FRACT_TYPE_SIZE
     A C expression for the size in bits of the type '_Fract' on the
     target machine.  If you don't define this, the default is
     'BITS_PER_UNIT * 2'.

 -- Macro: LONG_FRACT_TYPE_SIZE
     A C expression for the size in bits of the type 'long _Fract' on
     the target machine.  If you don't define this, the default is
     'BITS_PER_UNIT * 4'.

 -- Macro: LONG_LONG_FRACT_TYPE_SIZE
     A C expression for the size in bits of the type 'long long _Fract'
     on the target machine.  If you don't define this, the default is
     'BITS_PER_UNIT * 8'.

 -- Macro: SHORT_ACCUM_TYPE_SIZE
     A C expression for the size in bits of the type 'short _Accum' on
     the target machine.  If you don't define this, the default is
     'BITS_PER_UNIT * 2'.

 -- Macro: ACCUM_TYPE_SIZE
     A C expression for the size in bits of the type '_Accum' on the
     target machine.  If you don't define this, the default is
     'BITS_PER_UNIT * 4'.

 -- Macro: LONG_ACCUM_TYPE_SIZE
     A C expression for the size in bits of the type 'long _Accum' on
     the target machine.  If you don't define this, the default is
     'BITS_PER_UNIT * 8'.

 -- Macro: LONG_LONG_ACCUM_TYPE_SIZE
     A C expression for the size in bits of the type 'long long _Accum'
     on the target machine.  If you don't define this, the default is
     'BITS_PER_UNIT * 16'.

 -- Macro: LIBGCC2_GNU_PREFIX
     This macro corresponds to the '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 '__gnu_'
     prefix for their name rather than the default '__'.  A port which
     uses this macro should also arrange to use 't-gnu-prefix' in the
     libgcc 'config.host'.

 -- Macro: TARGET_FLT_EVAL_METHOD
     A C expression for the value for 'FLT_EVAL_METHOD' in 'float.h',
     assuming, if applicable, that the floating-point control word is in
     its default state.  If you do not define this macro the value of
     'FLT_EVAL_METHOD' will be zero.

 -- Macro: WIDEST_HARDWARE_FP_SIZE
     A C expression for the size in bits of the widest floating-point
     format supported by the hardware.  If you define this macro, you
     must specify a value less than or equal to the value of
     'LONG_DOUBLE_TYPE_SIZE'.  If you do not define this macro, the
     value of 'LONG_DOUBLE_TYPE_SIZE' is the default.

 -- Macro: DEFAULT_SIGNED_CHAR
     An expression whose value is 1 or 0, according to whether the type
     'char' should be signed or unsigned by default.  The user can
     always override this default with the options '-fsigned-char' and
     '-funsigned-char'.

 -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void)
     This target hook should return true if the compiler should give an
     'enum' type only as many bytes as it takes to represent the range
     of possible values of that type.  It should return false if all
     'enum' types should be allocated like 'int'.

     The default is to return false.

 -- Macro: SIZE_TYPE
     A C expression for a string describing the name of the data type to
     use for size values.  The typedef name 'size_t' is defined using
     the contents of the string.

     The string can contain more than one keyword.  If so, separate them
     with spaces, and write first any length keyword, then 'unsigned' if
     appropriate, and finally 'int'.  The string must exactly match one
     of the data type names defined in the function
     'c_common_nodes_and_builtins' in the file 'c-family/c-common.c'.
     You may not omit 'int' or change the order--that would cause the
     compiler to crash on startup.

     If you don't define this macro, the default is '"long unsigned
     int"'.

 -- Macro: SIZETYPE
     GCC defines internal types ('sizetype', 'ssizetype', 'bitsizetype'
     and 'sbitsizetype') for expressions dealing with size.  This macro
     is a C expression for a string describing the name of the data type
     from which the precision of 'sizetype' is extracted.

     The string has the same restrictions as 'SIZE_TYPE' string.

     If you don't define this macro, the default is 'SIZE_TYPE'.

 -- Macro: PTRDIFF_TYPE
     A C expression for a string describing the name of the data type to
     use for the result of subtracting two pointers.  The typedef name
     'ptrdiff_t' is defined using the contents of the string.  See
     'SIZE_TYPE' above for more information.

     If you don't define this macro, the default is '"long int"'.

 -- Macro: WCHAR_TYPE
     A C expression for a string describing the name of the data type to
     use for wide characters.  The typedef name 'wchar_t' is defined
     using the contents of the string.  See 'SIZE_TYPE' above for more
     information.

     If you don't define this macro, the default is '"int"'.

 -- Macro: WCHAR_TYPE_SIZE
     A C expression for the size in bits of the data type for wide
     characters.  This is used in 'cpp', which cannot make use of
     'WCHAR_TYPE'.

 -- Macro: WINT_TYPE
     A C expression for a string describing the name of the data type to
     use for wide characters passed to 'printf' and returned from
     'getwc'.  The typedef name 'wint_t' is defined using the contents
     of the string.  See 'SIZE_TYPE' above for more information.

     If you don't define this macro, the default is '"unsigned int"'.

 -- Macro: INTMAX_TYPE
     A C expression for a string describing the name of the data type
     that can represent any value of any standard or extended signed
     integer type.  The typedef name 'intmax_t' is defined using the
     contents of the string.  See 'SIZE_TYPE' above for more
     information.

     If you don't define this macro, the default is the first of
     '"int"', '"long int"', or '"long long int"' that has as much
     precision as 'long long int'.

 -- Macro: UINTMAX_TYPE
     A C expression for a string describing the name of the data type
     that can represent any value of any standard or extended unsigned
     integer type.  The typedef name 'uintmax_t' is defined using the
     contents of the string.  See 'SIZE_TYPE' above for more
     information.

     If you don't define this macro, the default is the first of
     '"unsigned int"', '"long unsigned int"', or '"long long unsigned
     int"' that has as much precision as 'long long unsigned int'.

 -- Macro: SIG_ATOMIC_TYPE
 -- Macro: INT8_TYPE
 -- Macro: INT16_TYPE
 -- Macro: INT32_TYPE
 -- Macro: INT64_TYPE
 -- Macro: UINT8_TYPE
 -- Macro: UINT16_TYPE
 -- Macro: UINT32_TYPE
 -- Macro: UINT64_TYPE
 -- Macro: INT_LEAST8_TYPE
 -- Macro: INT_LEAST16_TYPE
 -- Macro: INT_LEAST32_TYPE
 -- Macro: INT_LEAST64_TYPE
 -- Macro: UINT_LEAST8_TYPE
 -- Macro: UINT_LEAST16_TYPE
 -- Macro: UINT_LEAST32_TYPE
 -- Macro: UINT_LEAST64_TYPE
 -- Macro: INT_FAST8_TYPE
 -- Macro: INT_FAST16_TYPE
 -- Macro: INT_FAST32_TYPE
 -- Macro: INT_FAST64_TYPE
 -- Macro: UINT_FAST8_TYPE
 -- Macro: UINT_FAST16_TYPE
 -- Macro: UINT_FAST32_TYPE
 -- Macro: UINT_FAST64_TYPE
 -- Macro: INTPTR_TYPE
 -- Macro: UINTPTR_TYPE
     C expressions for the standard types 'sig_atomic_t', 'int8_t',
     'int16_t', 'int32_t', 'int64_t', 'uint8_t', 'uint16_t', 'uint32_t',
     'uint64_t', 'int_least8_t', 'int_least16_t', 'int_least32_t',
     'int_least64_t', 'uint_least8_t', 'uint_least16_t',
     'uint_least32_t', 'uint_least64_t', 'int_fast8_t', 'int_fast16_t',
     'int_fast32_t', 'int_fast64_t', 'uint_fast8_t', 'uint_fast16_t',
     'uint_fast32_t', 'uint_fast64_t', 'intptr_t', and 'uintptr_t'.  See
     'SIZE_TYPE' above for more information.

     If any of these macros evaluates to a null pointer, the
     corresponding type is not supported; if GCC is configured to
     provide '<stdint.h>' in such a case, the header provided may not
     conform to C99, depending on the type in question.  The defaults
     for all of these macros are null pointers.

 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION
     The C++ compiler represents a pointer-to-member-function with a
     struct that looks like:

            struct {
              union {
                void (*fn)();
                ptrdiff_t vtable_index;
              };
              ptrdiff_t delta;
            };

     The C++ compiler must use one bit to indicate whether the function
     that will be called through a pointer-to-member-function is
     virtual.  Normally, we assume that the low-order bit of a function
     pointer must always be zero.  Then, by ensuring that the
     vtable_index is odd, we can distinguish which variant of the union
     is in use.  But, on some platforms function pointers can be odd,
     and so this doesn't work.  In that case, we use the low-order bit
     of the 'delta' field, and shift the remainder of the 'delta' field
     to the left.

     GCC will automatically make the right selection about where to
     store this bit using the 'FUNCTION_BOUNDARY' setting for your
     platform.  However, some platforms such as ARM/Thumb have
     'FUNCTION_BOUNDARY' set such that functions always start at even
     addresses, but the lowest bit of pointers to functions indicate
     whether the function at that address is in ARM or Thumb mode.  If
     this is the case of your architecture, you should define this macro
     to 'ptrmemfunc_vbit_in_delta'.

     In general, you should not have to define this macro.  On
     architectures in which function addresses are always even,
     according to 'FUNCTION_BOUNDARY', GCC will automatically define
     this macro to 'ptrmemfunc_vbit_in_pfn'.

 -- Macro: TARGET_VTABLE_USES_DESCRIPTORS
     Normally, the C++ compiler uses function pointers in vtables.  This
     macro allows the target to change to use "function descriptors"
     instead.  Function descriptors are found on targets for whom a
     function pointer is actually a small data structure.  Normally the
     data structure consists of the actual code address plus a data
     pointer to which the function's data is relative.

     If vtables are used, the value of this macro should be the number
     of words that the function descriptor occupies.

 -- Macro: TARGET_VTABLE_ENTRY_ALIGN
     By default, the vtable entries are void pointers, the so the
     alignment is the same as pointer alignment.  The value of this
     macro specifies the alignment of the vtable entry in bits.  It
     should be defined only when special alignment is necessary.  */

 -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE
     There are a few non-descriptor entries in the vtable at offsets
     below zero.  If these entries must be padded (say, to preserve the
     alignment specified by 'TARGET_VTABLE_ENTRY_ALIGN'), set this to
     the number of words in each data entry.


File: gccint.info,  Node: Registers,  Next: Register Classes,  Prev: Type Layout,  Up: Target Macros

17.7 Register Usage
===================

This section explains how to describe what registers the target machine
has, and how (in general) they can be used.

 The description of which registers a specific instruction can use is
done with register classes; see *note Register Classes::.  For
information on using registers to access a stack frame, see *note Frame
Registers::.  For passing values in registers, see *note Register
Arguments::.  For returning values in registers, see *note Scalar
Return::.

* Menu:

* Register Basics::             Number and kinds of registers.
* Allocation Order::            Order in which registers are allocated.
* Values in Registers::         What kinds of values each reg can hold.
* Leaf Functions::              Renumbering registers for leaf functions.
* Stack Registers::             Handling a register stack such as 80387.


File: gccint.info,  Node: Register Basics,  Next: Allocation Order,  Up: Registers

17.7.1 Basic Characteristics of Registers
-----------------------------------------

Registers have various characteristics.

 -- Macro: FIRST_PSEUDO_REGISTER
     Number of hardware registers known to the compiler.  They receive
     numbers 0 through 'FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo
     register's number really is assigned the number
     'FIRST_PSEUDO_REGISTER'.

 -- Macro: FIXED_REGISTERS
     An initializer that says which registers are used for fixed
     purposes all throughout the compiled code and are therefore not
     available for general allocation.  These would include the stack
     pointer, the frame pointer (except on machines where that can be
     used as a general register when no frame pointer is needed), the
     program counter on machines where that is considered one of the
     addressable registers, and any other numbered register with a
     standard use.

     This information is expressed as a sequence of numbers, separated
     by commas and surrounded by braces.  The Nth number is 1 if
     register N is fixed, 0 otherwise.

     The table initialized from this macro, and the table initialized by
     the following one, may be overridden at run time either
     automatically, by the actions of the macro
     'CONDITIONAL_REGISTER_USAGE', or by the user with the command
     options '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG'.

 -- Macro: CALL_USED_REGISTERS
     Like 'FIXED_REGISTERS' but has 1 for each register that is
     clobbered (in general) by function calls as well as for fixed
     registers.  This macro therefore identifies the registers that are
     not available for general allocation of values that must live
     across function calls.

     If a register has 0 in 'CALL_USED_REGISTERS', the compiler
     automatically saves it on function entry and restores it on
     function exit, if the register is used within the function.

 -- Macro: CALL_REALLY_USED_REGISTERS
     Like 'CALL_USED_REGISTERS' except this macro doesn't require that
     the entire set of 'FIXED_REGISTERS' be included.
     ('CALL_USED_REGISTERS' must be a superset of 'FIXED_REGISTERS').
     This macro is optional.  If not specified, it defaults to the value
     of 'CALL_USED_REGISTERS'.

 -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE)
     A C expression that is nonzero if it is not permissible to store a
     value of mode MODE in hard register number REGNO across a call
     without some part of it being clobbered.  For most machines this
     macro need not be defined.  It is only required for machines that
     do not preserve the entire contents of a register across a call.

 -- Target Hook: void TARGET_CONDITIONAL_REGISTER_USAGE (void)
     This hook may conditionally modify five variables 'fixed_regs',
     'call_used_regs', 'global_regs', 'reg_names', and
     'reg_class_contents', to take into account any dependence of these
     register sets on target flags.  The first three of these are of
     type 'char []' (interpreted as Boolean vectors).  'global_regs' is
     a 'const char *[]', and 'reg_class_contents' is a 'HARD_REG_SET'.
     Before the macro is called, 'fixed_regs', 'call_used_regs',
     'reg_class_contents', and 'reg_names' have been initialized from
     'FIXED_REGISTERS', 'CALL_USED_REGISTERS', 'REG_CLASS_CONTENTS', and
     'REGISTER_NAMES', respectively.  'global_regs' has been cleared,
     and any '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG'
     command options have been applied.

     If the usage of an entire class of registers depends on the target
     flags, you may indicate this to GCC by using this macro to modify
     'fixed_regs' and 'call_used_regs' to 1 for each of the registers in
     the classes which should not be used by GCC.  Also make
     'define_register_constraint's return 'NO_REGS' for constraints that
     shouldn't be used.

     (However, if this class is not included in 'GENERAL_REGS' and all
     of the insn patterns whose constraints permit this class are
     controlled by target switches, then GCC will automatically avoid
     using these registers when the target switches are opposed to
     them.)

 -- Macro: INCOMING_REGNO (OUT)
     Define this macro if the target machine has register windows.  This
     C expression returns the register number as seen by the called
     function corresponding to the register number OUT as seen by the
     calling function.  Return OUT if register number OUT is not an
     outbound register.

 -- Macro: OUTGOING_REGNO (IN)
     Define this macro if the target machine has register windows.  This
     C expression returns the register number as seen by the calling
     function corresponding to the register number IN as seen by the
     called function.  Return IN if register number IN is not an inbound
     register.

 -- Macro: LOCAL_REGNO (REGNO)
     Define this macro if the target machine has register windows.  This
     C expression returns true if the register is call-saved but is in
     the register window.  Unlike most call-saved registers, such
     registers need not be explicitly restored on function exit or
     during non-local gotos.

 -- Macro: PC_REGNUM
     If the program counter has a register number, define this as that
     register number.  Otherwise, do not define it.


File: gccint.info,  Node: Allocation Order,  Next: Values in Registers,  Prev: Register Basics,  Up: Registers

17.7.2 Order of Allocation of Registers
---------------------------------------

Registers are allocated in order.

 -- Macro: REG_ALLOC_ORDER
     If defined, an initializer for a vector of integers, containing the
     numbers of hard registers in the order in which GCC should prefer
     to use them (from most preferred to least).

     If this macro is not defined, registers are used lowest numbered
     first (all else being equal).

     One use of this macro is on machines where the highest numbered
     registers must always be saved and the save-multiple-registers
     instruction supports only sequences of consecutive registers.  On
     such machines, define 'REG_ALLOC_ORDER' to be an initializer that
     lists the highest numbered allocable register first.

 -- Macro: ADJUST_REG_ALLOC_ORDER
     A C statement (sans semicolon) to choose the order in which to
     allocate hard registers for pseudo-registers local to a basic
     block.

     Store the desired register order in the array 'reg_alloc_order'.
     Element 0 should be the register to allocate first; element 1, the
     next register; and so on.

     The macro body should not assume anything about the contents of
     'reg_alloc_order' before execution of the macro.

     On most machines, it is not necessary to define this macro.

 -- Macro: HONOR_REG_ALLOC_ORDER
     Normally, IRA tries to estimate the costs for saving a register in
     the prologue and restoring it in the epilogue.  This discourages it
     from using call-saved registers.  If a machine wants to ensure that
     IRA allocates registers in the order given by REG_ALLOC_ORDER even
     if some call-saved registers appear earlier than call-used ones,
     then define this macro as a C expression to nonzero.  Default is 0.

 -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO)
     In some case register allocation order is not enough for the
     Integrated Register Allocator (IRA) to generate a good code.  If
     this macro is defined, it should return a floating point value
     based on REGNO.  The cost of using REGNO for a pseudo will be
     increased by approximately the pseudo's usage frequency times the
     value returned by this macro.  Not defining this macro is
     equivalent to having it always return '0.0'.

     On most machines, it is not necessary to define this macro.


File: gccint.info,  Node: Values in Registers,  Next: Leaf Functions,  Prev: Allocation Order,  Up: Registers

17.7.3 How Values Fit in Registers
----------------------------------

This section discusses the macros that describe which kinds of values
(specifically, which machine modes) each register can hold, and how many
consecutive registers are needed for a given mode.

 -- Macro: HARD_REGNO_NREGS (REGNO, MODE)
     A C expression for the number of consecutive hard registers,
     starting at register number REGNO, required to hold a value of mode
     MODE.  This macro must never return zero, even if a register cannot
     hold the requested mode - indicate that with HARD_REGNO_MODE_OK
     and/or CANNOT_CHANGE_MODE_CLASS instead.

     On a machine where all registers are exactly one word, a suitable
     definition of this macro is

          #define HARD_REGNO_NREGS(REGNO, MODE)            \
             ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
              / UNITS_PER_WORD)

 -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE)
     A C expression that is nonzero if a value of mode MODE, stored in
     memory, ends with padding that causes it to take up more space than
     in registers starting at register number REGNO (as determined by
     multiplying GCC's notion of the size of the register when
     containing this mode by the number of registers returned by
     'HARD_REGNO_NREGS').  By default this is zero.

     For example, if a floating-point value is stored in three 32-bit
     registers but takes up 128 bits in memory, then this would be
     nonzero.

     This macros only needs to be defined if there are cases where
     'subreg_get_info' would otherwise wrongly determine that a 'subreg'
     can be represented by an offset to the register number, when in
     fact such a 'subreg' would contain some of the padding not stored
     in registers and so not be representable.

 -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE)
     For values of REGNO and MODE for which
     'HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression
     returning the greater number of registers required to hold the
     value including any padding.  In the example above, the value would
     be four.

 -- Macro: REGMODE_NATURAL_SIZE (MODE)
     Define this macro if the natural size of registers that hold values
     of mode MODE is not the word size.  It is a C expression that
     should give the natural size in bytes for the specified mode.  It
     is used by the register allocator to try to optimize its results.
     This happens for example on SPARC 64-bit where the natural size of
     floating-point registers is still 32-bit.

 -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE)
     A C expression that is nonzero if it is permissible to store a
     value of mode MODE in hard register number REGNO (or in several
     registers starting with that one).  For a machine where all
     registers are equivalent, a suitable definition is

          #define HARD_REGNO_MODE_OK(REGNO, MODE) 1

     You need not include code to check for the numbers of fixed
     registers, because the allocation mechanism considers them to be
     always occupied.

     On some machines, double-precision values must be kept in even/odd
     register pairs.  You can implement that by defining this macro to
     reject odd register numbers for such modes.

     The minimum requirement for a mode to be OK in a register is that
     the 'movMODE' instruction pattern support moves between the
     register and other hard register in the same class and that moving
     a value into the register and back out not alter it.

     Since the same instruction used to move 'word_mode' will work for
     all narrower integer modes, it is not necessary on any machine for
     'HARD_REGNO_MODE_OK' to distinguish between these modes, provided
     you define patterns 'movhi', etc., to take advantage of this.  This
     is useful because of the interaction between 'HARD_REGNO_MODE_OK'
     and 'MODES_TIEABLE_P'; it is very desirable for all integer modes
     to be tieable.

     Many machines have special registers for floating point arithmetic.
     Often people assume that floating point machine modes are allowed
     only in floating point registers.  This is not true.  Any registers
     that can hold integers can safely _hold_ a floating point machine
     mode, whether or not floating arithmetic can be done on it in those
     registers.  Integer move instructions can be used to move the
     values.

     On some machines, though, the converse is true: fixed-point machine
     modes may not go in floating registers.  This is true if the
     floating registers normalize any value stored in them, because
     storing a non-floating value there would garble it.  In this case,
     'HARD_REGNO_MODE_OK' should reject fixed-point machine modes in
     floating registers.  But if the floating registers do not
     automatically normalize, if you can store any bit pattern in one
     and retrieve it unchanged without a trap, then any machine mode may
     go in a floating register, so you can define this macro to say so.

     The primary significance of special floating registers is rather
     that they are the registers acceptable in floating point arithmetic
     instructions.  However, this is of no concern to
     'HARD_REGNO_MODE_OK'.  You handle it by writing the proper
     constraints for those instructions.

     On some machines, the floating registers are especially slow to
     access, so that it is better to store a value in a stack frame than
     in such a register if floating point arithmetic is not being done.
     As long as the floating registers are not in class 'GENERAL_REGS',
     they will not be used unless some pattern's constraint asks for
     one.

 -- Macro: HARD_REGNO_RENAME_OK (FROM, TO)
     A C expression that is nonzero if it is OK to rename a hard
     register FROM to another hard register TO.

     One common use of this macro is to prevent renaming of a register
     to another register that is not saved by a prologue in an interrupt
     handler.

     The default is always nonzero.

 -- Macro: MODES_TIEABLE_P (MODE1, MODE2)
     A C expression that is nonzero if a value of mode MODE1 is
     accessible in mode MODE2 without copying.

     If 'HARD_REGNO_MODE_OK (R, MODE1)' and 'HARD_REGNO_MODE_OK (R,
     MODE2)' are always the same for any R, then 'MODES_TIEABLE_P
     (MODE1, MODE2)' should be nonzero.  If they differ for any R, you
     should define this macro to return zero unless some other mechanism
     ensures the accessibility of the value in a narrower mode.

     You should define this macro to return nonzero in as many cases as
     possible since doing so will allow GCC to perform better register
     allocation.

 -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO)
     This target hook should return 'true' if it is OK to use a hard
     register REGNO as scratch reg in peephole2.

     One common use of this macro is to prevent using of a register that
     is not saved by a prologue in an interrupt handler.

     The default version of this hook always returns 'true'.

 -- Macro: AVOID_CCMODE_COPIES
     Define this macro if the compiler should avoid copies to/from
     'CCmode' registers.  You should only define this macro if support
     for copying to/from 'CCmode' is incomplete.


File: gccint.info,  Node: Leaf Functions,  Next: Stack Registers,  Prev: Values in Registers,  Up: Registers

17.7.4 Handling Leaf Functions
------------------------------

On some machines, a leaf function (i.e., one which makes no calls) can
run more efficiently if it does not make its own register window.  Often
this means it is required to receive its arguments in the registers
where they are passed by the caller, instead of the registers where they
would normally arrive.

 The special treatment for leaf functions generally applies only when
other conditions are met; for example, often they may use only those
registers for its own variables and temporaries.  We use the term "leaf
function" to mean a function that is suitable for this special handling,
so that functions with no calls are not necessarily "leaf functions".

 GCC assigns register numbers before it knows whether the function is
suitable for leaf function treatment.  So it needs to renumber the
registers in order to output a leaf function.  The following macros
accomplish this.

 -- Macro: LEAF_REGISTERS
     Name of a char vector, indexed by hard register number, which
     contains 1 for a register that is allowable in a candidate for leaf
     function treatment.

     If leaf function treatment involves renumbering the registers, then
     the registers marked here should be the ones before
     renumbering--those that GCC would ordinarily allocate.  The
     registers which will actually be used in the assembler code, after
     renumbering, should not be marked with 1 in this vector.

     Define this macro only if the target machine offers a way to
     optimize the treatment of leaf functions.

 -- Macro: LEAF_REG_REMAP (REGNO)
     A C expression whose value is the register number to which REGNO
     should be renumbered, when a function is treated as a leaf
     function.

     If REGNO is a register number which should not appear in a leaf
     function before renumbering, then the expression should yield -1,
     which will cause the compiler to abort.

     Define this macro only if the target machine offers a way to
     optimize the treatment of leaf functions, and registers need to be
     renumbered to do this.

 'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE' must
usually treat leaf functions specially.  They can test the C variable
'current_function_is_leaf' which is nonzero for leaf functions.
'current_function_is_leaf' is set prior to local register allocation and
is valid for the remaining compiler passes.  They can also test the C
variable 'current_function_uses_only_leaf_regs' which is nonzero for
leaf functions which only use leaf registers.
'current_function_uses_only_leaf_regs' is valid after all passes that
modify the instructions have been run and is only useful if
'LEAF_REGISTERS' is defined.


File: gccint.info,  Node: Stack Registers,  Prev: Leaf Functions,  Up: Registers

17.7.5 Registers That Form a Stack
----------------------------------

There are special features to handle computers where some of the
"registers" form a stack.  Stack registers are normally written by
pushing onto the stack, and are numbered relative to the top of the
stack.

 Currently, GCC can only handle one group of stack-like registers, and
they must be consecutively numbered.  Furthermore, the existing support
for stack-like registers is specific to the 80387 floating point
coprocessor.  If you have a new architecture that uses stack-like
registers, you will need to do substantial work on 'reg-stack.c' and
write your machine description to cooperate with it, as well as defining
these macros.

 -- Macro: STACK_REGS
     Define this if the machine has any stack-like registers.

 -- Macro: STACK_REG_COVER_CLASS
     This is a cover class containing the stack registers.  Define this
     if the machine has any stack-like registers.

 -- Macro: FIRST_STACK_REG
     The number of the first stack-like register.  This one is the top
     of the stack.

 -- Macro: LAST_STACK_REG
     The number of the last stack-like register.  This one is the bottom
     of the stack.


File: gccint.info,  Node: Register Classes,  Next: Stack and Calling,  Prev: Registers,  Up: Target Macros

17.8 Register Classes
=====================

On many machines, the numbered registers are not all equivalent.  For
example, certain registers may not be allowed for indexed addressing;
certain registers may not be allowed in some instructions.  These
machine restrictions are described to the compiler using "register
classes".

 You define a number of register classes, giving each one a name and
saying which of the registers belong to it.  Then you can specify
register classes that are allowed as operands to particular instruction
patterns.

 In general, each register will belong to several classes.  In fact, one
class must be named 'ALL_REGS' and contain all the registers.  Another
class must be named 'NO_REGS' and contain no registers.  Often the union
of two classes will be another class; however, this is not required.

 One of the classes must be named 'GENERAL_REGS'.  There is nothing
terribly special about the name, but the operand constraint letters 'r'
and 'g' specify this class.  If 'GENERAL_REGS' is the same as
'ALL_REGS', just define it as a macro which expands to 'ALL_REGS'.

 Order the classes so that if class X is contained in class Y then X has
a lower class number than Y.

 The way classes other than 'GENERAL_REGS' are specified in operand
constraints is through machine-dependent operand constraint letters.
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 (*note 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 '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
class computed via '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
contained in it; for each pair of classes, the largest class contained
in their union.

 When a value occupying several consecutive registers is expected in a
certain class, all the registers used must belong to that class.
Therefore, register classes cannot be used to enforce a requirement for
a register pair to start with an even-numbered register.  The way to
specify this requirement is with 'HARD_REGNO_MODE_OK'.

 Register classes used for input-operands of bitwise-and or shift
instructions have a special requirement: each such class must have, for
each fixed-point machine mode, a subclass whose registers can transfer
that mode to or from memory.  For example, on some machines, the
operations for single-byte values ('QImode') are limited to certain
registers.  When this is so, each register class that is used in a
bitwise-and or shift instruction must have a subclass consisting of
registers from which single-byte values can be loaded or stored.  This
is so that 'PREFERRED_RELOAD_CLASS' can always have a possible value to
return.

 -- Data type: enum reg_class
     An enumerated type that must be defined with all the register class
     names as enumerated values.  'NO_REGS' must be first.  'ALL_REGS'
     must be the last register class, followed by one more enumerated
     value, 'LIM_REG_CLASSES', which is not a register class but rather
     tells how many classes there are.

     Each register class has a number, which is the value of casting the
     class name to type 'int'.  The number serves as an index in many of
     the tables described below.

 -- Macro: N_REG_CLASSES
     The number of distinct register classes, defined as follows:

          #define N_REG_CLASSES (int) LIM_REG_CLASSES

 -- Macro: REG_CLASS_NAMES
     An initializer containing the names of the register classes as C
     string constants.  These names are used in writing some of the
     debugging dumps.

 -- Macro: REG_CLASS_CONTENTS
     An initializer containing the contents of the register classes, as
     integers which are bit masks.  The Nth integer specifies the
     contents of class N.  The way the integer MASK is interpreted is
     that register R is in the class if 'MASK & (1 << R)' is 1.

     When the machine has more than 32 registers, an integer does not
     suffice.  Then the integers are replaced by sub-initializers,
     braced groupings containing several integers.  Each sub-initializer
     must be suitable as an initializer for the type 'HARD_REG_SET'
     which is defined in 'hard-reg-set.h'.  In this situation, the first
     integer in each sub-initializer corresponds to registers 0 through
     31, the second integer to registers 32 through 63, and so on.

 -- Macro: REGNO_REG_CLASS (REGNO)
     A C expression whose value is a register class containing hard
     register REGNO.  In general there is more than one such class;
     choose a class which is "minimal", meaning that no smaller class
     also contains the register.

 -- Macro: BASE_REG_CLASS
     A macro whose definition is the name of the class to which a valid
     base register must belong.  A base register is one used in an
     address which is the register value plus a displacement.

 -- Macro: MODE_BASE_REG_CLASS (MODE)
     This is a variation of the 'BASE_REG_CLASS' macro which allows the
     selection of a base register in a mode dependent manner.  If MODE
     is VOIDmode then it should return the same value as
     'BASE_REG_CLASS'.

 -- Macro: MODE_BASE_REG_REG_CLASS (MODE)
     A C expression whose value is the register class to which a valid
     base register must belong in order to be used in a base plus index
     register address.  You should define this macro if base plus index
     addresses have different requirements than other base register
     uses.

 -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, ADDRESS_SPACE, OUTER_CODE,
          INDEX_CODE)
     A C expression whose value is the register class to which a valid
     base register for a memory reference in mode MODE to address space
     ADDRESS_SPACE must belong.  OUTER_CODE and INDEX_CODE define the
     context in which the base register occurs.  OUTER_CODE is the code
     of the immediately enclosing expression ('MEM' for the top level of
     an address, 'ADDRESS' for something that occurs in an
     'address_operand').  INDEX_CODE is the code of the corresponding
     index expression if OUTER_CODE is 'PLUS'; 'SCRATCH' otherwise.

 -- Macro: INDEX_REG_CLASS
     A macro whose definition is the name of the class to which a valid
     index register must belong.  An index register is one used in an
     address where its value is either multiplied by a scale factor or
     added to another register (as well as added to a displacement).

 -- Macro: REGNO_OK_FOR_BASE_P (NUM)
     A C expression which is nonzero if register number NUM is suitable
     for use as a base register in operand addresses.

 -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE)
     A C expression that is just like 'REGNO_OK_FOR_BASE_P', except that
     that expression may examine the mode of the memory reference in
     MODE.  You should define this macro if the mode of the memory
     reference affects whether a register may be used as a base
     register.  If you define this macro, the compiler will use it
     instead of 'REGNO_OK_FOR_BASE_P'.  The mode may be 'VOIDmode' for
     addresses that appear outside a 'MEM', i.e., as an
     'address_operand'.

 -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE)
     A C expression which is nonzero if register number NUM is suitable
     for use as a base register in base plus index operand addresses,
     accessing memory in mode MODE.  It may be either a suitable hard
     register or a pseudo register that has been allocated such a hard
     register.  You should define this macro if base plus index
     addresses have different requirements than other base register
     uses.

     Use of this macro is deprecated; please use the more general
     'REGNO_MODE_CODE_OK_FOR_BASE_P'.

 -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, ADDRESS_SPACE,
          OUTER_CODE, INDEX_CODE)
     A C expression which is nonzero if register number NUM is suitable
     for use as a base register in operand addresses, accessing memory
     in mode MODE in address space ADDRESS_SPACE.  This is similar to
     'REGNO_MODE_OK_FOR_BASE_P', except that that expression may examine
     the context in which the register appears in the memory reference.
     OUTER_CODE is the code of the immediately enclosing expression
     ('MEM' if at the top level of the address, 'ADDRESS' for something
     that occurs in an 'address_operand').  INDEX_CODE is the code of
     the corresponding index expression if OUTER_CODE is 'PLUS';
     'SCRATCH' otherwise.  The mode may be 'VOIDmode' for addresses that
     appear outside a 'MEM', i.e., as an 'address_operand'.

 -- Macro: REGNO_OK_FOR_INDEX_P (NUM)
     A C expression which is nonzero if register number NUM is suitable
     for use as an index register in operand addresses.  It may be
     either a suitable hard register or a pseudo register that has been
     allocated such a hard register.

     The difference between an index register and a base register is
     that the index register may be scaled.  If an address involves the
     sum of two registers, neither one of them scaled, then either one
     may be labeled the "base" and the other the "index"; but whichever
     labeling is used must fit the machine's constraints of which
     registers may serve in each capacity.  The compiler will try both
     labelings, looking for one that is valid, and will reload one or
     both registers only if neither labeling works.

 -- Target Hook: reg_class_t TARGET_PREFERRED_RENAME_CLASS (reg_class_t
          RCLASS)
     A target hook that places additional preference on the register
     class to use when it is necessary to rename a register in class
     RCLASS to another class, or perhaps NO_REGS, if no preferred
     register class is found or hook 'preferred_rename_class' is not
     implemented.  Sometimes returning a more restrictive class makes
     better code.  For example, on ARM, thumb-2 instructions using
     'LO_REGS' may be smaller than instructions using 'GENERIC_REGS'.
     By returning 'LO_REGS' from 'preferred_rename_class', code size can
     be reduced.

 -- Target Hook: reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx X,
          reg_class_t RCLASS)
     A target hook that places additional restrictions on the register
     class to use when it is necessary to copy value X into a register
     in class RCLASS.  The value is a register class; perhaps RCLASS, or
     perhaps another, smaller class.

     The default version of this hook always returns value of 'rclass'
     argument.

     Sometimes returning a more restrictive class makes better code.
     For example, on the 68000, when X is an integer constant that is in
     range for a 'moveq' instruction, the value of this macro is always
     'DATA_REGS' as long as RCLASS includes the data registers.
     Requiring a data register guarantees that a 'moveq' will be used.

     One case where 'TARGET_PREFERRED_RELOAD_CLASS' must not return
     RCLASS is if X is a legitimate constant which cannot be loaded into
     some register class.  By returning 'NO_REGS' you can force X into a
     memory location.  For example, rs6000 can load immediate values
     into general-purpose registers, but does not have an instruction
     for loading an immediate value into a floating-point register, so
     'TARGET_PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a
     floating-point constant.  If the constant can't be loaded into any
     kind of register, code generation will be better if
     'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate
     instead of using 'TARGET_PREFERRED_RELOAD_CLASS'.

     If an insn has pseudos in it after register allocation, reload will
     go through the alternatives and call repeatedly
     'TARGET_PREFERRED_RELOAD_CLASS' to find the best one.  Returning
     'NO_REGS', in this case, makes reload add a '!' in front of the
     constraint: the x86 back-end uses this feature to discourage usage
     of 387 registers when math is done in the SSE registers (and vice
     versa).

 -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS)
     A C expression that places additional restrictions on the register
     class to use when it is necessary to copy value X into a register
     in class CLASS.  The value is a register class; perhaps CLASS, or
     perhaps another, smaller class.  On many machines, the following
     definition is safe:

          #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS

     Sometimes returning a more restrictive class makes better code.
     For example, on the 68000, when X is an integer constant that is in
     range for a 'moveq' instruction, the value of this macro is always
     'DATA_REGS' as long as CLASS includes the data registers.
     Requiring a data register guarantees that a 'moveq' will be used.

     One case where 'PREFERRED_RELOAD_CLASS' must not return CLASS is if
     X is a legitimate constant which cannot be loaded into some
     register class.  By returning 'NO_REGS' you can force X into a
     memory location.  For example, rs6000 can load immediate values
     into general-purpose registers, but does not have an instruction
     for loading an immediate value into a floating-point register, so
     'PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a
     floating-point constant.  If the constant can't be loaded into any
     kind of register, code generation will be better if
     'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate
     instead of using 'TARGET_PREFERRED_RELOAD_CLASS'.

     If an insn has pseudos in it after register allocation, reload will
     go through the alternatives and call repeatedly
     'PREFERRED_RELOAD_CLASS' to find the best one.  Returning
     'NO_REGS', in this case, makes reload add a '!' in front of the
     constraint: the x86 back-end uses this feature to discourage usage
     of 387 registers when math is done in the SSE registers (and vice
     versa).

 -- Target Hook: reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx
          X, reg_class_t RCLASS)
     Like 'TARGET_PREFERRED_RELOAD_CLASS', but for output reloads
     instead of input reloads.

     The default version of this hook always returns value of 'rclass'
     argument.

     You can also use 'TARGET_PREFERRED_OUTPUT_RELOAD_CLASS' to
     discourage reload from using some alternatives, like
     'TARGET_PREFERRED_RELOAD_CLASS'.

 -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS)
     A C expression that places additional restrictions on the register
     class to use when it is necessary to be able to hold a value of
     mode MODE in a reload register for which class CLASS would
     ordinarily be used.

     Unlike 'PREFERRED_RELOAD_CLASS', this macro should be used when
     there are certain modes that simply can't go in certain reload
     classes.

     The value is a register class; perhaps CLASS, or perhaps another,
     smaller class.

     Don't define this macro unless the target machine has limitations
     which require the macro to do something nontrivial.

 -- Target Hook: reg_class_t TARGET_SECONDARY_RELOAD (bool IN_P, rtx X,
          reg_class_t RELOAD_CLASS, machine_mode RELOAD_MODE,
          secondary_reload_info *SRI)
     Many machines have some registers that cannot be copied directly to
     or from memory or even from other types of registers.  An example
     is the 'MQ' register, which on most machines, can only be copied to
     or from general registers, but not memory.  Below, we shall be
     using the term 'intermediate register' when a move operation cannot
     be performed directly, but has to be done by copying the source
     into the intermediate register first, and then copying the
     intermediate register to the destination.  An intermediate register
     always has the same mode as source and destination.  Since it holds
     the actual value being copied, reload might apply optimizations to
     re-use an intermediate register and eliding the copy from the
     source when it can determine that the intermediate register still
     holds the required value.

     Another kind of secondary reload is required on some machines which
     allow copying all registers to and from memory, but require a
     scratch register for stores to some memory locations (e.g., those
     with symbolic address on the RT, and those with certain symbolic
     address on the SPARC when compiling PIC).  Scratch registers need
     not have the same mode as the value being copied, and usually hold
     a different value than that being copied.  Special patterns in the
     md file are needed to describe how the copy is performed with the
     help of the scratch register; these patterns also describe the
     number, register class(es) and mode(s) of the scratch register(s).

     In some cases, both an intermediate and a scratch register are
     required.

     For input reloads, this target hook is called with nonzero IN_P,
     and X is an rtx that needs to be copied to a register of class
     RELOAD_CLASS in RELOAD_MODE.  For output reloads, this target hook
     is called with zero IN_P, and a register of class RELOAD_CLASS
     needs to be copied to rtx X in RELOAD_MODE.

     If copying a register of RELOAD_CLASS from/to X requires an
     intermediate register, the hook 'secondary_reload' should return
     the register class required for this intermediate register.  If no
     intermediate register is required, it should return NO_REGS. If
     more than one intermediate register is required, describe the one
     that is closest in the copy chain to the reload register.

     If scratch registers are needed, you also have to describe how to
     perform the copy from/to the reload register to/from this closest
     intermediate register.  Or if no intermediate register is required,
     but still a scratch register is needed, describe the copy from/to
     the reload register to/from the reload operand X.

     You do this by setting 'sri->icode' to the instruction code of a
     pattern in the md file which performs the move.  Operands 0 and 1
     are the output and input of this copy, respectively.  Operands from
     operand 2 onward are for scratch operands.  These scratch operands
     must have a mode, and a single-register-class output constraint.

     When an intermediate register is used, the 'secondary_reload' hook
     will be called again to determine how to copy the intermediate
     register to/from the reload operand X, so your hook must also have
     code to handle the register class of the intermediate operand.

     X might be a pseudo-register or a 'subreg' of a pseudo-register,
     which could either be in a hard register or in memory.  Use
     'true_regnum' to find out; it will return -1 if the pseudo is in
     memory and the hard register number if it is in a register.

     Scratch operands in memory (constraint '"=m"' / '"=&m"') are
     currently not supported.  For the time being, you will have to
     continue to use 'SECONDARY_MEMORY_NEEDED' for that purpose.

     'copy_cost' also uses this target hook to find out how values are
     copied.  If you want it to include some extra cost for the need to
     allocate (a) scratch register(s), set 'sri->extra_cost' to the
     additional cost.  Or if two dependent moves are supposed to have a
     lower cost than the sum of the individual moves due to expected
     fortuitous scheduling and/or special forwarding logic, you can set
     'sri->extra_cost' to a negative amount.

 -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
 -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)
 -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)
     These macros are obsolete, new ports should use the target hook
     'TARGET_SECONDARY_RELOAD' instead.

     These are obsolete macros, replaced by the
     'TARGET_SECONDARY_RELOAD' target hook.  Older ports still define
     these macros to indicate to the reload phase that it may need to
     allocate at least one register for a reload in addition to the
     register to contain the data.  Specifically, if copying X to a
     register CLASS in MODE requires an intermediate register, you were
     supposed to define 'SECONDARY_INPUT_RELOAD_CLASS' to return the
     largest register class all of whose registers can be used as
     intermediate registers or scratch registers.

     If copying a register CLASS in MODE to X requires an intermediate
     or scratch register, 'SECONDARY_OUTPUT_RELOAD_CLASS' was supposed
     to be defined be defined to return the largest register class
     required.  If the requirements for input and output reloads were
     the same, the macro 'SECONDARY_RELOAD_CLASS' should have been used
     instead of defining both macros identically.

     The values returned by these macros are often 'GENERAL_REGS'.
     Return 'NO_REGS' if no spare register is needed; i.e., if X can be
     directly copied to or from a register of CLASS in MODE without
     requiring a scratch register.  Do not define this macro if it would
     always return 'NO_REGS'.

     If a scratch register is required (either with or without an
     intermediate register), you were supposed to define patterns for
     'reload_inM' or 'reload_outM', as required (*note Standard Names::.
     These patterns, which were normally implemented with a
     'define_expand', should be similar to the 'movM' patterns, except
     that operand 2 is the scratch register.

     These patterns need constraints for the reload register and scratch
     register that contain a single register class.  If the original
     reload register (whose class is CLASS) can meet the constraint
     given in the pattern, the value returned by these macros is used
     for the class of the scratch register.  Otherwise, two additional
     reload registers are required.  Their classes are obtained from the
     constraints in the insn pattern.

     X might be a pseudo-register or a 'subreg' of a pseudo-register,
     which could either be in a hard register or in memory.  Use
     'true_regnum' to find out; it will return -1 if the pseudo is in
     memory and the hard register number if it is in a register.

     These macros should not be used in the case where a particular
     class of registers can only be copied to memory and not to another
     class of registers.  In that case, secondary reload registers are
     not needed and would not be helpful.  Instead, a stack location
     must be used to perform the copy and the 'movM' pattern should use
     memory as an intermediate storage.  This case often occurs between
     floating-point and general registers.

 -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M)
     Certain machines have the property that some registers cannot be
     copied to some other registers without using memory.  Define this
     macro on those machines to be a C expression that is nonzero if
     objects of mode M in registers of CLASS1 can only be copied to
     registers of class CLASS2 by storing a register of CLASS1 into
     memory and loading that memory location into a register of CLASS2.

     Do not define this macro if its value would always be zero.

 -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE)
     Normally when 'SECONDARY_MEMORY_NEEDED' is defined, the compiler
     allocates a stack slot for a memory location needed for register
     copies.  If this macro is defined, the compiler instead uses the
     memory location defined by this macro.

     Do not define this macro if you do not define
     'SECONDARY_MEMORY_NEEDED'.

 -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE)
     When the compiler needs a secondary memory location to copy between
     two registers of mode MODE, it normally allocates sufficient memory
     to hold a quantity of 'BITS_PER_WORD' bits and performs the store
     and load operations in a mode that many bits wide and whose class
     is the same as that of MODE.

     This is right thing to do on most machines because it ensures that
     all bits of the register are copied and prevents accesses to the
     registers in a narrower mode, which some machines prohibit for
     floating-point registers.

     However, this default behavior is not correct on some machines,
     such as the DEC Alpha, that store short integers in floating-point
     registers differently than in integer registers.  On those
     machines, the default widening will not work correctly and you must
     define this macro to suppress that widening in some cases.  See the
     file 'alpha.h' for details.

     Do not define this macro if you do not define
     'SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is
     'BITS_PER_WORD' bits wide is correct for your machine.

 -- Target Hook: bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t RCLASS)
     A target hook which returns 'true' if pseudos that have been
     assigned to registers of class RCLASS would likely be spilled
     because registers of RCLASS are needed for spill registers.

     The default version of this target hook returns 'true' if RCLASS
     has exactly one register and 'false' otherwise.  On most machines,
     this default should be used.  For generally register-starved
     machines, such as i386, or machines with right register
     constraints, such as SH, this hook can be used to avoid excessive
     spilling.

     This hook is also used by some of the global intra-procedural code
     transformations to throtle code motion, to avoid increasing
     register pressure.

 -- Target Hook: unsigned char TARGET_CLASS_MAX_NREGS (reg_class_t
          RCLASS, machine_mode MODE)
     A target hook returns the maximum number of consecutive registers
     of class RCLASS needed to hold a value of mode MODE.

     This is closely related to the macro 'HARD_REGNO_NREGS'.  In fact,
     the value returned by 'TARGET_CLASS_MAX_NREGS (RCLASS, MODE)'
     target hook should be the maximum value of 'HARD_REGNO_NREGS
     (REGNO, MODE)' for all REGNO values in the class 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 MODE in
     words.

 -- Macro: CLASS_MAX_NREGS (CLASS, MODE)
     A C expression for the maximum number of consecutive registers of
     class CLASS needed to hold a value of mode MODE.

     This is closely related to the macro 'HARD_REGNO_NREGS'.  In fact,
     the value of the macro 'CLASS_MAX_NREGS (CLASS, MODE)' should be
     the maximum value of 'HARD_REGNO_NREGS (REGNO, MODE)' for all REGNO
     values in the class CLASS.

     This macro helps control the handling of multiple-word values in
     the reload pass.

 -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS)
     If defined, a C expression that returns nonzero for a CLASS for
     which a change from mode FROM to mode TO is invalid.

     For example, loading 32-bit integer or floating-point objects into
     floating-point registers on Alpha extends them to 64 bits.
     Therefore loading a 64-bit object and then storing it as a 32-bit
     object does not store the low-order 32 bits, as would be the case
     for a normal register.  Therefore, 'alpha.h' defines
     'CANNOT_CHANGE_MODE_CLASS' as below:

          #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
            (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
             ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0)

     Even if storing from a register in mode TO would be valid, if both
     FROM and 'raw_reg_mode' for CLASS are wider than 'word_mode', then
     we must prevent TO narrowing the mode.  This happens when the
     middle-end assumes that it can load or store pieces of an N-word
     pseudo, and that the pseudo will eventually be allocated to N
     'word_mode' hard registers.  Failure to prevent this kind of mode
     change will result in the entire 'raw_reg_mode' being modified
     instead of the partial value that the middle-end intended.

 -- Target Hook: reg_class_t TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS
          (int, REG_CLASS_T, REG_CLASS_T)
     A target hook which can change allocno class for given pseudo from
     allocno and best class calculated by IRA.

     The default version of this target hook always returns given class.

 -- Target Hook: bool TARGET_LRA_P (void)
     A target hook which returns true if we use LRA instead of reload
     pass.  The default version of this target hook returns always
     false, but new ports should use LRA.

 -- Target Hook: int TARGET_REGISTER_PRIORITY (int)
     A target hook which returns the register priority number to which
     the register HARD_REGNO belongs to.  The bigger the number, the
     more preferable the hard register usage (when all other conditions
     are the same).  This hook can be used to prefer some hard register
     over others in LRA. For example, some x86-64 register usage needs
     additional prefix which makes instructions longer.  The hook can
     return lower priority number for such registers make them less
     favorable and as result making the generated code smaller.  The
     default version of this target hook returns always zero.

 -- Target Hook: bool TARGET_REGISTER_USAGE_LEVELING_P (void)
     A target hook which returns true if we need register usage
     leveling.  That means if a few hard registers are equally good for
     the assignment, we choose the least used hard register.  The
     register usage leveling may be profitable for some targets.  Don't
     use the usage leveling for targets with conditional execution or
     targets with big register files as it hurts if-conversion and
     cross-jumping optimizations.  The default version of this target
     hook returns always false.

 -- Target Hook: bool TARGET_DIFFERENT_ADDR_DISPLACEMENT_P (void)
     A target hook which returns true if an address with the same
     structure can have different maximal legitimate displacement.  For
     example, the displacement can depend on memory mode or on operand
     combinations in the insn.  The default version of this target hook
     returns always false.

 -- Target Hook: bool TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P (rtx SUBST)
     A target hook which returns 'true' if SUBST can't substitute safely
     pseudos with equivalent memory values during register allocation.
     The default version of this target hook returns 'false'.  On most
     machines, this default should be used.  For generally machines with
     non orthogonal register usage for addressing, such as SH, this hook
     can be used to avoid excessive spilling.

 -- Target Hook: bool TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT (rtx *DISP,
          rtx *OFFSET, machine_mode MODE)
     A target hook which returns 'true' if *DISP is legitimezed to valid
     address displacement with subtracting *OFFSET at memory mode MODE.
     The default version of this target hook returns 'false'.  This hook
     will benefit machines with limited base plus displacement
     addressing.

 -- Target Hook: reg_class_t TARGET_SPILL_CLASS (reg_class_t,
          MACHINE_MODE)
     This hook defines a class of registers which could be used for
     spilling pseudos of the given mode and class, or 'NO_REGS' if only
     memory should be used.  Not defining this hook is equivalent to
     returning 'NO_REGS' for all inputs.

 -- Target Hook: machine_mode TARGET_CSTORE_MODE (enum insn_code ICODE)
     This hook defines the machine mode to use for the boolean result of
     conditional store patterns.  The ICODE argument is the instruction
     code for the cstore being performed.  Not definiting this hook is
     the same as accepting the mode encoded into operand 0 of the cstore
     expander patterns.


File: gccint.info,  Node: Stack and Calling,  Next: Varargs,  Prev: Register Classes,  Up: Target Macros

17.9 Stack Layout and Calling Conventions
=========================================

This describes the stack layout and calling conventions.

* Menu:

* Frame Layout::
* Exception Handling::
* Stack Checking::
* Frame Registers::
* Elimination::
* Stack Arguments::
* Register Arguments::
* Scalar Return::
* Aggregate Return::
* Caller Saves::
* Function Entry::
* Profiling::
* Tail Calls::
* Stack Smashing Protection::
* Miscellaneous Register Hooks::


File: gccint.info,  Node: Frame Layout,  Next: Exception Handling,  Up: Stack and Calling

17.9.1 Basic Stack Layout
-------------------------

Here is the basic stack layout.

 -- Macro: STACK_GROWS_DOWNWARD
     Define this macro to be true if pushing a word onto the stack moves
     the stack pointer to a smaller address, and false otherwise.

 -- Macro: STACK_PUSH_CODE
     This macro defines the operation used when something is pushed on
     the stack.  In RTL, a push operation will be '(set (mem
     (STACK_PUSH_CODE (reg sp))) ...)'

     The choices are 'PRE_DEC', 'POST_DEC', 'PRE_INC', and 'POST_INC'.
     Which of these is correct depends on the stack direction and on
     whether the stack pointer points to the last item on the stack or
     whether it points to the space for the next item on the stack.

     The default is 'PRE_DEC' when 'STACK_GROWS_DOWNWARD' is true, which
     is almost always right, and 'PRE_INC' otherwise, which is often
     wrong.

 -- Macro: FRAME_GROWS_DOWNWARD
     Define this macro to nonzero value if the addresses of local
     variable slots are at negative offsets from the frame pointer.

 -- Macro: ARGS_GROW_DOWNWARD
     Define this macro if successive arguments to a function occupy
     decreasing addresses on the stack.

 -- Macro: STARTING_FRAME_OFFSET
     Offset from the frame pointer to the first local variable slot to
     be allocated.

     If 'FRAME_GROWS_DOWNWARD', find the next slot's offset by
     subtracting the first slot's length from 'STARTING_FRAME_OFFSET'.
     Otherwise, it is found by adding the length of the first slot to
     the value 'STARTING_FRAME_OFFSET'.

 -- Macro: STACK_ALIGNMENT_NEEDED
     Define to zero to disable final alignment of the stack during
     reload.  The nonzero default for this macro is suitable for most
     ports.

     On ports where 'STARTING_FRAME_OFFSET' is nonzero or where there is
     a register save block following the local block that doesn't
     require alignment to 'STACK_BOUNDARY', it may be beneficial to
     disable stack alignment and do it in the backend.

 -- Macro: STACK_POINTER_OFFSET
     Offset from the stack pointer register to the first location at
     which outgoing arguments are placed.  If not specified, the default
     value of zero is used.  This is the proper value for most machines.

     If 'ARGS_GROW_DOWNWARD', this is the offset to the location above
     the first location at which outgoing arguments are placed.

 -- Macro: FIRST_PARM_OFFSET (FUNDECL)
     Offset from the argument pointer register to the first argument's
     address.  On some machines it may depend on the data type of the
     function.

     If 'ARGS_GROW_DOWNWARD', this is the offset to the location above
     the first argument's address.

 -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL)
     Offset from the stack pointer register to an item dynamically
     allocated on the stack, e.g., by 'alloca'.

     The default value for this macro is 'STACK_POINTER_OFFSET' plus the
     length of the outgoing arguments.  The default is correct for most
     machines.  See 'function.c' for details.

 -- Macro: INITIAL_FRAME_ADDRESS_RTX
     A C expression whose value is RTL representing the address of the
     initial stack frame.  This address is passed to 'RETURN_ADDR_RTX'
     and 'DYNAMIC_CHAIN_ADDRESS'.  If you don't define this macro, a
     reasonable default value will be used.  Define this macro in order
     to make frame pointer elimination work in the presence of
     '__builtin_frame_address (count)' and '__builtin_return_address
     (count)' for 'count' not equal to zero.

 -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)
     A C expression whose value is RTL representing the address in a
     stack frame where the pointer to the caller's frame is stored.
     Assume that FRAMEADDR is an RTL expression for the address of the
     stack frame itself.

     If you don't define this macro, the default is to return the value
     of FRAMEADDR--that is, the stack frame address is also the address
     of the stack word that points to the previous frame.

 -- Macro: SETUP_FRAME_ADDRESSES
     A C expression that produces the machine-specific code to setup the
     stack so that arbitrary frames can be accessed.  For example, on
     the SPARC, we must flush all of the register windows to the stack
     before we can access arbitrary stack frames.  You will seldom need
     to define this macro.  The default is to do nothing.

 -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void)
     This target hook should return an rtx that is used to store the
     address of the current frame into the built in 'setjmp' buffer.
     The default value, 'virtual_stack_vars_rtx', is correct for most
     machines.  One reason you may need to define this target hook is if
     'hard_frame_pointer_rtx' is the appropriate value on your machine.

 -- Macro: FRAME_ADDR_RTX (FRAMEADDR)
     A C expression whose value is RTL representing the value of the
     frame address for the current frame.  FRAMEADDR is the frame
     pointer of the current frame.  This is used for
     __builtin_frame_address.  You need only define this macro if the
     frame address is not the same as the frame pointer.  Most machines
     do not need to define it.

 -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR)
     A C expression whose value is RTL representing the value of the
     return address for the frame COUNT steps up from the current frame,
     after the prologue.  FRAMEADDR is the frame pointer of the COUNT
     frame, or the frame pointer of the COUNT - 1 frame if
     'RETURN_ADDR_IN_PREVIOUS_FRAME' is nonzero.

     The value of the expression must always be the correct address when
     COUNT is zero, but may be 'NULL_RTX' if there is no way to
     determine the return address of other frames.

 -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME
     Define this macro to nonzero value if the return address of a
     particular stack frame is accessed from the frame pointer of the
     previous stack frame.  The zero default for this macro is suitable
     for most ports.

 -- Macro: INCOMING_RETURN_ADDR_RTX
     A C expression whose value is RTL representing the location of the
     incoming return address at the beginning of any function, before
     the prologue.  This RTL is either a 'REG', indicating that the
     return value is saved in 'REG', or a 'MEM' representing a location
     in the stack.

     You only need to define this macro if you want to support call
     frame debugging information like that provided by DWARF 2.

     If this RTL is a 'REG', you should also define
     'DWARF_FRAME_RETURN_COLUMN' to 'DWARF_FRAME_REGNUM (REGNO)'.

 -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN
     A C expression whose value is an integer giving a DWARF 2 column
     number that may be used as an alternative return column.  The
     column must not correspond to any gcc hard register (that is, it
     must not be in the range of 'DWARF_FRAME_REGNUM').

     This macro can be useful if 'DWARF_FRAME_RETURN_COLUMN' is set to a
     general register, but an alternative column needs to be used for
     signal frames.  Some targets have also used different frame return
     columns over time.

 -- Macro: DWARF_ZERO_REG
     A C expression whose value is an integer giving a DWARF 2 register
     number that is considered to always have the value zero.  This
     should only be defined if the target has an architected zero
     register, and someone decided it was a good idea to use that
     register number to terminate the stack backtrace.  New ports should
     avoid this.

 -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char
          *LABEL, rtx PATTERN, int INDEX)
     This target hook allows the backend to emit frame-related insns
     that contain UNSPECs or UNSPEC_VOLATILEs.  The DWARF 2 call frame
     debugging info engine will invoke it on insns of the form
          (set (reg) (unspec [...] UNSPEC_INDEX))
     and
          (set (reg) (unspec_volatile [...] UNSPECV_INDEX)).
     to let the backend emit the call frame instructions.  LABEL is the
     CFI label attached to the insn, PATTERN is the pattern of the insn
     and INDEX is 'UNSPEC_INDEX' or 'UNSPECV_INDEX'.

 -- Macro: INCOMING_FRAME_SP_OFFSET
     A C expression whose value is an integer giving the offset, in
     bytes, from the value of the stack pointer register to the top of
     the stack frame at the beginning of any function, before the
     prologue.  The top of the frame is defined to be the value of the
     stack pointer in the previous frame, just before the call
     instruction.

     You only need to define this macro if you want to support call
     frame debugging information like that provided by DWARF 2.

 -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL)
     A C expression whose value is an integer giving the offset, in
     bytes, from the argument pointer to the canonical frame address
     (cfa).  The final value should coincide with that calculated by
     'INCOMING_FRAME_SP_OFFSET'.  Which is unfortunately not usable
     during virtual register instantiation.

     The default value for this macro is 'FIRST_PARM_OFFSET (fundecl) +
     crtl->args.pretend_args_size', which is correct for most machines;
     in general, the arguments are found immediately before the stack
     frame.  Note that this is not the case on some targets that save
     registers into the caller's frame, such as SPARC and rs6000, and so
     such targets need to define this macro.

     You only need to define this macro if the default is incorrect, and
     you want to support call frame debugging information like that
     provided by DWARF 2.

 -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL)
     If defined, a C expression whose value is an integer giving the
     offset in bytes from the frame pointer to the canonical frame
     address (cfa).  The final value should coincide with that
     calculated by 'INCOMING_FRAME_SP_OFFSET'.

     Normally the CFA is calculated as an offset from the argument
     pointer, via 'ARG_POINTER_CFA_OFFSET', but if the argument pointer
     is variable due to the ABI, this may not be possible.  If this
     macro is defined, it implies that the virtual register
     instantiation should be based on the frame pointer instead of the
     argument pointer.  Only one of 'FRAME_POINTER_CFA_OFFSET' and
     'ARG_POINTER_CFA_OFFSET' should be defined.

 -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL)
     If defined, a C expression whose value is an integer giving the
     offset in bytes from the canonical frame address (cfa) to the frame
     base used in DWARF 2 debug information.  The default is zero.  A
     different value may reduce the size of debug information on some
     ports.


File: gccint.info,  Node: Exception Handling,  Next: Stack Checking,  Prev: Frame Layout,  Up: Stack and Calling

17.9.2 Exception Handling Support
---------------------------------

 -- Macro: EH_RETURN_DATA_REGNO (N)
     A C expression whose value is the Nth register number used for data
     by exception handlers, or 'INVALID_REGNUM' if fewer than N
     registers are usable.

     The exception handling library routines communicate with the
     exception handlers via a set of agreed upon registers.  Ideally
     these registers should be call-clobbered; it is possible to use
     call-saved registers, but may negatively impact code size.  The
     target must support at least 2 data registers, but should define 4
     if there are enough free registers.

     You must define this macro if you want to support call frame
     exception handling like that provided by DWARF 2.

 -- Macro: EH_RETURN_STACKADJ_RTX
     A C expression whose value is RTL representing a location in which
     to store a stack adjustment to be applied before function return.
     This is used to unwind the stack to an exception handler's call
     frame.  It will be assigned zero on code paths that return
     normally.

     Typically this is a call-clobbered hard register that is otherwise
     untouched by the epilogue, but could also be a stack slot.

     Do not define this macro if the stack pointer is saved and restored
     by the regular prolog and epilog code in the call frame itself; in
     this case, the exception handling library routines will update the
     stack location to be restored in place.  Otherwise, you must define
     this macro if you want to support call frame exception handling
     like that provided by DWARF 2.

 -- Macro: EH_RETURN_HANDLER_RTX
     A C expression whose value is RTL representing a location in which
     to store the address of an exception handler to which we should
     return.  It will not be assigned on code paths that return
     normally.

     Typically this is the location in the call frame at which the
     normal return address is stored.  For targets that return by
     popping an address off the stack, this might be a memory address
     just below the _target_ call frame rather than inside the current
     call frame.  If defined, 'EH_RETURN_STACKADJ_RTX' will have already
     been assigned, so it may be used to calculate the location of the
     target call frame.

     Some targets have more complex requirements than storing to an
     address calculable during initial code generation.  In that case
     the 'eh_return' instruction pattern should be used instead.

     If you want to support call frame exception handling, you must
     define either this macro or the 'eh_return' instruction pattern.

 -- Macro: RETURN_ADDR_OFFSET
     If defined, an integer-valued C expression for which rtl will be
     generated to add it to the exception handler address before it is
     searched in the exception handling tables, and to subtract it again
     from the address before using it to return to the exception
     handler.

 -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL)
     This macro chooses the encoding of pointers embedded in the
     exception handling sections.  If at all possible, this should be
     defined such that the exception handling section will not require
     dynamic relocations, and so may be read-only.

     CODE is 0 for data, 1 for code labels, 2 for function pointers.
     GLOBAL is true if the symbol may be affected by dynamic
     relocations.  The macro should return a combination of the
     'DW_EH_PE_*' defines as found in 'dwarf2.h'.

     If this macro is not defined, pointers will not be encoded but
     represented directly.

 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE,
          ADDR, DONE)
     This macro allows the target to emit whatever special magic is
     required to represent the encoding chosen by
     'ASM_PREFERRED_EH_DATA_FORMAT'.  Generic code takes care of
     pc-relative and indirect encodings; this must be defined if the
     target uses text-relative or data-relative encodings.

     This is a C statement that branches to DONE if the format was
     handled.  ENCODING is the format chosen, SIZE is the number of
     bytes that the format occupies, ADDR is the 'SYMBOL_REF' to be
     emitted.

 -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, 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 available.  The most common reason to implement this
     macro is to unwind through signal frames.

     This macro is called from 'uw_frame_state_for' in 'unwind-dw2.c',
     'unwind-dw2-xtensa.c' and 'unwind-ia64.c'.  CONTEXT is an
     '_Unwind_Context'; FS is an '_Unwind_FrameState'.  Examine
     'context->ra' for the address of the code being executed and
     'context->cfa' for the stack pointer value.  If the frame can be
     decoded, the register save addresses should be updated in FS and
     the macro should evaluate to '_URC_NO_REASON'.  If the frame cannot
     be decoded, the macro should evaluate to '_URC_END_OF_STACK'.

     For proper signal handling in Java this macro is accompanied by
     'MAKE_THROW_FRAME', defined in 'libjava/include/*-signal.h'
     headers.

 -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS)
     This macro allows the target to add operating system specific code
     to the call-frame unwinder to handle the IA-64 '.unwabi' unwinding
     directive, usually used for signal or interrupt frames.

     This macro is called from 'uw_update_context' in libgcc's
     'unwind-ia64.c'.  CONTEXT is an '_Unwind_Context'; FS is an
     '_Unwind_FrameState'.  Examine 'fs->unwabi' for the abi and context
     in the '.unwabi' directive.  If the '.unwabi' directive can be
     handled, the register save addresses should be updated in FS.

 -- Macro: TARGET_USES_WEAK_UNWIND_INFO
     A C expression that evaluates to true if the target requires unwind
     info to be given comdat linkage.  Define it to be '1' if comdat
     linkage is necessary.  The default is '0'.


File: gccint.info,  Node: Stack Checking,  Next: Frame Registers,  Prev: Exception Handling,  Up: Stack and Calling

17.9.3 Specifying How Stack Checking is Done
--------------------------------------------

GCC will check that stack references are within the boundaries of the
stack, if the option '-fstack-check' is specified, in one of three ways:

  1. If the value of the 'STACK_CHECK_BUILTIN' macro is nonzero, GCC
     will assume that you have arranged for full stack checking to be
     done at appropriate places in the configuration files.  GCC will
     not do other special processing.

  2. If 'STACK_CHECK_BUILTIN' is zero and the value of the
     'STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume that
     you have arranged for static stack checking (checking of the static
     stack frame of functions) to be done at appropriate places in the
     configuration files.  GCC will only emit code to do dynamic stack
     checking (checking on dynamic stack allocations) using the third
     approach below.

  3. If neither of the above are true, GCC will generate code to
     periodically "probe" the stack pointer using the values of the
     macros defined below.

 If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is
defined, GCC will change its allocation strategy for large objects if
the option '-fstack-check' is specified: they will always be allocated
dynamically if their size exceeds 'STACK_CHECK_MAX_VAR_SIZE' bytes.

 -- Macro: STACK_CHECK_BUILTIN
     A nonzero value if stack checking is done by the configuration
     files in a machine-dependent manner.  You should define this macro
     if stack checking is required by the ABI of your machine or if you
     would like to do stack checking in some more efficient way than the
     generic approach.  The default value of this macro is zero.

 -- Macro: STACK_CHECK_STATIC_BUILTIN
     A nonzero value if static stack checking is done by the
     configuration files in a machine-dependent manner.  You should
     define this macro if you would like to do static stack checking in
     some more efficient way than the generic approach.  The default
     value of this macro is zero.

 -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP
     An integer specifying the interval at which GCC must generate stack
     probe instructions, defined as 2 raised to this integer.  You will
     normally define this macro so that the interval be no larger than
     the size of the "guard pages" at the end of a stack area.  The
     default value of 12 (4096-byte interval) is suitable for most
     systems.

 -- Macro: STACK_CHECK_MOVING_SP
     An integer which is nonzero if GCC should move the stack pointer
     page by page when doing probes.  This can be necessary on systems
     where the stack pointer contains the bottom address of the memory
     area accessible to the executing thread at any point in time.  In
     this situation an alternate signal stack is required in order to be
     able to recover from a stack overflow.  The default value of this
     macro is zero.

 -- Macro: STACK_CHECK_PROTECT
     The number of bytes of stack needed to recover from a stack
     overflow, for languages where such a recovery is supported.  The
     default value of 4KB/8KB with the 'setjmp'/'longjmp'-based
     exception handling mechanism and 8KB/12KB with other exception
     handling mechanisms should be adequate for most architectures and
     operating systems.

 The following macros are relevant only if neither STACK_CHECK_BUILTIN
nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether
in the opposite case.

 -- Macro: STACK_CHECK_MAX_FRAME_SIZE
     The maximum size of a stack frame, in bytes.  GCC will generate
     probe instructions in non-leaf functions to ensure at least this
     many bytes of stack are available.  If a stack frame is larger than
     this size, stack checking will not be reliable and GCC will issue a
     warning.  The default is chosen so that GCC only generates one
     instruction on most systems.  You should normally not change the
     default value of this macro.

 -- Macro: STACK_CHECK_FIXED_FRAME_SIZE
     GCC uses this value to generate the above warning message.  It
     represents the amount of fixed frame used by a function, not
     including space for any callee-saved registers, temporaries and
     user variables.  You need only specify an upper bound for this
     amount and will normally use the default of four words.

 -- Macro: STACK_CHECK_MAX_VAR_SIZE
     The maximum size, in bytes, of an object that GCC will place in the
     fixed area of the stack frame when the user specifies
     '-fstack-check'.  GCC computed the default from the values of the
     above macros and you will normally not need to override that
     default.


File: gccint.info,  Node: Frame Registers,  Next: Elimination,  Prev: Stack Checking,  Up: Stack and Calling

17.9.4 Registers That Address the Stack Frame
---------------------------------------------

This discusses registers that address the stack frame.

 -- Macro: STACK_POINTER_REGNUM
     The register number of the stack pointer register, which must also
     be a fixed register according to 'FIXED_REGISTERS'.  On most
     machines, the hardware determines which register this is.

 -- Macro: FRAME_POINTER_REGNUM
     The register number of the frame pointer register, which is used to
     access automatic variables in the stack frame.  On some machines,
     the hardware determines which register this is.  On other machines,
     you can choose any register you wish for this purpose.

 -- Macro: HARD_FRAME_POINTER_REGNUM
     On some machines the offset between the frame pointer and starting
     offset of the automatic variables is not known until after register
     allocation has been done (for example, because the saved registers
     are between these two locations).  On those machines, define
     'FRAME_POINTER_REGNUM' the number of a special, fixed register to
     be used internally until the offset is known, and define
     'HARD_FRAME_POINTER_REGNUM' to be the actual hard register number
     used for the frame pointer.

     You should define this macro only in the very rare circumstances
     when it is not possible to calculate the offset between the frame
     pointer and the automatic variables until after register allocation
     has been completed.  When this macro is defined, you must also
     indicate in your definition of 'ELIMINABLE_REGS' how to eliminate
     'FRAME_POINTER_REGNUM' into either 'HARD_FRAME_POINTER_REGNUM' or
     'STACK_POINTER_REGNUM'.

     Do not define this macro if it would be the same as
     'FRAME_POINTER_REGNUM'.

 -- Macro: ARG_POINTER_REGNUM
     The register number of the arg pointer register, which is used to
     access the function's argument list.  On some machines, this is the
     same as the frame pointer register.  On some machines, the hardware
     determines which register this is.  On other machines, you can
     choose any register you wish for this purpose.  If this is not the
     same register as the frame pointer register, then you must mark it
     as a fixed register according to 'FIXED_REGISTERS', or arrange to
     be able to eliminate it (*note Elimination::).

 -- Macro: HARD_FRAME_POINTER_IS_FRAME_POINTER
     Define this to a preprocessor constant that is nonzero if
     'hard_frame_pointer_rtx' and 'frame_pointer_rtx' should be the
     same.  The default definition is '(HARD_FRAME_POINTER_REGNUM ==
     FRAME_POINTER_REGNUM)'; you only need to define this macro if that
     definition is not suitable for use in preprocessor conditionals.

 -- Macro: HARD_FRAME_POINTER_IS_ARG_POINTER
     Define this to a preprocessor constant that is nonzero if
     'hard_frame_pointer_rtx' and 'arg_pointer_rtx' should be the same.
     The default definition is '(HARD_FRAME_POINTER_REGNUM ==
     ARG_POINTER_REGNUM)'; you only need to define this macro if that
     definition is not suitable for use in preprocessor conditionals.

 -- Macro: RETURN_ADDRESS_POINTER_REGNUM
     The register number of the return address pointer register, which
     is used to access the current function's return address from the
     stack.  On some machines, the return address is not at a fixed
     offset from the frame pointer or stack pointer or argument pointer.
     This register can be defined to point to the return address on the
     stack, and then be converted by 'ELIMINABLE_REGS' into either the
     frame pointer or stack pointer.

     Do not define this macro unless there is no other way to get the
     return address from the stack.

 -- Macro: STATIC_CHAIN_REGNUM
 -- Macro: STATIC_CHAIN_INCOMING_REGNUM
     Register numbers used for passing a function's static chain
     pointer.  If register windows are used, the register number as seen
     by the called function is 'STATIC_CHAIN_INCOMING_REGNUM', while the
     register number as seen by the calling function is
     'STATIC_CHAIN_REGNUM'.  If these registers are the same,
     'STATIC_CHAIN_INCOMING_REGNUM' need not be defined.

     The static chain register need not be a fixed register.

     If the static chain is passed in memory, these macros should not be
     defined; instead, the 'TARGET_STATIC_CHAIN' hook should be used.

 -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL_OR_TYPE,
          bool INCOMING_P)
     This hook replaces the use of 'STATIC_CHAIN_REGNUM' et al for
     targets that may use different static chain locations for different
     nested functions.  This may be required if the target has function
     attributes that affect the calling conventions of the function and
     those calling conventions use different static chain locations.

     The default version of this hook uses 'STATIC_CHAIN_REGNUM' et al.

     If the static chain is passed in memory, this hook should be used
     to provide rtx giving 'mem' expressions that denote where they are
     stored.  Often the 'mem' expression as seen by the caller will be
     at an offset from the stack pointer and the 'mem' expression as
     seen by the callee will be at an offset from the frame pointer.
     The variables 'stack_pointer_rtx', 'frame_pointer_rtx', and
     'arg_pointer_rtx' will have been initialized and should be used to
     refer to those items.

 -- Macro: DWARF_FRAME_REGISTERS
     This macro specifies the maximum number of hard registers that can
     be saved in a call frame.  This is used to size data structures
     used in DWARF2 exception handling.

     Prior to GCC 3.0, this macro was needed in order to establish a
     stable exception handling ABI in the face of adding new hard
     registers for ISA extensions.  In GCC 3.0 and later, the EH ABI is
     insulated from changes in the number of hard registers.
     Nevertheless, this macro can still be used to reduce the runtime
     memory requirements of the exception handling routines, which can
     be substantial if the ISA contains a lot of registers that are not
     call-saved.

     If this macro is not defined, it defaults to
     'FIRST_PSEUDO_REGISTER'.

 -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS

     This macro is similar to 'DWARF_FRAME_REGISTERS', but is provided
     for backward compatibility in pre GCC 3.0 compiled code.

     If this macro is not defined, it defaults to
     'DWARF_FRAME_REGISTERS'.

 -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO)

     Define this macro if the target's representation for dwarf
     registers is different than the internal representation for unwind
     column.  Given a dwarf register, this macro should return the
     internal unwind column number to use instead.

     See the PowerPC's SPE target for an example.

 -- Macro: DWARF_FRAME_REGNUM (REGNO)

     Define this macro if the target's representation for dwarf
     registers used in .eh_frame or .debug_frame is different from that
     used in other debug info sections.  Given a GCC hard register
     number, this macro should return the .eh_frame register number.
     The default is 'DBX_REGISTER_NUMBER (REGNO)'.

 -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH)

     Define this macro to map register numbers held in the call frame
     info that GCC has collected using 'DWARF_FRAME_REGNUM' to those
     that should be output in .debug_frame ('FOR_EH' is zero) and
     .eh_frame ('FOR_EH' is nonzero).  The default is to return 'REGNO'.

 -- Macro: REG_VALUE_IN_UNWIND_CONTEXT

     Define this macro if the target stores register values as
     '_Unwind_Word' type in unwind context.  It should be defined if
     target register size is larger than the size of 'void *'.  The
     default is to store register values as 'void *' type.

 -- Macro: 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
     'REG_VALUE_IN_UNWIND_CONTEXT' is defined and 0 otherwise.


File: gccint.info,  Node: Elimination,  Next: Stack Arguments,  Prev: Frame Registers,  Up: Stack and Calling

17.9.5 Eliminating Frame Pointer and Arg Pointer
------------------------------------------------

This is about eliminating the frame pointer and arg pointer.

 -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void)
     This target hook should return 'true' if a function must have and
     use a frame pointer.  This target hook is called in the reload
     pass.  If its return value is 'true' the function will have a frame
     pointer.

     This target hook can in principle examine the current function and
     decide according to the facts, but on most machines the constant
     'false' or the constant 'true' suffices.  Use 'false' when the
     machine allows code to be generated with no frame pointer, and
     doing so saves some time or space.  Use 'true' when there is no
     possible advantage to avoiding a frame pointer.

     In certain cases, the compiler does not know how to produce valid
     code without a frame pointer.  The compiler recognizes those cases
     and automatically gives the function a frame pointer regardless of
     what 'TARGET_FRAME_POINTER_REQUIRED' returns.  You don't need to
     worry about them.

     In a function that does not require a frame pointer, the frame
     pointer register can be allocated for ordinary usage, unless you
     mark it as a fixed register.  See 'FIXED_REGISTERS' for more
     information.

     Default return value is 'false'.

 -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR)
     A C statement to store in the variable DEPTH-VAR the difference
     between the frame pointer and the stack pointer values immediately
     after the function prologue.  The value would be computed from
     information such as the result of 'get_frame_size ()' and the
     tables of registers 'regs_ever_live' and 'call_used_regs'.

     If 'ELIMINABLE_REGS' is defined, this macro will be not be used and
     need not be defined.  Otherwise, it must be defined even if
     'TARGET_FRAME_POINTER_REQUIRED' always returns true; in that case,
     you may set DEPTH-VAR to anything.

 -- Macro: ELIMINABLE_REGS
     If defined, this macro specifies a table of register pairs used to
     eliminate unneeded registers that point into the stack frame.  If
     it is not defined, the only elimination attempted by the compiler
     is to replace references to the frame pointer with references to
     the stack pointer.

     The definition of this macro is a list of structure
     initializations, each of which specifies an original and
     replacement register.

     On some machines, the position of the argument pointer is not known
     until the compilation is completed.  In such a case, a separate
     hard register must be used for the argument pointer.  This register
     can be eliminated by replacing it with either the frame pointer or
     the argument pointer, depending on whether or not the frame pointer
     has been eliminated.

     In this case, you might specify:
          #define ELIMINABLE_REGS  \
          {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
           {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
           {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}

     Note that the elimination of the argument pointer with the stack
     pointer is specified first since that is the preferred elimination.

 -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const
          int TO_REG)
     This target hook should returns 'true' if the compiler is allowed
     to try to replace register number FROM_REG with register number
     TO_REG.  This target hook need only be defined if 'ELIMINABLE_REGS'
     is defined, and will usually be 'true', since most of the cases
     preventing register elimination are things that the compiler
     already knows about.

     Default return value is 'true'.

 -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)
     This macro is similar to 'INITIAL_FRAME_POINTER_OFFSET'.  It
     specifies the initial difference between the specified pair of
     registers.  This macro must be defined if 'ELIMINABLE_REGS' is
     defined.


File: gccint.info,  Node: Stack Arguments,  Next: Register Arguments,  Prev: Elimination,  Up: Stack and Calling

17.9.6 Passing Function Arguments on the Stack
----------------------------------------------

The macros in this section control how arguments are passed on the
stack.  See the following section for other macros that control passing
certain arguments in registers.

 -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE)
     This target hook returns 'true' if an argument declared in a
     prototype as an integral type smaller than 'int' should actually be
     passed as an 'int'.  In addition to avoiding errors in certain
     cases of mismatch, it also makes for better code on certain
     machines.  The default is to not promote prototypes.

 -- Macro: PUSH_ARGS
     A C expression.  If nonzero, push insns will be used to pass
     outgoing arguments.  If the target machine does not have a push
     instruction, set it to zero.  That directs GCC to use an alternate
     strategy: to allocate the entire argument block and then store the
     arguments into it.  When 'PUSH_ARGS' is nonzero, 'PUSH_ROUNDING'
     must be defined too.

 -- Macro: PUSH_ARGS_REVERSED
     A C expression.  If nonzero, function arguments will be evaluated
     from last to first, rather than from first to last.  If this macro
     is not defined, it defaults to 'PUSH_ARGS' on targets where the
     stack and args grow in opposite directions, and 0 otherwise.

 -- Macro: PUSH_ROUNDING (NPUSHED)
     A C expression that is the number of bytes actually pushed onto the
     stack when an instruction attempts to push NPUSHED bytes.

     On some machines, the definition

          #define PUSH_ROUNDING(BYTES) (BYTES)

     will suffice.  But on other machines, instructions that appear to
     push one byte actually push two bytes in an attempt to maintain
     alignment.  Then the definition should be

          #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)

     If the value of this macro has a type, it should be an unsigned
     type.

 -- Macro: ACCUMULATE_OUTGOING_ARGS
     A C expression.  If nonzero, the maximum amount of space required
     for outgoing arguments will be computed and placed into
     'crtl->outgoing_args_size'.  No space will be pushed onto the stack
     for each call; instead, the function prologue should increase the
     stack frame size by this amount.

     Setting both 'PUSH_ARGS' and 'ACCUMULATE_OUTGOING_ARGS' is not
     proper.

 -- Macro: REG_PARM_STACK_SPACE (FNDECL)
     Define this macro if functions should assume that stack space has
     been allocated for arguments even when their values are passed in
     registers.

     The value of this macro is the size, in bytes, of the area reserved
     for arguments passed in registers for the function represented by
     FNDECL, which can be zero if GCC is calling a library function.
     The argument FNDECL can be the FUNCTION_DECL, or the type itself of
     the function.

     This space can be allocated by the caller, or be a part of the
     machine-dependent stack frame: 'OUTGOING_REG_PARM_STACK_SPACE' says
     which.

 -- Macro: INCOMING_REG_PARM_STACK_SPACE (FNDECL)
     Like 'REG_PARM_STACK_SPACE', but for incoming register arguments.
     Define this macro if space guaranteed when compiling a function
     body is different to space required when making a call, a situation
     that can arise with K&R style function definitions.

 -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE)
     Define this to a nonzero value if it is the responsibility of the
     caller to allocate the area reserved for arguments passed in
     registers when calling a function of FNTYPE.  FNTYPE may be NULL if
     the function called is a library function.

     If 'ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls
     whether the space for these arguments counts in the value of
     'crtl->outgoing_args_size'.

 -- Macro: STACK_PARMS_IN_REG_PARM_AREA
     Define this macro if 'REG_PARM_STACK_SPACE' is defined, but the
     stack parameters don't skip the area specified by it.

     Normally, when a parameter is not passed in registers, it is placed
     on the stack beyond the 'REG_PARM_STACK_SPACE' area.  Defining this
     macro suppresses this behavior and causes the parameter to be
     passed on the stack in its natural location.

 -- Target Hook: int TARGET_RETURN_POPS_ARGS (tree FUNDECL, tree
          FUNTYPE, int SIZE)
     This target hook returns the number of bytes of its own arguments
     that a function pops on returning, or 0 if the function pops no
     arguments and the caller must therefore pop them all after the
     function returns.

     FUNDECL is a C variable whose value is a tree node that describes
     the function in question.  Normally it is a node of type
     'FUNCTION_DECL' that describes the declaration of the function.
     From this you can obtain the 'DECL_ATTRIBUTES' of the function.

     FUNTYPE is a C variable whose value is a tree node that describes
     the function in question.  Normally it is a node of type
     'FUNCTION_TYPE' that describes the data type of the function.  From
     this it is possible to obtain the data types of the value and
     arguments (if known).

     When a call to a library function is being considered, FUNDECL will
     contain an identifier node for the library function.  Thus, if you
     need to distinguish among various library functions, you can do so
     by their names.  Note that "library function" in this context means
     a function used to perform arithmetic, whose name is known
     specially in the compiler and was not mentioned in the C code being
     compiled.

     SIZE is the number of bytes of arguments passed on the stack.  If a
     variable number of bytes is passed, it is zero, and argument
     popping will always be the responsibility of the calling function.

     On the VAX, all functions always pop their arguments, so the
     definition of this macro is SIZE.  On the 68000, using the standard
     calling convention, no functions pop their arguments, so the value
     of the macro is always 0 in this case.  But an alternative calling
     convention is available in which functions that take a fixed number
     of arguments pop them but other functions (such as 'printf') pop
     nothing (the caller pops all).  When this convention is in use,
     FUNTYPE is examined to determine whether a function takes a fixed
     number of arguments.

 -- Macro: CALL_POPS_ARGS (CUM)
     A C expression that should indicate the number of bytes a call
     sequence pops off the stack.  It is added to the value of
     'RETURN_POPS_ARGS' when compiling a function call.

     CUM is the variable in which all arguments to the called function
     have been accumulated.

     On certain architectures, such as the SH5, a call trampoline is
     used that pops certain registers off the stack, depending on the
     arguments that have been passed to the function.  Since this is a
     property of the call site, not of the called function,
     'RETURN_POPS_ARGS' is not appropriate.


File: gccint.info,  Node: Register Arguments,  Next: Scalar Return,  Prev: Stack Arguments,  Up: Stack and Calling

17.9.7 Passing Arguments in Registers
-------------------------------------

This section describes the macros which let you control how various
types of arguments are passed in registers or how they are arranged in
the stack.

 -- Target Hook: rtx TARGET_FUNCTION_ARG (cumulative_args_t CA,
          machine_mode MODE, const_tree TYPE, bool NAMED)
     Return an RTX indicating whether a function argument is passed in a
     register and if so, which register.

     The arguments are CA, which summarizes all the previous arguments;
     MODE, the machine mode of the argument; 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 NAMED, which is 'true' for an
     ordinary argument and 'false' for nameless arguments that
     correspond to '...' in the called function's prototype.  TYPE can
     be an incomplete type if a syntax error has previously occurred.

     The return value is usually either a 'reg' RTX for the hard
     register in which to pass the argument, or zero to pass the
     argument on the stack.

     The return value can be a 'const_int' which means argument is
     passed in a target specific slot with specified number.  Target
     hooks should be used to store or load argument in such case.  See
     'TARGET_STORE_BOUNDS_FOR_ARG' and 'TARGET_LOAD_BOUNDS_FOR_ARG' for
     more information.

     The value of the expression can also be a 'parallel' RTX.  This is
     used when an argument is passed in multiple locations.  The mode of
     the 'parallel' should be the mode of the entire argument.  The
     'parallel' holds any number of 'expr_list' pairs; each one
     describes where part of the argument is passed.  In each
     'expr_list' the first operand must be a 'reg' RTX for the hard
     register in which to pass this part of the argument, and the mode
     of the register RTX indicates how large this part of the argument
     is.  The second operand of the 'expr_list' is a 'const_int' which
     gives the offset in bytes into the entire argument of where this
     part starts.  As a special exception the first 'expr_list' in the
     'parallel' RTX may have a first operand of zero.  This indicates
     that the entire argument is also stored on the stack.

     The last time this hook is called, it is called with 'MODE ==
     VOIDmode', and its result is passed to the 'call' or 'call_value'
     pattern as operands 2 and 3 respectively.

     The usual way to make the ISO library '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 'TARGET_FUNCTION_ARG' return 0 whenever NAMED is 'false'.

     You may use the hook '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 'REG_PARM_STACK_SPACE' is not
     defined and 'TARGET_FUNCTION_ARG' returns nonzero for such an
     argument, the compiler will abort.  If 'REG_PARM_STACK_SPACE' is
     defined, the argument will be computed in the stack and then loaded
     into a register.

 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (machine_mode MODE,
          const_tree TYPE)
     This target hook should return 'true' if we should not pass TYPE
     solely in registers.  The file 'expr.h' defines a definition that
     is usually appropriate, refer to 'expr.h' for additional
     documentation.

 -- Target Hook: rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t CA,
          machine_mode MODE, const_tree TYPE, bool 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, 'TARGET_FUNCTION_ARG' computes the register in
     which the caller passes the value, and
     'TARGET_FUNCTION_INCOMING_ARG' should be defined in a similar
     fashion to tell the function being called where the arguments will
     arrive.

     If 'TARGET_FUNCTION_INCOMING_ARG' is not defined,
     'TARGET_FUNCTION_ARG' serves both purposes.

 -- Target Hook: bool TARGET_USE_PSEUDO_PIC_REG (void)
     This hook should return 1 in case pseudo register should be created
     for pic_offset_table_rtx during function expand.

 -- Target Hook: void TARGET_INIT_PIC_REG (void)
     Perform a target dependent initialization of pic_offset_table_rtx.
     This hook is called at the start of register allocation.

 -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t CUM,
          machine_mode MODE, tree TYPE, bool 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 pushed on the stack.

     On some machines, certain arguments must be passed partially in
     registers and partially in memory.  On these machines, typically
     the first few words of arguments are passed in registers, and the
     rest on the stack.  If a multi-word argument (a 'double' or a
     structure) crosses that boundary, its first few words must be
     passed in registers and the rest must be pushed.  This macro tells
     the compiler when this occurs, and how many bytes should go in
     registers.

     'TARGET_FUNCTION_ARG' for these arguments should return the first
     register to be used by the caller for this argument; likewise
     'TARGET_FUNCTION_INCOMING_ARG', for the called function.

 -- Target Hook: bool TARGET_PASS_BY_REFERENCE (cumulative_args_t CUM,
          machine_mode MODE, const_tree TYPE, bool NAMED)
     This target hook should return 'true' if an argument at the
     position indicated by CUM should be passed by reference.  This
     predicate is queried after target independent reasons for being
     passed by reference, such as 'TREE_ADDRESSABLE (type)'.

     If the hook returns true, a copy of that argument is made in memory
     and a pointer to the argument is passed instead of the argument
     itself.  The pointer is passed in whatever way is appropriate for
     passing a pointer to that type.

 -- Target Hook: bool TARGET_CALLEE_COPIES (cumulative_args_t CUM,
          machine_mode MODE, const_tree TYPE, bool 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 by the caller.

     For any argument for which the hook returns true, if it can be
     determined that the argument is not modified, then a copy need not
     be generated.

     The default version of this hook always returns false.

 -- Macro: CUMULATIVE_ARGS
     A C type for declaring a variable that is used as the first
     argument of 'TARGET_FUNCTION_ARG' and other related values.  For
     some target machines, the type 'int' suffices and can hold the
     number of bytes of argument so far.

     There is no need to record in 'CUMULATIVE_ARGS' anything about the
     arguments that have been passed on the stack.  The compiler has
     other variables to keep track of that.  For target machines on
     which all arguments are passed on the stack, there is no need to
     store anything in 'CUMULATIVE_ARGS'; however, the data structure
     must exist and should not be empty, so use 'int'.

 -- Macro: OVERRIDE_ABI_FORMAT (FNDECL)
     If defined, this macro is called before generating any code for a
     function, but after the CFUN descriptor for the function has been
     created.  The back end may use this macro to update CFUN to reflect
     an ABI other than that which would normally be used by default.  If
     the compiler is generating code for a compiler-generated function,
     FNDECL may be 'NULL'.

 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL,
          N_NAMED_ARGS)
     A C statement (sans semicolon) for initializing the variable CUM
     for the state at the beginning of the argument list.  The variable
     has type 'CUMULATIVE_ARGS'.  The value of FNTYPE is the tree node
     for the data type of the function which will receive the args, or 0
     if the args are to a compiler support library function.  For direct
     calls that are not libcalls, FNDECL contain the declaration node of
     the function.  FNDECL is also set when 'INIT_CUMULATIVE_ARGS' is
     used to find arguments for the function being compiled.
     N_NAMED_ARGS is set to the number of named arguments, including a
     structure return address if it is passed as a parameter, when
     making a call.  When processing incoming arguments, N_NAMED_ARGS is
     set to -1.

     When processing a call to a compiler support library function,
     LIBNAME identifies which one.  It is a 'symbol_ref' rtx which
     contains the name of the function, as a string.  LIBNAME is 0 when
     an ordinary C function call is being processed.  Thus, each time
     this macro is called, either LIBNAME or FNTYPE is nonzero, but
     never both of them at once.

 -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME)
     Like 'INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls, it
     gets a 'MODE' argument instead of FNTYPE, that would be 'NULL'.
     INDIRECT would always be zero, too.  If this macro is not defined,
     'INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is used instead.

 -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)
     Like 'INIT_CUMULATIVE_ARGS' but overrides it for the purposes of
     finding the arguments for the function being compiled.  If this
     macro is undefined, 'INIT_CUMULATIVE_ARGS' is used instead.

     The value passed for LIBNAME is always 0, since library routines
     with special calling conventions are never compiled with GCC.  The
     argument LIBNAME exists for symmetry with 'INIT_CUMULATIVE_ARGS'.

 -- Target Hook: void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t CA,
          machine_mode MODE, const_tree TYPE, bool NAMED)
     This hook updates the summarizer variable pointed to by CA to
     advance past an argument in the argument list.  The values MODE,
     TYPE and NAMED describe that argument.  Once this is done, the
     variable CUM is suitable for analyzing the _following_ argument
     with 'TARGET_FUNCTION_ARG', etc.

     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.

 -- Macro: FUNCTION_ARG_OFFSET (MODE, TYPE)
     If defined, a C expression that is the number of bytes to add to
     the offset of the argument passed in memory.  This is needed for
     the SPU, which passes 'char' and 'short' arguments in the preferred
     slot that is in the middle of the quad word instead of starting at
     the top.

 -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE)
     If defined, a C expression which determines whether, and in which
     direction, to pad out an argument with extra space.  The value
     should be of type 'enum direction': either 'upward' to pad above
     the argument, 'downward' to pad below, or 'none' to inhibit
     padding.

     The _amount_ of padding is not controlled by this macro, but by the
     target hook '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 big-endian machines, the default is to pad downward for an
     argument of constant size shorter than an 'int', and upward
     otherwise.

 -- Macro: PAD_VARARGS_DOWN
     If defined, a C expression which determines whether the default
     implementation of va_arg will attempt to pad down before reading
     the next argument, if that argument is smaller than its aligned
     space as controlled by 'PARM_BOUNDARY'.  If this macro is not
     defined, all such arguments are padded down if 'BYTES_BIG_ENDIAN'
     is true.

 -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST)
     Specify padding for the last element of a block move between
     registers and memory.  FIRST is nonzero if this is the only
     element.  Defining this macro allows better control of register
     function parameters on big-endian machines, without using
     'PARALLEL' rtl.  In particular, 'MUST_PASS_IN_STACK' need not test
     padding and mode of types in registers, as there is no longer a
     "wrong" part of a register; For example, a three byte aggregate may
     be passed in the high part of a register if so required.

 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_BOUNDARY (machine_mode
          MODE, const_tree TYPE)
     This hook returns the alignment boundary, in bits, of an argument
     with the specified mode and type.  The default hook returns
     'PARM_BOUNDARY' for all arguments.

 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_ROUND_BOUNDARY
          (machine_mode MODE, const_tree TYPE)
     Normally, the size of an argument is rounded up to '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.

 -- Macro: FUNCTION_ARG_REGNO_P (REGNO)
     A C expression that is nonzero if REGNO is the number of a hard
     register in which function arguments are sometimes passed.  This
     does _not_ include implicit arguments such as the static chain and
     the structure-value address.  On many machines, no registers can be
     used for this purpose since all function arguments are pushed on
     the stack.

 -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE)
     This hook should return true if parameter of type TYPE are passed
     as two scalar parameters.  By default, GCC will attempt to pack
     complex arguments into the target's word size.  Some ABIs require
     complex arguments to be split and treated as their individual
     components.  For example, on AIX64, complex floats should be passed
     in a pair of floating point registers, even though a complex float
     would fit in one 64-bit floating point register.

     The default value of this hook is 'NULL', which is treated as
     always false.

 -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void)
     This hook returns a type node for 'va_list' for the target.  The
     default version of the hook returns 'void*'.

 -- Target Hook: int TARGET_ENUM_VA_LIST_P (int IDX, const char **PNAME,
          tree *PTREE)
     This target hook is used in function 'c_common_nodes_and_builtins'
     to iterate through the target specific builtin types for va_list.
     The variable IDX is used as iterator.  PNAME has to be a pointer to
     a 'const char *' and PTREE a pointer to a 'tree' typed variable.
     The arguments PNAME and PTREE are used to store the result of this
     macro and are set to the name of the va_list builtin type and its
     internal type.  If the return value of this macro is zero, then
     there is no more element.  Otherwise the IDX should be increased
     for the next call of this macro to iterate through all types.

 -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL)
     This hook returns the va_list type of the calling convention
     specified by FNDECL.  The default version of this hook returns
     'va_list_type_node'.

 -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE)
     This hook returns the va_list type of the calling convention
     specified by the type of TYPE.  If TYPE is not a valid va_list
     type, it returns 'NULL_TREE'.

 -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree
          TYPE, gimple_seq *PRE_P, gimple_seq *POST_P)
     This hook performs target-specific gimplification of 'VA_ARG_EXPR'.
     The first two parameters correspond to the arguments to 'va_arg';
     the latter two are as in 'gimplify.c:gimplify_expr'.

 -- Target Hook: bool TARGET_VALID_POINTER_MODE (machine_mode MODE)
     Define this to return nonzero if the port can handle pointers with
     machine mode MODE.  The default version of this hook returns true
     for both 'ptr_mode' and 'Pmode'.

 -- Target Hook: bool TARGET_REF_MAY_ALIAS_ERRNO (struct ao_ref *REF)
     Define this to return nonzero if the memory reference REF may alias
     with the system C library errno location.  The default version of
     this hook assumes the system C library errno location is either a
     declaration of type int or accessed by dereferencing a pointer to
     int.

 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (machine_mode MODE)
     Define this to return nonzero if the port is prepared to handle
     insns involving scalar mode MODE.  For a scalar mode to be
     considered supported, all the basic arithmetic and comparisons must
     work.

     The default version of this hook returns true for any mode required
     to handle the basic C types (as defined by the port).  Included
     here are the double-word arithmetic supported by the code in
     'optabs.c'.

 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (machine_mode MODE)
     Define this to return nonzero if the port is prepared to handle
     insns involving vector mode MODE.  At the very least, it must have
     move patterns for this mode.

 -- Target Hook: bool TARGET_ARRAY_MODE_SUPPORTED_P (machine_mode MODE,
          unsigned HOST_WIDE_INT NELEMS)
     Return true if GCC should try to use a scalar mode to store an
     array of NELEMS elements, given that each element has mode MODE.
     Returning true here overrides the usual '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:

          int8x8x3_t vld3_s8 (const int8_t *)

     where the return type is defined as:

          typedef struct int8x8x3_t
          {
            int8x8_t val[3];
          } int8x8x3_t;

     If this hook allows 'val' to have a scalar mode, then 'int8x8x3_t'
     can have the same mode.  GCC can then store 'int8x8x3_t's in
     registers rather than forcing them onto the stack.

 -- Target Hook: bool TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P
          (machine_mode MODE)
     Define this to return nonzero if libgcc provides support for the
     floating-point mode MODE, which is known to pass
     'TARGET_SCALAR_MODE_SUPPORTED_P'.  The default version of this hook
     returns true for all of 'SFmode', 'DFmode', 'XFmode' and 'TFmode',
     if such modes exist.

 -- Target Hook: bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P
          (machine_mode 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 MODE, the compiler will try to minimize the lifetime of
     registers in MODE.  The hook may be called with 'VOIDmode' as
     argument.  In this case, the hook is expected to return nonzero if
     it returns nonzero for any mode.

     On some machines, it is risky to let hard registers live across
     arbitrary insns.  Typically, these machines have instructions that
     require values to be in specific registers (like an accumulator),
     and reload will fail if the required hard register is used for
     another purpose across such an insn.

     Passes before reload do not know which hard registers will be used
     in an instruction, but the machine modes of the registers set or
     used in the instruction are already known.  And for some machines,
     register classes are small for, say, integer registers but not for
     floating point registers.  For example, the AMD x86-64 architecture
     requires specific registers for the legacy x86 integer
     instructions, but there are many SSE registers for floating point
     operations.  On such targets, a good strategy may be to return
     nonzero from this hook for 'INTEGRAL_MODE_P' machine modes but zero
     for the SSE register classes.

     The default version of this hook returns false for any mode.  It is
     always safe to redefine this hook to return with a nonzero value.
     But if you unnecessarily define it, you will reduce the amount of
     optimizations that can be performed in some cases.  If you do not
     define this hook to return a nonzero value when it is required, the
     compiler will run out of spill registers and print a fatal error
     message.


File: gccint.info,  Node: Scalar Return,  Next: Aggregate Return,  Prev: Register Arguments,  Up: Stack and Calling

17.9.8 How Scalar Function Values Are Returned
----------------------------------------------

This section discusses the macros that control returning scalars as
values--values that can fit in registers.

 -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE,
          const_tree FN_DECL_OR_TYPE, bool OUTGOING)

     Define this to return an RTX representing the place where a
     function returns or receives a value of data type RET_TYPE, a tree
     node representing a data type.  FN_DECL_OR_TYPE is a tree node
     representing 'FUNCTION_DECL' or 'FUNCTION_TYPE' of a function being
     called.  If OUTGOING is false, the hook should compute the register
     in which the caller will see the return value.  Otherwise, the hook
     should return an RTX representing the place where a function
     returns a value.

     On many machines, only 'TYPE_MODE (RET_TYPE)' is relevant.
     (Actually, on most machines, scalar values are returned in the same
     place regardless of mode.)  The value of the expression is usually
     a 'reg' RTX for the hard register where the return value is stored.
     The value can also be a 'parallel' RTX, if the return value is in
     multiple places.  See 'TARGET_FUNCTION_ARG' for an explanation of
     the 'parallel' form.  Note that the callee will populate every
     location specified in the 'parallel', but if the first element of
     the 'parallel' contains the whole return value, callers will use
     that element as the canonical location and ignore the others.  The
     m68k port uses this type of 'parallel' to return pointers in both
     '%a0' (the canonical location) and '%d0'.

     If 'TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply
     the same promotion rules specified in 'PROMOTE_MODE' if VALTYPE is
     a scalar type.

     If the precise function being called is known, FUNC is a tree node
     ('FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This
     makes it possible to use a different value-returning convention for
     specific functions when all their calls are known.

     Some target machines have "register windows" so that the register
     in which a function returns its value is not the same as the one in
     which the caller sees the value.  For such machines, you should
     return different RTX depending on OUTGOING.

     'TARGET_FUNCTION_VALUE' is not used for return values with
     aggregate data types, because these are returned in another way.
     See 'TARGET_STRUCT_VALUE_RTX' and related macros, below.

 -- Macro: FUNCTION_VALUE (VALTYPE, FUNC)
     This macro has been deprecated.  Use 'TARGET_FUNCTION_VALUE' for a
     new target instead.

 -- Macro: LIBCALL_VALUE (MODE)
     A C expression to create an RTX representing the place where a
     library function returns a value of mode MODE.

     Note that "library function" in this context means a compiler
     support routine, used to perform arithmetic, whose name is known
     specially by the compiler and was not mentioned in the C code being
     compiled.

 -- Target Hook: rtx TARGET_LIBCALL_VALUE (machine_mode MODE, const_rtx
          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.

     The mode of the result is given by MODE and the name of the called
     library function is given by 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.

 -- Macro: FUNCTION_VALUE_REGNO_P (REGNO)
     A C expression that is nonzero if REGNO is the number of a hard
     register in which the values of called function may come back.

     A register whose use for returning values is limited to serving as
     the second of a pair (for a value of type 'double', say) need not
     be recognized by this macro.  So for most machines, this definition
     suffices:

          #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)

     If the machine has register windows, so that the caller and the
     called function use different registers for the return value, this
     macro should recognize only the caller's register numbers.

     This macro has been deprecated.  Use
     'TARGET_FUNCTION_VALUE_REGNO_P' for a new target instead.

 -- Target Hook: bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int
          REGNO)
     A target hook that return 'true' if REGNO is the number of a hard
     register in which the values of called function may come back.

     A register whose use for returning values is limited to serving as
     the second of a pair (for a value of type 'double', say) need not
     be recognized by this target hook.

     If the machine has register windows, so that the caller and the
     called function use different registers for the return value, this
     target hook should recognize only the caller's register numbers.

     If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be
     used.

 -- Macro: APPLY_RESULT_SIZE
     Define this macro if 'untyped_call' and 'untyped_return' need more
     space than is implied by 'FUNCTION_VALUE_REGNO_P' for saving and
     restoring an arbitrary return value.

 -- Target Hook: bool TARGET_OMIT_STRUCT_RETURN_REG
     Normally, when a function returns a structure by memory, the
     address is passed as an invisible pointer argument, but the
     compiler also arranges to return the address from the function like
     it would a normal pointer return value.  Define this to true if
     that behavior is undesirable on your target.

 -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE)
     This hook should return true if values of type TYPE are returned at
     the most significant end of a register (in other words, if they are
     padded at the least significant end).  You can assume that TYPE is
     returned in a register; the caller is required to check this.

     Note that the register provided by 'TARGET_FUNCTION_VALUE' must be
     able to hold the complete return value.  For example, if a 1-, 2-
     or 3-byte structure is returned at the most significant end of a
     4-byte register, 'TARGET_FUNCTION_VALUE' should provide an 'SImode'
     rtx.


File: gccint.info,  Node: Aggregate Return,  Next: Caller Saves,  Prev: Scalar Return,  Up: Stack and Calling

17.9.9 How Large Values Are Returned
------------------------------------

When a function value's mode is 'BLKmode' (and in some other cases), the
value is not returned according to 'TARGET_FUNCTION_VALUE' (*note Scalar
Return::).  Instead, the caller passes the address of a block of memory
in which the value should be stored.  This address is called the
"structure value address".

 This section describes how to control returning structure values in
memory.

 -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE,
          const_tree FNTYPE)
     This target hook should return a nonzero value to say to return the
     function value in memory, just as large structures are always
     returned.  Here TYPE will be the data type of the value, and FNTYPE
     will be the type of the function doing the returning, or 'NULL' for
     libcalls.

     Note that values of mode 'BLKmode' must be explicitly handled by
     this function.  Also, the option '-fpcc-struct-return' takes effect
     regardless of this macro.  On most systems, it is possible to leave
     the hook undefined; this causes a default definition to be used,
     whose value is the constant 1 for 'BLKmode' values, and 0
     otherwise.

     Do not use this hook to indicate that structures and unions should
     always be returned in memory.  You should instead use
     'DEFAULT_PCC_STRUCT_RETURN' to indicate this.

 -- Macro: DEFAULT_PCC_STRUCT_RETURN
     Define this macro to be 1 if all structure and union return values
     must be in memory.  Since this results in slower code, this should
     be defined only if needed for compatibility with other compilers or
     with an ABI.  If you define this macro to be 0, then the
     conventions used for structure and union return values are decided
     by the 'TARGET_RETURN_IN_MEMORY' target hook.

     If not defined, this defaults to the value 1.

 -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING)
     This target hook should return the location of the structure value
     address (normally a 'mem' or 'reg'), or 0 if the address is passed
     as an "invisible" first argument.  Note that FNDECL may be 'NULL',
     for libcalls.  You do not need to define this target hook if the
     address is always passed as an "invisible" first argument.

     On some architectures the place where the structure value address
     is found by the called function is not the same place that the
     caller put it.  This can be due to register windows, or it could be
     because the function prologue moves it to a different place.
     INCOMING is '1' or '2' when the location is needed in the context
     of the called function, and '0' in the context of the caller.

     If INCOMING is nonzero and the address is to be found on the stack,
     return a 'mem' which refers to the frame pointer.  If INCOMING is
     '2', the result is being used to fetch the structure value address
     at the beginning of a function.  If you need to emit adjusting
     code, you should do it at this point.

 -- Macro: PCC_STATIC_STRUCT_RETURN
     Define this macro if the usual system convention on the target
     machine for returning structures and unions is for the called
     function to return the address of a static variable containing the
     value.

     Do not define this if the usual system convention is for the caller
     to pass an address to the subroutine.

     This macro has effect in '-fpcc-struct-return' mode, but it does
     nothing when you use '-freg-struct-return' mode.

 -- Target Hook: machine_mode TARGET_GET_RAW_RESULT_MODE (int REGNO)
     This target hook returns the mode to be used when accessing raw
     return registers in '__builtin_return'.  Define this macro if the
     value in REG_RAW_MODE is not correct.

 -- Target Hook: machine_mode TARGET_GET_RAW_ARG_MODE (int REGNO)
     This target hook returns the mode to be used when accessing raw
     argument registers in '__builtin_apply_args'.  Define this macro if
     the value in REG_RAW_MODE is not correct.


File: gccint.info,  Node: Caller Saves,  Next: Function Entry,  Prev: Aggregate Return,  Up: Stack and Calling

17.9.10 Caller-Saves Register Allocation
----------------------------------------

If you enable it, GCC can save registers around function calls.  This
makes it possible to use call-clobbered registers to hold variables that
must live across calls.

 -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS)
     A C expression specifying which mode is required for saving NREGS
     of a pseudo-register in call-clobbered hard register REGNO.  If
     REGNO is unsuitable for caller save, 'VOIDmode' should be returned.
     For most machines this macro need not be defined since GCC will
     select the smallest suitable mode.


File: gccint.info,  Node: Function Entry,  Next: Profiling,  Prev: Caller Saves,  Up: Stack and Calling

17.9.11 Function Entry and Exit
-------------------------------

This section describes the macros that output function entry
("prologue") and exit ("epilogue") code.

 -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE,
          HOST_WIDE_INT SIZE)
     If defined, a function that outputs the assembler code for entry to
     a function.  The prologue is responsible for setting up the stack
     frame, initializing the frame pointer register, saving registers
     that must be saved, and allocating SIZE additional bytes of storage
     for the local variables.  SIZE is an integer.  FILE is a stdio
     stream to which the assembler code should be output.

     The label for the beginning of the function need not be output by
     this macro.  That has already been done when the macro is run.

     To determine which registers to save, the macro can refer to the
     array 'regs_ever_live': element R is nonzero if hard register R is
     used anywhere within the function.  This implies the function
     prologue should save register R, provided it is not one of the
     call-used registers.  ('TARGET_ASM_FUNCTION_EPILOGUE' must likewise
     use 'regs_ever_live'.)

     On machines that have "register windows", the function entry code
     does not save on the stack the registers that are in the windows,
     even if they are supposed to be preserved by function calls;
     instead it takes appropriate steps to "push" the register stack, if
     any non-call-used registers are used in the function.

     On machines where functions may or may not have frame-pointers, the
     function entry code must vary accordingly; it must set up the frame
     pointer if one is wanted, and not otherwise.  To determine whether
     a frame pointer is in wanted, the macro can refer to the variable
     'frame_pointer_needed'.  The variable's value will be 1 at run time
     in a function that needs a frame pointer.  *Note Elimination::.

     The function entry code is responsible for allocating any stack
     space required for the function.  This stack space consists of the
     regions listed below.  In most cases, these regions are allocated
     in the order listed, with the last listed region closest to the top
     of the stack (the lowest address if 'STACK_GROWS_DOWNWARD' is
     defined, and the highest address if it is not defined).  You can
     use a different order for a machine if doing so is more convenient
     or required for compatibility reasons.  Except in cases where
     required by standard or by a debugger, there is no reason why the
     stack layout used by GCC need agree with that used by other
     compilers for a machine.

 -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE)
     If defined, a function that outputs assembler code at the end of a
     prologue.  This should be used when the function prologue is being
     emitted as RTL, and you have some extra assembler that needs to be
     emitted.  *Note prologue instruction pattern::.

 -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE)
     If defined, a function that outputs assembler code at the start of
     an epilogue.  This should be used when the function epilogue is
     being emitted as RTL, and you have some extra assembler that needs
     to be emitted.  *Note epilogue instruction pattern::.

 -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE,
          HOST_WIDE_INT SIZE)
     If defined, a function that outputs the assembler code for exit
     from a function.  The epilogue is responsible for restoring the
     saved registers and stack pointer to their values when the function
     was called, and returning control to the caller.  This macro takes
     the same arguments as the macro 'TARGET_ASM_FUNCTION_PROLOGUE', and
     the registers to restore are determined from 'regs_ever_live' and
     'CALL_USED_REGISTERS' in the same way.

     On some machines, there is a single instruction that does all the
     work of returning from the function.  On these machines, give that
     instruction the name 'return' and do not define the macro
     'TARGET_ASM_FUNCTION_EPILOGUE' at all.

     Do not define a pattern named 'return' if you want the
     'TARGET_ASM_FUNCTION_EPILOGUE' to be used.  If you want the target
     switches to control whether return instructions or epilogues are
     used, define a 'return' pattern with a validity condition that
     tests the target switches appropriately.  If the 'return' pattern's
     validity condition is false, epilogues will be used.

     On machines where functions may or may not have frame-pointers, the
     function exit code must vary accordingly.  Sometimes the code for
     these two cases is completely different.  To determine whether a
     frame pointer is wanted, the macro can refer to the variable
     'frame_pointer_needed'.  The variable's value will be 1 when
     compiling a function that needs a frame pointer.

     Normally, 'TARGET_ASM_FUNCTION_PROLOGUE' and
     'TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially.
     The C variable 'current_function_is_leaf' is nonzero for such a
     function.  *Note Leaf Functions::.

     On some machines, some functions pop their arguments on exit while
     others leave that for the caller to do.  For example, the 68020
     when given '-mrtd' pops arguments in functions that take a fixed
     number of arguments.

     Your definition of the macro 'RETURN_POPS_ARGS' decides which
     functions pop their own arguments.  'TARGET_ASM_FUNCTION_EPILOGUE'
     needs to know what was decided.  The number of bytes of the current
     function's arguments that this function should pop is available in
     'crtl->args.pops_args'.  *Note Scalar Return::.

   * A region of 'crtl->args.pretend_args_size' bytes of uninitialized
     space just underneath the first argument arriving on the stack.
     (This may not be at the very start of the allocated stack region if
     the calling sequence has pushed anything else since pushing the
     stack arguments.  But usually, on such machines, nothing else has
     been pushed yet, because the function prologue itself does all the
     pushing.)  This region is used on machines where an argument may be
     passed partly in registers and partly in memory, and, in some cases
     to support the features in '<stdarg.h>'.

   * An area of memory used to save certain registers used by the
     function.  The size of this area, which may also include space for
     such things as the return address and pointers to previous stack
     frames, is machine-specific and usually depends on which registers
     have been used in the function.  Machines with register windows
     often do not require a save area.

   * A region of at least SIZE bytes, possibly rounded up to an
     allocation boundary, to contain the local variables of the
     function.  On some machines, this region and the save area may
     occur in the opposite order, with the save area closer to the top
     of the stack.

   * Optionally, when 'ACCUMULATE_OUTGOING_ARGS' is defined, a region of
     'crtl->outgoing_args_size' bytes to be used for outgoing argument
     lists of the function.  *Note Stack Arguments::.

 -- Macro: EXIT_IGNORE_STACK
     Define this macro as a C expression that is nonzero if the return
     instruction or the function epilogue ignores the value of the stack
     pointer; in other words, if it is safe to delete an instruction to
     adjust the stack pointer before a return from the function.  The
     default is 0.

     Note that this macro's value is relevant only for functions for
     which frame pointers are maintained.  It is never safe to delete a
     final stack adjustment in a function that has no frame pointer, and
     the compiler knows this regardless of 'EXIT_IGNORE_STACK'.

 -- Macro: EPILOGUE_USES (REGNO)
     Define this macro as a C expression that is nonzero for registers
     that are used by the epilogue or the 'return' pattern.  The stack
     and frame pointer registers are already assumed to be used as
     needed.

 -- Macro: EH_USES (REGNO)
     Define this macro as a C expression that is nonzero for registers
     that are used by the exception handling mechanism, and so should be
     considered live on entry to an exception edge.

 -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree
          THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET,
          tree FUNCTION)
     A function that outputs the assembler code for a thunk function,
     used to implement C++ virtual function calls with multiple
     inheritance.  The thunk acts as a wrapper around a virtual
     function, adjusting the implicit object parameter before handing
     control off to the real function.

     First, emit code to add the integer DELTA to the location that
     contains the incoming first argument.  Assume that this argument
     contains a pointer, and is the one used to pass the 'this' pointer
     in C++.  This is the incoming argument _before_ the function
     prologue, e.g. '%o0' on a sparc.  The addition must preserve the
     values of all other incoming arguments.

     Then, if VCALL_OFFSET is nonzero, an additional adjustment should
     be made after adding 'delta'.  In particular, if P is the adjusted
     pointer, the following adjustment should be made:

          p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]

     After the additions, emit code to jump to FUNCTION, which is a
     'FUNCTION_DECL'.  This is a direct pure jump, not a call, and does
     not touch the return address.  Hence returning from FUNCTION will
     return to whoever called the current 'thunk'.

     The effect must be as if FUNCTION had been called directly with the
     adjusted first argument.  This macro is responsible for emitting
     all of the code for a thunk function;
     'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE'
     are not invoked.

     The THUNK_FNDECL is redundant.  (DELTA and FUNCTION have already
     been extracted from it.)  It might possibly be useful on some
     targets, but probably not.

     If you do not define this macro, the target-independent code in the
     C++ front end will generate a less efficient heavyweight thunk that
     calls FUNCTION instead of jumping to it.  The generic approach does
     not support varargs.

 -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree
          THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET,
          const_tree FUNCTION)
     A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would be
     able to output the assembler code for the thunk function specified
     by the arguments it is passed, and false otherwise.  In the latter
     case, the generic approach will be used by the C++ front end, with
     the limitations previously exposed.


File: gccint.info,  Node: Profiling,  Next: Tail Calls,  Prev: Function Entry,  Up: Stack and Calling

17.9.12 Generating Code for Profiling
-------------------------------------

These macros will help you generate code for profiling.

 -- Macro: FUNCTION_PROFILER (FILE, LABELNO)
     A C statement or compound statement to output to FILE some
     assembler code to call the profiling subroutine 'mcount'.

     The details of how 'mcount' expects to be called are determined by
     your operating system environment, not by GCC.  To figure them out,
     compile a small program for profiling using the system's installed
     C compiler and look at the assembler code that results.

     Older implementations of 'mcount' expect the address of a counter
     variable to be loaded into some register.  The name of this
     variable is 'LP' followed by the number LABELNO, so you would
     generate the name using 'LP%d' in a 'fprintf'.

 -- Macro: PROFILE_HOOK
     A C statement or compound statement to output to FILE some assembly
     code to call the profiling subroutine 'mcount' even the target does
     not support profiling.

 -- Macro: NO_PROFILE_COUNTERS
     Define this macro to be an expression with a nonzero value if the
     'mcount' subroutine on your system does not need a counter variable
     allocated for each function.  This is true for almost all modern
     implementations.  If you define this macro, you must not use the
     LABELNO argument to 'FUNCTION_PROFILER'.

 -- Macro: PROFILE_BEFORE_PROLOGUE
     Define this macro if the code for function profiling should come
     before the function prologue.  Normally, the profiling code comes
     after.

 -- Target Hook: bool TARGET_KEEP_LEAF_WHEN_PROFILED (void)
     This target hook returns true if the target wants the leaf flag for
     the current function to stay true even if it calls mcount.  This
     might make sense for targets using the leaf flag only to determine
     whether a stack frame needs to be generated or not and for which
     the call to mcount is generated before the function prologue.


File: gccint.info,  Node: Tail Calls,  Next: Stack Smashing Protection,  Prev: Profiling,  Up: Stack and Calling

17.9.13 Permitting tail calls
-----------------------------

 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
          EXP)
     True if it is OK to do sibling call optimization for the specified
     call expression EXP.  DECL will be the called function, or 'NULL'
     if this is an indirect call.

     It is not uncommon for limitations of calling conventions to
     prevent tail calls to functions outside the current unit of
     translation, or during PIC compilation.  The hook is used to
     enforce these restrictions, as the 'sibcall' md pattern can not
     fail, or fall over to a "normal" call.  The criteria for successful
     sibling call optimization may vary greatly between different
     architectures.

 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS)
     Add any hard registers to REGS that are live on entry to the
     function.  This hook only needs to be defined to provide registers
     that cannot be found by examination of FUNCTION_ARG_REGNO_P, the
     callee saved registers, STATIC_CHAIN_INCOMING_REGNUM,
     STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX, FRAME_POINTER_REGNUM,
     EH_USES, FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, and the
     PIC_OFFSET_TABLE_REGNUM.

 -- Target Hook: void TARGET_SET_UP_BY_PROLOGUE (struct
          hard_reg_set_container *)
     This hook should add additional registers that are computed by the
     prologue to the hard regset for shrink-wrapping optimization
     purposes.

 -- Target Hook: bool TARGET_WARN_FUNC_RETURN (tree)
     True if a function's return statements should be checked for
     matching the function's return type.  This includes checking for
     falling off the end of a non-void function.  Return false if no
     such check should be made.


File: gccint.info,  Node: Stack Smashing Protection,  Next: Miscellaneous Register Hooks,  Prev: Tail Calls,  Up: Stack and Calling

17.9.14 Stack smashing protection
---------------------------------

 -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void)
     This hook returns a 'DECL' node for the external variable to use
     for the stack protection guard.  This variable is initialized by
     the runtime to some random value and is used to initialize the
     guard value that is placed at the top of the local stack frame.
     The type of this variable must be 'ptr_type_node'.

     The default version of this hook creates a variable called
     '__stack_chk_guard', which is normally defined in 'libgcc2.c'.

 -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void)
     This hook returns a 'CALL_EXPR' that alerts the runtime that the
     stack protect guard variable has been modified.  This expression
     should involve a call to a 'noreturn' function.

     The default version of this hook invokes a function called
     '__stack_chk_fail', taking no arguments.  This function is normally
     defined in 'libgcc2.c'.

 -- Common Target Hook: bool TARGET_SUPPORTS_SPLIT_STACK (bool REPORT,
          struct gcc_options *OPTS)
     Whether this target supports splitting the stack when the options
     described in 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 REPORT is true, this function may issue a warning or
     error; if REPORT is false, it must simply return a value


File: gccint.info,  Node: Miscellaneous Register Hooks,  Prev: Stack Smashing Protection,  Up: Stack and Calling

17.9.15 Miscellaneous register hooks
------------------------------------

 -- Target Hook: bool TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS
     Set to true if each call that binds to a local definition
     explicitly clobbers or sets all non-fixed registers modified by
     performing the call.  That is, by the call pattern itself, or by
     code that might be inserted by the linker (e.g.  stubs, veneers,
     branch islands), but not including those modifiable by the callee.
     The affected registers may be mentioned explicitly in the call
     pattern, or included as clobbers in CALL_INSN_FUNCTION_USAGE. The
     default version of this hook is set to false.  The purpose of this
     hook is to enable the fipa-ra optimization.


File: gccint.info,  Node: Varargs,  Next: Trampolines,  Prev: Stack and Calling,  Up: Target Macros

17.10 Implementing the Varargs Macros
=====================================

GCC comes with an implementation of '<varargs.h>' and '<stdarg.h>' that
work without change on machines that pass arguments on the stack.  Other
machines require their own implementations of varargs, and the two
machine independent header files must have conditionals to include it.

 ISO '<stdarg.h>' differs from traditional '<varargs.h>' mainly in the
calling convention for 'va_start'.  The traditional implementation takes
just one argument, which is the variable in which to store the argument
pointer.  The ISO implementation of 'va_start' takes an additional
second argument.  The user is supposed to write the last named argument
of the function here.

 However, 'va_start' should not use this argument.  The way to find the
end of the named arguments is with the built-in functions described
below.

 -- Macro: __builtin_saveregs ()
     Use this built-in function to save the argument registers in memory
     so that the varargs mechanism can access them.  Both ISO and
     traditional versions of 'va_start' must use '__builtin_saveregs',
     unless you use 'TARGET_SETUP_INCOMING_VARARGS' (see below) instead.

     On some machines, '__builtin_saveregs' is open-coded under the
     control of the target hook 'TARGET_EXPAND_BUILTIN_SAVEREGS'.  On
     other machines, it calls a routine written in assembler language,
     found in 'libgcc2.c'.

     Code generated for the call to '__builtin_saveregs' appears at the
     beginning of the function, as opposed to where the call to
     '__builtin_saveregs' is written, regardless of what the code is.
     This is because the registers must be saved before the function
     starts to use them for its own purposes.

 -- Macro: __builtin_next_arg (LASTARG)
     This builtin returns the address of the first anonymous stack
     argument, as type 'void *'.  If 'ARGS_GROW_DOWNWARD', it returns
     the address of the location above the first anonymous stack
     argument.  Use it in 'va_start' to initialize the pointer for
     fetching arguments from the stack.  Also use it in 'va_start' to
     verify that the second parameter LASTARG is the last named argument
     of the current function.

 -- Macro: __builtin_classify_type (OBJECT)
     Since each machine has its own conventions for which data types are
     passed in which kind of register, your implementation of 'va_arg'
     has to embody these conventions.  The easiest way to categorize the
     specified data type is to use '__builtin_classify_type' together
     with 'sizeof' and '__alignof__'.

     '__builtin_classify_type' ignores the value of OBJECT, considering
     only its data type.  It returns an integer describing what kind of
     type that is--integer, floating, pointer, structure, and so on.

     The file 'typeclass.h' defines an enumeration that you can use to
     interpret the values of '__builtin_classify_type'.

 These machine description macros help implement varargs:

 -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void)
     If defined, this hook produces the machine-specific code for a call
     to '__builtin_saveregs'.  This code will be moved to the very
     beginning of the function, before any parameter access are made.
     The return value of this function should be an RTX that contains
     the value to use as the return of '__builtin_saveregs'.

 -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t
          ARGS_SO_FAR, machine_mode MODE, tree TYPE, int
          *PRETEND_ARGS_SIZE, int SECOND_TIME)
     This target hook offers an alternative to using
     '__builtin_saveregs' and defining the hook
     'TARGET_EXPAND_BUILTIN_SAVEREGS'.  Use it to store the anonymous
     register arguments into the stack so that all the arguments appear
     to have been passed consecutively on the stack.  Once this is done,
     you can use the standard implementation of varargs that works for
     machines that pass all their arguments on the stack.

     The argument ARGS_SO_FAR points to the 'CUMULATIVE_ARGS' data
     structure, containing the values that are obtained after processing
     the named arguments.  The arguments MODE and TYPE describe the last
     named argument--its machine mode and its data type as a tree node.

     The target hook should do two things: first, push onto the stack
     all the argument registers _not_ used for the named arguments, and
     second, store the size of the data thus pushed into the
     'int'-valued variable pointed to by PRETEND_ARGS_SIZE.  The value
     that you store here will serve as additional offset for setting up
     the stack frame.

     Because you must generate code to push the anonymous arguments at
     compile time without knowing their data types,
     'TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that
     have just a single category of argument register and use it
     uniformly for all data types.

     If the argument SECOND_TIME is nonzero, it means that the arguments
     of the function are being analyzed for the second time.  This
     happens for an inline function, which is not actually compiled
     until the end of the source file.  The hook
     'TARGET_SETUP_INCOMING_VARARGS' should not generate any
     instructions in this case.

 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t
          CA)
     Define this hook to return '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 NAMED argument to 'TARGET_FUNCTION_ARG'
     is set for varargs and stdarg functions.  If this hook returns
     'true', the NAMED argument is always true for named arguments, and
     false for unnamed arguments.  If it returns 'false', but
     'TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns 'true', then all
     arguments are treated as named.  Otherwise, all named arguments
     except the last are treated as named.

     You need not define this hook if it always returns 'false'.

 -- Target Hook: void TARGET_CALL_ARGS (rtx, TREE)
     While generating RTL for a function call, this target hook is
     invoked once for each argument passed to the function, either a
     register returned by 'TARGET_FUNCTION_ARG' or a memory location.
     It is called just before the point where argument registers are
     stored.  The type of the function to be called is also passed as
     the second argument; it is 'NULL_TREE' for libcalls.  The
     'TARGET_END_CALL_ARGS' hook is invoked just after the code to copy
     the return reg has been emitted.  This functionality can be used to
     perform special setup of call argument registers if a target needs
     it.  For functions without arguments, the hook is called once with
     'pc_rtx' passed instead of an argument register.  Most ports do not
     need to implement anything for this hook.

 -- Target Hook: void TARGET_END_CALL_ARGS (void)
     This target hook is invoked while generating RTL for a function
     call, just after the point where the return reg is copied into a
     pseudo.  It signals that all the call argument and return registers
     for the just emitted call are now no longer in use.  Most ports do
     not need to implement anything for this hook.

 -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED
          (cumulative_args_t CA)
     If you need to conditionally change ABIs so that one works with
     'TARGET_SETUP_INCOMING_VARARGS', but the other works like neither
     'TARGET_SETUP_INCOMING_VARARGS' nor 'TARGET_STRICT_ARGUMENT_NAMING'
     was defined, then define this hook to return 'true' if
     'TARGET_SETUP_INCOMING_VARARGS' is used, 'false' otherwise.
     Otherwise, you should not define this hook.

 -- Target Hook: rtx TARGET_LOAD_BOUNDS_FOR_ARG (rtx SLOT, rtx ARG, rtx
          SLOT_NO)
     This hook is used by expand pass to emit insn to load bounds of ARG
     passed in SLOT.  Expand pass uses this hook in case bounds of ARG
     are not passed in register.  If SLOT is a memory, then bounds are
     loaded as for regular pointer loaded from memory.  If SLOT is not a
     memory then SLOT_NO is an integer constant holding number of the
     target dependent special slot which should be used to obtain
     bounds.  Hook returns RTX holding loaded bounds.

 -- Target Hook: void TARGET_STORE_BOUNDS_FOR_ARG (rtx ARG, rtx SLOT,
          rtx BOUNDS, rtx SLOT_NO)
     This hook is used by expand pass to emit insns to store BOUNDS of
     ARG passed in SLOT.  Expand pass uses this hook in case BOUNDS of
     ARG are not passed in register.  If SLOT is a memory, then BOUNDS
     are stored as for regular pointer stored in memory.  If SLOT is not
     a memory then SLOT_NO is an integer constant holding number of the
     target dependent special slot which should be used to store BOUNDS.

 -- Target Hook: rtx TARGET_LOAD_RETURNED_BOUNDS (rtx SLOT)
     This hook is used by expand pass to emit insn to load bounds
     returned by function call in SLOT.  Hook returns RTX holding loaded
     bounds.

 -- Target Hook: void TARGET_STORE_RETURNED_BOUNDS (rtx SLOT, rtx
          BOUNDS)
     This hook is used by expand pass to emit insn to store BOUNDS
     returned by function call into SLOT.

 -- Target Hook: rtx TARGET_CHKP_FUNCTION_VALUE_BOUNDS (const_tree
          RET_TYPE, const_tree FN_DECL_OR_TYPE, bool OUTGOING)
     Define this to return an RTX representing the place where a
     function returns bounds for returned pointers.  Arguments meaning
     is similar to 'TARGET_FUNCTION_VALUE'.

 -- Target Hook: void TARGET_SETUP_INCOMING_VARARG_BOUNDS
          (cumulative_args_t ARGS_SO_FAR, enum machine_mode MODE, tree
          TYPE, int *PRETEND_ARGS_SIZE, int SECOND_TIME)
     Use it to store bounds for anonymous register arguments stored into
     the stack.  Arguments meaning is similar to
     'TARGET_SETUP_INCOMING_VARARGS'.


File: gccint.info,  Node: Trampolines,  Next: Library Calls,  Prev: Varargs,  Up: Target Macros

17.11 Trampolines for Nested Functions
======================================

A "trampoline" is a small piece of code that is created at run time when
the address of a nested function is taken.  It normally resides on the
stack, in the stack frame of the containing function.  These macros tell
GCC how to generate code to allocate and initialize a trampoline.

 The instructions in the trampoline must do two things: load a constant
address into the static chain register, and jump to the real address of
the nested function.  On CISC machines such as the m68k, this requires
two instructions, a move immediate and a jump.  Then the two addresses
exist in the trampoline as word-long immediate operands.  On RISC
machines, it is often necessary to load each address into a register in
two parts.  Then pieces of each address form separate immediate
operands.

 The code generated to initialize the trampoline must store the variable
parts--the static chain value and the function address--into the
immediate operands of the instructions.  On a CISC machine, this is
simply a matter of copying each address to a memory reference at the
proper offset from the start of the trampoline.  On a RISC machine, it
may be necessary to take out pieces of the address and store them
separately.

 -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F)
     This hook is called by 'assemble_trampoline_template' to output, on
     the stream F, assembler code for a block of data that contains the
     constant parts of a trampoline.  This code should not include a
     label--the label is taken care of automatically.

     If you do not define this hook, it means no template is needed for
     the target.  Do not define this hook on systems where the block
     move code to copy the trampoline into place would be larger than
     the code to generate it on the spot.

 -- Macro: TRAMPOLINE_SECTION
     Return the section into which the trampoline template is to be
     placed (*note Sections::).  The default value is
     'readonly_data_section'.

 -- Macro: TRAMPOLINE_SIZE
     A C expression for the size in bytes of the trampoline, as an
     integer.

 -- Macro: TRAMPOLINE_ALIGNMENT
     Alignment required for trampolines, in bits.

     If you don't define this macro, the value of 'FUNCTION_ALIGNMENT'
     is used for aligning trampolines.

 -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL,
          rtx STATIC_CHAIN)
     This hook is called to initialize a trampoline.  M_TRAMP is an RTX
     for the memory block for the trampoline; FNDECL is the
     'FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX for
     the static chain value that should be passed to the function when
     it is called.

     If the target defines 'TARGET_ASM_TRAMPOLINE_TEMPLATE', then the
     first thing this hook should do is emit a block move into M_TRAMP
     from the memory block returned by 'assemble_trampoline_template'.
     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 '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 initializing the trampoline proper.

 -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR)
     This hook should perform any machine-specific adjustment in the
     address of the trampoline.  Its argument contains the address of
     the memory block that was passed to 'TARGET_TRAMPOLINE_INIT'.  In
     case the address to be used for a function call should be different
     from the address at which the template was stored, the different
     address should be returned; otherwise ADDR should be returned
     unchanged.  If this hook is not defined, ADDR will be used for
     function calls.

 Implementing trampolines is difficult on many machines because they
have separate instruction and data caches.  Writing into a stack
location fails to clear the memory in the instruction cache, so when the
program jumps to that location, it executes the old contents.

 Here are two possible solutions.  One is to clear the relevant parts of
the instruction cache whenever a trampoline is set up.  The other is to
make all trampolines identical, by having them jump to a standard
subroutine.  The former technique makes trampoline execution faster; the
latter makes initialization faster.

 To clear the instruction cache when a trampoline is initialized, define
the following macro.

 -- Macro: CLEAR_INSN_CACHE (BEG, END)
     If defined, expands to a C expression clearing the _instruction
     cache_ in the specified interval.  The definition of this macro
     would typically be a series of 'asm' statements.  Both BEG and END
     are both pointer expressions.

 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
beginning of the trampoline code is always aligned at the same point in
its cache line.  Look in 'm68k.h' as a guide.

 -- Macro: TRANSFER_FROM_TRAMPOLINE
     Define this macro if trampolines need a special subroutine to do
     their work.  The macro should expand to a series of 'asm'
     statements which will be compiled with GCC.  They go in a library
     function named '__transfer_from_trampoline'.

     If you need to avoid executing the ordinary prologue code of a
     compiled C function when you jump to the subroutine, you can do so
     by placing a special label of your own in the assembler code.  Use
     one 'asm' statement to generate an assembler label, and another to
     make the label global.  Then trampolines can use that label to jump
     directly to your special assembler code.


File: gccint.info,  Node: Library Calls,  Next: Addressing Modes,  Prev: Trampolines,  Up: Target Macros

17.12 Implicit Calls to Library Routines
========================================

Here is an explanation of implicit calls to library routines.

 -- Macro: DECLARE_LIBRARY_RENAMES
     This macro, if defined, should expand to a piece of C code that
     will get expanded when compiling functions for libgcc.a.  It can be
     used to provide alternate names for GCC's internal library
     functions if there are ABI-mandated names that the compiler should
     provide.

 -- Target Hook: void TARGET_INIT_LIBFUNCS (void)
     This hook should declare additional library routines or rename
     existing ones, using the functions 'set_optab_libfunc' and
     'init_one_libfunc' defined in 'optabs.c'.  'init_optabs' calls this
     macro after initializing all the normal library routines.

     The default is to do nothing.  Most ports don't need to define this
     hook.

 -- 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 '__gnu_'
     instead.  E.g., '__muldi3' changes to '__gnu_muldi3'.  This
     currently only affects functions defined in 'libgcc2.c'.  If this
     is set to true, the 'tm.h' file must also '#define
     LIBGCC2_GNU_PREFIX'.

 -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON)
     This macro should return 'true' if the library routine that
     implements the floating point comparison operator COMPARISON in
     mode MODE will return a boolean, and FALSE if it will return a
     tristate.

     GCC's own floating point libraries return tristates from the
     comparison operators, so the default returns false always.  Most
     ports don't need to define this macro.

 -- Macro: TARGET_LIB_INT_CMP_BIASED
     This macro should evaluate to 'true' if the integer comparison
     functions (like '__cmpdi2') return 0 to indicate that the first
     operand is smaller than the second, 1 to indicate that they are
     equal, and 2 to indicate that the first operand is greater than the
     second.  If this macro evaluates to 'false' the comparison
     functions return -1, 0, and 1 instead of 0, 1, and 2.  If the
     target uses the routines in 'libgcc.a', you do not need to define
     this macro.

 -- Macro: TARGET_HAS_NO_HW_DIVIDE
     This macro should be defined if the target has no hardware divide
     instructions.  If this macro is defined, GCC will use an algorithm
     which make use of simple logical and arithmetic operations for
     64-bit division.  If the macro is not defined, GCC will use an
     algorithm which make use of a 64-bit by 32-bit divide primitive.

 -- Macro: TARGET_EDOM
     The value of 'EDOM' on the target machine, as a C integer constant
     expression.  If you don't define this macro, GCC does not attempt
     to deposit the value of 'EDOM' into 'errno' directly.  Look in
     '/usr/include/errno.h' to find the value of 'EDOM' on your system.

     If you do not define 'TARGET_EDOM', then compiled code reports
     domain errors by calling the library function and letting it report
     the error.  If mathematical functions on your system use 'matherr'
     when there is an error, then you should leave 'TARGET_EDOM'
     undefined so that 'matherr' is used normally.

 -- Macro: GEN_ERRNO_RTX
     Define this macro as a C expression to create an rtl expression
     that refers to the global "variable" 'errno'.  (On certain systems,
     'errno' may not actually be a variable.)  If you don't define this
     macro, a reasonable default is used.

 -- Target Hook: bool TARGET_LIBC_HAS_FUNCTION (enum function_class
          FN_CLASS)
     This hook determines whether a function from a class of functions
     FN_CLASS is present at the runtime.

 -- Macro: NEXT_OBJC_RUNTIME
     Set this macro to 1 to use the "NeXT" Objective-C message sending
     conventions by default.  This calling convention involves passing
     the object, the selector and the method arguments all at once to
     the method-lookup library function.  This is the usual setting when
     targeting Darwin/Mac OS X systems, which have the NeXT runtime
     installed.

     If the macro is set to 0, the "GNU" Objective-C message sending
     convention will be used by default.  This convention passes just
     the object and the selector to the method-lookup function, which
     returns a pointer to the method.

     In either case, it remains possible to select code-generation for
     the alternate scheme, by means of compiler command line switches.


File: gccint.info,  Node: Addressing Modes,  Next: Anchored Addresses,  Prev: Library Calls,  Up: Target Macros

17.13 Addressing Modes
======================

This is about addressing modes.

 -- Macro: HAVE_PRE_INCREMENT
 -- Macro: HAVE_PRE_DECREMENT
 -- Macro: HAVE_POST_INCREMENT
 -- Macro: HAVE_POST_DECREMENT
     A C expression that is nonzero if the machine supports
     pre-increment, pre-decrement, post-increment, or post-decrement
     addressing respectively.

 -- Macro: HAVE_PRE_MODIFY_DISP
 -- Macro: HAVE_POST_MODIFY_DISP
     A C expression that is nonzero if the machine supports pre- or
     post-address side-effect generation involving constants other than
     the size of the memory operand.

 -- Macro: HAVE_PRE_MODIFY_REG
 -- Macro: HAVE_POST_MODIFY_REG
     A C expression that is nonzero if the machine supports pre- or
     post-address side-effect generation involving a register
     displacement.

 -- Macro: CONSTANT_ADDRESS_P (X)
     A C expression that is 1 if the RTX X is a constant which is a
     valid address.  On most machines the default definition of
     '(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable,
     but a few machines are more restrictive as to which constant
     addresses are supported.

 -- Macro: CONSTANT_P (X)
     'CONSTANT_P', which is defined by target-independent code, accepts
     integer-values expressions whose values are not explicitly known,
     such as 'symbol_ref', 'label_ref', and 'high' expressions and
     'const' arithmetic expressions, in addition to 'const_int' and
     'const_double' expressions.

 -- Macro: MAX_REGS_PER_ADDRESS
     A number, the maximum number of registers that can appear in a
     valid memory address.  Note that it is up to you to specify a value
     equal to the maximum number that 'TARGET_LEGITIMATE_ADDRESS_P'
     would ever accept.

 -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (machine_mode MODE,
          rtx X, bool STRICT)
     A function that returns whether X (an RTX) is a legitimate memory
     address on the target machine for a memory operand of mode MODE.

     Legitimate addresses are defined in two variants: a strict variant
     and a non-strict one.  The STRICT parameter chooses which variant
     is desired by the caller.

     The strict variant is used in the reload pass.  It must be defined
     so that any pseudo-register that has not been allocated a hard
     register is considered a memory reference.  This is because in
     contexts where some kind of register is required, a pseudo-register
     with no hard register must be rejected.  For non-hard registers,
     the strict variant should look up the 'reg_renumber' array; it
     should then proceed using the hard register number in the array, or
     treat the pseudo as a memory reference if the array holds '-1'.

     The non-strict variant is used in other passes.  It must be defined
     to accept all pseudo-registers in every context where some kind of
     register is required.

     Normally, constant addresses which are the sum of a 'symbol_ref'
     and an integer are stored inside a 'const' RTX to mark them as
     constant.  Therefore, there is no need to recognize such sums
     specifically as legitimate addresses.  Normally you would simply
     recognize any 'const' as legitimate.

     Usually 'PRINT_OPERAND_ADDRESS' is not prepared to handle constant
     sums that are not marked with 'const'.  It assumes that a naked
     'plus' indicates indexing.  If so, then you _must_ reject such
     naked constant sums as illegitimate addresses, so that none of them
     will be given to 'PRINT_OPERAND_ADDRESS'.

     On some machines, whether a symbolic address is legitimate depends
     on the section that the address refers to.  On these machines,
     define the target hook 'TARGET_ENCODE_SECTION_INFO' to store the
     information into the 'symbol_ref', and then check for it here.
     When you see a 'const', you will have to look inside it to find the
     'symbol_ref' in order to determine the section.  *Note Assembler
     Format::.

     Some ports are still using a deprecated legacy substitute for this
     hook, the 'GO_IF_LEGITIMATE_ADDRESS' macro.  This macro has this
     syntax:

          #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)

     and should 'goto LABEL' if the address X is a valid address on the
     target machine for a memory operand of mode MODE.

     Compiler source files that want to use the strict variant of this
     macro define the macro 'REG_OK_STRICT'.  You should use an '#ifdef
     REG_OK_STRICT' conditional to define the strict variant in that
     case and the non-strict variant otherwise.

     Using the hook is usually simpler because it limits the number of
     files that are recompiled when changes are made.

 -- Macro: TARGET_MEM_CONSTRAINT
     A single character to be used instead of the default ''m''
     character for general memory addresses.  This defines the
     constraint letter which matches the memory addresses accepted by
     'TARGET_LEGITIMATE_ADDRESS_P'.  Define this macro if you want to
     support new address formats in your back end without changing the
     semantics of the ''m'' constraint.  This is necessary in order to
     preserve functionality of inline assembly constructs using the
     ''m'' constraint.

 -- Macro: FIND_BASE_TERM (X)
     A C expression to determine the base term of address X, or to
     provide a simplified version of X from which 'alias.c' can easily
     find the base term.  This macro is used in only two places:
     'find_base_value' and 'find_base_term' in 'alias.c'.

     It is always safe for this macro to not be defined.  It exists so
     that alias analysis can understand machine-dependent addresses.

     The typical use of this macro is to handle addresses containing a
     label_ref or symbol_ref within an UNSPEC.

 -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX,
          machine_mode MODE)
     This hook is given an invalid memory address X for an operand of
     mode MODE and should try to return a valid memory address.

     X will always be the result of a call to 'break_out_memory_refs',
     and OLDX will be the operand that was given to that function to
     produce X.

     The code of the hook should not alter the substructure of X.  If it
     transforms X into a more legitimate form, it should return the new
     X.

     It is not necessary for this hook to come up with a legitimate
     address, with the exception of native TLS addresses (*note Emulated
     TLS::).  The compiler has standard ways of doing so in all cases.
     In fact, if the target supports only emulated TLS, it is safe to
     omit this hook or make it return X if it cannot find a valid way to
     legitimize the address.  But often a machine-dependent strategy can
     generate better code.

 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS,
          WIN)
     A C compound statement that attempts to replace X, which is an
     address that needs reloading, with a valid memory address for an
     operand of mode MODE.  WIN will be a C statement label elsewhere in
     the code.  It is not necessary to define this macro, but it might
     be useful for performance reasons.

     For example, on the i386, it is sometimes possible to use a single
     reload register instead of two by reloading a sum of two pseudo
     registers into a register.  On the other hand, for number of RISC
     processors offsets are limited so that often an intermediate
     address needs to be generated in order to address a stack slot.  By
     defining 'LEGITIMIZE_RELOAD_ADDRESS' appropriately, the
     intermediate addresses generated for adjacent some stack slots can
     be made identical, and thus be shared.

     _Note_: This macro should be used with caution.  It is necessary to
     know something of how reload works in order to effectively use
     this, and it is quite easy to produce macros that build in too much
     knowledge of reload internals.

     _Note_: This macro must be able to reload an address created by a
     previous invocation of this macro.  If it fails to handle such
     addresses then the compiler may generate incorrect code or abort.

     The macro definition should use 'push_reload' to indicate parts
     that need reloading; OPNUM, TYPE and IND_LEVELS are usually
     suitable to be passed unaltered to 'push_reload'.

     The code generated by this macro must not alter the substructure of
     X.  If it transforms X into a more legitimate form, it should
     assign X (which will always be a C variable) a new value.  This
     also applies to parts that you change indirectly by calling
     'push_reload'.

     The macro definition may use 'strict_memory_address_p' to test if
     the address has become legitimate.

     If you want to change only a part of X, one standard way of doing
     this is to use 'copy_rtx'.  Note, however, that it unshares only a
     single level of rtl.  Thus, if the part to be changed is not at the
     top level, you'll need to replace first the top level.  It is not
     necessary for this macro to come up with a legitimate address; but
     often a machine-dependent strategy can generate better code.

 -- Target Hook: bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx ADDR,
          addr_space_t ADDRSPACE)
     This hook returns 'true' if memory address ADDR in address space
     ADDRSPACE can have different meanings depending on the machine mode
     of the memory reference it is used for or if the address is valid
     for some modes but not others.

     Autoincrement and autodecrement addresses typically have
     mode-dependent effects because the amount of the increment or
     decrement is the size of the operand being addressed.  Some
     machines have other mode-dependent addresses.  Many RISC machines
     have no mode-dependent addresses.

     You may assume that ADDR is a valid address for the machine.

     The default version of this hook returns 'false'.

 -- Target Hook: bool TARGET_LEGITIMATE_CONSTANT_P (machine_mode MODE,
          rtx X)
     This hook returns true if X is a legitimate constant for a
     MODE-mode immediate operand on the target machine.  You can assume
     that X satisfies 'CONSTANT_P', so you need not check this.

     The default definition returns true.

 -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X)
     This hook is used to undo the possibly obfuscating effects of the
     'LEGITIMIZE_ADDRESS' and 'LEGITIMIZE_RELOAD_ADDRESS' target macros.
     Some backend implementations of these macros wrap symbol references
     inside an 'UNSPEC' rtx to represent PIC or similar addressing
     modes.  This target hook allows GCC's optimizers to understand the
     semantics of these opaque 'UNSPEC's by converting them back into
     their original form.

 -- Target Hook: bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx X)
     This hook should return true if X should not be emitted into debug
     sections.

 -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (machine_mode MODE,
          rtx X)
     This hook should return true if X is of a form that cannot (or
     should not) be spilled to the constant pool.  MODE is the mode of
     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
     holding the constant.  This restriction is often true of addresses
     of TLS symbols for various targets.

 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (machine_mode
          MODE, const_rtx X)
     This hook should return true if pool entries for constant X can be
     placed in an 'object_block' structure.  MODE is the mode of X.

     The default version returns false for all constants.

 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_DECL_P (const_tree DECL)
     This hook should return true if pool entries for DECL should be
     placed in an 'object_block' structure.

     The default version returns true for all decls.

 -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (tree FNDECL)
     This hook should return the DECL of a function that implements the
     reciprocal of the machine-specific builtin function FNDECL, or
     'NULL_TREE' if such a function is not available.

 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void)
     This hook should return the DECL of a function F that given an
     address ADDR as an argument returns a mask M that can be used to
     extract from two vectors the relevant data that resides in ADDR in
     case ADDR is not properly aligned.

     The autovectorizer, when vectorizing a load operation from an
     address ADDR that may be unaligned, will generate two vector loads
     from the two aligned addresses around ADDR.  It then generates a
     'REALIGN_LOAD' operation to extract the relevant data from the two
     loaded vectors.  The first two arguments to 'REALIGN_LOAD', V1 and
     V2, are the two vectors, each of size VS, and the third argument,
     OFF, defines how the data will be extracted from these two vectors:
     if OFF is 0, then the returned vector is V2; otherwise, the
     returned vector is composed from the last VS-OFF elements of V1
     concatenated to the first OFF elements of V2.

     If this hook is defined, the autovectorizer will generate a call to
     F (using the DECL tree that this hook returns) and will use the
     return value of F as the argument OFF to 'REALIGN_LOAD'.
     Therefore, the mask M returned by F should comply with the
     semantics expected by 'REALIGN_LOAD' described above.  If this hook
     is not defined, then ADDR will be used as the argument OFF to
     'REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR
     will be considered.

 -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum
          vect_cost_for_stmt TYPE_OF_COST, tree VECTYPE, int MISALIGN)
     Returns cost of different scalar or vector statements for
     vectorization cost model.  For vector memory operations the cost
     may depend on type (VECTYPE) and misalignment value (MISALIGN).

 -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE
          (const_tree TYPE, bool IS_PACKED)
     Return true if vector alignment is reachable (by peeling N
     iterations) for the given type.

 -- Target Hook: bool TARGET_VECTORIZE_VEC_PERM_CONST_OK (machine_mode,
          const unsigned char *SEL)
     Return true if a vector created for 'vec_perm_const' is valid.

 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (unsigned
          CODE, tree DEST_TYPE, tree SRC_TYPE)
     This hook should return the DECL of a function that implements
     conversion of the input vector of type SRC_TYPE to type DEST_TYPE.
     The value of CODE is one of the enumerators in 'enum tree_code' and
     specifies how the conversion is to be applied (truncation,
     rounding, etc.).

     If this hook is defined, the autovectorizer will use the
     'TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing
     conversion.  Otherwise, it will return 'NULL_TREE'.

 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION
          (unsigned CODE, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
     This hook should return the decl of a function that implements the
     vectorized variant of the function with the 'combined_fn' code CODE
     or 'NULL_TREE' if such a function is not available.  The return
     type of the vectorized function shall be of vector type
     VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.

 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION
          (tree FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
     This hook should return the decl of a function that implements the
     vectorized variant of target built-in function 'fndecl'.  The
     return type of the vectorized function shall be of vector type
     VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.

 -- Target Hook: bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT
          (machine_mode MODE, const_tree TYPE, int MISALIGNMENT, bool
          IS_PACKED)
     This hook should return true if the target supports misaligned
     vector store/load of a specific factor denoted in the MISALIGNMENT
     parameter.  The vector store/load should be of machine mode MODE
     and the elements in the vectors should be of type TYPE.  IS_PACKED
     parameter is true if the memory access is defined in a packed
     struct.

 -- Target Hook: machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE
          (machine_mode MODE)
     This hook should return the preferred mode for vectorizing scalar
     mode MODE.  The default is equal to 'word_mode', because the
     vectorizer can do some transformations even in absence of
     specialized SIMD hardware.

 -- Target Hook: unsigned int
          TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES (void)
     This hook should return a mask of sizes that should be iterated
     over after trying to autovectorize using the vector size derived
     from the mode returned by 'TARGET_VECTORIZE_PREFERRED_SIMD_MODE'.
     The default is zero which means to not iterate over other vector
     sizes.

 -- Target Hook: machine_mode TARGET_VECTORIZE_GET_MASK_MODE (unsigned
          NUNITS, unsigned LENGTH)
     This hook returns mode to be used for a mask to be used for a
     vector of specified LENGTH with NUNITS elements.  By default an
     integer vector mode of a proper size is returned.

 -- Target Hook: void * TARGET_VECTORIZE_INIT_COST (struct loop
          *LOOP_INFO)
     This hook should initialize target-specific data structures in
     preparation for modeling the costs of vectorizing a loop or basic
     block.  The default allocates three unsigned integers for
     accumulating costs for the prologue, body, and epilogue of the loop
     or basic block.  If LOOP_INFO is non-NULL, it identifies the loop
     being vectorized; otherwise a single block is being vectorized.

 -- Target Hook: unsigned TARGET_VECTORIZE_ADD_STMT_COST (void *DATA,
          int COUNT, enum vect_cost_for_stmt KIND, struct _stmt_vec_info
          *STMT_INFO, int MISALIGN, enum vect_cost_model_location WHERE)
     This hook should update the target-specific DATA in response to
     adding COUNT copies of the given KIND of statement to a loop or
     basic block.  The default adds the builtin vectorizer cost for the
     copies of the statement to the accumulator specified by WHERE, (the
     prologue, body, or epilogue) and returns the amount added.  The
     return value should be viewed as a tentative cost that may later be
     revised.

 -- Target Hook: void TARGET_VECTORIZE_FINISH_COST (void *DATA, unsigned
          *PROLOGUE_COST, unsigned *BODY_COST, unsigned *EPILOGUE_COST)
     This hook should complete calculations of the cost of vectorizing a
     loop or basic block based on DATA, and return the prologue, body,
     and epilogue costs as unsigned integers.  The default returns the
     value of the three accumulators.

 -- Target Hook: void TARGET_VECTORIZE_DESTROY_COST_DATA (void *DATA)
     This hook should release DATA and any related data structures
     allocated by TARGET_VECTORIZE_INIT_COST. The default releases the
     accumulator.

 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_GATHER (const_tree
          MEM_VECTYPE, const_tree INDEX_TYPE, int SCALE)
     Target builtin that implements vector gather operation.
     MEM_VECTYPE is the vector type of the load and INDEX_TYPE is scalar
     type of the index, scaled by SCALE.  The default is 'NULL_TREE'
     which means to not vectorize gather loads.

 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_SCATTER (const_tree
          VECTYPE, const_tree INDEX_TYPE, int SCALE)
     Target builtin that implements vector scatter operation.  VECTYPE
     is the vector type of the store and INDEX_TYPE is scalar type of
     the index, scaled by SCALE.  The default is 'NULL_TREE' which means
     to not vectorize scatter stores.

 -- Target Hook: int TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN
          (struct cgraph_node *, struct cgraph_simd_clone *, TREE, INT)
     This hook should set VECSIZE_MANGLE, VECSIZE_INT, VECSIZE_FLOAT
     fields in SIMD_CLONE structure pointed by CLONE_INFO argument and
     also SIMDLEN field if it was previously 0.  The hook should return
     0 if SIMD clones shouldn't be emitted, or number of VECSIZE_MANGLE
     variants that should be emitted.

 -- Target Hook: void TARGET_SIMD_CLONE_ADJUST (struct cgraph_node *)
     This hook should add implicit 'attribute(target("..."))' attribute
     to SIMD clone NODE if needed.

 -- Target Hook: int TARGET_SIMD_CLONE_USABLE (struct cgraph_node *)
     This hook should return -1 if SIMD clone NODE shouldn't be used in
     vectorized loops in current function, or non-negative number if it
     is usable.  In that case, the smaller the number is, the more
     desirable it is to use it.

 -- Target Hook: bool TARGET_GOACC_VALIDATE_DIMS (tree DECL, int *DIMS,
          int FN_LEVEL)
     This hook should check the launch dimensions provided for an
     OpenACC compute region, or routine.  Defaulted values are
     represented as -1 and non-constant values as 0.  The FN_LEVEL is
     negative for the function corresponding to the compute region.  For
     a routine is is the outermost level at which partitioned execution
     may be spawned.  The hook should verify non-default values.  If
     DECL is NULL, global defaults are being validated and unspecified
     defaults should be filled in.  Diagnostics should be issued as
     appropriate.  Return true, if changes have been made.  You must
     override this hook to provide dimensions larger than 1.

 -- Target Hook: int TARGET_GOACC_DIM_LIMIT (int AXIS)
     This hook should return the maximum size of a particular dimension,
     or zero if unbounded.

 -- Target Hook: bool TARGET_GOACC_FORK_JOIN (gcall *CALL, const int
          *DIMS, bool IS_FORK)
     This hook can be used to convert IFN_GOACC_FORK and IFN_GOACC_JOIN
     function calls to target-specific gimple, or indicate whether they
     should be retained.  It is executed during the oacc_device_lower
     pass.  It should return true, if the call should be retained.  It
     should return false, if it is to be deleted (either because
     target-specific gimple has been inserted before it, or there is no
     need for it).  The default hook returns false, if there are no RTL
     expanders for them.

 -- Target Hook: void TARGET_GOACC_REDUCTION (gcall *CALL)
     This hook is used by the oacc_transform pass to expand calls to the
     GOACC_REDUCTION internal function, into a sequence of gimple
     instructions.  CALL is gimple statement containing the call to the
     function.  This hook removes statement CALL after the expanded
     sequence has been inserted.  This hook is also responsible for
     allocating any storage for reductions when necessary.


File: gccint.info,  Node: Anchored Addresses,  Next: Condition Code,  Prev: Addressing Modes,  Up: Target Macros

17.14 Anchored Addresses
========================

GCC usually addresses every static object as a separate entity.  For
example, if we have:

     static int a, b, c;
     int foo (void) { return a + b + c; }

 the code for 'foo' will usually calculate three separate symbolic
addresses: those of 'a', 'b' and 'c'.  On some targets, it would be
better to calculate just one symbolic address and access the three
variables relative to it.  The equivalent pseudocode would be something
like:

     int foo (void)
     {
       register int *xr = &x;
       return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
     }

 (which isn't valid C). We refer to shared addresses like 'x' as
"section anchors".  Their use is controlled by '-fsection-anchors'.

 The hooks below describe the target properties that GCC needs to know
in order to make effective use of section anchors.  It won't use section
anchors at all unless either 'TARGET_MIN_ANCHOR_OFFSET' or
'TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value.

 -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET
     The minimum offset that should be applied to a section anchor.  On
     most targets, it should be the smallest offset that can be applied
     to a base register while still giving a legitimate address for
     every mode.  The default value is 0.

 -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET
     Like 'TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive) offset
     that should be applied to section anchors.  The default value is 0.

 -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X)
     Write the assembly code to define section anchor X, which is a
     'SYMBOL_REF' for which 'SYMBOL_REF_ANCHOR_P (X)' is true.  The hook
     is called with the assembly output position set to the beginning of
     'SYMBOL_REF_BLOCK (X)'.

     If 'ASM_OUTPUT_DEF' is available, the hook's default definition
     uses it to define the symbol as '. + SYMBOL_REF_BLOCK_OFFSET (X)'.
     If 'ASM_OUTPUT_DEF' is not available, the hook's default definition
     is 'NULL', which disables the use of section anchors altogether.

 -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X)
     Return true if GCC should attempt to use anchors to access
     'SYMBOL_REF' X.  You can assume 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)'
     and '!SYMBOL_REF_ANCHOR_P (X)'.

     The default version is correct for most targets, but you might need
     to intercept this hook to handle things like target-specific
     attributes or target-specific sections.


File: gccint.info,  Node: Condition Code,  Next: Costs,  Prev: Anchored Addresses,  Up: Target Macros

17.15 Condition Code Status
===========================

The macros in this section can be split in two families, according to
the two ways of representing condition codes in GCC.

 The first representation is the so called '(cc0)' representation (*note
Jump Patterns::), where all instructions can have an implicit clobber of
the condition codes.  The second is the condition code register
representation, which provides better schedulability for architectures
that do have a condition code register, but on which most instructions
do not affect it.  The latter category includes most RISC machines.

 The implicit clobbering poses a strong restriction on the placement of
the definition and use of the condition code.  In the past the
definition and use were always adjacent.  However, recent changes to
support trapping arithmatic may result in the definition and user being
in different blocks.  Thus, there may be a 'NOTE_INSN_BASIC_BLOCK'
between them.  Additionally, the definition may be the source of
exception handling edges.

 These restrictions can prevent important optimizations on some
machines.  For example, on the IBM RS/6000, there is a delay for taken
branches unless the condition code register is set three instructions
earlier than the conditional branch.  The instruction scheduler cannot
perform this optimization if it is not permitted to separate the
definition and use of the condition code register.

 For this reason, it is possible and suggested to use a register to
represent the condition code for new ports.  If there is a specific
condition code register in the machine, use a hard register.  If the
condition code or comparison result can be placed in any general
register, or if there are multiple condition registers, use a pseudo
register.  Registers used to store the condition code value will usually
have a mode that is in class 'MODE_CC'.

 Alternatively, you can use 'BImode' if the comparison operator is
specified already in the compare instruction.  In this case, you are not
interested in most macros in this section.

* Menu:

* CC0 Condition Codes::      Old style representation of condition codes.
* MODE_CC Condition Codes::  Modern representation of condition codes.


File: gccint.info,  Node: CC0 Condition Codes,  Next: MODE_CC Condition Codes,  Up: Condition Code

17.15.1 Representation of condition codes using '(cc0)'
-------------------------------------------------------

The file 'conditions.h' defines a variable 'cc_status' to describe how
the condition code was computed (in case the interpretation of the
condition code depends on the instruction that it was set by).  This
variable contains the RTL expressions on which the condition code is
currently based, and several standard flags.

 Sometimes additional machine-specific flags must be defined in the
machine description header file.  It can also add additional
machine-specific information by defining 'CC_STATUS_MDEP'.

 -- Macro: CC_STATUS_MDEP
     C code for a data type which is used for declaring the 'mdep'
     component of 'cc_status'.  It defaults to 'int'.

     This macro is not used on machines that do not use 'cc0'.

 -- Macro: CC_STATUS_MDEP_INIT
     A C expression to initialize the 'mdep' field to "empty".  The
     default definition does nothing, since most machines don't use the
     field anyway.  If you want to use the field, you should probably
     define this macro to initialize it.

     This macro is not used on machines that do not use 'cc0'.

 -- Macro: NOTICE_UPDATE_CC (EXP, INSN)
     A C compound statement to set the components of 'cc_status'
     appropriately for an insn INSN whose body is EXP.  It is this
     macro's responsibility to recognize insns that set the condition
     code as a byproduct of other activity as well as those that
     explicitly set '(cc0)'.

     This macro is not used on machines that do not use 'cc0'.

     If there are insns that do not set the condition code but do alter
     other machine registers, this macro must check to see whether they
     invalidate the expressions that the condition code is recorded as
     reflecting.  For example, on the 68000, insns that store in address
     registers do not set the condition code, which means that usually
     'NOTICE_UPDATE_CC' can leave 'cc_status' unaltered for such insns.
     But suppose that the previous insn set the condition code based on
     location 'a4@(102)' and the current insn stores a new value in
     'a4'.  Although the condition code is not changed by this, it will
     no longer be true that it reflects the contents of 'a4@(102)'.
     Therefore, 'NOTICE_UPDATE_CC' must alter 'cc_status' in this case
     to say that nothing is known about the condition code value.

     The definition of 'NOTICE_UPDATE_CC' must be prepared to deal with
     the results of peephole optimization: insns whose patterns are
     'parallel' RTXs containing various 'reg', 'mem' or constants which
     are just the operands.  The RTL structure of these insns is not
     sufficient to indicate what the insns actually do.  What
     'NOTICE_UPDATE_CC' should do when it sees one is just to run
     'CC_STATUS_INIT'.

     A possible definition of 'NOTICE_UPDATE_CC' is to call a function
     that looks at an attribute (*note Insn Attributes::) named, for
     example, 'cc'.  This avoids having detailed information about
     patterns in two places, the 'md' file and in 'NOTICE_UPDATE_CC'.


File: gccint.info,  Node: MODE_CC Condition Codes,  Prev: CC0 Condition Codes,  Up: Condition Code

17.15.2 Representation of condition codes using registers
---------------------------------------------------------

 -- Macro: SELECT_CC_MODE (OP, X, Y)
     On many machines, the condition code may be produced by other
     instructions than compares, for example the branch can use directly
     the condition code set by a subtract instruction.  However, on some
     machines when the condition code is set this way some bits (such as
     the overflow bit) are not set in the same way as a test
     instruction, so that a different branch instruction must be used
     for some conditional branches.  When this happens, use the machine
     mode of the condition code register to record different formats of
     the condition code register.  Modes can also be used to record
     which compare instruction (e.g.  a signed or an unsigned
     comparison) produced the condition codes.

     If other modes than 'CCmode' are required, add them to
     'MACHINE-modes.def' and define 'SELECT_CC_MODE' to choose a mode
     given an operand of a compare.  This is needed because the modes
     have to be chosen not only during RTL generation but also, for
     example, by instruction combination.  The result of
     'SELECT_CC_MODE' should be consistent with the mode used in the
     patterns; for example to support the case of the add on the SPARC
     discussed above, we have the pattern

          (define_insn ""
            [(set (reg:CC_NOOV 0)
                  (compare:CC_NOOV
                    (plus:SI (match_operand:SI 0 "register_operand" "%r")
                             (match_operand:SI 1 "arith_operand" "rI"))
                    (const_int 0)))]
            ""
            "...")

     together with a 'SELECT_CC_MODE' that returns 'CC_NOOVmode' for
     comparisons whose argument is a 'plus':

          #define SELECT_CC_MODE(OP,X,Y) \
            (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT           \
             ? ((OP == LT || OP == LE || OP == GT || OP == GE)     \
                ? CCFPEmode : CCFPmode)                            \
             : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS     \
                 || GET_CODE (X) == NEG || GET_CODE (x) == ASHIFT) \
                ? CC_NOOVmode : CCmode))

     Another reason to use modes is to retain information on which
     operands were used by the comparison; see 'REVERSIBLE_CC_MODE'
     later in this section.

     You should define this macro if and only if you define extra CC
     modes in 'MACHINE-modes.def'.

 -- Target Hook: void TARGET_CANONICALIZE_COMPARISON (int *CODE, rtx
          *OP0, rtx *OP1, bool OP0_PRESERVE_VALUE)
     On some machines not all possible comparisons are defined, but you
     can convert an invalid comparison into a valid one.  For example,
     the Alpha does not have a 'GT' comparison, but you can use an 'LT'
     comparison instead and swap the order of the operands.

     On such machines, implement this hook to do any required
     conversions.  CODE is the initial comparison code and OP0 and OP1
     are the left and right operands of the comparison, respectively.
     If OP0_PRESERVE_VALUE is 'true' the implementation is not allowed
     to change the value of OP0 since the value might be used in RTXs
     which aren't comparisons.  E.g.  the implementation is not allowed
     to swap operands in that case.

     GCC will not assume that the comparison resulting from this macro
     is valid but will see if the resulting insn matches a pattern in
     the 'md' file.

     You need not to implement this hook if it would never change the
     comparison code or operands.

 -- Macro: REVERSIBLE_CC_MODE (MODE)
     A C expression whose value is one if it is always safe to reverse a
     comparison whose mode is MODE.  If 'SELECT_CC_MODE' can ever return
     MODE for a floating-point inequality comparison, then
     'REVERSIBLE_CC_MODE (MODE)' must be zero.

     You need not define this macro if it would always returns zero or
     if the floating-point format is anything other than
     'IEEE_FLOAT_FORMAT'.  For example, here is the definition used on
     the SPARC, where floating-point inequality comparisons are given
     either 'CCFPEmode' or 'CCFPmode':

          #define REVERSIBLE_CC_MODE(MODE) \
             ((MODE) != CCFPEmode && (MODE) != CCFPmode)

 -- Macro: REVERSE_CONDITION (CODE, MODE)
     A C expression whose value is reversed condition code of the CODE
     for comparison done in CC_MODE MODE.  The macro is used only in
     case 'REVERSIBLE_CC_MODE (MODE)' is nonzero.  Define this macro in
     case machine has some non-standard way how to reverse certain
     conditionals.  For instance in case all floating point conditions
     are non-trapping, compiler may freely convert unordered compares to
     ordered ones.  Then definition may look like:

          #define REVERSE_CONDITION(CODE, MODE) \
             ((MODE) != CCFPmode ? reverse_condition (CODE) \
              : reverse_condition_maybe_unordered (CODE))

 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int
          *P1, unsigned int *P2)
     On targets which do not use '(cc0)', and which use a hard register
     rather than a pseudo-register to hold condition codes, the regular
     CSE passes are often not able to identify cases in which the hard
     register is set to a common value.  Use this hook to enable a small
     pass which optimizes such cases.  This hook should return true to
     enable this pass, and it should set the integers to which its
     arguments point to the hard register numbers used for condition
     codes.  When there is only one such register, as is true on most
     systems, the integer pointed to by P2 should be set to
     'INVALID_REGNUM'.

     The default version of this hook returns false.

 -- Target Hook: machine_mode TARGET_CC_MODES_COMPATIBLE (machine_mode
          M1, machine_mode M2)
     On targets which use multiple condition code modes in class
     'MODE_CC', it is sometimes the case that a comparison can be
     validly done in more than one mode.  On such a system, define this
     target hook to take two mode arguments and to return a mode in
     which both comparisons may be validly done.  If there is no such
     mode, return 'VOIDmode'.

     The default version of this hook checks whether the modes are the
     same.  If they are, it returns that mode.  If they are different,
     it returns 'VOIDmode'.

 -- Target Hook: unsigned int TARGET_FLAGS_REGNUM
     If the target has a dedicated flags register, and it needs to use
     the post-reload comparison elimination pass, then this value should
     be set appropriately.


File: gccint.info,  Node: Costs,  Next: Scheduling,  Prev: Condition Code,  Up: Target Macros

17.16 Describing Relative Costs of Operations
=============================================

These macros let you describe the relative speed of various operations
on the target machine.

 -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO)
     A C expression for the cost of moving data of mode MODE from a
     register in class FROM to one in class TO.  The classes are
     expressed using the enumeration values such as 'GENERAL_REGS'.  A
     value of 2 is the default; other values are interpreted relative to
     that.

     It is not required that the cost always equal 2 when FROM is the
     same as TO; on some machines it is expensive to move between
     registers if they are not general registers.

     If reload sees an insn consisting of a single 'set' between two
     hard registers, and if 'REGISTER_MOVE_COST' applied to their
     classes returns a value of 2, reload does not check to ensure that
     the constraints of the insn are met.  Setting a cost of other than
     2 will allow reload to verify that the constraints are met.  You
     should do this if the 'movM' pattern's constraints do not allow
     such copying.

     These macros are obsolete, new ports should use the target hook
     'TARGET_REGISTER_MOVE_COST' instead.

 -- Target Hook: int TARGET_REGISTER_MOVE_COST (machine_mode MODE,
          reg_class_t FROM, reg_class_t TO)
     This target hook should return the cost of moving data of mode MODE
     from a register in class FROM to one in class TO.  The classes are
     expressed using the enumeration values such as 'GENERAL_REGS'.  A
     value of 2 is the default; other values are interpreted relative to
     that.

     It is not required that the cost always equal 2 when FROM is the
     same as TO; on some machines it is expensive to move between
     registers if they are not general registers.

     If reload sees an insn consisting of a single 'set' between two
     hard registers, and if 'TARGET_REGISTER_MOVE_COST' applied to their
     classes returns a value of 2, reload does not check to ensure that
     the constraints of the insn are met.  Setting a cost of other than
     2 will allow reload to verify that the constraints are met.  You
     should do this if the 'movM' pattern's constraints do not allow
     such copying.

     The default version of this function returns 2.

 -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN)
     A C expression for the cost of moving data of mode MODE between a
     register of class CLASS and memory; IN is zero if the value is to
     be written to memory, nonzero if it is to be read in.  This cost is
     relative to those in 'REGISTER_MOVE_COST'.  If moving between
     registers and memory is more expensive than between two registers,
     you should define this macro to express the relative cost.

     If you do not define this macro, GCC uses a default cost of 4 plus
     the cost of copying via a secondary reload register, if one is
     needed.  If your machine requires a secondary reload register to
     copy between memory and a register of CLASS but the reload
     mechanism is more complex than copying via an intermediate, define
     this macro to reflect the actual cost of the move.

     GCC defines the function 'memory_move_secondary_cost' if secondary
     reloads are needed.  It computes the costs due to copying via a
     secondary register.  If your machine copies from memory using a
     secondary register in the conventional way but the default base
     value of 4 is not correct for your machine, define this macro to
     add some other value to the result of that function.  The arguments
     to that function are the same as to this macro.

     These macros are obsolete, new ports should use the target hook
     'TARGET_MEMORY_MOVE_COST' instead.

 -- Target Hook: int TARGET_MEMORY_MOVE_COST (machine_mode MODE,
          reg_class_t RCLASS, bool IN)
     This target hook should return the cost of moving data of mode MODE
     between a register of class RCLASS and memory; IN is 'false' if the
     value is to be written to memory, 'true' if it is to be read in.
     This cost is relative to those in 'TARGET_REGISTER_MOVE_COST'.  If
     moving between registers and memory is more expensive than between
     two registers, you should add this target hook to express the
     relative cost.

     If you do not add this target hook, GCC uses a default cost of 4
     plus the cost of copying via a secondary reload register, if one is
     needed.  If your machine requires a secondary reload register to
     copy between memory and a register of RCLASS but the reload
     mechanism is more complex than copying via an intermediate, use
     this target hook to reflect the actual cost of the move.

     GCC defines the function 'memory_move_secondary_cost' if secondary
     reloads are needed.  It computes the costs due to copying via a
     secondary register.  If your machine copies from memory using a
     secondary register in the conventional way but the default base
     value of 4 is not correct for your machine, use this target hook to
     add some other value to the result of that function.  The arguments
     to that function are the same as to this target hook.

 -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P)
     A C expression for the cost of a branch instruction.  A value of 1
     is the default; other values are interpreted relative to that.
     Parameter SPEED_P is true when the branch in question should be
     optimized for speed.  When it is false, 'BRANCH_COST' should return
     a value optimal for code size rather than performance.
     PREDICTABLE_P is true for well-predicted branches.  On many
     architectures the 'BRANCH_COST' can be reduced then.

 Here are additional macros which do not specify precise relative costs,
but only that certain actions are more expensive than GCC would
ordinarily expect.

 -- Macro: SLOW_BYTE_ACCESS
     Define this macro as a C expression which is nonzero if accessing
     less than a word of memory (i.e. a 'char' or a 'short') is no
     faster than accessing a word of memory, i.e., if such access
     require more than one instruction or if there is no difference in
     cost between byte and (aligned) word loads.

     When this macro is not defined, the compiler will access a field by
     finding the smallest containing object; when it is defined, a
     fullword load will be used if alignment permits.  Unless bytes
     accesses are faster than word accesses, using word accesses is
     preferable since it may eliminate subsequent memory access if
     subsequent accesses occur to other fields in the same word of the
     structure, but to different bytes.

 -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT)
     Define this macro to be the value 1 if memory accesses described by
     the MODE and ALIGNMENT parameters have a cost many times greater
     than aligned accesses, for example if they are emulated in a trap
     handler.

     When this macro is nonzero, the compiler will act as if
     'STRICT_ALIGNMENT' were nonzero when generating code for block
     moves.  This can cause significantly more instructions to be
     produced.  Therefore, do not set this macro nonzero if unaligned
     accesses only add a cycle or two to the time for a memory access.

     If the value of this macro is always zero, it need not be defined.
     If this macro is defined, it should produce a nonzero value when
     'STRICT_ALIGNMENT' is nonzero.

 -- Macro: MOVE_RATIO (SPEED)
     The threshold of number of scalar memory-to-memory move insns,
     _below_ which a sequence of insns should be generated instead of a
     string move insn or a library call.  Increasing the value will
     always make code faster, but eventually incurs high cost in
     increased code size.

     Note that on machines where the corresponding move insn is a
     'define_expand' that emits a sequence of insns, this macro counts
     the number of such sequences.

     The parameter SPEED is true if the code is currently being
     optimized for speed rather than size.

     If you don't define this, a reasonable default is used.

 -- Target Hook: bool TARGET_USE_BY_PIECES_INFRASTRUCTURE_P (unsigned
          HOST_WIDE_INT SIZE, unsigned int ALIGNMENT, enum
          by_pieces_operation OP, bool SPEED_P)
     GCC will attempt several strategies when asked to copy between two
     areas of memory, or to set, clear or store to memory, for example
     when copying a 'struct'.  The 'by_pieces' infrastructure implements
     such memory operations as a sequence of load, store or move insns.
     Alternate strategies are to expand the 'movmem' or 'setmem' optabs,
     to emit a library call, or to emit unit-by-unit, loop-based
     operations.

     This target hook should return true if, for a memory operation with
     a given SIZE and ALIGNMENT, using the 'by_pieces' infrastructure is
     expected to result in better code generation.  Both SIZE and
     ALIGNMENT are measured in terms of storage units.

     The parameter OP is one of: 'CLEAR_BY_PIECES', 'MOVE_BY_PIECES',
     'SET_BY_PIECES', 'STORE_BY_PIECES'.  These describe the type of
     memory operation under consideration.

     The parameter SPEED_P is true if the code is currently being
     optimized for speed rather than size.

     Returning true for higher values of SIZE can improve code
     generation for speed if the target does not provide an
     implementation of the 'movmem' or 'setmem' standard names, if the
     'movmem' or 'setmem' implementation would be more expensive than a
     sequence of insns, or if the overhead of a library call would
     dominate that of the body of the memory operation.

     Returning true for higher values of 'size' may also cause an
     increase in code size, for example where the number of insns
     emitted to perform a move would be greater than that of a library
     call.

 -- Macro: MOVE_MAX_PIECES
     A C expression used by 'move_by_pieces' to determine the largest
     unit a load or store used to copy memory is.  Defaults to
     'MOVE_MAX'.

 -- Macro: CLEAR_RATIO (SPEED)
     The threshold of number of scalar move insns, _below_ which a
     sequence of insns should be generated to clear memory instead of a
     string clear insn or a library call.  Increasing the value will
     always make code faster, but eventually incurs high cost in
     increased code size.

     The parameter SPEED is true if the code is currently being
     optimized for speed rather than size.

     If you don't define this, a reasonable default is used.

 -- Macro: SET_RATIO (SPEED)
     The threshold of number of scalar move insns, _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.  Increasing
     the value will always make code faster, but eventually incurs high
     cost in increased code size.

     The parameter SPEED is true if the code is currently being
     optimized for speed rather than size.

     If you don't define this, it defaults to the value of 'MOVE_RATIO'.

 -- Macro: USE_LOAD_POST_INCREMENT (MODE)
     A C expression used to determine whether a load postincrement is a
     good thing to use for a given mode.  Defaults to the value of
     'HAVE_POST_INCREMENT'.

 -- Macro: USE_LOAD_POST_DECREMENT (MODE)
     A C expression used to determine whether a load postdecrement is a
     good thing to use for a given mode.  Defaults to the value of
     'HAVE_POST_DECREMENT'.

 -- Macro: USE_LOAD_PRE_INCREMENT (MODE)
     A C expression used to determine whether a load preincrement is a
     good thing to use for a given mode.  Defaults to the value of
     'HAVE_PRE_INCREMENT'.

 -- Macro: USE_LOAD_PRE_DECREMENT (MODE)
     A C expression used to determine whether a load predecrement is a
     good thing to use for a given mode.  Defaults to the value of
     'HAVE_PRE_DECREMENT'.

 -- Macro: USE_STORE_POST_INCREMENT (MODE)
     A C expression used to determine whether a store postincrement is a
     good thing to use for a given mode.  Defaults to the value of
     'HAVE_POST_INCREMENT'.

 -- Macro: USE_STORE_POST_DECREMENT (MODE)
     A C expression used to determine whether a store postdecrement is a
     good thing to use for a given mode.  Defaults to the value of
     'HAVE_POST_DECREMENT'.

 -- Macro: USE_STORE_PRE_INCREMENT (MODE)
     This macro is used to determine whether a store preincrement is a
     good thing to use for a given mode.  Defaults to the value of
     'HAVE_PRE_INCREMENT'.

 -- Macro: USE_STORE_PRE_DECREMENT (MODE)
     This macro is used to determine whether a store predecrement is a
     good thing to use for a given mode.  Defaults to the value of
     'HAVE_PRE_DECREMENT'.

 -- Macro: NO_FUNCTION_CSE
     Define this macro to be true if it is as good or better to call a
     constant function address than to call an address kept in a
     register.

 -- Macro: LOGICAL_OP_NON_SHORT_CIRCUIT
     Define this macro if a non-short-circuit operation produced by
     'fold_range_test ()' is optimal.  This macro defaults to true if
     'BRANCH_COST' is greater than or equal to the value 2.

 -- Target Hook: bool TARGET_OPTAB_SUPPORTED_P (int OP, machine_mode
          MODE1, machine_mode MODE2, optimization_type OPT_TYPE)
     Return true if the optimizers should use optab OP with modes MODE1
     and MODE2 for optimization type OPT_TYPE.  The optab is known to
     have an associated '.md' instruction whose C condition is true.
     MODE2 is only meaningful for conversion optabs; for direct optabs
     it is a copy of MODE1.

     For example, when called with OP equal to 'rint_optab' and MODE1
     equal to 'DFmode', the hook should say whether the optimizers
     should use optab 'rintdf2'.

     The default hook returns true for all inputs.

 -- Target Hook: bool TARGET_RTX_COSTS (rtx X, machine_mode MODE, int
          OUTER_CODE, int OPNO, int *TOTAL, bool 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 X, and the fact that X appears as
     operand OPNO of an expression with rtx code OUTER_CODE.  That is,
     the hook can assume that there is some rtx Y such that 'GET_CODE
     (Y) == OUTER_CODE' and such that either (a) 'XEXP (Y, OPNO) == X'
     or (b) 'XVEC (Y, OPNO)' contains X.

     MODE is X's machine mode, or for cases like 'const_int' that do not
     have a mode, the mode in which X is used.

     In implementing this hook, you can use the construct 'COSTS_N_INSNS
     (N)' to specify a cost equal to N fast instructions.

     On entry to the hook, '*TOTAL' contains a default estimate for the
     cost of the expression.  The hook should modify this value as
     necessary.  Traditionally, the default costs are 'COSTS_N_INSNS
     (5)' for multiplications, 'COSTS_N_INSNS (7)' for division and
     modulus operations, and 'COSTS_N_INSNS (1)' for all other
     operations.

     When optimizing for code size, i.e. when 'speed' is false, this
     target hook should be used to estimate the relative size cost of an
     expression, again relative to 'COSTS_N_INSNS'.

     The hook returns true when all subexpressions of X have been
     processed, and false when 'rtx_cost' should recurse.

 -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, machine_mode
          MODE, addr_space_t AS, bool SPEED)
     This hook computes the cost of an addressing mode that contains
     ADDRESS.  If not defined, the cost is computed from the ADDRESS
     expression and the 'TARGET_RTX_COST' hook.

     For most CISC machines, the default cost is a good approximation of
     the true cost of the addressing mode.  However, on RISC machines,
     all instructions normally have the same length and execution time.
     Hence all addresses will have equal costs.

     In cases where more than one form of an address is known, the form
     with the lowest cost will be used.  If multiple forms have the
     same, lowest, cost, the one that is the most complex will be used.

     For example, suppose an address that is equal to the sum of a
     register and a constant is used twice in the same basic block.
     When this macro is not defined, the address will be computed in a
     register and memory references will be indirect through that
     register.  On machines where the cost of the addressing mode
     containing the sum is no higher than that of a simple indirect
     reference, this will produce an additional instruction and possibly
     require an additional register.  Proper specification of this macro
     eliminates this overhead for such machines.

     This hook is never called with an invalid address.

     On machines where an address involving more than one register is as
     cheap as an address computation involving only one register,
     defining 'TARGET_ADDRESS_COST' to reflect this can cause two
     registers to be live over a region of code where only one would
     have been if 'TARGET_ADDRESS_COST' were not defined in that manner.
     This effect should be considered in the definition of this macro.
     Equivalent costs should probably only be given to addresses with
     different numbers of registers on machines with lots of registers.

 -- Target Hook: bool TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P (void)
     This predicate controls the use of the eager delay slot filler to
     disallow speculatively executed instructions being placed in delay
     slots.  Targets such as certain MIPS architectures possess both
     branches with and without delay slots.  As the eager delay slot
     filler can decrease performance, disabling it is beneficial when
     ordinary branches are available.  Use of delay slot branches filled
     using the basic filler is often still desirable as the delay slot
     can hide a pipeline bubble.


File: gccint.info,  Node: Scheduling,  Next: Sections,  Prev: Costs,  Up: Target Macros

17.17 Adjusting the Instruction Scheduler
=========================================

The instruction scheduler may need a fair amount of machine-specific
adjustment in order to produce good code.  GCC provides several target
hooks for this purpose.  It is usually enough to define just a few of
them: try the first ones in this list first.

 -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void)
     This hook returns the maximum number of instructions that can ever
     issue at the same time on the target machine.  The default is one.
     Although the insn scheduler can define itself the possibility of
     issue an insn on the same cycle, the value can serve as an
     additional constraint to issue insns on the same simulated
     processor cycle (see hooks 'TARGET_SCHED_REORDER' and
     'TARGET_SCHED_REORDER2').  This value must be constant over the
     entire compilation.  If you need it to vary depending on what the
     instructions are, you must use 'TARGET_SCHED_VARIABLE_ISSUE'.

 -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int
          VERBOSE, rtx_insn *INSN, int MORE)
     This hook is executed by the scheduler after it has scheduled an
     insn from the ready list.  It should return the number of insns
     which can still be issued in the current cycle.  The default is
     'MORE - 1' for insns other than 'CLOBBER' and 'USE', which normally
     are not counted against the issue rate.  You should define this
     hook if some insns take more machine resources than others, so that
     fewer insns can follow them in the same cycle.  FILE is either a
     null pointer, or a stdio stream to write any debug output to.
     VERBOSE is the verbose level provided by '-fsched-verbose-N'.  INSN
     is the instruction that was scheduled.

 -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx_insn *INSN, rtx LINK,
          rtx_insn *DEP_INSN, int COST)
     This function corrects the value of COST based on the relationship
     between INSN and DEP_INSN through the dependence LINK.  It should
     return the new value.  The default is to make no adjustment to
     COST.  This can be used for example to specify to the scheduler
     using the traditional pipeline description that an output- or
     anti-dependence does not incur the same cost as a data-dependence.
     If the scheduler using the automaton based pipeline description,
     the cost of anti-dependence is zero and the cost of
     output-dependence is maximum of one and the difference of latency
     times of the first and the second insns.  If these values are not
     acceptable, you could use the hook to modify them too.  See also
     *note Processor pipeline description::.

 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx_insn *INSN, int
          PRIORITY)
     This hook adjusts the integer scheduling priority PRIORITY of INSN.
     It should return the new priority.  Increase the priority to
     execute INSN earlier, reduce the priority to execute INSN later.
     Do not define this hook if you do not need to adjust the scheduling
     priorities of insns.

 -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE,
          rtx_insn **READY, int *N_READYP, int CLOCK)
     This hook is executed by the scheduler after it has scheduled the
     ready list, to allow the machine description to reorder it (for
     example to combine two small instructions together on 'VLIW'
     machines).  FILE is either a null pointer, or a stdio stream to
     write any debug output to.  VERBOSE is the verbose level provided
     by '-fsched-verbose-N'.  READY is a pointer to the ready list of
     instructions that are ready to be scheduled.  N_READYP is a pointer
     to the number of elements in the ready list.  The scheduler reads
     the ready list in reverse order, starting with READY[*N_READYP - 1]
     and going to READY[0].  CLOCK is the timer tick of the scheduler.
     You may modify the ready list and the number of ready insns.  The
     return value is the number of insns that can issue this cycle;
     normally this is just 'issue_rate'.  See also
     'TARGET_SCHED_REORDER2'.

 -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE,
          rtx_insn **READY, int *N_READYP, int CLOCK)
     Like 'TARGET_SCHED_REORDER', but called at a different time.  That
     function is called whenever the scheduler starts a new cycle.  This
     one is called once per iteration over a cycle, immediately after
     'TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list and
     return the number of insns to be scheduled in the same cycle.
     Defining this hook can be useful if there are frequent situations
     where scheduling one insn causes other insns to become ready in the
     same cycle.  These other insns can then be taken into account
     properly.

 -- Target Hook: bool TARGET_SCHED_MACRO_FUSION_P (void)
     This hook is used to check whether target platform supports macro
     fusion.

 -- Target Hook: bool TARGET_SCHED_MACRO_FUSION_PAIR_P (rtx_insn *PREV,
          rtx_insn *CURR)
     This hook is used to check whether two insns should be macro fused
     for a target microarchitecture.  If this hook returns true for the
     given insn pair (PREV and CURR), the scheduler will put them into a
     sched group, and they will not be scheduled apart.  The two insns
     will be either two SET insns or a compare and a conditional jump
     and this hook should validate any dependencies needed to fuse the
     two insns together.

 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK
          (rtx_insn *HEAD, rtx_insn *TAIL)
     This hook is called after evaluation forward dependencies of insns
     in chain given by two parameter values (HEAD and TAIL
     correspondingly) but before insns scheduling of the insn chain.
     For example, it can be used for better insn classification if it
     requires analysis of dependencies.  This hook can use backward and
     forward dependencies of the insn scheduler because they are already
     calculated.

 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int
          MAX_READY)
     This hook is executed by the scheduler at the beginning of each
     block of instructions that are to be scheduled.  FILE is either a
     null pointer, or a stdio stream to write any debug output to.
     VERBOSE is the verbose level provided by '-fsched-verbose-N'.
     MAX_READY is the maximum number of insns in the current scheduling
     region that can be live at the same time.  This can be used to
     allocate scratch space if it is needed, e.g. by
     'TARGET_SCHED_REORDER'.

 -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE)
     This hook is executed by the scheduler at the end of each block of
     instructions that are to be scheduled.  It can be used to perform
     cleanup of any actions done by the other scheduling hooks.  FILE is
     either a null pointer, or a stdio stream to write any debug output
     to.  VERBOSE is the verbose level provided by '-fsched-verbose-N'.

 -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int VERBOSE,
          int OLD_MAX_UID)
     This hook is executed by the scheduler after function level
     initializations.  FILE is either a null pointer, or a stdio stream
     to write any debug output to.  VERBOSE is the verbose level
     provided by '-fsched-verbose-N'.  OLD_MAX_UID is the maximum insn
     uid when scheduling begins.

 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int
          VERBOSE)
     This is the cleanup hook corresponding to
     'TARGET_SCHED_INIT_GLOBAL'.  FILE is either a null pointer, or a
     stdio stream to write any debug output to.  VERBOSE is the verbose
     level provided by '-fsched-verbose-N'.

 -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void)
     The hook returns an RTL insn.  The automaton state used in the
     pipeline hazard recognizer is changed as if the insn were scheduled
     when the new simulated processor cycle starts.  Usage of the hook
     may simplify the automaton pipeline description for some VLIW
     processors.  If the hook is defined, it is used only for the
     automaton based pipeline description.  The default is not to change
     the state when the new simulated processor cycle starts.

 -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void)
     The hook can be used to initialize data used by the previous hook.

 -- Target Hook: rtx_insn * TARGET_SCHED_DFA_POST_CYCLE_INSN (void)
     The hook is analogous to 'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used
     to changed the state as if the insn were scheduled when the new
     simulated processor cycle finishes.

 -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void)
     The hook is analogous to 'TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but
     used to initialize data used by the previous hook.

 -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void)
     The hook to notify target that the current simulated cycle is about
     to finish.  The hook is analogous to
     'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in
     more complicated situations - e.g., when advancing state on a
     single insn is not enough.

 -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void)
     The hook to notify target that new simulated cycle has just
     started.  The hook is analogous to
     'TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in
     more complicated situations - e.g., when advancing state on a
     single insn is not enough.

 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
          (void)
     This hook controls better choosing an insn from the ready insn
     queue for the DFA-based insn scheduler.  Usually the scheduler
     chooses the first insn from the queue.  If the hook returns a
     positive value, an additional scheduler code tries all permutations
     of 'TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD ()' subsequent
     ready insns to choose an insn whose issue will result in maximal
     number of issued insns on the same cycle.  For the VLIW processor,
     the code could actually solve the problem of packing simple insns
     into the VLIW insn.  Of course, if the rules of VLIW packing are
     described in the automaton.

     This code also could be used for superscalar RISC processors.  Let
     us consider a superscalar RISC processor with 3 pipelines.  Some
     insns can be executed in pipelines A or B, some insns can be
     executed only in pipelines B or C, and one insn can be executed in
     pipeline B.  The processor may issue the 1st insn into A and the
     2nd one into B.  In this case, the 3rd insn will wait for freeing B
     until the next cycle.  If the scheduler issues the 3rd insn the
     first, the processor could issue all 3 insns per cycle.

     Actually this code demonstrates advantages of the automaton based
     pipeline hazard recognizer.  We try quickly and easy many insn
     schedules to choose the best one.

     The default is no multipass scheduling.

 -- Target Hook: int
          TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD
          (rtx_insn *INSN, int READY_INDEX)

     This hook controls what insns from the ready insn queue will be
     considered for the multipass insn scheduling.  If the hook returns
     zero for INSN, the insn will be considered in multipass scheduling.
     Positive return values will remove INSN from consideration on the
     current round of multipass scheduling.  Negative return values will
     remove INSN from consideration for given number of cycles.
     Backends should be careful about returning non-zero for highest
     priority instruction at position 0 in the ready list.  READY_INDEX
     is passed to allow backends make correct judgements.

     The default is that any ready insns can be chosen to be issued.

 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN (void
          *DATA, signed char *READY_TRY, int N_READY, bool
          FIRST_CYCLE_INSN_P)
     This hook prepares the target backend for a new round of multipass
     scheduling.

 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE (void
          *DATA, signed char *READY_TRY, int N_READY, rtx_insn *INSN,
          const void *PREV_DATA)
     This hook is called when multipass scheduling evaluates instruction
     INSN.

 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK
          (const void *DATA, signed char *READY_TRY, int N_READY)
     This is called when multipass scheduling backtracks from evaluation
     of an instruction.

 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END (const void
          *DATA)
     This hook notifies the target about the result of the concluded
     current round of multipass scheduling.

 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT (void
          *DATA)
     This hook initializes target-specific data used in multipass
     scheduling.

 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI (void
          *DATA)
     This hook finalizes target-specific data used in multipass
     scheduling.

 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int
          VERBOSE, rtx_insn *INSN, int LAST_CLOCK, int CLOCK, int
          *SORT_P)
     This hook is called by the insn scheduler before issuing INSN on
     cycle CLOCK.  If the hook returns nonzero, INSN is not issued on
     this processor cycle.  Instead, the processor cycle is advanced.
     If *SORT_P is zero, the insn ready queue is not sorted on the new
     cycle start as usually.  DUMP and VERBOSE specify the file and
     verbosity level to use for debugging output.  LAST_CLOCK and CLOCK
     are, respectively, the processor cycle on which the previous insn
     has been issued, and the current processor cycle.

 -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep
          *_DEP, int COST, int DISTANCE)
     This hook is used to define which dependences are considered costly
     by the target, so costly that it is not advisable to schedule the
     insns that are involved in the dependence too close to one another.
     The parameters to this hook are as follows: The first parameter
     _DEP is the dependence being evaluated.  The second parameter COST
     is the cost of the dependence as estimated by the scheduler, and
     the third parameter DISTANCE is the distance in cycles between the
     two insns.  The hook returns 'true' if considering the distance
     between the two insns the dependence between them is considered
     costly by the target, and 'false' otherwise.

     Defining this hook can be useful in multiple-issue out-of-order
     machines, where (a) it's practically hopeless to predict the actual
     data/resource delays, however: (b) there's a better chance to
     predict the actual grouping that will be formed, and (c) correctly
     emulating the grouping can be very important.  In such targets one
     may want to allow issuing dependent insns closer to one
     another--i.e., closer than the dependence distance; however, not in
     cases of "costly dependences", which this hooks allows to define.

 -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void)
     This hook is called by the insn scheduler after emitting a new
     instruction to the instruction stream.  The hook notifies a target
     backend to extend its per instruction data structures.

 -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void)
     Return a pointer to a store large enough to hold target scheduling
     context.

 -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool
          CLEAN_P)
     Initialize store pointed to by TC to hold target scheduling
     context.  It CLEAN_P is true then initialize TC as if scheduler is
     at the beginning of the block.  Otherwise, copy the current context
     into TC.

 -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC)
     Copy target scheduling context pointed to by TC to the current
     context.

 -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC)
     Deallocate internal data in target scheduling context pointed to by
     TC.

 -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC)
     Deallocate a store for target scheduling context pointed to by TC.

 -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx_insn *INSN,
          unsigned int DEP_STATUS, rtx *NEW_PAT)
     This hook is called by the insn scheduler when INSN has only
     speculative dependencies and therefore can be scheduled
     speculatively.  The hook is used to check if the pattern of INSN
     has a speculative version and, in case of successful check, to
     generate that speculative pattern.  The hook should return 1, if
     the instruction has a speculative form, or -1, if it doesn't.
     REQUEST describes the type of requested speculation.  If the return
     value equals 1 then NEW_PAT is assigned the generated speculative
     pattern.

 -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (unsigned int
          DEP_STATUS)
     This hook is called by the insn scheduler during generation of
     recovery code for INSN.  It should return 'true', if the
     corresponding check instruction should branch to recovery code, or
     'false' otherwise.

 -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx_insn *INSN,
          rtx_insn *LABEL, unsigned int DS)
     This hook is called by the insn scheduler to generate a pattern for
     recovery check instruction.  If MUTATE_P is zero, then INSN is a
     speculative instruction for which the check should be generated.
     LABEL is either a label of a basic block, where recovery code
     should be emitted, or a null pointer, when requested check doesn't
     branch to recovery code (a simple check).  If MUTATE_P is nonzero,
     then a pattern for a branchy check corresponding to a simple check
     denoted by INSN should be generated.  In this case LABEL can't be
     null.

 -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct spec_info_def
          *SPEC_INFO)
     This hook is used by the insn scheduler to find out what features
     should be enabled/used.  The structure *SPEC_INFO should be filled
     in by the target.  The structure describes speculation types that
     can be used in the scheduler.

 -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G)
     This hook is called by the swing modulo scheduler to calculate a
     resource-based lower bound which is based on the resources
     available in the machine and the resources required by each
     instruction.  The target backend can use G to calculate such bound.
     A very simple lower bound will be used in case this hook is not
     implemented: the total number of instructions divided by the issue
     rate.

 -- Target Hook: bool TARGET_SCHED_DISPATCH (rtx_insn *INSN, int X)
     This hook is called by Haifa Scheduler.  It returns true if
     dispatch scheduling is supported in hardware and the condition
     specified in the parameter is true.

 -- Target Hook: void TARGET_SCHED_DISPATCH_DO (rtx_insn *INSN, int X)
     This hook is called by Haifa Scheduler.  It performs the operation
     specified in its second parameter.

 -- 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.

 -- Target Hook: int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int OPC,
          machine_mode MODE)
     This hook is called by tree reassociator to determine a level of
     parallelism required in output calculations chain.

 -- Target Hook: void TARGET_SCHED_FUSION_PRIORITY (rtx_insn *INSN, int
          MAX_PRI, int *FUSION_PRI, int *PRI)
     This hook is called by scheduling fusion pass.  It calculates
     fusion priorities for each instruction passed in by parameter.  The
     priorities are returned via pointer parameters.

     INSN is the instruction whose priorities need to be calculated.
     MAX_PRI is the maximum priority can be returned in any cases.
     FUSION_PRI is the pointer parameter through which INSN's fusion
     priority should be calculated and returned.  PRI is the pointer
     parameter through which INSN's priority should be calculated and
     returned.

     Same FUSION_PRI should be returned for instructions which should be
     scheduled together.  Different PRI should be returned for
     instructions with same FUSION_PRI.  FUSION_PRI is the major sort
     key, PRI is the minor sort key.  All instructions will be scheduled
     according to the two priorities.  All priorities calculated should
     be between 0 (exclusive) and MAX_PRI (inclusive).  To avoid false
     dependencies, FUSION_PRI of instructions which need to be scheduled
     together should be smaller than FUSION_PRI of irrelevant
     instructions.

     Given below example:

              ldr r10, [r1, 4]
              add r4, r4, r10
              ldr r15, [r2, 8]
              sub r5, r5, r15
              ldr r11, [r1, 0]
              add r4, r4, r11
              ldr r16, [r2, 12]
              sub r5, r5, r16

     On targets like ARM/AArch64, the two pairs of consecutive loads
     should be merged.  Since peephole2 pass can't help in this case
     unless consecutive loads are actually next to each other in
     instruction flow.  That's where this scheduling fusion pass works.
     This hook calculates priority for each instruction based on its
     fustion type, like:

              ldr r10, [r1, 4]  ; fusion_pri=99,  pri=96
              add r4, r4, r10   ; fusion_pri=100, pri=100
              ldr r15, [r2, 8]  ; fusion_pri=98,  pri=92
              sub r5, r5, r15   ; fusion_pri=100, pri=100
              ldr r11, [r1, 0]  ; fusion_pri=99,  pri=100
              add r4, r4, r11   ; fusion_pri=100, pri=100
              ldr r16, [r2, 12] ; fusion_pri=98,  pri=88
              sub r5, r5, r16   ; fusion_pri=100, pri=100

     Scheduling fusion pass then sorts all ready to issue instructions
     according to the priorities.  As a result, instructions of same
     fusion type will be pushed together in instruction flow, like:

              ldr r11, [r1, 0]
              ldr r10, [r1, 4]
              ldr r15, [r2, 8]
              ldr r16, [r2, 12]
              add r4, r4, r10
              sub r5, r5, r15
              add r4, r4, r11
              sub r5, r5, r16

     Now peephole2 pass can simply merge the two pairs of loads.

     Since scheduling fusion pass relies on peephole2 to do real fusion
     work, it is only enabled by default when peephole2 is in effect.

     This is firstly introduced on ARM/AArch64 targets, please refer to
     the hook implementation for how different fusion types are
     supported.


File: gccint.info,  Node: Sections,  Next: PIC,  Prev: Scheduling,  Up: Target Macros

17.18 Dividing the Output into Sections (Texts, Data, ...)
==========================================================

An object file is divided into sections containing different types of
data.  In the most common case, there are three sections: the "text
section", which holds instructions and read-only data; the "data
section", which holds initialized writable data; and the "bss section",
which holds uninitialized data.  Some systems have other kinds of
sections.

 'varasm.c' provides several well-known sections, such as
'text_section', 'data_section' and 'bss_section'.  The normal way of
controlling a 'FOO_section' variable is to define the associated
'FOO_SECTION_ASM_OP' macro, as described below.  The macros are only
read once, when 'varasm.c' initializes itself, so their values must be
run-time constants.  They may however depend on command-line flags.

 _Note:_ Some run-time files, such 'crtstuff.c', also make use of the
'FOO_SECTION_ASM_OP' macros, and expect them to be string literals.

 Some assemblers require a different string to be written every time a
section is selected.  If your assembler falls into this category, you
should define the 'TARGET_ASM_INIT_SECTIONS' hook and use
'get_unnamed_section' to set up the sections.

 You must always create a 'text_section', either by defining
'TEXT_SECTION_ASM_OP' or by initializing 'text_section' in
'TARGET_ASM_INIT_SECTIONS'.  The same is true of 'data_section' and
'DATA_SECTION_ASM_OP'.  If you do not create a distinct
'readonly_data_section', the default is to reuse 'text_section'.

 All the other 'varasm.c' sections are optional, and are null if the
target does not provide them.

 -- Macro: TEXT_SECTION_ASM_OP
     A C expression whose value is a string, including spacing,
     containing the assembler operation that should precede instructions
     and read-only data.  Normally '"\t.text"' is right.

 -- Macro: HOT_TEXT_SECTION_NAME
     If defined, a C string constant for the name of the section
     containing most frequently executed functions of the program.  If
     not defined, GCC will provide a default definition if the target
     supports named sections.

 -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME
     If defined, a C string constant for the name of the section
     containing unlikely executed functions in the program.

 -- Macro: DATA_SECTION_ASM_OP
     A C expression whose value is a string, including spacing,
     containing the assembler operation to identify the following data
     as writable initialized data.  Normally '"\t.data"' is right.

 -- Macro: SDATA_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 initialized, writable small data.

 -- Macro: READONLY_DATA_SECTION_ASM_OP
     A C expression whose value is a string, including spacing,
     containing the assembler operation to identify the following data
     as read-only initialized data.

 -- Macro: 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
     'ASM_OUTPUT_ALIGNED_BSS' not defined, uninitialized global data
     will be output in the data section if '-fno-common' is passed,
     otherwise 'ASM_OUTPUT_COMMON' will be used.

 -- Macro: SBSS_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, writable small data.

 -- Macro: TLS_COMMON_ASM_OP
     If defined, a C expression whose value is a string containing the
     assembler operation to identify the following data as thread-local
     common data.  The default is '".tls_common"'.

 -- Macro: TLS_SECTION_ASM_FLAG
     If defined, a C expression whose value is a character constant
     containing the flag used to mark a section as a TLS section.  The
     default is ''T''.

 -- Macro: INIT_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 initialization code.  If not defined, GCC will
     assume such a section does not exist.  This section has no
     corresponding 'init_section' variable; it is used entirely in
     runtime code.

 -- Macro: FINI_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 finalization code.  If not defined, GCC will
     assume such a section does not exist.  This section has no
     corresponding 'fini_section' variable; it is used entirely in
     runtime code.

 -- Macro: INIT_ARRAY_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 part of the '.init_array' (or equivalent)
     section.  If not defined, GCC will assume such a section does not
     exist.  Do not define both this macro and 'INIT_SECTION_ASM_OP'.

 -- Macro: FINI_ARRAY_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 part of the '.fini_array' (or equivalent)
     section.  If not defined, GCC will assume such a section does not
     exist.  Do not define both this macro and 'FINI_SECTION_ASM_OP'.

 -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION)
     If defined, an ASM statement that switches to a different section
     via SECTION_OP, calls FUNCTION, and switches back to the text
     section.  This is used in 'crtstuff.c' if 'INIT_SECTION_ASM_OP' or
     'FINI_SECTION_ASM_OP' to calls to initialization and finalization
     functions from the init and fini sections.  By default, this macro
     uses a simple function call.  Some ports need hand-crafted assembly
     code to avoid dependencies on registers initialized in the function
     prologue or to ensure that constant pools don't end up too far way
     in the text section.

 -- Macro: TARGET_LIBGCC_SDATA_SECTION
     If defined, a string which names the section into which small
     variables defined in crtstuff and libgcc should go.  This is useful
     when the target has options for optimizing access to small data,
     and you want the crtstuff and libgcc routines to be conservative in
     what they expect of your application yet liberal in what your
     application expects.  For example, for targets with a '.sdata'
     section (like MIPS), you could compile crtstuff with '-G 0' so that
     it doesn't require small data support from your application, but
     use this macro to put small data into '.sdata' so that your
     application can access these variables whether it uses small data
     or not.

 -- Macro: FORCE_CODE_SECTION_ALIGN
     If defined, an ASM statement that aligns a code section to some
     arbitrary boundary.  This is used to force all fragments of the
     '.init' and '.fini' sections to have to same alignment and thus
     prevent the linker from having to add any padding.

 -- Macro: JUMP_TABLES_IN_TEXT_SECTION
     Define this macro to be an expression with a nonzero value if jump
     tables (for 'tablejump' insns) should be output in the text
     section, along with the assembler instructions.  Otherwise, the
     readonly data section is used.

     This macro is irrelevant if there is no separate readonly data
     section.

 -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void)
     Define this hook if you need to do something special to set up the
     'varasm.c' sections, or if your target has some special sections of
     its own that you need to create.

     GCC calls this hook after processing the command line, but before
     writing any assembly code, and before calling any of the
     section-returning hooks described below.

 -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void)
     Return a mask describing how relocations should be treated when
     selecting sections.  Bit 1 should be set if global relocations
     should be placed in a read-write section; bit 0 should be set if
     local relocations should be placed in a read-write section.

     The default version of this function returns 3 when '-fpic' is in
     effect, and 0 otherwise.  The hook is typically redefined when the
     target cannot support (some kinds of) dynamic relocations in
     read-only sections even in executables.

 -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int
          RELOC, unsigned HOST_WIDE_INT ALIGN)
     Return the section into which EXP should be placed.  You can assume
     that EXP is either a 'VAR_DECL' node or a constant of some sort.
     RELOC indicates whether the initial value of EXP requires link-time
     relocations.  Bit 0 is set when variable contains local relocations
     only, while bit 1 is set for global relocations.  ALIGN is the
     constant alignment in bits.

     The default version of this function takes care of putting
     read-only variables in 'readonly_data_section'.

     See also USE_SELECT_SECTION_FOR_FUNCTIONS.

 -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS
     Define this macro if you wish TARGET_ASM_SELECT_SECTION to be
     called for 'FUNCTION_DECL's as well as for variables and constants.

     In the case of a 'FUNCTION_DECL', RELOC will be zero if the
     function has been determined to be likely to be called, and nonzero
     if it is unlikely to be called.

 -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC)
     Build up a unique section name, expressed as a 'STRING_CST' node,
     and assign it to 'DECL_SECTION_NAME (DECL)'.  As with
     'TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial
     value of EXP requires link-time relocations.

     The default version of this function appends the symbol name to the
     ELF section name that would normally be used for the symbol.  For
     example, the function 'foo' would be placed in '.text.foo'.
     Whatever the actual target object format, this is often good
     enough.

 -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree
          DECL)
     Return the readonly data section associated with 'DECL_SECTION_NAME
     (DECL)'.  The default version of this function selects
     '.gnu.linkonce.r.name' if the function's section is
     '.gnu.linkonce.t.name', '.rodata.name' if function is in
     '.text.name', and the normal readonly-data section otherwise.

 -- Target Hook: const char * TARGET_ASM_MERGEABLE_RODATA_PREFIX
     Usually, the compiler uses the prefix '".rodata"' to construct
     section names for mergeable constant data.  Define this macro to
     override the string if a different section name should be used.

 -- Target Hook: section * TARGET_ASM_TM_CLONE_TABLE_SECTION (void)
     Return the section that should be used for transactional memory
     clone tables.

 -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (machine_mode
          MODE, rtx X, unsigned HOST_WIDE_INT ALIGN)
     Return the section into which a constant X, of mode MODE, should be
     placed.  You can assume that X is some kind of constant in RTL.
     The argument MODE is redundant except in the case of a 'const_int'
     rtx.  ALIGN is the constant alignment in bits.

     The default version of this function takes care of putting symbolic
     constants in 'flag_pic' mode in 'data_section' and everything else
     in 'readonly_data_section'.

 -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL, tree
          ID)
     Define this hook if you need to postprocess the assembler name
     generated by target-independent code.  The ID provided to this hook
     will be the computed name (e.g., the macro 'DECL_NAME' of the DECL
     in C, or the mangled name of the DECL in C++).  The return value of
     the hook is an 'IDENTIFIER_NODE' for the appropriate mangled name
     on your target system.  The default implementation of this hook
     just returns the ID provided.

 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL,
          int NEW_DECL_P)
     Define this hook if references to a symbol or a constant must be
     treated differently depending on something about the variable or
     function named by the symbol (such as what section it is in).

     The hook is executed immediately after rtl has been created for
     DECL, which may be a variable or function declaration or an entry
     in the constant pool.  In either case, RTL is the rtl in question.
     Do _not_ use 'DECL_RTL (DECL)' in this hook; that field may not
     have been initialized yet.

     In the case of a constant, it is safe to assume that the rtl is a
     'mem' whose address is a 'symbol_ref'.  Most decls will also have
     this form, but that is not guaranteed.  Global register variables,
     for instance, will have a 'reg' for their rtl.  (Normally the right
     thing to do with such unusual rtl is leave it alone.)

     The NEW_DECL_P argument will be true if this is the first time that
     'TARGET_ENCODE_SECTION_INFO' has been invoked on this decl.  It
     will be false for subsequent invocations, which will happen for
     duplicate declarations.  Whether or not anything must be done for
     the duplicate declaration depends on whether the hook examines
     'DECL_ATTRIBUTES'.  NEW_DECL_P is always true when the hook is
     called for a constant.

     The usual thing for this hook to do is to record flags in the
     'symbol_ref', using 'SYMBOL_REF_FLAG' or 'SYMBOL_REF_FLAGS'.
     Historically, the name string was modified if it was necessary to
     encode more than one bit of information, but this practice is now
     discouraged; use 'SYMBOL_REF_FLAGS'.

     The default definition of this hook, 'default_encode_section_info'
     in 'varasm.c', sets a number of commonly-useful bits in
     'SYMBOL_REF_FLAGS'.  Check whether the default does what you need
     before overriding it.

 -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char
          *NAME)
     Decode NAME and return the real name part, sans the characters that
     'TARGET_ENCODE_SECTION_INFO' may have added.

 -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP)
     Returns true if EXP should be placed into a "small data" section.
     The default version of this hook always returns false.

 -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION
     Contains the value true if the target places read-only "small data"
     into a separate section.  The default value is false.

 -- Target Hook: bool TARGET_PROFILE_BEFORE_PROLOGUE (void)
     It returns true if target wants profile code emitted before
     prologue.

     The default version of this hook use the target macro
     'PROFILE_BEFORE_PROLOGUE'.

 -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP)
     Returns true if EXP names an object for which name resolution rules
     must resolve to the current "module" (dynamic shared library or
     executable image).

     The default version of this hook implements the name resolution
     rules for ELF, which has a looser model of global name binding than
     other currently supported object file formats.

 -- Target Hook: bool TARGET_HAVE_TLS
     Contains the value true if the target supports thread-local
     storage.  The default value is false.


File: gccint.info,  Node: PIC,  Next: Assembler Format,  Prev: Sections,  Up: Target Macros

17.19 Position Independent Code
===============================

This section describes macros that help implement generation of position
independent code.  Simply defining these macros is not enough to
generate valid PIC; you must also add support to the hook
'TARGET_LEGITIMATE_ADDRESS_P' and to the macro 'PRINT_OPERAND_ADDRESS',
as well as 'LEGITIMIZE_ADDRESS'.  You must modify the definition of
'movsi' to do something appropriate 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.

 -- Macro: PIC_OFFSET_TABLE_REGNUM
     The register number of the register used to address a table of
     static data addresses in memory.  In some cases this register is
     defined by a processor's "application binary interface" (ABI).
     When this macro is defined, RTL is generated for this register
     once, as with the stack pointer and frame pointer registers.  If
     this macro is not defined, it is up to the machine-dependent files
     to allocate such a register (if necessary).  Note that this
     register must be fixed when in use (e.g. when 'flag_pic' is true).

 -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
     A C expression that is nonzero if the register defined by
     'PIC_OFFSET_TABLE_REGNUM' is clobbered by calls.  If not defined,
     the default is zero.  Do not define this macro if
     'PIC_OFFSET_TABLE_REGNUM' is not defined.

 -- Macro: LEGITIMATE_PIC_OPERAND_P (X)
     A C expression that is nonzero if X is a legitimate immediate
     operand on the target machine when generating position independent
     code.  You can assume that X satisfies 'CONSTANT_P', so you need
     not check this.  You can also assume FLAG_PIC is true, so you need
     not check it either.  You need not define this macro if all
     constants (including 'SYMBOL_REF') can be immediate operands when
     generating position independent code.


File: gccint.info,  Node: Assembler Format,  Next: Debugging Info,  Prev: PIC,  Up: Target Macros

17.20 Defining the Output Assembler Language
============================================

This section describes macros whose principal purpose is to describe how
to write instructions in assembler language--rather than what the
instructions do.

* Menu:

* File Framework::       Structural information for the assembler file.
* Data Output::          Output of constants (numbers, strings, addresses).
* Uninitialized Data::   Output of uninitialized variables.
* Label Output::         Output and generation of labels.
* Initialization::       General principles of initialization
                         and termination routines.
* Macros for Initialization::
                         Specific macros that control the handling of
                         initialization and termination routines.
* Instruction Output::   Output of actual instructions.
* Dispatch Tables::      Output of jump tables.
* Exception Region Output:: Output of exception region code.
* Alignment Output::     Pseudo ops for alignment and skipping data.


File: gccint.info,  Node: File Framework,  Next: Data Output,  Up: Assembler Format

17.20.1 The Overall Framework of an Assembler File
--------------------------------------------------

This describes the overall framework of an assembly file.

 -- Target Hook: void TARGET_ASM_FILE_START (void)
     Output to 'asm_out_file' any text which the assembler expects to
     find at the beginning of a file.  The default behavior is
     controlled by two flags, documented below.  Unless your target's
     assembler is quite unusual, if you override the default, you should
     call 'default_file_start' at some point in your target hook.  This
     lets other target files rely on these variables.

 -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF
     If this flag is true, the text of the macro 'ASM_APP_OFF' will be
     printed as the very first line in the assembly file, unless
     '-fverbose-asm' is in effect.  (If that macro has been defined to
     the empty string, this variable has no effect.)  With the normal
     definition of 'ASM_APP_OFF', the effect is to notify the GNU
     assembler that it need not bother stripping comments or extra
     whitespace from its input.  This allows it to work a bit faster.

     The default is false.  You should not set it to true unless you
     have verified that your port does not generate any extra whitespace
     or comments that will cause GAS to issue errors in NO_APP mode.

 -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
     If this flag is true, 'output_file_directive' will be called for
     the primary source file, immediately after printing 'ASM_APP_OFF'
     (if that is enabled).  Most ELF assemblers expect this to be done.
     The default is false.

 -- Target Hook: void TARGET_ASM_FILE_END (void)
     Output to 'asm_out_file' any text which the assembler expects to
     find at the end of a file.  The default is to output nothing.

 -- Function: void file_end_indicate_exec_stack ()
     Some systems use a common convention, the '.note.GNU-stack' special
     section, to indicate whether or not an object file relies on the
     stack being executable.  If your system uses this convention, you
     should define 'TARGET_ASM_FILE_END' to this function.  If you need
     to do other things in that hook, have your hook function call this
     function.

 -- Target Hook: void TARGET_ASM_LTO_START (void)
     Output to 'asm_out_file' any text which the assembler expects to
     find at the start of an LTO section.  The default is to output
     nothing.

 -- Target Hook: void TARGET_ASM_LTO_END (void)
     Output to 'asm_out_file' any text which the assembler expects to
     find at the end of an LTO section.  The default is to output
     nothing.

 -- Target Hook: void TARGET_ASM_CODE_END (void)
     Output to 'asm_out_file' any text which is needed before emitting
     unwind info and debug info at the end of a file.  Some targets emit
     here PIC setup thunks that cannot be emitted at the end of file,
     because they couldn't have unwind info then.  The default is to
     output nothing.

 -- Macro: ASM_COMMENT_START
     A C string constant describing how to begin a comment in the target
     assembler language.  The compiler assumes that the comment will end
     at the end of the line.

 -- Macro: ASM_APP_ON
     A C string constant for text to be output before each 'asm'
     statement or group of consecutive ones.  Normally this is '"#APP"',
     which is a comment that has no effect on most assemblers but tells
     the GNU assembler that it must check the lines that follow for all
     valid assembler constructs.

 -- Macro: ASM_APP_OFF
     A C string constant for text to be output after each 'asm'
     statement or group of consecutive ones.  Normally this is
     '"#NO_APP"', which tells the GNU assembler to resume making the
     time-saving assumptions that are valid for ordinary compiler
     output.

 -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)
     A C statement to output COFF information or DWARF debugging
     information which indicates that filename NAME is the current
     source file to the stdio stream STREAM.

     This macro need not be defined if the standard form of output for
     the file format in use is appropriate.

 -- Target Hook: void TARGET_ASM_OUTPUT_SOURCE_FILENAME (FILE *FILE,
          const char *NAME)
     Output COFF information or DWARF debugging information which
     indicates that filename NAME is the current source file to the
     stdio stream FILE.

     This target hook need not be defined if the standard form of output
     for the file format in use is appropriate.

 -- Target Hook: void TARGET_ASM_OUTPUT_IDENT (const char *NAME)
     Output a string based on NAME, suitable for the '#ident' directive,
     or the equivalent directive or pragma in non-C-family languages.
     If this hook is not defined, nothing is output for the '#ident'
     directive.

 -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING)
     A C statement to output the string STRING to the stdio stream
     STREAM.  If you do not call the function 'output_quoted_string' in
     your config files, GCC will only call it to output filenames to the
     assembler source.  So you can use it to canonicalize the format of
     the filename using this macro.

 -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME,
          unsigned int FLAGS, tree DECL)
     Output assembly directives to switch to section NAME.  The section
     should have attributes as specified by FLAGS, which is a bit mask
     of the 'SECTION_*' flags defined in 'output.h'.  If DECL is
     non-NULL, it is the 'VAR_DECL' or 'FUNCTION_DECL' with which this
     section is associated.

 -- Target Hook: section * TARGET_ASM_FUNCTION_SECTION (tree DECL, enum
          node_frequency FREQ, bool STARTUP, bool EXIT)
     Return preferred text (sub)section for function DECL.  Main purpose
     of this function is to separate cold, normal and hot functions.
     STARTUP is true when function is known to be used only at startup
     (from static constructors or it is 'main()').  EXIT is true when
     function is known to be used only at exit (from static
     destructors).  Return NULL if function should go to default text
     section.

 -- Target Hook: void TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS (FILE
          *FILE, tree DECL, bool NEW_IS_COLD)
     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 FILE.  The function decl is
     available as DECL and the new section is 'cold' if NEW_IS_COLD is
     'true'.

 -- Common Target Hook: bool TARGET_HAVE_NAMED_SECTIONS
     This flag is true if the target supports
     'TARGET_ASM_NAMED_SECTION'.  It must not be modified by
     command-line option processing.

 -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
     This flag is true if we can create zeroed data by switching to a
     BSS section and then using 'ASM_OUTPUT_SKIP' to allocate the space.
     This is true on most ELF targets.

 -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL,
          const char *NAME, int RELOC)
     Choose a set of section attributes for use by
     'TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a
     section name, and whether or not the declaration's initializer may
     contain runtime relocations.  DECL may be null, in which case
     read-write data should be assumed.

     The default version of this function handles choosing code vs data,
     read-only vs read-write data, and 'flag_pic'.  You should only need
     to override this if your target has special flags that might be set
     via '__attribute__'.

 -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type
          TYPE, const char *TEXT)
     Provides the target with the ability to record the gcc command line
     switches that have been passed to the compiler, and options that
     are enabled.  The TYPE argument specifies what is being recorded.
     It can take the following values:

     'SWITCH_TYPE_PASSED'
          TEXT is a command line switch that has been set by the user.

     'SWITCH_TYPE_ENABLED'
          TEXT is an option which has been enabled.  This might be as a
          direct result of a command line switch, or because it is
          enabled by default or because it has been enabled as a side
          effect of a different command line switch.  For example, the
          '-O2' switch enables various different individual optimization
          passes.

     'SWITCH_TYPE_DESCRIPTIVE'
          TEXT is either NULL or some descriptive text which should be
          ignored.  If TEXT is NULL then it is being used to warn the
          target hook that either recording is starting or ending.  The
          first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL,
          the warning is for start up and the second time the warning is
          for wind down.  This feature is to allow the target hook to
          make any necessary preparations before it starts to record
          switches and to perform any necessary tidying up after it has
          finished recording switches.

     'SWITCH_TYPE_LINE_START'
          This option can be ignored by this target hook.

     'SWITCH_TYPE_LINE_END'
          This option can be ignored by this target hook.

     The hook's return value must be zero.  Other return values may be
     supported in the future.

     By default this hook is set to NULL, but an example implementation
     is provided for ELF based targets.  Called ELF_RECORD_GCC_SWITCHES,
     it records the switches as ASCII text inside a new, string
     mergeable section in the assembler output file.  The name of the
     new section is provided by the
     'TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook.

 -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
     This is the name of the section that will be created by the example
     ELF implementation of the 'TARGET_ASM_RECORD_GCC_SWITCHES' target
     hook.


File: gccint.info,  Node: Data Output,  Next: Uninitialized Data,  Prev: File Framework,  Up: Assembler Format

17.20.2 Output of Data
----------------------

 -- Target Hook: const char * TARGET_ASM_BYTE_OP
 -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP
 -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP
 -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP
 -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP
 -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP
 -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP
 -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP
 -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP
     These hooks specify assembly directives for creating certain kinds
     of integer object.  The 'TARGET_ASM_BYTE_OP' directive creates a
     byte-sized object, the 'TARGET_ASM_ALIGNED_HI_OP' one creates an
     aligned two-byte object, and so on.  Any of the hooks may be
     'NULL', indicating that no suitable directive is available.

     The compiler will print these strings at the start of a new line,
     followed immediately by the object's initial value.  In most cases,
     the string should contain a tab, a pseudo-op, and then another tab.

 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int
          ALIGNED_P)
     The 'assemble_integer' function uses this hook to output an integer
     object.  X is the object's value, SIZE is its size in bytes and
     ALIGNED_P indicates whether it is aligned.  The function should
     return 'true' if it was able to output the object.  If it returns
     false, 'assemble_integer' will try to split the object into smaller
     parts.

     The default implementation of this hook will use the
     'TARGET_ASM_BYTE_OP' family of strings, returning 'false' when the
     relevant string is 'NULL'.

 -- Target Hook: void TARGET_ASM_DECL_END (void)
     Define this hook if the target assembler requires a special marker
     to terminate an initialized variable declaration.

 -- Target Hook: bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *FILE,
          rtx X)
     A target hook to recognize RTX patterns that 'output_addr_const'
     can't deal with, and output assembly code to FILE corresponding to
     the pattern X.  This may be used to allow machine-dependent
     'UNSPEC's to appear within constants.

     If target hook fails to recognize a pattern, it must return
     'false', so that a standard error message is printed.  If it prints
     an error message itself, by calling, for example,
     'output_operand_lossage', it may just return 'true'.

 -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN)
     A C statement to output to the stdio stream STREAM an assembler
     instruction to assemble a string constant containing the LEN bytes
     at PTR.  PTR will be a C expression of type 'char *' and LEN a C
     expression of type 'int'.

     If the assembler has a '.ascii' pseudo-op as found in the Berkeley
     Unix assembler, do not define the macro 'ASM_OUTPUT_ASCII'.

 -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N)
     A C statement to output word N of a function descriptor for DECL.
     This must be defined if 'TARGET_VTABLE_USES_DESCRIPTORS' is
     defined, and is otherwise unused.

 -- Macro: CONSTANT_POOL_BEFORE_FUNCTION
     You may define this macro as a C expression.  You should define the
     expression to have a nonzero value if GCC should output the
     constant pool for a function before the code for the function, or a
     zero value if GCC should output the constant pool after the
     function.  If you do not define this macro, the usual case, GCC
     will output the constant pool before the function.

 -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE)
     A C statement to output assembler commands to define the start of
     the constant pool for a function.  FUNNAME is a string giving the
     name of the function.  Should the return type of the function be
     required, it can be obtained via FUNDECL.  SIZE is the size, in
     bytes, of the constant pool that will be written immediately after
     this call.

     If no constant-pool prefix is required, the usual case, this macro
     need not be defined.

 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN, LABELNO,
          JUMPTO)
     A C statement (with or without semicolon) to output a constant in
     the constant pool, if it needs special treatment.  (This macro need
     not do anything for RTL expressions that can be output normally.)

     The argument FILE is the standard I/O stream to output the
     assembler code on.  X is the RTL expression for the constant to
     output, and MODE is the machine mode (in case X is a 'const_int').
     ALIGN is the required alignment for the value X; you should output
     an assembler directive to force this much alignment.

     The argument LABELNO is a number to use in an internal label for
     the address of this pool entry.  The definition of this macro is
     responsible for outputting the label definition at the proper
     place.  Here is how to do this:

          (*targetm.asm_out.internal_label) (FILE, "LC", LABELNO);

     When you output a pool entry specially, you should end with a
     'goto' to the label JUMPTO.  This will prevent the same pool entry
     from being output a second time in the usual manner.

     You need not define this macro if it would do nothing.

 -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE)
     A C statement to output assembler commands to at the end of the
     constant pool for a function.  FUNNAME is a string giving the name
     of the function.  Should the return type of the function be
     required, you can obtain it via FUNDECL.  SIZE is the size, in
     bytes, of the constant pool that GCC wrote immediately before this
     call.

     If no constant-pool epilogue is required, the usual case, you need
     not define this macro.

 -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR)
     Define this macro as a C expression which is nonzero if C is used
     as a logical line separator by the assembler.  STR points to the
     position in the string where C was found; this can be used if a
     line separator uses multiple characters.

     If you do not define this macro, the default is that only the
     character ';' is treated as a logical line separator.

 -- Target Hook: const char * TARGET_ASM_OPEN_PAREN
 -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN
     These target hooks are C string constants, describing the syntax in
     the assembler for grouping arithmetic expressions.  If not
     overridden, they default to normal parentheses, which is correct
     for most assemblers.

 These macros are provided by 'real.h' for writing the definitions of
'ASM_OUTPUT_DOUBLE' and the like:

 -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L)
 -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L)
 -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L)
 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L)
 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L)
 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L)
     These translate X, of type 'REAL_VALUE_TYPE', to the target's
     floating point representation, and store its bit pattern in the
     variable L.  For 'REAL_VALUE_TO_TARGET_SINGLE' and
     'REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple
     'long int'.  For the others, it should be an array of 'long int'.
     The number of elements in this array is determined by the size of
     the desired target floating point data type: 32 bits of it go in
     each 'long int' array element.  Each array element holds 32 bits of
     the result, even if 'long int' is wider than 32 bits on the host
     machine.

     The array element values are designed so that you can print them
     out using 'fprintf' in the order they should appear in the target
     machine's memory.


File: gccint.info,  Node: Uninitialized Data,  Next: Label Output,  Prev: Data Output,  Up: Assembler Format

17.20.3 Output of Uninitialized Variables
-----------------------------------------

Each of the macros in this section is used to do the whole job of
outputting a single uninitialized variable.

 -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     the assembler definition of a common-label named NAME whose size is
     SIZE bytes.  The variable ROUNDED is the size rounded up to
     whatever alignment the caller wants.  It is possible that SIZE may
     be zero, for instance if a struct with no other member than a
     zero-length array is defined.  In this case, the backend must
     output a symbol definition that allocates at least one byte, both
     so that the address of the resulting object does not compare equal
     to any other, and because some object formats cannot even express
     the concept of a zero-sized common symbol, as that is how they
     represent an ordinary undefined external.

     Use the expression 'assemble_name (STREAM, NAME)' to output the
     name itself; before and after that, output the additional assembler
     syntax for defining the name, and a newline.

     This macro controls how the assembler definitions of uninitialized
     common global variables are output.

 -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)
     Like 'ASM_OUTPUT_COMMON' except takes the required alignment as a
     separate, explicit argument.  If you define this macro, it is used
     in place of 'ASM_OUTPUT_COMMON', and gives you more flexibility in
     handling the required alignment of the variable.  The alignment is
     specified as the number of bits.

 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE,
          ALIGNMENT)
     Like 'ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable
     to be output, if there is one, or 'NULL_TREE' if there is no
     corresponding variable.  If you define this macro, GCC will use it
     in place of both 'ASM_OUTPUT_COMMON' and
     'ASM_OUTPUT_ALIGNED_COMMON'.  Define this macro when you need to
     see the variable's decl in order to chose what to output.

 -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     the assembler definition of uninitialized global DECL named NAME
     whose size is SIZE bytes.  The variable ALIGNMENT is the alignment
     specified as the number of bits.

     Try to use function 'asm_output_aligned_bss' defined in file
     'varasm.c' when defining this macro.  If unable, use the expression
     'assemble_name (STREAM, 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 this
     macro.  The other is to have 'TARGET_ASM_SELECT_SECTION' return a
     switchable BSS section (*note
     TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::).  You do not need to do
     both.

     Some languages do not have 'common' data, and require a non-common
     form of global BSS in order to handle uninitialized globals
     efficiently.  C++ is one example of this.  However, if the target
     does not support global BSS, the front end may choose to make
     globals common in order to save space in the object file.

 -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     the assembler definition of a local-common-label named NAME whose
     size is SIZE bytes.  The variable ROUNDED is the size rounded up to
     whatever alignment the caller wants.

     Use the expression 'assemble_name (STREAM, NAME)' to output the
     name itself; before and after that, output the additional assembler
     syntax for defining the name, and a newline.

     This macro controls how the assembler definitions of uninitialized
     static variables are output.

 -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)
     Like 'ASM_OUTPUT_LOCAL' except takes the required alignment as a
     separate, explicit argument.  If you define this macro, it is used
     in place of 'ASM_OUTPUT_LOCAL', and gives you more flexibility in
     handling the required alignment of the variable.  The alignment is
     specified as the number of bits.

 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE,
          ALIGNMENT)
     Like 'ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to
     be output, if there is one, or 'NULL_TREE' if there is no
     corresponding variable.  If you define this macro, GCC will use it
     in place of both 'ASM_OUTPUT_DECL' and 'ASM_OUTPUT_ALIGNED_DECL'.
     Define this macro when you need to see the variable's decl in order
     to chose what to output.


File: gccint.info,  Node: Label Output,  Next: Initialization,  Prev: Uninitialized Data,  Up: Assembler Format

17.20.4 Output and Generation of Labels
---------------------------------------

This is about outputting labels.

 -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     the assembler definition of a label named NAME.  Use the expression
     'assemble_name (STREAM, NAME)' to output the name itself; before
     and after that, output the additional assembler syntax for defining
     the name, and a newline.  A default definition of this macro is
     provided which is correct for most systems.

 -- Macro: ASM_OUTPUT_FUNCTION_LABEL (STREAM, NAME, DECL)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     the assembler definition of a label named NAME of a function.  Use
     the expression 'assemble_name (STREAM, NAME)' to output the name
     itself; before and after that, output the additional assembler
     syntax for defining the name, and a newline.  A default definition
     of this macro is provided which is correct for most systems.

     If this macro is not defined, then the function name is defined in
     the usual manner as a label (by means of 'ASM_OUTPUT_LABEL').

 -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME)
     Identical to 'ASM_OUTPUT_LABEL', except that NAME is known to refer
     to a compiler-generated label.  The default definition uses
     'assemble_name_raw', which is like 'assemble_name' except that it
     is more efficient.

 -- Macro: SIZE_ASM_OP
     A C string containing the appropriate assembler directive to
     specify the size of a symbol, without any arguments.  On systems
     that use ELF, the default (in 'config/elfos.h') is '"\t.size\t"';
     on other systems, the default is not to define this macro.

     Define this macro only if it is correct to use the default
     definitions of 'ASM_OUTPUT_SIZE_DIRECTIVE' and
     'ASM_OUTPUT_MEASURED_SIZE' for your system.  If you need your own
     custom definitions of those macros, or if you do not need explicit
     symbol sizes at all, do not define this macro.

 -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     a directive telling the assembler that the size of the symbol NAME
     is SIZE.  SIZE is a 'HOST_WIDE_INT'.  If you define 'SIZE_ASM_OP',
     a default definition of this macro is provided.

 -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     a directive telling the assembler to calculate the size of the
     symbol NAME by subtracting its address from the current address.

     If you define 'SIZE_ASM_OP', a default definition of this macro is
     provided.  The default assumes that the assembler recognizes a
     special '.' symbol as referring to the current address, and can
     calculate the difference between this and another symbol.  If your
     assembler does not recognize '.' or cannot do calculations with it,
     you will need to redefine 'ASM_OUTPUT_MEASURED_SIZE' to use some
     other technique.

 -- Macro: NO_DOLLAR_IN_LABEL
     Define this macro if the assembler does not accept the character
     '$' in label names.  By default constructors and destructors in G++
     have '$' in the identifiers.  If this macro is defined, '.' is used
     instead.

 -- Macro: NO_DOT_IN_LABEL
     Define this macro if the assembler does not accept the character
     '.' in label names.  By default constructors and destructors in G++
     have names that use '.'.  If this macro is defined, these names are
     rewritten to avoid '.'.

 -- Macro: TYPE_ASM_OP
     A C string containing the appropriate assembler directive to
     specify the type of a symbol, without any arguments.  On systems
     that use ELF, the default (in 'config/elfos.h') is '"\t.type\t"';
     on other systems, the default is not to define this macro.

     Define this macro only if it is correct to use the default
     definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
     need your own custom definition of this macro, or if you do not
     need explicit symbol types at all, do not define this macro.

 -- Macro: TYPE_OPERAND_FMT
     A C string which specifies (using 'printf' syntax) the format of
     the second operand to 'TYPE_ASM_OP'.  On systems that use ELF, the
     default (in 'config/elfos.h') is '"@%s"'; on other systems, the
     default is not to define this macro.

     Define this macro only if it is correct to use the default
     definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
     need your own custom definition of this macro, or if you do not
     need explicit symbol types at all, do not define this macro.

 -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     a directive telling the assembler that the type of the symbol NAME
     is TYPE.  TYPE is a C string; currently, that string is always
     either '"function"' or '"object"', but you should not count on
     this.

     If you define 'TYPE_ASM_OP' and 'TYPE_OPERAND_FMT', a default
     definition of this macro is provided.

 -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     any text necessary for declaring the name NAME of a function which
     is being defined.  This macro is responsible for outputting the
     label definition (perhaps using 'ASM_OUTPUT_FUNCTION_LABEL').  The
     argument DECL is the 'FUNCTION_DECL' tree node representing the
     function.

     If this macro is not defined, then the function name is defined in
     the usual manner as a label (by means of
     'ASM_OUTPUT_FUNCTION_LABEL').

     You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
     of this macro.

 -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     any text necessary for declaring the size of a function which is
     being defined.  The argument NAME is the name of the function.  The
     argument DECL is the 'FUNCTION_DECL' tree node representing the
     function.

     If this macro is not defined, then the function size is not
     defined.

     You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of
     this macro.

 -- Macro: ASM_DECLARE_COLD_FUNCTION_NAME (STREAM, NAME, DECL)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     any text necessary for declaring the name NAME of a cold function
     partition which is being defined.  This macro is responsible for
     outputting the label definition (perhaps using
     'ASM_OUTPUT_FUNCTION_LABEL').  The argument DECL is the
     'FUNCTION_DECL' tree node representing the function.

     If this macro is not defined, then the cold partition name is
     defined in the usual manner as a label (by means of
     'ASM_OUTPUT_LABEL').

     You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
     of this macro.

 -- Macro: ASM_DECLARE_COLD_FUNCTION_SIZE (STREAM, NAME, DECL)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     any text necessary for declaring the size of a cold function
     partition which is being defined.  The argument NAME is the name of
     the cold partition of the function.  The argument DECL is the
     'FUNCTION_DECL' tree node representing the function.

     If this macro is not defined, then the partition size is not
     defined.

     You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of
     this macro.

 -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     any text necessary for declaring the name NAME of an initialized
     variable which is being defined.  This macro must output the label
     definition (perhaps using 'ASM_OUTPUT_LABEL').  The argument DECL
     is the 'VAR_DECL' tree node representing the variable.

     If this macro is not defined, then the variable name is defined in
     the usual manner as a label (by means of 'ASM_OUTPUT_LABEL').

     You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' and/or
     'ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro.

 -- Target Hook: void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *FILE,
          const char *NAME, const_tree EXPR, HOST_WIDE_INT SIZE)
     A target hook to output to the stdio stream FILE any text necessary
     for declaring the name NAME of a constant which is being defined.
     This target hook is responsible for outputting the label definition
     (perhaps using 'assemble_label').  The argument EXP is the value of
     the constant, and SIZE is the size of the constant in bytes.  The
     NAME will be an internal label.

     The default version of this target hook, define the NAME in the
     usual manner as a label (by means of 'assemble_label').

     You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in this target
     hook.

 -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     any text necessary for claiming a register REGNO for a global
     variable DECL with name NAME.

     If you don't define this macro, that is equivalent to defining it
     to do nothing.

 -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND)
     A C statement (sans semicolon) to finish up declaring a variable
     name once the compiler has processed its initializer fully and thus
     has had a chance to determine the size of an array when controlled
     by an initializer.  This is used on systems where it's necessary to
     declare something about the size of the object.

     If you don't define this macro, that is equivalent to defining it
     to do nothing.

     You may wish to use 'ASM_OUTPUT_SIZE_DIRECTIVE' and/or
     'ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro.

 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const
          char *NAME)
     This target hook is a function to output to the stdio stream STREAM
     some commands that will make the label NAME global; that is,
     available for reference from other files.

     The default implementation relies on a proper definition of
     'GLOBAL_ASM_OP'.

 -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM, tree
          DECL)
     This target hook is a function to output to the stdio stream STREAM
     some commands that will make the name associated with DECL global;
     that is, available for reference from other files.

     The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL
     target hook.

 -- Target Hook: void TARGET_ASM_ASSEMBLE_UNDEFINED_DECL (FILE *STREAM,
          const char *NAME, const_tree DECL)
     This target hook is a function to output to the stdio stream STREAM
     some commands that will declare the name associated with DECL which
     is not defined in the current translation unit.  Most assemblers do
     not require anything to be output in this case.

 -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     some commands that will make the label NAME weak; that is,
     available for reference from other files but only used if no other
     definition is available.  Use the expression 'assemble_name
     (STREAM, NAME)' to output the name itself; before and after that,
     output the additional assembler syntax for making that name weak,
     and a newline.

     If you don't define this macro or 'ASM_WEAKEN_DECL', GCC will not
     support weak symbols and you should not define the 'SUPPORTS_WEAK'
     macro.

 -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE)
     Combines (and replaces) the function of 'ASM_WEAKEN_LABEL' and
     'ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function
     or variable decl.  If VALUE is not 'NULL', this C statement should
     output to the stdio stream STREAM assembler code which defines
     (equates) the weak symbol NAME to have the value VALUE.  If VALUE
     is 'NULL', it should output commands to make NAME weak.

 -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE)
     Outputs a directive that enables NAME to be used to refer to symbol
     VALUE with weak-symbol semantics.  'decl' is the declaration of
     'name'.

 -- Macro: SUPPORTS_WEAK
     A preprocessor constant expression which evaluates to true if the
     target supports weak symbols.

     If you don't define this macro, 'defaults.h' provides a default
     definition.  If either 'ASM_WEAKEN_LABEL' or 'ASM_WEAKEN_DECL' is
     defined, the default definition is '1'; otherwise, it is '0'.

 -- Macro: TARGET_SUPPORTS_WEAK
     A C expression which evaluates to true if the target supports weak
     symbols.

     If you don't define this macro, 'defaults.h' provides a default
     definition.  The default definition is '(SUPPORTS_WEAK)'.  Define
     this macro if you want to control weak symbol support with a
     compiler flag such as '-melf'.

 -- Macro: MAKE_DECL_ONE_ONLY (DECL)
     A C statement (sans semicolon) to mark DECL to be emitted as a
     public symbol such that extra copies in multiple translation units
     will be discarded by the linker.  Define this macro if your object
     file format provides support for this concept, such as the 'COMDAT'
     section flags in the Microsoft Windows PE/COFF format, and this
     support requires changes to DECL, such as putting it in a separate
     section.

 -- Macro: SUPPORTS_ONE_ONLY
     A C expression which evaluates to true if the target supports
     one-only semantics.

     If you don't define this macro, 'varasm.c' provides a default
     definition.  If 'MAKE_DECL_ONE_ONLY' is defined, the default
     definition is '1'; otherwise, it is '0'.  Define this macro if you
     want to control one-only symbol support with a compiler flag, or if
     setting the 'DECL_ONE_ONLY' flag is enough to mark a declaration to
     be emitted as one-only.

 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int
          VISIBILITY)
     This target hook is a function to output to ASM_OUT_FILE some
     commands that will make the symbol(s) associated with DECL have
     hidden, protected or internal visibility as specified by
     VISIBILITY.

 -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC
     A C expression that evaluates to true if the target's linker
     expects that weak symbols do not appear in a static archive's table
     of contents.  The default is '0'.

     Leaving weak symbols out of an archive's table of contents means
     that, if a symbol will only have a definition in one translation
     unit and will have undefined references from other translation
     units, that symbol should not be weak.  Defining this macro to be
     nonzero will thus have the effect that certain symbols that would
     normally be weak (explicit template instantiations, and vtables for
     polymorphic classes with noninline key methods) will instead be
     nonweak.

     The C++ ABI requires this macro to be zero.  Define this macro for
     targets where full C++ ABI compliance is impossible and where
     linker restrictions require weak symbols to be left out of a static
     archive's table of contents.

 -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     any text necessary for declaring the name of an external symbol
     named NAME which is referenced in this compilation but not defined.
     The value of DECL is the tree node for the declaration.

     This macro need not be defined if it does not need to output
     anything.  The GNU assembler and most Unix assemblers don't require
     anything.

 -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF)
     This target hook is a function to output to ASM_OUT_FILE an
     assembler pseudo-op to declare a library function name external.
     The name of the library function is given by SYMREF, which is a
     'symbol_ref'.

 -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char
          *SYMBOL)
     This target hook is a function to output to ASM_OUT_FILE an
     assembler directive to annotate SYMBOL as used.  The Darwin target
     uses the .no_dead_code_strip directive.

 -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME)
     A C statement (sans semicolon) to output to the stdio stream STREAM
     a reference in assembler syntax to a label named NAME.  This should
     add '_' to the front of the name, if that is customary on your
     operating system, as it is in most Berkeley Unix systems.  This
     macro is used in 'assemble_name'.

 -- Target Hook: tree TARGET_MANGLE_ASSEMBLER_NAME (const char *NAME)
     Given a symbol NAME, perform same mangling as 'varasm.c''s
     'assemble_name', but in memory rather than to a file stream,
     returning result as an 'IDENTIFIER_NODE'.  Required for correct LTO
     symtabs.  The default implementation calls the
     'TARGET_STRIP_NAME_ENCODING' hook and then prepends the
     'USER_LABEL_PREFIX', if any.

 -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM)
     A C statement (sans semicolon) to output a reference to
     'SYMBOL_REF' SYM.  If not defined, 'assemble_name' will be used to
     output the name of the symbol.  This macro may be used to modify
     the way a symbol is referenced depending on information encoded by
     'TARGET_ENCODE_SECTION_INFO'.

 -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF)
     A C statement (sans semicolon) to output a reference to BUF, the
     result of 'ASM_GENERATE_INTERNAL_LABEL'.  If not defined,
     'assemble_name' will be used to output the name of the symbol.
     This macro is not used by 'output_asm_label', or the '%l' specifier
     that calls it; the intention is that this macro should be set when
     it is necessary to output a label differently when its address is
     being taken.

 -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const
          char *PREFIX, unsigned long LABELNO)
     A function to output to the stdio stream STREAM a label whose name
     is made from the string PREFIX and the number LABELNO.

     It is absolutely essential that these labels be distinct from the
     labels used for user-level functions and variables.  Otherwise,
     certain programs will have name conflicts with internal labels.

     It is desirable to exclude internal labels from the symbol table of
     the object file.  Most assemblers have a naming convention for
     labels that should be excluded; on many systems, the letter 'L' at
     the beginning of a label has this effect.  You should find out what
     convention your system uses, and follow it.

     The default version of this function utilizes
     'ASM_GENERATE_INTERNAL_LABEL'.

 -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM)
     A C statement to output to the stdio stream STREAM a debug info
     label whose name is made from the string PREFIX and the number NUM.
     This is useful for VLIW targets, where debug info labels may need
     to be treated differently than branch target labels.  On some
     systems, branch target labels must be at the beginning of
     instruction bundles, but debug info labels can occur in the middle
     of instruction bundles.

     If this macro is not defined, then
     '(*targetm.asm_out.internal_label)' will be used.

 -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)
     A C statement to store into the string STRING a label whose name is
     made from the string PREFIX and the number NUM.

     This string, when output subsequently by 'assemble_name', should
     produce the output that '(*targetm.asm_out.internal_label)' would
     produce with the same PREFIX and NUM.

     If the string begins with '*', then 'assemble_name' will output the
     rest of the string unchanged.  It is often convenient for
     'ASM_GENERATE_INTERNAL_LABEL' to use '*' in this way.  If the
     string doesn't start with '*', then 'ASM_OUTPUT_LABELREF' gets to
     output the string, and may change it.  (Of course,
     'ASM_OUTPUT_LABELREF' is also part of your machine description, so
     you should know what it does on your machine.)

 -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)
     A C expression to assign to OUTVAR (which is a variable of type
     'char *') a newly allocated string made from the string NAME and
     the number NUMBER, with some suitable punctuation added.  Use
     'alloca' to get space for the string.

     The string will be used as an argument to 'ASM_OUTPUT_LABELREF' to
     produce an assembler label for an internal static variable whose
     name is NAME.  Therefore, the string must be such as to result in
     valid assembler code.  The argument NUMBER is different each time
     this macro is executed; it prevents conflicts between
     similarly-named internal static variables in different scopes.

     Ideally this string should not be a valid C identifier, to prevent
     any conflict with the user's own symbols.  Most assemblers allow
     periods or percent signs in assembler symbols; putting at least one
     of these between the name and the number will suffice.

     If this macro is not defined, a default definition will be provided
     which is correct for most systems.

 -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE)
     A C statement to output to the stdio stream STREAM assembler code
     which defines (equates) the symbol NAME to have the value VALUE.

     If 'SET_ASM_OP' is defined, a default definition is provided which
     is correct for most systems.

 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME,
          DECL_OF_VALUE)
     A C statement to output to the stdio stream STREAM assembler code
     which defines (equates) the symbol whose tree node is DECL_OF_NAME
     to have the value of the tree node DECL_OF_VALUE.  This macro will
     be used in preference to 'ASM_OUTPUT_DEF' if it is defined and if
     the tree nodes are available.

     If 'SET_ASM_OP' is defined, a default definition is provided which
     is correct for most systems.

 -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE)
     A C statement that evaluates to true if the assembler code which
     defines (equates) the symbol whose tree node is DECL_OF_NAME to
     have the value of the tree node DECL_OF_VALUE should be emitted
     near the end of the current compilation unit.  The default is to
     not defer output of defines.  This macro affects defines output by
     'ASM_OUTPUT_DEF' and 'ASM_OUTPUT_DEF_FROM_DECLS'.

 -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE)
     A C statement to output to the stdio stream STREAM assembler code
     which defines (equates) the weak symbol NAME to have the value
     VALUE.  If VALUE is 'NULL', it defines NAME as an undefined weak
     symbol.

     Define this macro if the target only supports weak aliases; define
     'ASM_OUTPUT_DEF' instead if possible.

 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME,
          SEL_NAME)
     Define this macro to override the default assembler names used for
     Objective-C methods.

     The default name is a unique method number followed by the name of
     the class (e.g. '_1_Foo').  For methods in categories, the name of
     the category is also included in the assembler name (e.g.
     '_1_Foo_Bar').

     These names are safe on most systems, but make debugging difficult
     since the method's selector is not present in the name.  Therefore,
     particular systems define other ways of computing names.

     BUF is an expression of type 'char *' which gives you a buffer in
     which to store the name; its length is as long as CLASS_NAME,
     CAT_NAME and SEL_NAME put together, plus 50 characters extra.

     The argument IS_INST specifies whether the method is an instance
     method or a class method; CLASS_NAME is the name of the class;
     CAT_NAME is the name of the category (or 'NULL' if the method is
     not in a category); and SEL_NAME is the name of the selector.

     On systems where the assembler can handle quoted names, you can use
     this macro to provide more human-readable names.


File: gccint.info,  Node: Initialization,  Next: Macros for Initialization,  Prev: Label Output,  Up: Assembler Format

17.20.5 How Initialization Functions Are Handled
------------------------------------------------

The compiled code for certain languages includes "constructors" (also
called "initialization routines")--functions to initialize data in the
program when the program is started.  These functions need to be called
before the program is "started"--that is to say, before 'main' is
called.

 Compiling some languages generates "destructors" (also called
"termination routines") that should be called when the program
terminates.

 To make the initialization and termination functions work, the compiler
must output something in the assembler code to cause those functions to
be called at the appropriate time.  When you port the compiler to a new
system, you need to specify how to do this.

 There are two major ways that GCC currently supports the execution of
initialization and termination functions.  Each way has two variants.
Much of the structure is common to all four variations.

 The linker must build two lists of these functions--a list of
initialization functions, called '__CTOR_LIST__', and a list of
termination functions, called '__DTOR_LIST__'.

 Each list always begins with an ignored function pointer (which may
hold 0, -1, or a count of the function pointers after it, depending on
the environment).  This is followed by a series of zero or more function
pointers to constructors (or destructors), followed by a function
pointer containing zero.

 Depending on the operating system and its executable file format,
either 'crtstuff.c' or 'libgcc2.c' traverses these lists at startup time
and exit time.  Constructors are called in reverse order of the list;
destructors in forward order.

 The best way to handle static constructors works only for object file
formats which provide arbitrarily-named sections.  A section is set
aside for a list of constructors, and another for a list of destructors.
Traditionally these are called '.ctors' and '.dtors'.  Each object file
that defines an initialization function also puts a word in the
constructor section to point to that function.  The linker accumulates
all these words into one contiguous '.ctors' section.  Termination
functions are handled similarly.

 This method will be chosen as the default by 'target-def.h' if
'TARGET_ASM_NAMED_SECTION' is defined.  A target that does not support
arbitrary sections, but does support special designated constructor and
destructor sections may define 'CTORS_SECTION_ASM_OP' and
'DTORS_SECTION_ASM_OP' to achieve the same effect.

 When arbitrary sections are available, there are two variants,
depending upon how the code in 'crtstuff.c' is called.  On systems that
support a ".init" section which is executed at program startup, parts of
'crtstuff.c' are compiled into that section.  The program is linked by
the 'gcc' driver like this:

     ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o

 The prologue of a function ('__init') appears in the '.init' section of
'crti.o'; the epilogue appears in 'crtn.o'.  Likewise for the function
'__fini' in the ".fini" section.  Normally these files are provided by
the operating system or by the GNU C library, but are provided by GCC
for a few targets.

 The objects 'crtbegin.o' and 'crtend.o' are (for most targets) compiled
from 'crtstuff.c'.  They contain, among other things, code fragments
within the '.init' and '.fini' sections that branch to routines in the
'.text' section.  The linker will pull all parts of a section together,
which results in a complete '__init' function that invokes the routines
we need at startup.

 To use this variant, you must define the 'INIT_SECTION_ASM_OP' macro
properly.

 If no init section is available, when GCC compiles any function called
'main' (or more accurately, any function designated as a program entry
point by the language front end calling 'expand_main_function'), it
inserts a procedure call to '__main' as the first executable code after
the function prologue.  The '__main' function is defined in 'libgcc2.c'
and runs the global constructors.

 In file formats that don't support arbitrary sections, there are again
two variants.  In the simplest variant, the GNU linker (GNU 'ld') and an
'a.out' format must be used.  In this case, 'TARGET_ASM_CONSTRUCTOR' is
defined to produce a '.stabs' entry of type 'N_SETT', referencing the
name '__CTOR_LIST__', and with the address of the void function
containing the initialization code as its value.  The GNU linker
recognizes this as a request to add the value to a "set"; the values are
accumulated, and are eventually placed in the executable as a vector in
the format described above, with a leading (ignored) count and a
trailing zero element.  'TARGET_ASM_DESTRUCTOR' is handled similarly.
Since no init section is available, the absence of 'INIT_SECTION_ASM_OP'
causes the compilation of 'main' to call '__main' as above, starting the
initialization process.

 The last variant uses neither arbitrary sections nor the GNU linker.
This is preferable when you want to do dynamic linking and when using
file formats which the GNU linker does not support, such as 'ECOFF'.  In
this case, 'TARGET_HAVE_CTORS_DTORS' is false, initialization and
termination functions are recognized simply by their names.  This
requires an extra program in the linkage step, called 'collect2'.  This
program pretends to be the linker, for use with GCC; it does its job by
running the ordinary linker, but also arranges to include the vectors of
initialization and termination functions.  These functions are called
via '__main' as described above.  In order to use this method,
'use_collect2' must be defined in the target in 'config.gcc'.

 The following section describes the specific macros that control and
customize the handling of initialization and termination functions.


File: gccint.info,  Node: Macros for Initialization,  Next: Instruction Output,  Prev: Initialization,  Up: Assembler Format

17.20.6 Macros Controlling Initialization Routines
--------------------------------------------------

Here are the macros that control how the compiler handles initialization
and termination functions:

 -- Macro: INIT_SECTION_ASM_OP
     If defined, a C string constant, including spacing, for the
     assembler operation to identify the following data as
     initialization code.  If not defined, GCC will assume such a
     section does not exist.  When you are using special sections for
     initialization and termination functions, this macro also controls
     how 'crtstuff.c' and 'libgcc2.c' arrange to run the initialization
     functions.

 -- Macro: HAS_INIT_SECTION
     If defined, 'main' will not call '__main' as described above.  This
     macro should be defined for systems that control start-up code on a
     symbol-by-symbol basis, such as OSF/1, and should not be defined
     explicitly for systems that support 'INIT_SECTION_ASM_OP'.

 -- Macro: LD_INIT_SWITCH
     If defined, a C string constant for a switch that tells the linker
     that the following symbol is an initialization routine.

 -- Macro: LD_FINI_SWITCH
     If defined, a C string constant for a switch that tells the linker
     that the following symbol is a finalization routine.

 -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC)
     If defined, a C statement that will write a function that can be
     automatically called when a shared library is loaded.  The function
     should call FUNC, which takes no arguments.  If not defined, and
     the object format requires an explicit initialization function,
     then a function called '_GLOBAL__DI' will be generated.

     This function and the following one are used by collect2 when
     linking a shared library that needs constructors or destructors, or
     has DWARF2 exception tables embedded in the code.

 -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC)
     If defined, a C statement that will write a function that can be
     automatically called when a shared library is unloaded.  The
     function should call FUNC, which takes no arguments.  If not
     defined, and the object format requires an explicit finalization
     function, then a function called '_GLOBAL__DD' will be generated.

 -- Macro: INVOKE__main
     If defined, 'main' will call '__main' despite the presence of
     'INIT_SECTION_ASM_OP'.  This macro should be defined for systems
     where the init section is not actually run automatically, but is
     still useful for collecting the lists of constructors and
     destructors.

 -- Macro: SUPPORTS_INIT_PRIORITY
     If nonzero, the C++ 'init_priority' attribute is supported and the
     compiler should emit instructions to control the order of
     initialization of objects.  If zero, the compiler will issue an
     error message upon encountering an 'init_priority' attribute.

 -- Target Hook: bool TARGET_HAVE_CTORS_DTORS
     This value is true if the target supports some "native" method of
     collecting constructors and destructors to be run at startup and
     exit.  It is false if we must use 'collect2'.

 -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY)
     If defined, a function that outputs assembler code to arrange to
     call the function referenced by SYMBOL at initialization time.

     Assume that SYMBOL is a 'SYMBOL_REF' for a function taking no
     arguments and with no return value.  If the target supports
     initialization priorities, PRIORITY is a value between 0 and
     'MAX_INIT_PRIORITY'; otherwise it must be 'DEFAULT_INIT_PRIORITY'.

     If this macro is not defined by the target, a suitable default will
     be chosen if (1) the target supports arbitrary section names, (2)
     the target defines 'CTORS_SECTION_ASM_OP', or (3) 'USE_COLLECT2' is
     not defined.

 -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY)
     This is like 'TARGET_ASM_CONSTRUCTOR' but used for termination
     functions rather than initialization functions.

 If 'TARGET_HAVE_CTORS_DTORS' is true, the initialization routine
generated for the generated object file will have static linkage.

 If your system uses 'collect2' as the means of processing constructors,
then that program normally uses 'nm' to scan an object file for
constructor functions to be called.

 On certain kinds of systems, you can define this macro to make
'collect2' work faster (and, in some cases, make it work at all):

 -- Macro: OBJECT_FORMAT_COFF
     Define this macro if the system uses COFF (Common Object File
     Format) object files, so that 'collect2' can assume this format and
     scan object files directly for dynamic constructor/destructor
     functions.

     This macro is effective only in a native compiler; 'collect2' as
     part of a cross compiler always uses 'nm' for the target machine.

 -- Macro: REAL_NM_FILE_NAME
     Define this macro as a C string constant containing the file name
     to use to execute 'nm'.  The default is to search the path normally
     for 'nm'.

 -- Macro: NM_FLAGS
     'collect2' calls 'nm' to scan object files for static constructors
     and destructors and LTO info.  By default, '-n' is passed.  Define
     'NM_FLAGS' to a C string constant if other options are needed to
     get the same output format as GNU 'nm -n' produces.

 If your system supports shared libraries and has a program to list the
dynamic dependencies of a given library or executable, you can define
these macros to enable support for running initialization and
termination functions in shared libraries:

 -- Macro: LDD_SUFFIX
     Define this macro to a C string constant containing the name of the
     program which lists dynamic dependencies, like 'ldd' under SunOS 4.

 -- Macro: PARSE_LDD_OUTPUT (PTR)
     Define this macro to be C code that extracts filenames from the
     output of the program denoted by 'LDD_SUFFIX'.  PTR is a variable
     of type 'char *' that points to the beginning of a line of output
     from 'LDD_SUFFIX'.  If the line lists a dynamic dependency, the
     code must advance PTR to the beginning of the filename on that
     line.  Otherwise, it must set PTR to 'NULL'.

 -- Macro: SHLIB_SUFFIX
     Define this macro to a C string constant containing the default
     shared library extension of the target (e.g., '".so"').  'collect2'
     strips version information after this suffix when generating global
     constructor and destructor names.  This define is only needed on
     targets that use 'collect2' to process constructors and
     destructors.


File: gccint.info,  Node: Instruction Output,  Next: Dispatch Tables,  Prev: Macros for Initialization,  Up: Assembler Format

17.20.7 Output of Assembler Instructions
----------------------------------------

This describes assembler instruction output.

 -- Macro: REGISTER_NAMES
     A C initializer containing the assembler's names for the machine
     registers, each one as a C string constant.  This is what
     translates register numbers in the compiler into assembler
     language.

 -- Macro: ADDITIONAL_REGISTER_NAMES
     If defined, a C initializer for an array of structures containing a
     name and a register number.  This macro defines additional names
     for hard registers, thus allowing the 'asm' option in declarations
     to refer to registers using alternate names.

 -- Macro: OVERLAPPING_REGISTER_NAMES
     If defined, a C initializer for an array of structures containing a
     name, a register number and a count of the number of consecutive
     machine registers the name overlaps.  This macro defines additional
     names for hard registers, thus allowing the 'asm' option in
     declarations to refer to registers using alternate names.  Unlike
     'ADDITIONAL_REGISTER_NAMES', this macro should be used when the
     register name implies multiple underlying registers.

     This macro should be used when it is important that a clobber in an
     'asm' statement clobbers all the underlying values implied by the
     register name.  For example, on ARM, clobbering the
     double-precision VFP register "d0" implies clobbering both
     single-precision registers "s0" and "s1".

 -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR)
     Define this macro if you are using an unusual assembler that
     requires different names for the machine instructions.

     The definition is a C statement or statements which output an
     assembler instruction opcode to the stdio stream STREAM.  The
     macro-operand PTR is a variable of type 'char *' which points to
     the opcode name in its "internal" form--the form that is written in
     the machine description.  The definition should output the opcode
     name to STREAM, performing any translation you desire, and
     increment the variable PTR to point at the end of the opcode so
     that it will not be output twice.

     In fact, your macro definition may process less than the entire
     opcode name, or more than the opcode name; but if you want to
     process text that includes '%'-sequences to substitute operands,
     you must take care of the substitution yourself.  Just be sure to
     increment PTR over whatever text should not be output normally.

     If you need to look at the operand values, they can be found as the
     elements of 'recog_data.operand'.

     If the macro definition does nothing, the instruction is output in
     the usual way.

 -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)
     If defined, a C statement to be executed just prior to the output
     of assembler code for INSN, to modify the extracted operands so
     they will be output differently.

     Here the argument OPVEC is the vector containing the operands
     extracted from INSN, and NOPERANDS is the number of elements of the
     vector which contain meaningful data for this insn.  The contents
     of this vector are what will be used to convert the insn template
     into assembler code, so you can change the assembler output by
     changing the contents of the vector.

     This macro is useful when various assembler syntaxes share a single
     file of instruction patterns; by defining this macro differently,
     you can cause a large class of instructions to be output
     differently (such as with rearranged operands).  Naturally,
     variations in assembler syntax affecting individual insn patterns
     ought to be handled by writing conditional output routines in those
     patterns.

     If this macro is not defined, it is equivalent to a null statement.

 -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE,
          rtx_insn *INSN, rtx *OPVEC, int NOPERANDS)
     If defined, this target hook is a function which is executed just
     after the output of assembler code for INSN, to change the mode of
     the assembler if necessary.

     Here the argument OPVEC is the vector containing the operands
     extracted from INSN, and NOPERANDS is the number of elements of the
     vector which contain meaningful data for this insn.  The contents
     of this vector are what was used to convert the insn template into
     assembler code, so you can change the assembler mode by checking
     the contents of the vector.

 -- Macro: PRINT_OPERAND (STREAM, X, CODE)
     A C compound statement to output to stdio stream STREAM the
     assembler syntax for an instruction operand X.  X is an RTL
     expression.

     CODE is a value that can be used to specify one of several ways of
     printing the operand.  It is used when identical operands must be
     printed differently depending on the context.  CODE comes from the
     '%' specification that was used to request printing of the operand.
     If the specification was just '%DIGIT' then CODE is 0; if the
     specification was '%LTR DIGIT' then CODE is the ASCII code for LTR.

     If X is a register, this macro should print the register's name.
     The names can be found in an array 'reg_names' whose type is 'char
     *[]'.  'reg_names' is initialized from 'REGISTER_NAMES'.

     When the machine description has a specification '%PUNCT' (a '%'
     followed by a punctuation character), this macro is called with a
     null pointer for X and the punctuation character for CODE.

 -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE)
     A C expression which evaluates to true if CODE is a valid
     punctuation character for use in the 'PRINT_OPERAND' macro.  If
     'PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
     punctuation characters (except for the standard one, '%') are used
     in this way.

 -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X)
     A C compound statement to output to stdio stream STREAM the
     assembler syntax for an instruction operand that is a memory
     reference whose address is X.  X is an RTL expression.

     On some machines, the syntax for a symbolic address depends on the
     section that the address refers to.  On these machines, define the
     hook 'TARGET_ENCODE_SECTION_INFO' to store the information into the
     'symbol_ref', and then check for it here.  *Note Assembler
     Format::.

 -- Macro: DBR_OUTPUT_SEQEND (FILE)
     A C statement, to be executed after all slot-filler instructions
     have been output.  If necessary, call 'dbr_sequence_length' to
     determine the number of slots filled in a sequence (zero if not
     currently outputting a sequence), to decide how many no-ops to
     output, or whatever.

     Don't define this macro if it has nothing to do, but it is helpful
     in reading assembly output if the extent of the delay sequence is
     made explicit (e.g. with white space).

 Note that output routines for instructions with delay slots must be
prepared to deal with not being output as part of a sequence (i.e. when
the scheduling pass is not run, or when no slot fillers could be found.)
The variable 'final_sequence' is null when not processing a sequence,
otherwise it contains the 'sequence' rtx being output.

 -- Macro: REGISTER_PREFIX
 -- Macro: LOCAL_LABEL_PREFIX
 -- Macro: USER_LABEL_PREFIX
 -- Macro: IMMEDIATE_PREFIX
     If defined, C string expressions to be used for the '%R', '%L',
     '%U', and '%I' options of 'asm_fprintf' (see 'final.c').  These are
     useful when a single 'md' file must support multiple assembler
     formats.  In that case, the various 'tm.h' files can define these
     macros differently.

 -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT)
     If defined this macro should expand to a series of 'case'
     statements which will be parsed inside the 'switch' statement of
     the 'asm_fprintf' function.  This allows targets to define extra
     printf formats which may useful when generating their assembler
     statements.  Note that uppercase letters are reserved for future
     generic extensions to asm_fprintf, and so are not available to
     target specific code.  The output file is given by the parameter
     FILE.  The varargs input pointer is ARGPTR and the rest of the
     format string, starting the character after the one that is being
     switched upon, is pointed to by FORMAT.

 -- Macro: ASSEMBLER_DIALECT
     If your target supports multiple dialects of assembler language
     (such as different opcodes), define this macro as a C expression
     that gives the numeric index of the assembler language dialect to
     use, with zero as the first variant.

     If this macro is defined, you may use constructs of the form
          '{option0|option1|option2...}'
     in the output templates of patterns (*note Output Template::) or in
     the first argument of 'asm_fprintf'.  This construct outputs
     'option0', 'option1', 'option2', etc., if the value of
     'ASSEMBLER_DIALECT' is zero, one, two, etc.  Any special characters
     within these strings retain their usual meaning.  If there are
     fewer alternatives within the braces than the value of
     'ASSEMBLER_DIALECT', the construct outputs nothing.  If it's needed
     to print curly braces or '|' character in assembler output
     directly, '%{', '%}' and '%|' can be used.

     If you do not define this macro, the characters '{', '|' and '}' do
     not have any special meaning when used in templates or operands to
     'asm_fprintf'.

     Define the macros 'REGISTER_PREFIX', 'LOCAL_LABEL_PREFIX',
     'USER_LABEL_PREFIX' and 'IMMEDIATE_PREFIX' if you can express the
     variations in assembler language syntax with that mechanism.
     Define 'ASSEMBLER_DIALECT' and use the '{option0|option1}' syntax
     if the syntax variant are larger and involve such things as
     different opcodes or operand order.

 -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO)
     A C expression to output to STREAM some assembler code which will
     push hard register number REGNO onto the stack.  The code need not
     be optimal, since this macro is used only when profiling.

 -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO)
     A C expression to output to STREAM some assembler code which will
     pop hard register number REGNO off of the stack.  The code need not
     be optimal, since this macro is used only when profiling.


File: gccint.info,  Node: Dispatch Tables,  Next: Exception Region Output,  Prev: Instruction Output,  Up: Assembler Format

17.20.8 Output of Dispatch Tables
---------------------------------

This concerns dispatch tables.

 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL)
     A C statement to output to the stdio stream STREAM an assembler
     pseudo-instruction to generate a difference between two labels.
     VALUE and REL are the numbers of two internal labels.  The
     definitions of these labels are output using
     '(*targetm.asm_out.internal_label)', and they must be printed in
     the same way here.  For example,

          fprintf (STREAM, "\t.word L%d-L%d\n",
                   VALUE, REL)

     You must provide this macro on machines where the addresses in a
     dispatch table are relative to the table's own address.  If
     defined, GCC will also use this macro on all machines when
     producing PIC.  BODY is the body of the 'ADDR_DIFF_VEC'; it is
     provided so that the mode and flags can be read.

 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)
     This macro should be provided on machines where the addresses in a
     dispatch table are absolute.

     The definition should be a C statement to output to the stdio
     stream STREAM an assembler pseudo-instruction to generate a
     reference to a label.  VALUE is the number of an internal label
     whose definition is output using
     '(*targetm.asm_out.internal_label)'.  For example,

          fprintf (STREAM, "\t.word L%d\n", VALUE)

 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)
     Define this if the label before a jump-table needs to be output
     specially.  The first three arguments are the same as for
     '(*targetm.asm_out.internal_label)'; the fourth argument is the
     jump-table which follows (a 'jump_table_data' containing an
     'addr_vec' or 'addr_diff_vec').

     This feature is used on system V to output a 'swbeg' statement for
     the table.

     If this macro is not defined, these labels are output with
     '(*targetm.asm_out.internal_label)'.

 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)
     Define this if something special must be output at the end of a
     jump-table.  The definition should be a C statement to be executed
     after the assembler code for the table is written.  It should write
     the appropriate code to stdio stream STREAM.  The argument TABLE is
     the jump-table insn, and NUM is the label-number of the preceding
     label.

     If this macro is not defined, nothing special is output at the end
     of the jump-table.

 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree
          DECL, int FOR_EH, int EMPTY)
     This target hook emits a label at the beginning of each FDE.  It
     should be defined on targets where FDEs need special labels, and it
     should write the appropriate label, for the FDE associated with the
     function declaration DECL, to the stdio stream STREAM.  The third
     argument, FOR_EH, is a boolean: true if this is for an exception
     table.  The fourth argument, EMPTY, is a boolean: true if this is a
     placeholder label for an omitted FDE.

     The default is that FDEs are not given nonlocal labels.

 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM)
     This target hook emits a label at the beginning of the exception
     table.  It should be defined on targets where it is desirable for
     the table to be broken up according to function.

     The default is that no label is emitted.

 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx
          PERSONALITY)
     If the target implements 'TARGET_ASM_UNWIND_EMIT', this hook may be
     used to emit a directive to install a personality hook into the
     unwind info.  This hook should not be used if dwarf2 unwind info is
     used.

 -- Target Hook: void TARGET_ASM_UNWIND_EMIT (FILE *STREAM, rtx_insn
          *INSN)
     This target hook emits assembly directives required to unwind the
     given instruction.  This is only used when
     'TARGET_EXCEPT_UNWIND_INFO' returns 'UI_TARGET'.

 -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
     True if the 'TARGET_ASM_UNWIND_EMIT' hook should be called before
     the assembly for INSN has been emitted, false if the hook should be
     called afterward.


File: gccint.info,  Node: Exception Region Output,  Next: Alignment Output,  Prev: Dispatch Tables,  Up: Assembler Format

17.20.9 Assembler Commands for Exception Regions
------------------------------------------------

This describes commands marking the start and the end of an exception
region.

 -- Macro: EH_FRAME_SECTION_NAME
     If defined, a C string constant for the name of the section
     containing exception handling frame unwind information.  If not
     defined, GCC will provide a default definition if the target
     supports named sections.  'crtstuff.c' uses this macro to switch to
     the appropriate section.

     You should define this symbol if your target supports DWARF 2 frame
     unwind information and the default definition does not work.

 -- Macro: EH_FRAME_THROUGH_COLLECT2
     If defined, DWARF 2 frame unwind information will identified by
     specially named labels.  The collect2 process will locate these
     labels and generate code to register the frames.

     This might be necessary, for instance, if the system linker will
     not place the eh_frames in-between the sentinals from 'crtstuff.c',
     or if the system linker does garbage collection and sections cannot
     be marked as not to be collected.

 -- Macro: EH_TABLES_CAN_BE_READ_ONLY
     Define this macro to 1 if your target is such that no frame unwind
     information encoding used with non-PIC code will ever require a
     runtime relocation, but the linker may not support merging
     read-only and read-write sections into a single read-write section.

 -- Macro: MASK_RETURN_ADDR
     An rtx used to mask the return address found via 'RETURN_ADDR_RTX',
     so that it does not contain any extraneous set bits in it.

 -- Macro: DWARF2_UNWIND_INFO
     Define this macro to 0 if your target supports DWARF 2 frame unwind
     information, but it does not yet work with exception handling.
     Otherwise, if your target supports this information (if it defines
     'INCOMING_RETURN_ADDR_RTX' and 'OBJECT_FORMAT_ELF'), GCC will
     provide a default definition of 1.

 -- Common Target Hook: enum unwind_info_type TARGET_EXCEPT_UNWIND_INFO
          (struct gcc_options *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 'UI_TARGET'.  If the target is to
     use the 'setjmp'/'longjmp'-based exception handling scheme, the
     hook should return 'UI_SJLJ'.  If the target supports DWARF 2 frame
     unwind information, the hook should return 'UI_DWARF2'.

     A target may, if exceptions are disabled, choose to return
     'UI_NONE'.  This may end up simplifying other parts of
     target-specific code.  The default implementation of this hook
     never returns 'UI_NONE'.

     Note that the value returned by this hook should be constant.  It
     should not depend on anything except the command-line switches
     described by OPTS.  In particular, the setting 'UI_SJLJ' must be
     fixed at compiler start-up as C pre-processor macros and builtin
     functions related to exception handling are set up depending on
     this setting.

     The default implementation of the hook first honors the
     '--enable-sjlj-exceptions' configure option, then
     'DWARF2_UNWIND_INFO', and finally defaults to 'UI_SJLJ'.  If
     'DWARF2_UNWIND_INFO' depends on command-line options, the target
     must define this hook so that OPTS is used correctly.

 -- Common Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT
     This variable should be set to 'true' if the target ABI requires
     unwinding tables even when exceptions are not used.  It must not be
     modified by command-line option processing.

 -- Macro: DONT_USE_BUILTIN_SETJMP
     Define this macro to 1 if the 'setjmp'/'longjmp'-based scheme
     should use the 'setjmp'/'longjmp' functions from the C library
     instead of the '__builtin_setjmp'/'__builtin_longjmp' machinery.

 -- Macro: JMP_BUF_SIZE
     This macro has no effect unless 'DONT_USE_BUILTIN_SETJMP' is also
     defined.  Define this macro if the default size of 'jmp_buf' buffer
     for the 'setjmp'/'longjmp'-based exception handling mechanism is
     not large enough, or if it is much too large.  The default size is
     'FIRST_PSEUDO_REGISTER * sizeof(void *)'.

 -- Macro: DWARF_CIE_DATA_ALIGNMENT
     This macro need only be defined if the target might save registers
     in the function prologue at an offset to the stack pointer that is
     not aligned to 'UNITS_PER_WORD'.  The definition should be the
     negative minimum alignment if 'STACK_GROWS_DOWNWARD' is true, and
     the positive minimum alignment otherwise.  *Note SDB and DWARF::.
     Only applicable if the target supports DWARF 2 frame unwind
     information.

 -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO
     Contains the value true if the target should add a zero word onto
     the end of a Dwarf-2 frame info section when used for exception
     handling.  Default value is false if 'EH_FRAME_SECTION_NAME' is
     defined, and true otherwise.

 -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG)
     Given a register, this hook should return a parallel of registers
     to represent where to find the register pieces.  Define this hook
     if the register and its mode are represented in Dwarf in
     non-contiguous locations, or if the register should be represented
     in more than one register in Dwarf.  Otherwise, this hook should
     return 'NULL_RTX'.  If not defined, the default is to return
     'NULL_RTX'.

 -- Target Hook: machine_mode TARGET_DWARF_FRAME_REG_MODE (int REGNO)
     Given a register, this hook should return the mode which the
     corresponding Dwarf frame register should have.  This is normally
     used to return a smaller mode than the raw mode to prevent call
     clobbered parts of a register altering the frame register size

 -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS)
     If some registers are represented in Dwarf-2 unwind information in
     multiple pieces, define this hook to fill in information about the
     sizes of those pieces in the table used by the unwinder at runtime.
     It will be called by 'expand_builtin_init_dwarf_reg_sizes' after
     filling in a single size corresponding to each hard register;
     ADDRESS is the address of the table.

 -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM)
     This hook is used to output a reference from a frame unwinding
     table to the type_info object identified by SYM.  It should return
     'true' if the reference was output.  Returning 'false' will cause
     the reference to be output using the normal Dwarf2 routines.

 -- Target Hook: bool TARGET_ARM_EABI_UNWINDER
     This flag should be set to 'true' on targets that use an ARM EABI
     based unwinding library, and 'false' on other targets.  This
     effects the format of unwinding tables, and how the unwinder in
     entered after running a cleanup.  The default is 'false'.


File: gccint.info,  Node: Alignment Output,  Prev: Exception Region Output,  Up: Assembler Format

17.20.10 Assembler Commands for Alignment
-----------------------------------------

This describes commands for alignment.

 -- Macro: JUMP_ALIGN (LABEL)
     The alignment (log base 2) to put in front of LABEL, which is a
     common destination of jumps and has no fallthru incoming edge.

     This macro need not be defined if you don't want any special
     alignment to be done at such a time.  Most machine descriptions do
     not currently define the macro.

     Unless it's necessary to inspect the LABEL parameter, it is better
     to set the variable ALIGN_JUMPS in the target's
     'TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
     user's selection in ALIGN_JUMPS in a 'JUMP_ALIGN' implementation.

 -- Target Hook: int TARGET_ASM_JUMP_ALIGN_MAX_SKIP (rtx_insn *LABEL)
     The maximum number of bytes to skip before LABEL when applying
     'JUMP_ALIGN'.  This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is
     defined.

 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL)
     The alignment (log base 2) to put in front of LABEL, which follows
     a 'BARRIER'.

     This macro need not be defined if you don't want any special
     alignment to be done at such a time.  Most machine descriptions do
     not currently define the macro.

 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP
          (rtx_insn *LABEL)
     The maximum number of bytes to skip before LABEL when applying
     'LABEL_ALIGN_AFTER_BARRIER'.  This works only if
     'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.

 -- Macro: LOOP_ALIGN (LABEL)
     The alignment (log base 2) to put in front of LABEL that heads a
     frequently executed basic block (usually the header of a loop).

     This macro need not be defined if you don't want any special
     alignment to be done at such a time.  Most machine descriptions do
     not currently define the macro.

     Unless it's necessary to inspect the LABEL parameter, it is better
     to set the variable 'align_loops' in the target's
     'TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
     user's selection in 'align_loops' in a 'LOOP_ALIGN' implementation.

 -- Target Hook: int TARGET_ASM_LOOP_ALIGN_MAX_SKIP (rtx_insn *LABEL)
     The maximum number of bytes to skip when applying 'LOOP_ALIGN' to
     LABEL.  This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.

 -- Macro: LABEL_ALIGN (LABEL)
     The alignment (log base 2) to put in front of LABEL.  If
     'LABEL_ALIGN_AFTER_BARRIER' / 'LOOP_ALIGN' specify a different
     alignment, the maximum of the specified values is used.

     Unless it's necessary to inspect the LABEL parameter, it is better
     to set the variable 'align_labels' in the target's
     'TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
     user's selection in 'align_labels' in a 'LABEL_ALIGN'
     implementation.

 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_MAX_SKIP (rtx_insn *LABEL)
     The maximum number of bytes to skip when applying 'LABEL_ALIGN' to
     LABEL.  This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.

 -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES)
     A C statement to output to the stdio stream STREAM an assembler
     instruction to advance the location counter by NBYTES bytes.  Those
     bytes should be zero when loaded.  NBYTES will be a C expression of
     type 'unsigned HOST_WIDE_INT'.

 -- Macro: ASM_NO_SKIP_IN_TEXT
     Define this macro if 'ASM_OUTPUT_SKIP' should not be used in the
     text section because it fails to put zeros in the bytes that are
     skipped.  This is true on many Unix systems, where the pseudo-op to
     skip bytes produces no-op instructions rather than zeros when used
     in the text section.

 -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER)
     A C statement to output to the stdio stream STREAM an assembler
     command to advance the location counter to a multiple of 2 to the
     POWER bytes.  POWER will be a C expression of type 'int'.

 -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER)
     Like 'ASM_OUTPUT_ALIGN', except that the "nop" instruction is used
     for padding, if necessary.

 -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP)
     A C statement to output to the stdio stream STREAM an assembler
     command to advance the location counter to a multiple of 2 to the
     POWER bytes, but only if MAX_SKIP or fewer bytes are needed to
     satisfy the alignment request.  POWER and MAX_SKIP will be a C
     expression of type 'int'.


File: gccint.info,  Node: Debugging Info,  Next: Floating Point,  Prev: Assembler Format,  Up: Target Macros

17.21 Controlling Debugging Information Format
==============================================

This describes how to specify debugging information.

* Menu:

* All Debuggers::      Macros that affect all debugging formats uniformly.
* DBX Options::        Macros enabling specific options in DBX format.
* DBX Hooks::          Hook macros for varying DBX format.
* File Names and DBX:: Macros controlling output of file names in DBX format.
* SDB and DWARF::      Macros for SDB (COFF) and DWARF formats.
* VMS Debug::          Macros for VMS debug format.


File: gccint.info,  Node: All Debuggers,  Next: DBX Options,  Up: Debugging Info

17.21.1 Macros Affecting All Debugging Formats
----------------------------------------------

These macros affect all debugging formats.

 -- Macro: DBX_REGISTER_NUMBER (REGNO)
     A C expression that returns the DBX register number for the
     compiler register number REGNO.  In the default macro provided, the
     value of this expression will be REGNO itself.  But sometimes there
     are some registers that the compiler knows about and DBX does not,
     or vice versa.  In such cases, some register may need to have one
     number in the compiler and another for DBX.

     If two registers have consecutive numbers inside GCC, and they can
     be used as a pair to hold a multiword value, then they _must_ have
     consecutive numbers after renumbering with 'DBX_REGISTER_NUMBER'.
     Otherwise, debuggers will be unable to access such a pair, because
     they expect register pairs to be consecutive in their own numbering
     scheme.

     If you find yourself defining 'DBX_REGISTER_NUMBER' in way that
     does not preserve register pairs, then what you must do instead is
     redefine the actual register numbering scheme.

 -- Macro: DEBUGGER_AUTO_OFFSET (X)
     A C expression that returns the integer offset value for an
     automatic variable having address X (an RTL expression).  The
     default computation assumes that X is based on the frame-pointer
     and gives the offset from the frame-pointer.  This is required for
     targets that produce debugging output for DBX or COFF-style
     debugging output for SDB and allow the frame-pointer to be
     eliminated when the '-g' options is used.

 -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X)
     A C expression that returns the integer offset value for an
     argument having address X (an RTL expression).  The nominal offset
     is OFFSET.

 -- Macro: PREFERRED_DEBUGGING_TYPE
     A C expression that returns the type of debugging output GCC should
     produce when the user specifies just '-g'.  Define this if you have
     arranged for GCC to support more than one format of debugging
     output.  Currently, the allowable values are 'DBX_DEBUG',
     'SDB_DEBUG', 'DWARF_DEBUG', 'DWARF2_DEBUG', 'XCOFF_DEBUG',
     'VMS_DEBUG', and 'VMS_AND_DWARF2_DEBUG'.

     When the user specifies '-ggdb', GCC normally also uses the value
     of this macro to select the debugging output format, but with two
     exceptions.  If 'DWARF2_DEBUGGING_INFO' is defined, GCC uses the
     value 'DWARF2_DEBUG'.  Otherwise, if 'DBX_DEBUGGING_INFO' is
     defined, GCC uses 'DBX_DEBUG'.

     The value of this macro only affects the default debugging output;
     the user can always get a specific type of output by using
     '-gstabs', '-gcoff', '-gdwarf-2', '-gxcoff', or '-gvms'.


File: gccint.info,  Node: DBX Options,  Next: DBX Hooks,  Prev: All Debuggers,  Up: Debugging Info

17.21.2 Specific Options for DBX Output
---------------------------------------

These are specific options for DBX output.

 -- Macro: DBX_DEBUGGING_INFO
     Define this macro if GCC should produce debugging output for DBX in
     response to the '-g' option.

 -- Macro: XCOFF_DEBUGGING_INFO
     Define this macro if GCC should produce XCOFF format debugging
     output in response to the '-g' option.  This is a variant of DBX
     format.

 -- Macro: DEFAULT_GDB_EXTENSIONS
     Define this macro to control whether GCC should by default generate
     GDB's extended version of DBX debugging information (assuming
     DBX-format debugging information is enabled at all).  If you don't
     define the macro, the default is 1: always generate the extended
     information if there is any occasion to.

 -- Macro: DEBUG_SYMS_TEXT
     Define this macro if all '.stabs' commands should be output while
     in the text section.

 -- Macro: ASM_STABS_OP
     A C string constant, including spacing, naming the assembler pseudo
     op to use instead of '"\t.stabs\t"' to define an ordinary debugging
     symbol.  If you don't define this macro, '"\t.stabs\t"' is used.
     This macro applies only to DBX debugging information format.

 -- Macro: ASM_STABD_OP
     A C string constant, including spacing, naming the assembler pseudo
     op to use instead of '"\t.stabd\t"' to define a debugging symbol
     whose value is the current location.  If you don't define this
     macro, '"\t.stabd\t"' is used.  This macro applies only to DBX
     debugging information format.

 -- Macro: ASM_STABN_OP
     A C string constant, including spacing, naming the assembler pseudo
     op to use instead of '"\t.stabn\t"' to define a debugging symbol
     with no name.  If you don't define this macro, '"\t.stabn\t"' is
     used.  This macro applies only to DBX debugging information format.

 -- Macro: DBX_NO_XREFS
     Define this macro if DBX on your system does not support the
     construct 'xsTAGNAME'.  On some systems, this construct is used to
     describe a forward reference to a structure named TAGNAME.  On
     other systems, this construct is not supported at all.

 -- Macro: DBX_CONTIN_LENGTH
     A symbol name in DBX-format debugging information is normally
     continued (split into two separate '.stabs' directives) when it
     exceeds a certain length (by default, 80 characters).  On some
     operating systems, DBX requires this splitting; on others,
     splitting must not be done.  You can inhibit splitting by defining
     this macro with the value zero.  You can override the default
     splitting-length by defining this macro as an expression for the
     length you desire.

 -- Macro: DBX_CONTIN_CHAR
     Normally continuation is indicated by adding a '\' character to the
     end of a '.stabs' string when a continuation follows.  To use a
     different character instead, define this macro as a character
     constant for the character you want to use.  Do not define this
     macro if backslash is correct for your system.

 -- Macro: DBX_STATIC_STAB_DATA_SECTION
     Define this macro if it is necessary to go to the data section
     before outputting the '.stabs' pseudo-op for a non-global static
     variable.

 -- Macro: DBX_TYPE_DECL_STABS_CODE
     The value to use in the "code" field of the '.stabs' directive for
     a typedef.  The default is 'N_LSYM'.

 -- Macro: DBX_STATIC_CONST_VAR_CODE
     The value to use in the "code" field of the '.stabs' directive for
     a static variable located in the text section.  DBX format does not
     provide any "right" way to do this.  The default is 'N_FUN'.

 -- Macro: DBX_REGPARM_STABS_CODE
     The value to use in the "code" field of the '.stabs' directive for
     a parameter passed in registers.  DBX format does not provide any
     "right" way to do this.  The default is 'N_RSYM'.

 -- Macro: DBX_REGPARM_STABS_LETTER
     The letter to use in DBX symbol data to identify a symbol as a
     parameter passed in registers.  DBX format does not customarily
     provide any way to do this.  The default is ''P''.

 -- Macro: DBX_FUNCTION_FIRST
     Define this macro if the DBX information for a function and its
     arguments should precede the assembler code for the function.
     Normally, in DBX format, the debugging information entirely follows
     the assembler code.

 -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE
     Define this macro, with value 1, if the value of a symbol
     describing the scope of a block ('N_LBRAC' or 'N_RBRAC') should be
     relative to the start of the enclosing function.  Normally, GCC
     uses an absolute address.

 -- Macro: DBX_LINES_FUNCTION_RELATIVE
     Define this macro, with value 1, if the value of a symbol
     indicating the current line number ('N_SLINE') should be relative
     to the start of the enclosing function.  Normally, GCC uses an
     absolute address.

 -- Macro: DBX_USE_BINCL
     Define this macro if GCC should generate 'N_BINCL' and 'N_EINCL'
     stabs for included header files, as on Sun systems.  This macro
     also directs GCC to output a type number as a pair of a file number
     and a type number within the file.  Normally, GCC does not generate
     'N_BINCL' or 'N_EINCL' stabs, and it outputs a single number for a
     type number.


File: gccint.info,  Node: DBX Hooks,  Next: File Names and DBX,  Prev: DBX Options,  Up: Debugging Info

17.21.3 Open-Ended Hooks for DBX Format
---------------------------------------

These are hooks for DBX format.

 -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER)
     A C statement to output DBX debugging information before code for
     line number LINE of the current source file to the stdio stream
     STREAM.  COUNTER is the number of time the macro was invoked,
     including the current invocation; it is intended to generate unique
     labels in the assembly output.

     This macro should not be defined if the default output is correct,
     or if it can be made correct by defining
     'DBX_LINES_FUNCTION_RELATIVE'.

 -- Macro: NO_DBX_FUNCTION_END
     Some stabs encapsulation formats (in particular ECOFF), cannot
     handle the '.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx
     extension construct.  On those machines, define this macro to turn
     this feature off without disturbing the rest of the gdb extensions.

 -- Macro: NO_DBX_BNSYM_ENSYM
     Some assemblers cannot handle the '.stabd BNSYM/ENSYM,0,0' gdb dbx
     extension construct.  On those machines, define this macro to turn
     this feature off without disturbing the rest of the gdb extensions.


File: gccint.info,  Node: File Names and DBX,  Next: SDB and DWARF,  Prev: DBX Hooks,  Up: Debugging Info

17.21.4 File Names in DBX Format
--------------------------------

This describes file names in DBX format.

 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)
     A C statement to output DBX debugging information to the stdio
     stream STREAM, which indicates that file NAME is the main source
     file--the file specified as the input file for compilation.  This
     macro is called only once, at the beginning of compilation.

     This macro need not be defined if the standard form of output for
     DBX debugging information is appropriate.

     It may be necessary to refer to a label equal to the beginning of
     the text section.  You can use 'assemble_name (stream,
     ltext_label_name)' to do so.  If you do this, you must also set the
     variable USED_LTEXT_LABEL_NAME to 'true'.

 -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY
     Define this macro, with value 1, if GCC should not emit an
     indication of the current directory for compilation and current
     source language at the beginning of the file.

 -- Macro: NO_DBX_GCC_MARKER
     Define this macro, with value 1, if GCC should not emit an
     indication that this object file was compiled by GCC.  The default
     is to emit an 'N_OPT' stab at the beginning of every source file,
     with 'gcc2_compiled.' for the string and value 0.

 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)
     A C statement to output DBX debugging information at the end of
     compilation of the main source file NAME.  Output should be written
     to the stdio stream STREAM.

     If you don't define this macro, nothing special is output at the
     end of compilation, which is correct for most machines.

 -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
     Define this macro _instead of_ defining
     'DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at
     the end of compilation is an 'N_SO' stab with an empty string,
     whose value is the highest absolute text address in the file.


File: gccint.info,  Node: SDB and DWARF,  Next: VMS Debug,  Prev: File Names and DBX,  Up: Debugging Info

17.21.5 Macros for SDB and DWARF Output
---------------------------------------

Here are macros for SDB and DWARF output.

 -- Macro: SDB_DEBUGGING_INFO
     Define this macro to 1 if GCC should produce COFF-style debugging
     output for SDB in response to the '-g' option.

 -- Macro: DWARF2_DEBUGGING_INFO
     Define this macro if GCC should produce dwarf version 2 format
     debugging output in response to the '-g' option.

      -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree
               FUNCTION)
          Define this to enable the dwarf attribute
          'DW_AT_calling_convention' to be emitted for each function.
          Instead of an integer return the enum value for the 'DW_CC_'
          tag.

     To support optional call frame debugging information, you must also
     define 'INCOMING_RETURN_ADDR_RTX' and either set
     'RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the
     prologue, or call 'dwarf2out_def_cfa' and 'dwarf2out_reg_save' as
     appropriate from 'TARGET_ASM_FUNCTION_PROLOGUE' if you don't.

 -- Macro: DWARF2_FRAME_INFO
     Define this macro to a nonzero value if GCC should always output
     Dwarf 2 frame information.  If 'TARGET_EXCEPT_UNWIND_INFO' (*note
     Exception Region Output::) returns 'UI_DWARF2', and exceptions are
     enabled, GCC will output this information not matter how you define
     'DWARF2_FRAME_INFO'.

 -- Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void)
     This hook defines the mechanism that will be used for describing
     frame unwind information to the debugger.  Normally the hook will
     return 'UI_DWARF2' if DWARF 2 debug information is enabled, and
     return 'UI_NONE' otherwise.

     A target may return 'UI_DWARF2' even when DWARF 2 debug information
     is disabled in order to always output DWARF 2 frame information.

     A target may return 'UI_TARGET' if it has ABI specified unwind
     tables.  This will suppress generation of the normal debug frame
     unwind information.

 -- Macro: DWARF2_ASM_LINE_DEBUG_INFO
     Define this macro to be a nonzero value if the assembler can
     generate Dwarf 2 line debug info sections.  This will result in
     much more compact line number tables, and hence is desirable if it
     works.

 -- Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS
     True if the '.debug_pubtypes' and '.debug_pubnames' sections should
     be emitted.  These sections are not used on most platforms, and in
     particular GDB does not use them.

 -- Target Hook: bool TARGET_FORCE_AT_COMP_DIR
     True if the 'DW_AT_comp_dir' attribute should be emitted for each
     compilation unit.  This attribute is required for the darwin linker
     to emit debug information.

 -- 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.

 -- 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.

 -- Target Hook: bool TARGET_NO_REGISTER_ALLOCATION
     True if register allocation and the passes following it should not
     be run.  Usually true only for virtual assembler targets.

 -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2)
     A C statement to issue assembly directives that create a difference
     LAB1 minus LAB2, using an integer of the given SIZE.

 -- Macro: ASM_OUTPUT_DWARF_VMS_DELTA (STREAM, SIZE, LABEL1, LABEL2)
     A C statement to issue assembly directives that create a difference
     between the two given labels in system defined units, e.g.
     instruction slots on IA64 VMS, using an integer of the given size.

 -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION)
     A C statement to issue assembly directives that create a
     section-relative reference to the given LABEL, using an integer of
     the given SIZE.  The label is known to be defined in the given
     SECTION.

 -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL)
     A C statement to issue assembly directives that create a
     self-relative reference to the given LABEL, using an integer of the
     given SIZE.

 -- Macro: ASM_OUTPUT_DWARF_DATAREL (STREAM, SIZE, LABEL)
     A C statement to issue assembly directives that create a reference
     to the given LABEL relative to the dbase, using an integer of the
     given SIZE.

 -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL)
     A C statement to issue assembly directives that create a reference
     to the DWARF table identifier LABEL from the current section.  This
     is used on some systems to avoid garbage collecting a DWARF table
     which is referenced by a function.

 -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int
          SIZE, rtx X)
     If defined, this target hook is a function which outputs a
     DTP-relative reference to the given TLS symbol of the specified
     size.

 -- Macro: PUT_SDB_...
     Define these macros to override the assembler syntax for the
     special SDB assembler directives.  See 'sdbout.c' for a list of
     these macros and their arguments.  If the standard syntax is used,
     you need not define them yourself.

 -- Macro: SDB_DELIM
     Some assemblers do not support a semicolon as a delimiter, even
     between SDB assembler directives.  In that case, define this macro
     to be the delimiter to use (usually '\n').  It is not necessary to
     define a new set of 'PUT_SDB_OP' macros if this is the only change
     required.

 -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES
     Define this macro to allow references to unknown structure, union,
     or enumeration tags to be emitted.  Standard COFF does not allow
     handling of unknown references, MIPS ECOFF has support for it.

 -- Macro: SDB_ALLOW_FORWARD_REFERENCES
     Define this macro to allow references to structure, union, or
     enumeration tags that have not yet been seen to be handled.  Some
     assemblers choke if forward tags are used, while some require it.

 -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE)
     A C statement to output SDB debugging information before code for
     line number LINE of the current source file to the stdio stream
     STREAM.  The default is to emit an '.ln' directive.


File: gccint.info,  Node: VMS Debug,  Prev: SDB and DWARF,  Up: Debugging Info

17.21.6 Macros for VMS Debug Format
-----------------------------------

Here are macros for VMS debug format.

 -- Macro: VMS_DEBUGGING_INFO
     Define this macro if GCC should produce debugging output for VMS in
     response to the '-g' option.  The default behavior for VMS is to
     generate minimal debug info for a traceback in the absence of '-g'
     unless explicitly overridden with '-g0'.  This behavior is
     controlled by 'TARGET_OPTION_OPTIMIZATION' and
     'TARGET_OPTION_OVERRIDE'.


File: gccint.info,  Node: Floating Point,  Next: Mode Switching,  Prev: Debugging Info,  Up: Target Macros

17.22 Cross Compilation and Floating Point
==========================================

While all modern machines use twos-complement representation for
integers, there are a variety of representations for floating point
numbers.  This means that in a cross-compiler the representation of
floating point numbers in the compiled program may be different from
that used in the machine doing the compilation.

 Because different representation systems may offer different amounts of
range and precision, all floating point constants must be represented in
the target machine's format.  Therefore, the cross compiler cannot
safely use the host machine's floating point arithmetic; it must emulate
the target's arithmetic.  To ensure consistency, GCC always uses
emulation to work with floating point values, even when the host and
target floating point formats are identical.

 The following macros are provided by 'real.h' for the compiler to use.
All parts of the compiler which generate or optimize floating-point
calculations must use these macros.  They may evaluate their operands
more than once, so operands must not have side effects.

 -- Macro: REAL_VALUE_TYPE
     The C data type to be used to hold a floating point value in the
     target machine's format.  Typically this is a 'struct' containing
     an array of 'HOST_WIDE_INT', but all code should treat it as an
     opaque quantity.

 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X)
     Truncates X to a signed integer, rounding toward zero.

 -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX
          (REAL_VALUE_TYPE X)
     Truncates X to an unsigned integer, rounding toward zero.  If X is
     negative, returns zero.

 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING,
          machine_mode MODE)
     Converts STRING into a floating point number in the target
     machine's representation for mode MODE.  This routine can handle
     both decimal and hexadecimal floating point constants, using the
     syntax defined by the C language for both.

 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X)
     Returns 1 if X is negative (including negative zero), 0 otherwise.

 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X)
     Determines whether X represents infinity (positive or negative).

 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X)
     Determines whether X represents a "NaN" (not-a-number).

 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X)
     Returns the negative of the floating point value X.

 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X)
     Returns the absolute value of X.


File: gccint.info,  Node: Mode Switching,  Next: Target Attributes,  Prev: Floating Point,  Up: Target Macros

17.23 Mode Switching Instructions
=================================

The following macros control mode switching optimizations:

 -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY)
     Define this macro if the port needs extra instructions inserted for
     mode switching in an optimizing compilation.

     For an example, the SH4 can perform both single and double
     precision floating point operations, but to perform a single
     precision operation, the FPSCR PR bit has to be cleared, while for
     a double precision operation, this bit has to be set.  Changing the
     PR bit requires a general purpose register as a scratch register,
     hence these FPSCR sets have to be inserted before reload, i.e. you
     can't put this into instruction emitting or
     'TARGET_MACHINE_DEPENDENT_REORG'.

     You can have multiple entities that are mode-switched, and select
     at run time which entities actually need it.
     'OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY that
     needs mode-switching.  If you define this macro, you also have to
     define 'NUM_MODES_FOR_MODE_SWITCHING', 'TARGET_MODE_NEEDED',
     'TARGET_MODE_PRIORITY' and 'TARGET_MODE_EMIT'.
     'TARGET_MODE_AFTER', 'TARGET_MODE_ENTRY', and 'TARGET_MODE_EXIT'
     are optional.

 -- Macro: NUM_MODES_FOR_MODE_SWITCHING
     If you define 'OPTIMIZE_MODE_SWITCHING', you have to define this as
     initializer for an array of integers.  Each initializer element N
     refers to an entity that needs mode switching, and specifies the
     number of different modes that might need to be set for this
     entity.  The position of the initializer in the
     initializer--starting counting at zero--determines the integer that
     is used to refer to the mode-switched entity in question.  In
     macros that take mode arguments / yield a mode result, modes are
     represented as numbers 0 ... N - 1.  N is used to specify that no
     mode switch is needed / supplied.

 -- Target Hook: void TARGET_MODE_EMIT (int ENTITY, int MODE, int
          PREV_MODE, HARD_REG_SET REGS_LIVE)
     Generate one or more insns to set ENTITY to MODE.  HARD_REG_LIVE is
     the set of hard registers live at the point where the insn(s) are
     to be inserted.  PREV_MOXDE indicates the mode to switch from.
     Sets of a lower numbered entity will be emitted before sets of a
     higher numbered entity to a mode of the same or lower priority.

 -- Target Hook: int TARGET_MODE_NEEDED (int ENTITY, rtx_insn *INSN)
     ENTITY is an integer specifying a mode-switched entity.  If
     'OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
     return an integer value not larger than the corresponding element
     in 'NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
     must be switched into prior to the execution of INSN.

 -- Target Hook: int TARGET_MODE_AFTER (int ENTITY, int MODE, rtx_insn
          *INSN)
     ENTITY is an integer specifying a mode-switched entity.  If this
     macro is defined, it is evaluated for every INSN during mode
     switching.  It determines the mode that an insn results in (if
     different from the incoming mode).

 -- Target Hook: int TARGET_MODE_ENTRY (int ENTITY)
     If this macro is defined, it is evaluated for every ENTITY that
     needs mode switching.  It should evaluate to an integer, which is a
     mode that ENTITY is assumed to be switched to at function entry.
     If 'TARGET_MODE_ENTRY' is defined then 'TARGET_MODE_EXIT' must be
     defined.

 -- Target Hook: int TARGET_MODE_EXIT (int ENTITY)
     If this macro is defined, it is evaluated for every ENTITY that
     needs mode switching.  It should evaluate to an integer, which is a
     mode that ENTITY is assumed to be switched to at function exit.  If
     'TARGET_MODE_EXIT' is defined then 'TARGET_MODE_ENTRY' must be
     defined.

 -- Target Hook: int TARGET_MODE_PRIORITY (int ENTITY, int N)
     This macro specifies the order in which modes for ENTITY are
     processed.  0 is the highest priority,
     'NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest.  The value
     of the macro should be an integer designating a mode for ENTITY.
     For any fixed ENTITY, 'mode_priority' (ENTITY, N) shall be a
     bijection in 0 ... 'num_modes_for_mode_switching[ENTITY] - 1'.


File: gccint.info,  Node: Target Attributes,  Next: Emulated TLS,  Prev: Mode Switching,  Up: Target Macros

17.24 Defining target-specific uses of '__attribute__'
======================================================

Target-specific attributes may be defined for functions, data and types.
These are described using the following target hooks; they also need to
be documented in 'extend.texi'.

 -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE
     If defined, this target hook points to an array of 'struct
     attribute_spec' (defined in 'tree-core.h') specifying the machine
     specific attributes for this target and some of the restrictions on
     the entities to which these attributes are applied and the
     arguments they take.

 -- Target Hook: bool TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P (const_tree
          NAME)
     If defined, this target hook is a function which returns true if
     the machine-specific attribute named NAME expects an identifier
     given as its first argument to be passed on as a plain identifier,
     not subjected to name lookup.  If this is not defined, the default
     is false for all machine-specific attributes.

 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1,
          const_tree TYPE2)
     If defined, this target hook is a function which returns zero if
     the attributes on TYPE1 and TYPE2 are incompatible, one if they are
     compatible, and two if they are nearly compatible (which causes a
     warning to be generated).  If this is not defined, machine-specific
     attributes are supposed always to be compatible.

 -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE)
     If defined, this target hook is a function which assigns default
     attributes to the newly defined TYPE.

 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree
          TYPE2)
     Define this target hook if the merging of type attributes needs
     special handling.  If defined, the result is a list of the combined
     'TYPE_ATTRIBUTES' of TYPE1 and TYPE2.  It is assumed that
     'comptypes' has already been called and returned 1.  This function
     may call 'merge_attributes' to handle machine-independent merging.

 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
          NEWDECL)
     Define this target hook if the merging of decl attributes needs
     special handling.  If defined, the result is a list of the combined
     'DECL_ATTRIBUTES' of OLDDECL and NEWDECL.  NEWDECL is a duplicate
     declaration of OLDDECL.  Examples of when this is needed are when
     one attribute overrides another, or when an attribute is nullified
     by a subsequent definition.  This function may call
     'merge_attributes' to handle machine-independent merging.

     If the only target-specific handling you require is 'dllimport' for
     Microsoft Windows targets, you should define the macro
     'TARGET_DLLIMPORT_DECL_ATTRIBUTES' to '1'.  The compiler will then
     define a function called 'merge_dllimport_decl_attributes' which
     can then be defined as the expansion of
     'TARGET_MERGE_DECL_ATTRIBUTES'.  You can also add
     'handle_dll_attribute' in the attribute table for your port to
     perform initial processing of the 'dllimport' and 'dllexport'
     attributes.  This is done in 'i386/cygwin.h' and 'i386/i386.c', for
     example.

 -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree
          DECL)
     DECL is a variable or function with '__attribute__((dllimport))'
     specified.  Use this hook if the target needs to add extra
     validation checks to 'handle_dll_attribute'.

 -- Macro: TARGET_DECLSPEC
     Define this macro to a nonzero value if you want to treat
     '__declspec(X)' as equivalent to '__attribute((X))'.  By default,
     this behavior is enabled only for targets that define
     'TARGET_DLLIMPORT_DECL_ATTRIBUTES'.  The current implementation of
     '__declspec' is via a built-in macro, but you should not rely on
     this implementation detail.

 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
          *ATTR_PTR)
     Define this target hook if you want to be able to add attributes to
     a decl when it is being created.  This is normally useful for back
     ends which wish to implement a pragma by using the attributes which
     correspond to the pragma's effect.  The NODE argument is the decl
     which is being created.  The ATTR_PTR argument is a pointer to the
     attribute list for this decl.  The list itself should not be
     modified, since it may be shared with other decls, but attributes
     may be chained on the head of the list and '*ATTR_PTR' modified to
     point to the new attributes, or a copy of the list may be made if
     further changes are needed.

 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree
          FNDECL)
     This target hook returns 'true' if it is OK to inline FNDECL into
     the current function, despite its having target-specific
     attributes, 'false' otherwise.  By default, if a function has a
     target specific attribute attached to it, it will not be inlined.

 -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL, tree
          NAME, tree ARGS, int FLAGS)
     This hook is called to parse 'attribute(target("..."))', which
     allows setting target-specific options on individual functions.
     These function-specific options may differ from the options
     specified on the command line.  The hook should return 'true' if
     the options are valid.

     The hook should set the 'DECL_FUNCTION_SPECIFIC_TARGET' field in
     the function declaration to hold a pointer to a target-specific
     'struct cl_target_option' structure.

 -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR,
          struct gcc_options *OPTS)
     This hook is called to save any additional target-specific
     information in the 'struct cl_target_option' structure for
     function-specific options from the 'struct gcc_options' structure.
     *Note Option file format::.

 -- Target Hook: void TARGET_OPTION_RESTORE (struct gcc_options *OPTS,
          struct cl_target_option *PTR)
     This hook is called to restore any additional target-specific
     information in the 'struct cl_target_option' structure for
     function-specific options to the 'struct gcc_options' structure.

 -- Target Hook: void TARGET_OPTION_POST_STREAM_IN (struct
          cl_target_option *PTR)
     This hook is called to update target-specific information in the
     'struct cl_target_option' structure after it is streamed in from
     LTO bytecode.

 -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT,
          struct cl_target_option *PTR)
     This hook is called to print any additional target-specific
     information in the 'struct cl_target_option' structure for
     function-specific options.

 -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (tree ARGS, tree
          POP_TARGET)
     This target hook parses the options for '#pragma GCC target', which
     sets the target-specific options for functions that occur later in
     the input stream.  The options accepted should be the same as those
     handled by the 'TARGET_OPTION_VALID_ATTRIBUTE_P' hook.

 -- Target Hook: void TARGET_OPTION_OVERRIDE (void)
     Sometimes certain combinations of command options do not make sense
     on a particular target machine.  You can override the hook
     'TARGET_OPTION_OVERRIDE' to take account of this.  This hooks is
     called once just after all the command options have been parsed.

     Don't use this hook to turn on various extra optimizations for
     '-O'.  That is what 'TARGET_OPTION_OPTIMIZATION' is for.

     If you need to do something whenever the optimization level is
     changed via the optimize attribute or pragma, see
     'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'

 -- Target Hook: bool TARGET_OPTION_FUNCTION_VERSIONS (tree DECL1, tree
          DECL2)
     This target hook returns 'true' if DECL1 and DECL2 are versions of
     the same function.  DECL1 and DECL2 are function versions if and
     only if they have the same function signature and different target
     specific attributes, that is, they are compiled for different
     target machines.

 -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE)
     This target hook returns 'false' if the CALLER function cannot
     inline CALLEE, based on target specific information.  By default,
     inlining is not allowed if the callee function has function
     specific target options and the caller does not use the same
     options.

 -- Target Hook: void TARGET_RELAYOUT_FUNCTION (tree FNDECL)
     This target hook fixes function FNDECL after attributes are
     processed.  Default does nothing.  On ARM, the default function's
     alignment is updated with the attribute target.


File: gccint.info,  Node: Emulated TLS,  Next: MIPS Coprocessors,  Prev: Target Attributes,  Up: Target Macros

17.25 Emulating TLS
===================

For targets whose psABI does not provide Thread Local Storage via
specific relocations and instruction sequences, an emulation layer is
used.  A set of target hooks allows this emulation layer to be
configured for the requirements of a particular target.  For instance
the psABI may in fact specify TLS support in terms of an emulation
layer.

 The emulation layer works by creating a control object for every TLS
object.  To access the TLS object, a lookup function is provided which,
when given the address of the control object, will return the address of
the current thread's instance of the TLS object.

 -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS
     Contains the name of the helper function that uses a TLS control
     object to locate a TLS instance.  The default causes libgcc's
     emulated TLS helper function to be used.

 -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON
     Contains the name of the helper function that should be used at
     program startup to register TLS objects that are implicitly
     initialized to zero.  If this is 'NULL', all TLS objects will have
     explicit initializers.  The default causes libgcc's emulated TLS
     registration function to be used.

 -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION
     Contains the name of the section in which TLS control variables
     should be placed.  The default of 'NULL' allows these to be placed
     in any section.

 -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION
     Contains the name of the section in which TLS initializers should
     be placed.  The default of 'NULL' allows these to be placed in any
     section.

 -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX
     Contains the prefix to be prepended to TLS control variable names.
     The default of 'NULL' uses a target-specific prefix.

 -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX
     Contains the prefix to be prepended to TLS initializer objects.
     The default of 'NULL' uses a target-specific prefix.

 -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME)
     Specifies a function that generates the FIELD_DECLs for a TLS
     control object type.  TYPE is the RECORD_TYPE the fields are for
     and NAME should be filled with the structure tag, if the default of
     '__emutls_object' is unsuitable.  The default creates a type
     suitable for libgcc's emulated TLS function.

 -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree
          TMPL_ADDR)
     Specifies a function that generates the CONSTRUCTOR to initialize a
     TLS control object.  VAR is the TLS control object, DECL is the TLS
     object and TMPL_ADDR is the address of the initializer.  The
     default initializes libgcc's emulated TLS control object.

 -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED
     Specifies whether the alignment of TLS control variable objects is
     fixed and should not be increased as some backends may do to
     optimize single objects.  The default is false.

 -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS
     Specifies whether a DWARF 'DW_OP_form_tls_address' location
     descriptor may be used to describe emulated TLS control objects.


File: gccint.info,  Node: MIPS Coprocessors,  Next: PCH Target,  Prev: Emulated TLS,  Up: Target Macros

17.26 Defining coprocessor specifics for MIPS targets.
======================================================

The MIPS specification allows MIPS implementations to have as many as 4
coprocessors, each with as many as 32 private registers.  GCC supports
accessing these registers and transferring values between the registers
and memory using asm-ized variables.  For example:

       register unsigned int cp0count asm ("c0r1");
       unsigned int d;

       d = cp0count + 3;

 ("c0r1" is the default name of register 1 in coprocessor 0; alternate
names may be added as described below, or the default names may be
overridden entirely in 'SUBTARGET_CONDITIONAL_REGISTER_USAGE'.)

 Coprocessor registers are assumed to be epilogue-used; sets to them
will be preserved even if it does not appear that the register is used
again later in the function.

 Another note: according to the MIPS spec, coprocessor 1 (if present) is
the FPU.  One accesses COP1 registers through standard mips
floating-point support; they are not included in this mechanism.


File: gccint.info,  Node: PCH Target,  Next: C++ ABI,  Prev: MIPS Coprocessors,  Up: Target Macros

17.27 Parameters for Precompiled Header Validity Checking
=========================================================

 -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ)
     This hook returns a pointer to the data needed by
     'TARGET_PCH_VALID_P' and sets '*SZ' to the size of the data in
     bytes.

 -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA,
          size_t SZ)
     This hook checks whether the options used to create a PCH file are
     compatible with the current settings.  It returns 'NULL' if so and
     a suitable error message if not.  Error messages will be presented
     to the user and must be localized using '_(MSG)'.

     DATA is the data that was returned by 'TARGET_GET_PCH_VALIDITY'
     when the PCH file was created and SZ is the size of that data in
     bytes.  It's safe to assume that the data was created by the same
     version of the compiler, so no format checking is needed.

     The default definition of 'default_pch_valid_p' should be suitable
     for most targets.

 -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int
          PCH_FLAGS)
     If this hook is nonnull, the default implementation of
     'TARGET_PCH_VALID_P' will use it to check for compatible values of
     'target_flags'.  PCH_FLAGS specifies the value that 'target_flags'
     had when the PCH file was created.  The return value is the same as
     for 'TARGET_PCH_VALID_P'.

 -- Target Hook: void TARGET_PREPARE_PCH_SAVE (void)
     Called before writing out a PCH file.  If the target has some
     garbage-collected data that needs to be in a particular state on
     PCH loads, it can use this hook to enforce that state.  Very few
     targets need to do anything here.


File: gccint.info,  Node: C++ ABI,  Next: Named Address Spaces,  Prev: PCH Target,  Up: Target Macros

17.28 C++ ABI parameters
========================

 -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void)
     Define this hook to override the integer type used for guard
     variables.  These are used to implement one-time construction of
     static objects.  The default is long_long_integer_type_node.

 -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void)
     This hook determines how guard variables are used.  It should
     return 'false' (the default) if the first byte should be used.  A
     return value of 'true' indicates that only the least significant
     bit should be used.

 -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE)
     This hook returns the size of the cookie to use when allocating an
     array whose elements have the indicated TYPE.  Assumes that it is
     already known that a cookie is needed.  The default is 'max(sizeof
     (size_t), alignof(type))', as defined in section 2.7 of the
     IA64/Generic C++ ABI.

 -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void)
     This hook should return 'true' if the element size should be stored
     in array cookies.  The default is to return 'false'.

 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int
          IMPORT_EXPORT)
     If defined by a backend this hook allows the decision made to
     export class TYPE to be overruled.  Upon entry IMPORT_EXPORT will
     contain 1 if the class is going to be exported, -1 if it is going
     to be imported and 0 otherwise.  This function should return the
     modified value and perform any other actions necessary to support
     the backend's targeted operating system.

 -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void)
     This hook should return 'true' if constructors and destructors
     return the address of the object created/destroyed.  The default is
     to return 'false'.

 -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)
     This hook returns true if the key method for a class (i.e., the
     method which, if defined in the current translation unit, causes
     the virtual table to be emitted) may be an inline function.  Under
     the standard Itanium C++ ABI the key method may be an inline
     function so long as the function is not declared inline in the
     class definition.  Under some variants of the ABI, an inline
     function can never be the key method.  The default is to return
     'true'.

 -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree
          DECL)
     DECL is a virtual table, virtual table table, typeinfo object, or
     other similar implicit class data object that will be emitted with
     external linkage in this translation unit.  No ELF visibility has
     been explicitly specified.  If the target needs to specify a
     visibility other than that of the containing class, use this hook
     to set 'DECL_VISIBILITY' and 'DECL_VISIBILITY_SPECIFIED'.

 -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void)
     This hook returns true (the default) if virtual tables and other
     similar implicit class data objects are always COMDAT if they have
     external linkage.  If this hook returns false, then class data for
     classes whose virtual table will be emitted in only one translation
     unit will not be COMDAT.

 -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void)
     This hook returns true (the default) if the RTTI information for
     the basic types which is defined in the C++ runtime should always
     be COMDAT, false if it should not be COMDAT.

 -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void)
     This hook returns true if '__aeabi_atexit' (as defined by the ARM
     EABI) should be used to register static destructors when
     '-fuse-cxa-atexit' is in effect.  The default is to return false to
     use '__cxa_atexit'.

 -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void)
     This hook returns true if the target 'atexit' function can be used
     in the same manner as '__cxa_atexit' to register C++ static
     destructors.  This requires that 'atexit'-registered functions in
     shared libraries are run in the correct order when the libraries
     are unloaded.  The default is to return false.

 -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE)
     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).

 -- Target Hook: tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree DECL)
     Return target-specific mangling context of DECL or 'NULL_TREE'.


File: gccint.info,  Node: Named Address Spaces,  Next: Misc,  Prev: C++ ABI,  Up: Target Macros

17.29 Adding support for named address spaces
=============================================

The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards
committee, 'Programming Languages - C - Extensions to support embedded
processors', specifies a syntax for embedded processors to specify
alternate address spaces.  You can configure a GCC port to support
section 5.1 of the draft report to add support for address spaces other
than the default address space.  These address spaces are new keywords
that are similar to the 'volatile' and 'const' type attributes.

 Pointers to named address spaces can have a different size than
pointers to the generic address space.

 For example, the SPU port uses the '__ea' address space to refer to
memory in the host processor, rather than memory local to the SPU
processor.  Access to memory in the '__ea' address space involves
issuing DMA operations to move data between the host processor and the
local processor memory address space.  Pointers in the '__ea' address
space are either 32 bits or 64 bits based on the '-mea32' or '-mea64'
switches (native SPU pointers are always 32 bits).

 Internally, address spaces are represented as a small integer in the
range 0 to 15 with address space 0 being reserved for the generic
address space.

 To register a named address space qualifier keyword with the C front
end, the target may call the 'c_register_addr_space' routine.  For
example, the SPU port uses the following to declare '__ea' as the
keyword for named address space #1:
     #define ADDR_SPACE_EA 1
     c_register_addr_space ("__ea", ADDR_SPACE_EA);

 -- Target Hook: machine_mode TARGET_ADDR_SPACE_POINTER_MODE
          (addr_space_t ADDRESS_SPACE)
     Define this to return the machine mode to use for pointers to
     ADDRESS_SPACE if the target supports named address spaces.  The
     default version of this hook returns 'ptr_mode'.

 -- Target Hook: machine_mode TARGET_ADDR_SPACE_ADDRESS_MODE
          (addr_space_t ADDRESS_SPACE)
     Define this to return the machine mode to use for addresses in
     ADDRESS_SPACE if the target supports named address spaces.  The
     default version of this hook returns 'Pmode'.

 -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (machine_mode
          MODE, addr_space_t AS)
     Define this to return nonzero if the port can handle pointers with
     machine mode MODE to address space AS.  This target hook is the
     same as the 'TARGET_VALID_POINTER_MODE' target hook, except that it
     includes explicit named address space support.  The default version
     of this hook returns true for the modes returned by either the
     'TARGET_ADDR_SPACE_POINTER_MODE' or
     'TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given address
     space.

 -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P
          (machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS)
     Define this to return true if EXP is a valid address for mode MODE
     in the named address space AS.  The STRICT parameter says whether
     strict addressing is in effect after reload has finished.  This
     target hook is the same as the 'TARGET_LEGITIMATE_ADDRESS_P' target
     hook, except that it includes explicit named address space support.

 -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx
          OLDX, machine_mode MODE, addr_space_t AS)
     Define this to modify an invalid address X to be a valid address
     with mode MODE in the named address space AS.  This target hook is
     the same as the 'TARGET_LEGITIMIZE_ADDRESS' target hook, except
     that it includes explicit named address space support.

 -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t SUBSET,
          addr_space_t SUPERSET)
     Define this to return whether the SUBSET named address space is
     contained within the SUPERSET named address space.  Pointers to a
     named address space that is a subset of another named address space
     will be converted automatically without a cast if used together in
     arithmetic operations.  Pointers to a superset address space can be
     converted to pointers to a subset address space via explicit casts.

 -- Target Hook: bool TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID (addr_space_t
          AS)
     Define this to modify the default handling of address 0 for the
     address space.  Return true if 0 should be considered a valid
     address.

 -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE,
          tree TO_TYPE)
     Define this to convert the pointer expression represented by the
     RTL OP with type FROM_TYPE that points to a named address space to
     a new pointer expression with type TO_TYPE that points to a
     different named address space.  When this hook it called, it is
     guaranteed that one of the two address spaces is a subset of the
     other, as determined by the 'TARGET_ADDR_SPACE_SUBSET_P' target
     hook.

 -- Target Hook: int TARGET_ADDR_SPACE_DEBUG (addr_space_t AS)
     Define this to define how the address space is encoded in dwarf.
     The result is the value to be used with 'DW_AT_address_class'.


File: gccint.info,  Node: Misc,  Prev: Named Address Spaces,  Up: Target Macros

17.30 Miscellaneous Parameters
==============================

Here are several miscellaneous parameters.

 -- Macro: HAS_LONG_COND_BRANCH
     Define this boolean macro to indicate whether or not your
     architecture has conditional branches that can span all of memory.
     It is used in conjunction with an optimization that partitions hot
     and cold basic blocks into separate sections of the executable.  If
     this macro is set to false, gcc will convert any conditional
     branches that attempt to cross between sections into unconditional
     branches or indirect jumps.

 -- Macro: HAS_LONG_UNCOND_BRANCH
     Define this boolean macro to indicate whether or not your
     architecture has unconditional branches that can span all of
     memory.  It is used in conjunction with an optimization that
     partitions hot and cold basic blocks into separate sections of the
     executable.  If this macro is set to false, gcc will convert any
     unconditional branches that attempt to cross between sections into
     indirect jumps.

 -- Macro: CASE_VECTOR_MODE
     An alias for a machine mode name.  This is the machine mode that
     elements of a jump-table should have.

 -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY)
     Optional: return the preferred mode for an 'addr_diff_vec' when the
     minimum and maximum offset are known.  If you define this, it
     enables extra code in branch shortening to deal with
     'addr_diff_vec'.  To make this work, you also have to define
     'INSN_ALIGN' and make the alignment for 'addr_diff_vec' explicit.
     The BODY argument is provided so that the offset_unsigned and scale
     flags can be updated.

 -- Macro: CASE_VECTOR_PC_RELATIVE
     Define this macro to be a C expression to indicate when jump-tables
     should contain relative addresses.  You need not define this macro
     if jump-tables never contain relative addresses, or jump-tables
     should contain relative addresses only when '-fPIC' or '-fPIC' is
     in effect.

 -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void)
     This function return the smallest number of different values for
     which it is best to use a jump-table instead of a tree of
     conditional branches.  The default is four for machines with a
     'casesi' instruction and five otherwise.  This is best for most
     machines.

 -- Macro: WORD_REGISTER_OPERATIONS
     Define this macro to 1 if operations between registers with
     integral mode smaller than a word are always performed on the
     entire register.  Most RISC machines have this property and most
     CISC machines do not.

 -- Macro: LOAD_EXTEND_OP (MEM_MODE)
     Define this macro to be a C expression indicating when insns that
     read memory in MEM_MODE, an integral mode narrower than a word, set
     the bits outside of MEM_MODE to be either the sign-extension or the
     zero-extension of the data read.  Return 'SIGN_EXTEND' for values
     of MEM_MODE for which the insn sign-extends, 'ZERO_EXTEND' for
     which it zero-extends, and 'UNKNOWN' for other modes.

     This macro is not called with MEM_MODE non-integral or with a width
     greater than or equal to 'BITS_PER_WORD', so you may return any
     value in this case.  Do not define this macro if it would always
     return 'UNKNOWN'.  On machines where this macro is defined, you
     will normally define it as the constant 'SIGN_EXTEND' or
     'ZERO_EXTEND'.

     You may return a non-'UNKNOWN' value even if for some hard
     registers the sign extension is not performed, if for the
     'REGNO_REG_CLASS' of these hard registers
     'CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is
     MEM_MODE and the TO mode is any integral mode larger than this but
     not larger than 'word_mode'.

     You must return 'UNKNOWN' if for some hard registers that allow
     this mode, 'CANNOT_CHANGE_MODE_CLASS' says that they cannot change
     to 'word_mode', but that they can change to another integral mode
     that is larger then MEM_MODE but still smaller than 'word_mode'.

 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND
     Define this macro to 1 if loading short immediate values into
     registers sign extends.

 -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL
          (machine_mode MODE)
     When '-ffast-math' is in effect, GCC tries to optimize divisions by
     the same divisor, by turning them into multiplications by the
     reciprocal.  This target hook specifies the minimum number of
     divisions that should be there for GCC to perform the optimization
     for a variable of mode MODE.  The default implementation returns 3
     if the machine has an instruction for the division, and 2 if it
     does not.

 -- Macro: MOVE_MAX
     The maximum number of bytes that a single instruction can move
     quickly between memory and registers or between two memory
     locations.

 -- Macro: MAX_MOVE_MAX
     The maximum number of bytes that a single instruction can move
     quickly between memory and registers or between two memory
     locations.  If this is undefined, the default is 'MOVE_MAX'.
     Otherwise, it is the constant value that is the largest value that
     'MOVE_MAX' can have at run-time.

 -- Macro: SHIFT_COUNT_TRUNCATED
     A C expression that is nonzero if on this machine the number of
     bits actually used for the count of a shift operation is equal to
     the number of bits needed to represent the size of the object being
     shifted.  When this macro is nonzero, the compiler will assume that
     it is safe to omit a sign-extend, zero-extend, and certain bitwise
     'and' instructions that truncates the count of a shift operation.
     On machines that have instructions that act on bit-fields at
     variable positions, which may include 'bit test' instructions, a
     nonzero 'SHIFT_COUNT_TRUNCATED' also enables deletion of
     truncations of the values that serve as arguments to bit-field
     instructions.

     If both types of instructions truncate the count (for shifts) and
     position (for bit-field operations), or if no variable-position
     bit-field instructions exist, you should define this macro.

     However, on some machines, such as the 80386 and the 680x0,
     truncation only applies to shift operations and not the (real or
     pretended) bit-field operations.  Define 'SHIFT_COUNT_TRUNCATED' to
     be zero on such machines.  Instead, add patterns to the 'md' file
     that include the implied truncation of the shift instructions.

     You need not define this macro if it would always have the value of
     zero.

 -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK
          (machine_mode MODE)
     This function describes how the standard shift patterns for MODE
     deal with shifts by negative amounts or by more than the width of
     the mode.  *Note shift patterns::.

     On many machines, the shift patterns will apply a mask M to the
     shift count, meaning that a fixed-width shift of X by Y is
     equivalent to an arbitrary-width shift of X by Y & M.  If this is
     true for mode MODE, the function should return M, otherwise it
     should return 0.  A return value of 0 indicates that no particular
     behavior is guaranteed.

     Note that, unlike 'SHIFT_COUNT_TRUNCATED', this function does _not_
     apply to general shift rtxes; it applies only to instructions that
     are generated by the named shift patterns.

     The default implementation of this function returns
     'GET_MODE_BITSIZE (MODE) - 1' if 'SHIFT_COUNT_TRUNCATED' and 0
     otherwise.  This definition is always safe, but if
     'SHIFT_COUNT_TRUNCATED' is false, and some shift patterns
     nevertheless truncate the shift count, you may get better code by
     overriding it.

 -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)
     A C expression which is nonzero if on this machine it is safe to
     "convert" an integer of INPREC bits to one of OUTPREC bits (where
     OUTPREC is smaller than INPREC) by merely operating on it as if it
     had only OUTPREC bits.

     On many machines, this expression can be 1.

     When 'TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for
     modes for which 'MODES_TIEABLE_P' is 0, suboptimal code can result.
     If this is the case, making 'TRULY_NOOP_TRUNCATION' return 0 in
     such cases may improve things.

 -- Target Hook: int TARGET_MODE_REP_EXTENDED (machine_mode MODE,
          machine_mode REP_MODE)
     The representation of an integral mode can be such that the values
     are always extended to a wider integral mode.  Return 'SIGN_EXTEND'
     if values of MODE are represented in sign-extended form to
     REP_MODE.  Return 'UNKNOWN' otherwise.  (Currently, none of the
     targets use zero-extended representation this way so unlike
     'LOAD_EXTEND_OP', 'TARGET_MODE_REP_EXTENDED' is expected to return
     either 'SIGN_EXTEND' or 'UNKNOWN'.  Also no target extends MODE to
     REP_MODE so that REP_MODE is not the next widest integral mode and
     currently we take advantage of this fact.)

     Similarly to 'LOAD_EXTEND_OP' you may return a non-'UNKNOWN' value
     even if the extension is not performed on certain hard registers as
     long as for the 'REGNO_REG_CLASS' of these hard registers
     'CANNOT_CHANGE_MODE_CLASS' returns nonzero.

     Note that 'TARGET_MODE_REP_EXTENDED' and 'LOAD_EXTEND_OP' describe
     two related properties.  If you define 'TARGET_MODE_REP_EXTENDED
     (mode, word_mode)' you probably also want to define 'LOAD_EXTEND_OP
     (mode)' to return the same type of extension.

     In order to enforce the representation of 'mode',
     'TRULY_NOOP_TRUNCATION' should return false when truncating to
     'mode'.

 -- Macro: STORE_FLAG_VALUE
     A C expression describing the value returned by a comparison
     operator with an integral mode and stored by a store-flag
     instruction ('cstoreMODE4') when the condition is true.  This
     description must apply to _all_ the 'cstoreMODE4' patterns and all
     the comparison operators whose results have a 'MODE_INT' mode.

     A value of 1 or -1 means that the instruction implementing the
     comparison operator returns exactly 1 or -1 when the comparison is
     true and 0 when the comparison is false.  Otherwise, the value
     indicates which bits of the result are guaranteed to be 1 when the
     comparison is true.  This value is interpreted in the mode of the
     comparison operation, which is given by the mode of the first
     operand in the 'cstoreMODE4' pattern.  Either the low bit or the
     sign bit of 'STORE_FLAG_VALUE' be on.  Presently, only those bits
     are used by the compiler.

     If 'STORE_FLAG_VALUE' is neither 1 or -1, the compiler will
     generate code that depends only on the specified bits.  It can also
     replace comparison operators with equivalent operations if they
     cause the required bits to be set, even if the remaining bits are
     undefined.  For example, on a machine whose comparison operators
     return an 'SImode' value and where 'STORE_FLAG_VALUE' is defined as
     '0x80000000', saying that just the sign bit is relevant, the
     expression

          (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))

     can be converted to

          (ashift:SI X (const_int N))

     where N is the appropriate shift count to move the bit being tested
     into the sign bit.

     There is no way to describe a machine that always sets the
     low-order bit for a true value, but does not guarantee the value of
     any other bits, but we do not know of any machine that has such an
     instruction.  If you are trying to port GCC to such a machine,
     include an instruction to perform a logical-and of the result with
     1 in the pattern for the comparison operators and let us know at
     <gcc@gcc.gnu.org>.

     Often, a machine will have multiple instructions that obtain a
     value from a comparison (or the condition codes).  Here are rules
     to guide the choice of value for 'STORE_FLAG_VALUE', and hence the
     instructions to be used:

        * Use the shortest sequence that yields a valid definition for
          'STORE_FLAG_VALUE'.  It is more efficient for the compiler to
          "normalize" the value (convert it to, e.g., 1 or 0) than for
          the comparison operators to do so because there may be
          opportunities to combine the normalization with other
          operations.

        * For equal-length sequences, use a value of 1 or -1, with -1
          being slightly preferred on machines with expensive jumps and
          1 preferred on other machines.

        * As a second choice, choose a value of '0x80000001' if
          instructions exist that set both the sign and low-order bits
          but do not define the others.

        * Otherwise, use a value of '0x80000000'.

     Many machines can produce both the value chosen for
     'STORE_FLAG_VALUE' and its negation in the same number of
     instructions.  On those machines, you should also define a pattern
     for those cases, e.g., one matching

          (set A (neg:M (ne:M B C)))

     Some machines can also perform 'and' or 'plus' operations on
     condition code values with less instructions than the corresponding
     'cstoreMODE4' insn followed by 'and' or 'plus'.  On those machines,
     define the appropriate patterns.  Use the names 'incscc' and
     'decscc', respectively, for the patterns which perform 'plus' or
     'minus' operations on condition code values.  See 'rs6000.md' for
     some examples.  The GNU Superoptimizer can be used to find such
     instruction sequences on other machines.

     If this macro is not defined, the default value, 1, is used.  You
     need not define 'STORE_FLAG_VALUE' if the machine has no store-flag
     instructions, or if the value generated by these instructions is 1.

 -- Macro: FLOAT_STORE_FLAG_VALUE (MODE)
     A C expression that gives a nonzero 'REAL_VALUE_TYPE' value that is
     returned when comparison operators with floating-point results are
     true.  Define this macro on machines that have comparison
     operations that return floating-point values.  If there are no such
     operations, do not define this macro.

 -- Macro: VECTOR_STORE_FLAG_VALUE (MODE)
     A C expression that gives a rtx representing the nonzero true
     element for vector comparisons.  The returned rtx should be valid
     for the inner mode of MODE which is guaranteed to be a vector mode.
     Define this macro on machines that have vector comparison
     operations that return a vector result.  If there are no such
     operations, do not define this macro.  Typically, this macro is
     defined as 'const1_rtx' or 'constm1_rtx'.  This macro may return
     'NULL_RTX' to prevent the compiler optimizing such vector
     comparison operations for the given mode.

 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
     A C expression that indicates whether the architecture defines a
     value for 'clz' or 'ctz' with a zero operand.  A result of '0'
     indicates the value is undefined.  If the value is defined for only
     the RTL expression, the macro should evaluate to '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 '2'.  In the cases where the value is
     defined, VALUE should be set to this value.

     If this macro is not defined, the value of 'clz' or 'ctz' at zero
     is assumed to be undefined.

     This macro must be defined if the target's expansion for 'ffs'
     relies on a particular value to get correct results.  Otherwise it
     is not necessary, though it may be used to optimize some corner
     cases, and to provide a default expansion for the 'ffs' optab.

     Note that regardless of this macro the "definedness" of 'clz' and
     'ctz' at zero do _not_ extend to the builtin functions visible to
     the user.  Thus one may be free to adjust the value at will to
     match the target expansion of these operations without fear of
     breaking the API.

 -- Macro: Pmode
     An alias for the machine mode for pointers.  On most machines,
     define this to be the integer mode corresponding to the width of a
     hardware pointer; 'SImode' on 32-bit machine or 'DImode' on 64-bit
     machines.  On some machines you must define this to be one of the
     partial integer modes, such as 'PSImode'.

     The width of 'Pmode' must be at least as large as the value of
     'POINTER_SIZE'.  If it is not equal, you must define the macro
     'POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to
     'Pmode'.

 -- Macro: FUNCTION_MODE
     An alias for the machine mode used for memory references to
     functions being called, in 'call' RTL expressions.  On most CISC
     machines, where an instruction can begin at any byte address, this
     should be '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
     'SImode' or 'HImode'.

 -- Macro: STDC_0_IN_SYSTEM_HEADERS
     In normal operation, the preprocessor expands '__STDC__' to the
     constant 1, to signify that GCC conforms to ISO Standard C.  On
     some hosts, like Solaris, the system compiler uses a different
     convention, where '__STDC__' is normally 0, but is 1 if the user
     specifies strict conformance to the C Standard.

     Defining 'STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host
     convention when processing system header files, but when processing
     user files '__STDC__' will always expand to 1.

 -- C Target Hook: const char * TARGET_C_PREINCLUDE (void)
     Define this hook to return the name of a header file to be included
     at the start of all compilations, as if it had been included with
     '#include <FILE>'.  If this hook returns 'NULL', or is not defined,
     or the header is not found, or if the user specifies
     '-ffreestanding' or '-nostdinc', no header is included.

     This hook can be used together with a header provided by the system
     C library to implement ISO C requirements for certain macros to be
     predefined that describe properties of the whole implementation
     rather than just the compiler.

 -- C Target Hook: bool TARGET_CXX_IMPLICIT_EXTERN_C (const char*)
     Define this hook to add target-specific C++ implicit extern C
     functions.  If this function returns true for the name of a
     file-scope function, that function implicitly gets extern "C"
     linkage rather than whatever language linkage the declaration would
     normally have.  An example of such function is WinMain on Win32
     targets.

 -- Macro: NO_IMPLICIT_EXTERN_C
     Define this macro if the system header files support C++ as well as
     C.  This macro inhibits the usual method of using system header
     files in C++, which is to pretend that the file's contents are
     enclosed in 'extern "C" {...}'.

 -- Macro: REGISTER_TARGET_PRAGMAS ()
     Define this macro if you want to implement any target-specific
     pragmas.  If defined, it is a C expression which makes a series of
     calls to 'c_register_pragma' or 'c_register_pragma_with_expansion'
     for each pragma.  The macro may also do any setup required for the
     pragmas.

     The primary reason to define this macro is to provide compatibility
     with other compilers for the same target.  In general, we
     discourage definition of target-specific pragmas for GCC.

     If the pragma can be implemented by attributes then you should
     consider defining the target hook 'TARGET_INSERT_ATTRIBUTES' as
     well.

     Preprocessor macros that appear on pragma lines are not expanded.
     All '#pragma' directives that do not match any registered pragma
     are silently ignored, unless the user specifies
     '-Wunknown-pragmas'.

 -- Function: void c_register_pragma (const char *SPACE, const char
          *NAME, void (*CALLBACK) (struct cpp_reader *))
 -- Function: void c_register_pragma_with_expansion (const char *SPACE,
          const char *NAME, void (*CALLBACK) (struct cpp_reader *))

     Each call to 'c_register_pragma' or
     'c_register_pragma_with_expansion' establishes one pragma.  The
     CALLBACK routine will be called when the preprocessor encounters a
     pragma of the form

          #pragma [SPACE] NAME ...

     SPACE is the case-sensitive namespace of the pragma, or 'NULL' to
     put the pragma in the global namespace.  The callback routine
     receives PFILE as its first argument, which can be passed on to
     cpplib's functions if necessary.  You can lex tokens after the NAME
     by calling 'pragma_lex'.  Tokens that are not read by the callback
     will be silently ignored.  The end of the line is indicated by a
     token of type 'CPP_EOF'.  Macro expansion occurs on the arguments
     of pragmas registered with 'c_register_pragma_with_expansion' but
     not on the arguments of pragmas registered with
     'c_register_pragma'.

     Note that the use of 'pragma_lex' is specific to the C and C++
     compilers.  It will not work in the Java or Fortran compilers, or
     any other language compilers for that matter.  Thus if 'pragma_lex'
     is going to be called from target-specific code, it must only be
     done so when building the C and C++ compilers.  This can be done by
     defining the variables 'c_target_objs' and 'cxx_target_objs' in the
     target entry in the 'config.gcc' file.  These variables should name
     the target-specific, language-specific object file which contains
     the code that uses 'pragma_lex'.  Note it will also be necessary to
     add a rule to the makefile fragment pointed to by 'tmake_file' that
     shows how to build this object file.

 -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION
     Define this macro if macros should be expanded in the arguments of
     '#pragma pack'.

 -- Macro: TARGET_DEFAULT_PACK_STRUCT
     If your target requires a structure packing default other than 0
     (meaning the machine default), define this macro to the necessary
     value (in bytes).  This must be a value that would also be valid to
     use with '#pragma pack()' (that is, a small power of two).

 -- Macro: DOLLARS_IN_IDENTIFIERS
     Define this macro to control use of the character '$' in identifier
     names for the C family of languages.  0 means '$' is not allowed by
     default; 1 means it is allowed.  1 is the default; there is no need
     to define this macro in that case.

 -- Macro: INSN_SETS_ARE_DELAYED (INSN)
     Define this macro as a C expression that is nonzero if it is safe
     for the delay slot scheduler to place instructions in the delay
     slot of INSN, even if they appear to use a resource set or
     clobbered in INSN.  INSN is always a 'jump_insn' or an 'insn'; GCC
     knows that every 'call_insn' has this behavior.  On machines where
     some 'insn' or 'jump_insn' is really a function call and hence has
     this behavior, you should define this macro.

     You need not define this macro if it would always return zero.

 -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN)
     Define this macro as a C expression that is nonzero if it is safe
     for the delay slot scheduler to place instructions in the delay
     slot of INSN, even if they appear to set or clobber a resource
     referenced in INSN.  INSN is always a 'jump_insn' or an 'insn'.  On
     machines where some 'insn' or 'jump_insn' is really a function call
     and its operands are registers whose use is actually in the
     subroutine it calls, you should define this macro.  Doing so allows
     the delay slot scheduler to move instructions which copy arguments
     into the argument registers into the delay slot of INSN.

     You need not define this macro if it would always return zero.

 -- Macro: MULTIPLE_SYMBOL_SPACES
     Define this macro as a C expression that is nonzero if, in some
     cases, global symbols from one translation unit may not be bound to
     undefined symbols in another translation unit without user
     intervention.  For instance, under Microsoft Windows symbols must
     be explicitly imported from shared libraries (DLLs).

     You need not define this macro if it would always evaluate to zero.

 -- Target Hook: rtx_insn * TARGET_MD_ASM_ADJUST (vec<rtx>& OUTPUTS,
          vec<rtx>& INPUTS, vec<const char *>& CONSTRAINTS, vec<rtx>&
          CLOBBERS, HARD_REG_SET& CLOBBERED_REGS)
     This target hook may add "clobbers" to CLOBBERS and CLOBBERED_REGS
     for any hard regs the port wishes to automatically clobber for an
     asm.  The OUTPUTS and INPUTS may be inspected to avoid clobbering a
     register that is already used by the asm.

     It may modify the OUTPUTS, INPUTS, and CONSTRAINTS as necessary for
     other pre-processing.  In this case the return value is a sequence
     of insns to emit after the asm.

 -- Macro: MATH_LIBRARY
     Define this macro as a C string constant for the linker argument to
     link in the system math library, minus the initial '"-l"', or '""'
     if the target does not have a separate math library.

     You need only define this macro if the default of '"m"' is wrong.

 -- Macro: LIBRARY_PATH_ENV
     Define this macro as a C string constant for the environment
     variable that specifies where the linker should look for libraries.

     You need only define this macro if the default of '"LIBRARY_PATH"'
     is wrong.

 -- Macro: TARGET_POSIX_IO
     Define this macro if the target supports the following POSIX file
     functions, access, mkdir and file locking with fcntl / F_SETLKW.
     Defining 'TARGET_POSIX_IO' will enable the test coverage code to
     use file locking when exiting a program, which avoids race
     conditions if the program has forked.  It will also create
     directories at run-time for cross-profiling.

 -- Macro: MAX_CONDITIONAL_EXECUTE

     A C expression for the maximum number of instructions to execute
     via conditional execution instructions instead of a branch.  A
     value of 'BRANCH_COST'+1 is the default if the machine does not use
     cc0, and 1 if it does use cc0.

 -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR)
     Used if the target needs to perform machine-dependent modifications
     on the conditionals used for turning basic blocks into
     conditionally executed code.  CE_INFO points to a data structure,
     'struct ce_if_block', which contains information about the
     currently processed blocks.  TRUE_EXPR and FALSE_EXPR are the tests
     that are used for converting the then-block and the else-block,
     respectively.  Set either TRUE_EXPR or FALSE_EXPR to a null pointer
     if the tests cannot be converted.

 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR,
          FALSE_EXPR)
     Like 'IFCVT_MODIFY_TESTS', but used when converting more
     complicated if-statements into conditions combined by 'and' and
     'or' operations.  BB contains the basic block that contains the
     test that is currently being processed and about to be turned into
     a condition.

 -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN)
     A C expression to modify the PATTERN of an INSN that is to be
     converted to conditional execution format.  CE_INFO points to a
     data structure, 'struct ce_if_block', which contains information
     about the currently processed blocks.

 -- Macro: IFCVT_MODIFY_FINAL (CE_INFO)
     A C expression to perform any final machine dependent modifications
     in converting code to conditional execution.  The involved basic
     blocks can be found in the 'struct ce_if_block' structure that is
     pointed to by CE_INFO.

 -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO)
     A C expression to cancel any machine dependent modifications in
     converting code to conditional execution.  The involved basic
     blocks can be found in the 'struct ce_if_block' structure that is
     pointed to by CE_INFO.

 -- Macro: IFCVT_MACHDEP_INIT (CE_INFO)
     A C expression to initialize any machine specific data for
     if-conversion of the if-block in the 'struct ce_if_block' structure
     that is pointed to by CE_INFO.

 -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void)
     If non-null, this hook performs a target-specific pass over the
     instruction stream.  The compiler will run it at all optimization
     levels, just before the point at which it normally does
     delayed-branch scheduling.

     The exact purpose of the hook varies from target to target.  Some
     use it to do transformations that are necessary for correctness,
     such as laying out in-function constant pools or avoiding hardware
     hazards.  Others use it as an opportunity to do some
     machine-dependent optimizations.

     You need not implement the hook if it has nothing to do.  The
     default definition is null.

 -- Target Hook: void TARGET_INIT_BUILTINS (void)
     Define this hook if you have any machine-specific built-in
     functions that need to be defined.  It should be a function that
     performs the necessary setup.

     Machine specific built-in functions can be useful to expand special
     machine instructions that would otherwise not normally be generated
     because they have no equivalent in the source language (for
     example, SIMD vector instructions or prefetch instructions).

     To create a built-in function, call the function
     'lang_hooks.builtin_function' which is defined by the language
     front end.  You can use any type nodes set up by
     'build_common_tree_nodes'; only language front ends that use those
     two functions will call 'TARGET_INIT_BUILTINS'.

 -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool
          INITIALIZE_P)
     Define this hook if you have any machine-specific built-in
     functions that need to be defined.  It should be a function that
     returns the builtin function declaration for the builtin function
     code CODE.  If there is no such builtin and it cannot be
     initialized at this time if INITIALIZE_P is true the function
     should return 'NULL_TREE'.  If CODE is out of range the function
     should return 'error_mark_node'.

 -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx
          SUBTARGET, machine_mode MODE, int IGNORE)

     Expand a call to a machine specific built-in function that was set
     up by 'TARGET_INIT_BUILTINS'.  EXP is the expression for the
     function call; the result should go to TARGET if that is
     convenient, and have mode MODE if that is convenient.  SUBTARGET
     may be used as the target for computing one of EXP's operands.
     IGNORE is nonzero if the value is to be ignored.  This function
     should return the result of the call to the built-in function.

 -- Target Hook: tree TARGET_BUILTIN_CHKP_FUNCTION (unsigned FCODE)
     This hook allows target to redefine built-in functions used by
     Pointer Bounds Checker for code instrumentation.  Hook should
     return fndecl of function implementing generic builtin whose code
     is passed in FCODE.  Currently following built-in functions are
     obtained using this hook:
      -- Built-in Function: __bounds_type __chkp_bndmk (const void *LB,
               size_t SIZE)
          Function code - BUILT_IN_CHKP_BNDMK. This built-in function is
          used by Pointer Bounds Checker to create bound values.  LB
          holds low bound of the resulting bounds.  SIZE holds size of
          created bounds.

      -- Built-in Function: void __chkp_bndstx (const void *PTR,
               __bounds_type B, const void **LOC)
          Function code - 'BUILT_IN_CHKP_BNDSTX'.  This built-in
          function is used by Pointer Bounds Checker to store bounds B
          for pointer PTR when PTR is stored by address LOC.

      -- Built-in Function: __bounds_type __chkp_bndldx (const void
               **LOC, const void *PTR)
          Function code - 'BUILT_IN_CHKP_BNDLDX'.  This built-in
          function is used by Pointer Bounds Checker to get bounds of
          pointer PTR loaded by address LOC.

      -- Built-in Function: void __chkp_bndcl (const void *PTR,
               __bounds_type B)
          Function code - 'BUILT_IN_CHKP_BNDCL'.  This built-in function
          is used by Pointer Bounds Checker to perform check for pointer
          PTR against lower bound of bounds B.

      -- Built-in Function: void __chkp_bndcu (const void *PTR,
               __bounds_type B)
          Function code - 'BUILT_IN_CHKP_BNDCU'.  This built-in function
          is used by Pointer Bounds Checker to perform check for pointer
          PTR against upper bound of bounds B.

      -- Built-in Function: __bounds_type __chkp_bndret (void *PTR)
          Function code - 'BUILT_IN_CHKP_BNDRET'.  This built-in
          function is used by Pointer Bounds Checker to obtain bounds
          returned by a call statement.  PTR passed to built-in is
          'SSA_NAME' returned by the call.

      -- Built-in Function: __bounds_type __chkp_intersect
               (__bounds_type B1, __bounds_type B2)
          Function code - 'BUILT_IN_CHKP_INTERSECT'.  This built-in
          function returns intersection of bounds B1 and B2.

      -- Built-in Function: __bounds_type __chkp_narrow (const void
               *PTR, __bounds_type B, size_t S)
          Function code - 'BUILT_IN_CHKP_NARROW'.  This built-in
          function returns intersection of bounds B and [PTR, PTR + S -
          '1'].

      -- Built-in Function: size_t __chkp_sizeof (const void *PTR)
          Function code - 'BUILT_IN_CHKP_SIZEOF'.  This built-in
          function returns size of object referenced by PTR.  PTR is
          always 'ADDR_EXPR' of 'VAR_DECL'.  This built-in is used by
          Pointer Bounds Checker when bounds of object cannot be
          computed statically (e.g.  object has incomplete type).

      -- Built-in Function: const void *__chkp_extract_lower
               (__bounds_type B)
          Function code - 'BUILT_IN_CHKP_EXTRACT_LOWER'.  This built-in
          function returns lower bound of bounds B.

      -- Built-in Function: const void *__chkp_extract_upper
               (__bounds_type B)
          Function code - 'BUILT_IN_CHKP_EXTRACT_UPPER'.  This built-in
          function returns upper bound of bounds B.
 -- Target Hook: tree TARGET_CHKP_BOUND_TYPE (void)
     Return type to be used for bounds
 -- Target Hook: enum machine_mode TARGET_CHKP_BOUND_MODE (void)
     Return mode to be used for bounds.
 -- Target Hook: tree TARGET_CHKP_MAKE_BOUNDS_CONSTANT (HOST_WIDE_INT
          LB, HOST_WIDE_INT UB)
     Return constant used to statically initialize constant bounds with
     specified lower bound LB and upper bounds UB.
 -- Target Hook: int TARGET_CHKP_INITIALIZE_BOUNDS (tree VAR, tree LB,
          tree UB, tree *STMTS)
     Generate a list of statements STMTS to initialize pointer bounds
     variable VAR with bounds LB and UB.  Return the number of generated
     statements.

 -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int
          LOC, tree FNDECL, void *ARGLIST)
     Select a replacement for a machine specific built-in function that
     was set up by 'TARGET_INIT_BUILTINS'.  This is done _before_
     regular type checking, and so allows the target to implement a
     crude form of function overloading.  FNDECL is the declaration of
     the built-in function.  ARGLIST is the list of arguments passed to
     the built-in function.  The result is a complete expression that
     implements the operation, usually another 'CALL_EXPR'.  ARGLIST
     really has type 'VEC(tree,gc)*'

 -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, int N_ARGS, tree
          *ARGP, bool IGNORE)
     Fold a call to a machine specific built-in function that was set up
     by 'TARGET_INIT_BUILTINS'.  FNDECL is the declaration of the
     built-in function.  N_ARGS is the number of arguments passed to the
     function; the arguments themselves are pointed to by ARGP.  The
     result is another tree, valid for both GIMPLE and GENERIC,
     containing a simplified expression for the call's result.  If
     IGNORE is true the value will be ignored.

 -- Target Hook: bool TARGET_GIMPLE_FOLD_BUILTIN (gimple_stmt_iterator
          *GSI)
     Fold a call to a machine specific built-in function that was set up
     by 'TARGET_INIT_BUILTINS'.  GSI points to the gimple statement
     holding the function call.  Returns true if any change was made to
     the GIMPLE stream.

 -- Target Hook: int TARGET_COMPARE_VERSION_PRIORITY (tree DECL1, tree
          DECL2)
     This hook is used to compare the target attributes in two functions
     to determine which function's features get higher priority.  This
     is used during function multi-versioning to figure out the order in
     which two versions must be dispatched.  A function version with a
     higher priority is checked for dispatching earlier.  DECL1 and
     DECL2 are the two function decls that will be compared.

 -- Target Hook: tree TARGET_GET_FUNCTION_VERSIONS_DISPATCHER (void
          *DECL)
     This hook is used to get the dispatcher function for a set of
     function versions.  The dispatcher function is called to invoke the
     right function version at run-time.  DECL is one version from a set
     of semantically identical versions.

 -- Target Hook: tree TARGET_GENERATE_VERSION_DISPATCHER_BODY (void
          *ARG)
     This hook is used to generate the dispatcher logic to invoke the
     right function version at run-time for a given set of function
     versions.  ARG points to the callgraph node of the dispatcher
     function whose body must be generated.

 -- Target Hook: bool TARGET_CAN_USE_DOLOOP_P (const widest_int
          &ITERATIONS, const widest_int &ITERATIONS_MAX, unsigned int
          LOOP_DEPTH, bool ENTERED_AT_TOP)
     Return true if it is possible to use low-overhead loops
     ('doloop_end' and 'doloop_begin') for a particular loop.
     ITERATIONS gives the exact number of iterations, or 0 if not known.
     ITERATIONS_MAX gives the maximum number of iterations, or 0 if not
     known.  LOOP_DEPTH is the nesting depth of the loop, with 1 for
     innermost loops, 2 for loops that contain innermost loops, and so
     on.  ENTERED_AT_TOP is true if the loop is only entered from the
     top.

     This hook is only used if 'doloop_end' is available.  The default
     implementation returns true.  You can use
     'can_use_doloop_if_innermost' if the loop must be the innermost,
     and if there are no other restrictions.

 -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const
          rtx_insn *INSN)

     Take an instruction in INSN and return NULL if it is valid within a
     low-overhead loop, otherwise return a string explaining why doloop
     could not be applied.

     Many targets use special registers for low-overhead looping.  For
     any instruction that clobbers these this function should return a
     string indicating the reason why the doloop could not be applied.
     By default, the RTL loop optimizer does not use a present doloop
     pattern for loops containing function calls or branch on table
     instructions.

 -- Target Hook: bool TARGET_LEGITIMATE_COMBINED_INSN (rtx_insn *INSN)
     Take an instruction in INSN and return 'false' if the instruction
     is not appropriate as a combination of two or more instructions.
     The default is to accept all instructions.

 -- Target Hook: bool TARGET_CAN_FOLLOW_JUMP (const rtx_insn *FOLLOWER,
          const rtx_insn *FOLLOWEE)
     FOLLOWER and FOLLOWEE are JUMP_INSN instructions; return true if
     FOLLOWER may be modified to follow FOLLOWEE; false, if it can't.
     For example, on some targets, certain kinds of branches can't be
     made to follow through a hot/cold partitioning.

 -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE)
     This target hook returns 'true' if X is considered to be
     commutative.  Usually, this is just COMMUTATIVE_P (X), but the HP
     PA doesn't consider PLUS to be commutative inside a MEM.
     OUTER_CODE is the rtx code of the enclosing rtl, if known,
     otherwise it is UNKNOWN.

 -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG)

     When the initial value of a hard register has been copied in a
     pseudo register, it is often not necessary to actually allocate
     another register to this pseudo register, because the original hard
     register or a stack slot it has been saved into can be used.
     'TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register
     allocation once for each hard register that had its initial value
     copied by using 'get_func_hard_reg_initial_val' or
     'get_hard_reg_initial_val'.  Possible values are 'NULL_RTX', if you
     don't want to do any special allocation, a 'REG' rtx--that would
     typically be the hard register itself, if it is known not to be
     clobbered--or a 'MEM'.  If you are returning a 'MEM', this is only
     a hint for the allocator; it might decide to use another register
     anyways.  You may use 'current_function_is_leaf' or 'REG_N_SETS' in
     the hook to determine if the hard register in question will not be
     clobbered.  The default value of this hook is 'NULL', which
     disables any special allocation.

 -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned
          FLAGS)
     This target hook returns nonzero if X, an 'unspec' or
     'unspec_volatile' operation, might cause a trap.  Targets can use
     this hook to enhance precision of analysis for 'unspec' and
     'unspec_volatile' operations.  You may call 'may_trap_p_1' to
     analyze inner elements of X in which case FLAGS should be passed
     along.

 -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL)
     The compiler invokes this hook whenever it changes its current
     function context ('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 attributes that affect register usage or code generation
     patterns.  The argument DECL is the declaration for the new
     function context, and may be null to indicate that the compiler has
     left a function context and is returning to processing at the top
     level.  The default hook function does nothing.

     GCC sets 'cfun' to a dummy function context during initialization
     of some parts of the back end.  The hook function is not invoked in
     this situation; you need not worry about the hook being invoked
     recursively, or when the back end is in a partially-initialized
     state.  'cfun' might be 'NULL' to indicate processing at top level,
     outside of any function scope.

 -- Macro: TARGET_OBJECT_SUFFIX
     Define this macro to be a C string representing the suffix for
     object files on your target machine.  If you do not define this
     macro, GCC will use '.o' as the suffix for object files.

 -- Macro: TARGET_EXECUTABLE_SUFFIX
     Define this macro to be a C string representing the suffix to be
     automatically added to executable files on your target machine.  If
     you do not define this macro, GCC will use the null string as the
     suffix for executable files.

 -- Macro: COLLECT_EXPORT_LIST
     If defined, 'collect2' will scan the individual object files
     specified on its command line and create an export list for the
     linker.  Define this macro for systems like AIX, where the linker
     discards object files that are not referenced from 'main' and uses
     export lists.

 -- Macro: MODIFY_JNI_METHOD_CALL (MDECL)
     Define this macro to a C expression representing a variant of the
     method call MDECL, if Java Native Interface (JNI) methods must be
     invoked differently from other methods on your target.  For
     example, on 32-bit Microsoft Windows, JNI methods must be invoked
     using the 'stdcall' calling convention and this macro is then
     defined as this expression:

          build_type_attribute_variant (MDECL,
                                        build_tree_list
                                        (get_identifier ("stdcall"),
                                         NULL))

 -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
     This target hook returns 'true' past the point in which new jump
     instructions could be created.  On machines that require a register
     for every jump such as the SHmedia ISA of SH5, this point would
     typically be reload, so this target hook should be defined to a
     function such as:

          static bool
          cannot_modify_jumps_past_reload_p ()
          {
            return (reload_completed || reload_in_progress);
          }

 -- Target Hook: reg_class_t TARGET_BRANCH_TARGET_REGISTER_CLASS (void)
     This target hook returns a register class for which branch target
     register optimizations should be applied.  All registers in this
     class should be usable interchangeably.  After reload, registers in
     this class will be re-allocated and loads will be hoisted out of
     loops and be subjected to inter-block scheduling.

 -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool
          AFTER_PROLOGUE_EPILOGUE_GEN)
     Branch target register optimization will by default exclude
     callee-saved registers that are not already live during the current
     function; if this target hook returns true, they will be included.
     The target code must than make sure that all target registers in
     the class returned by 'TARGET_BRANCH_TARGET_REGISTER_CLASS' that
     might need saving are saved.  AFTER_PROLOGUE_EPILOGUE_GEN indicates
     if prologues and epilogues have already been generated.  Note, even
     if you only return true when AFTER_PROLOGUE_EPILOGUE_GEN is false,
     you still are likely to have to make special provisions in
     'INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved
     target registers.

 -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void)
     This target hook returns true if the target supports conditional
     execution.  This target hook is required only when the target has
     several different modes and they have different conditional
     execution capability, such as ARM.

 -- Target Hook: rtx TARGET_GEN_CCMP_FIRST (rtx *PREP_SEQ, rtx *GEN_SEQ,
          int CODE, tree OP0, tree OP1)
     This function prepares to emit a comparison insn for the first
     compare in a sequence of conditional comparisions.  It returns an
     appropriate comparison with 'CC' for passing to 'gen_ccmp_next' or
     'cbranch_optab'.  The insns to prepare the compare are saved in
     PREP_SEQ and the compare insns are saved in GEN_SEQ.  They will be
     emitted when all the compares in the the conditional comparision
     are generated without error.  CODE is the 'rtx_code' of the compare
     for OP0 and OP1.

 -- Target Hook: rtx TARGET_GEN_CCMP_NEXT (rtx *PREP_SEQ, rtx *GEN_SEQ,
          rtx PREV, int CMP_CODE, tree OP0, tree OP1, int BIT_CODE)
     This function prepares to emit a conditional comparison within a
     sequence of conditional comparisons.  It returns an appropriate
     comparison with 'CC' for passing to 'gen_ccmp_next' or
     'cbranch_optab'.  The insns to prepare the compare are saved in
     PREP_SEQ and the compare insns are saved in GEN_SEQ.  They will be
     emitted when all the compares in the conditional comparision are
     generated without error.  The PREV expression is the result of a
     prior call to 'gen_ccmp_first' or 'gen_ccmp_next'.  It may return
     'NULL' if the combination of PREV and this comparison is not
     supported, otherwise the result must be appropriate for passing to
     'gen_ccmp_next' or 'cbranch_optab'.  CODE is the 'rtx_code' of the
     compare for OP0 and OP1.  BIT_CODE is 'AND' or 'IOR', which is the
     op on the compares.

 -- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL,
          struct loop *LOOP)
     This target hook returns a new value for the number of times LOOP
     should be unrolled.  The parameter NUNROLL is the number of times
     the loop is to be unrolled.  The parameter LOOP is a pointer to the
     loop, which is going to be checked for unrolling.  This target hook
     is required only when the target has special constraints like
     maximum number of memory accesses.

 -- Macro: POWI_MAX_MULTS
     If defined, this macro is interpreted as a signed integer C
     expression that specifies the maximum number of floating point
     multiplications that should be emitted when expanding
     exponentiation by an integer constant inline.  When this value is
     defined, exponentiation requiring more than this number of
     multiplications is implemented by calling the system library's
     'pow', 'powf' or 'powl' routines.  The default value places no
     upper bound on the multiplication count.

 -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char
          *IPREFIX, int STDINC)
     This target hook should register any extra include files for the
     target.  The parameter STDINC indicates if normal include files are
     present.  The parameter SYSROOT is the system root directory.  The
     parameter IPREFIX is the prefix for the gcc directory.

 -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const
          char *IPREFIX, int STDINC)
     This target hook should register any extra include files for the
     target before any standard headers.  The parameter STDINC indicates
     if normal include files are present.  The parameter SYSROOT is the
     system root directory.  The parameter IPREFIX is the prefix for the
     gcc directory.

 -- Macro: void TARGET_OPTF (char *PATH)
     This target hook should register special include paths for the
     target.  The parameter PATH is the include to register.  On Darwin
     systems, this is used for Framework includes, which have semantics
     that are different from '-I'.

 -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL)
     This target macro returns 'true' if it is safe to use a local alias
     for a virtual function FNDECL when constructing thunks, 'false'
     otherwise.  By default, the macro returns 'true' for all functions,
     if a target supports aliases (i.e. defines 'ASM_OUTPUT_DEF'),
     'false' otherwise,

 -- Macro: TARGET_FORMAT_TYPES
     If defined, this macro is the name of a global variable containing
     target-specific format checking information for the '-Wformat'
     option.  The default is to have no target-specific format checks.

 -- Macro: TARGET_N_FORMAT_TYPES
     If defined, this macro is the number of entries in
     'TARGET_FORMAT_TYPES'.

 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES
     If defined, this macro is the name of a global variable containing
     target-specific format overrides for the '-Wformat' option.  The
     default is to have no target-specific format overrides.  If
     defined, 'TARGET_FORMAT_TYPES' must be defined, too.

 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT
     If defined, this macro specifies the number of entries in
     'TARGET_OVERRIDES_FORMAT_ATTRIBUTES'.

 -- Macro: TARGET_OVERRIDES_FORMAT_INIT
     If defined, this macro specifies the optional initialization
     routine for target specific customizations of the system printf and
     scanf formatter settings.

 -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN
          (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL)
     If defined, this macro returns the diagnostic message when it is
     illegal to pass argument VAL to function FUNCDECL with prototype
     TYPELIST.

 -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree
          FROMTYPE, const_tree TOTYPE)
     If defined, this macro returns the diagnostic message when it is
     invalid to convert from FROMTYPE to TOTYPE, or 'NULL' if validity
     should be determined by the front end.

 -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP,
          const_tree TYPE)
     If defined, this macro returns the diagnostic message when it is
     invalid to apply operation OP (where unary plus is denoted by
     'CONVERT_EXPR') to an operand of type TYPE, or 'NULL' if validity
     should be determined by the front end.

 -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP,
          const_tree TYPE1, const_tree TYPE2)
     If defined, this macro returns the diagnostic message when it is
     invalid to apply operation OP to operands of types TYPE1 and TYPE2,
     or 'NULL' if validity should be determined by the front end.

 -- Target Hook: const char * TARGET_INVALID_PARAMETER_TYPE (const_tree
          TYPE)
     If defined, this macro returns the diagnostic message when it is
     invalid for functions to include parameters of type TYPE, or 'NULL'
     if validity should be determined by the front end.  This is
     currently used only by the C and C++ front ends.

 -- Target Hook: const char * TARGET_INVALID_RETURN_TYPE (const_tree
          TYPE)
     If defined, this macro returns the diagnostic message when it is
     invalid for functions to have return type TYPE, or 'NULL' if
     validity should be determined by the front end.  This is currently
     used only by the C and C++ front ends.

 -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE)
     If defined, this target hook returns the type to which values of
     TYPE should be promoted when they appear in expressions, analogous
     to the integer promotions, or '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.  This is
     currently used only by the C and C++ front ends.

 -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR)
     If defined, this hook returns the result of converting EXPR to
     TYPE.  It should return the converted expression, or 'NULL_TREE' to
     apply the front end's normal conversion rules.  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.

 -- Macro: TARGET_USE_JCR_SECTION
     This macro determines whether to use the JCR section to register
     Java classes.  By default, TARGET_USE_JCR_SECTION is defined to 1
     if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true, else
     0.

 -- Macro: OBJC_JBLEN
     This macro determines the size of the objective C jump buffer for
     the NeXT runtime.  By default, OBJC_JBLEN is defined to an
     innocuous value.

 -- Macro: LIBGCC2_UNWIND_ATTRIBUTE
     Define this macro if any target-specific attributes need to be
     attached to the functions in 'libgcc' that provide low-level
     support for call stack unwinding.  It is used in declarations in
     'unwind-generic.h' and the associated definitions of those
     functions.

 -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void)
     Define this macro to update the current function stack boundary if
     necessary.

 -- Target Hook: rtx TARGET_GET_DRAP_RTX (void)
     This hook should return an rtx for Dynamic Realign Argument Pointer
     (DRAP) if a different argument pointer register is needed to access
     the function's argument list due to stack realignment.  Return
     'NULL' if no DRAP is needed.

 -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void)
     When optimization is disabled, this hook indicates whether or not
     arguments should be allocated to stack slots.  Normally, GCC
     allocates stacks slots for arguments when not optimizing in order
     to make debugging easier.  However, when a function is declared
     with '__attribute__((naked))', there is no stack frame, and the
     compiler cannot safely move arguments from the registers in which
     they are passed to the stack.  Therefore, this hook should return
     true in general, but false for naked functions.  The default
     implementation always returns true.

 -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR
     On some architectures it can take multiple instructions to
     synthesize a constant.  If there is another constant already in a
     register that is close enough in value then it is preferable that
     the new constant is computed from this register using immediate
     addition or subtraction.  We accomplish this through CSE. Besides
     the value of the constant we also add a lower and an upper constant
     anchor to the available expressions.  These are then queried when
     encountering new constants.  The anchors are computed by rounding
     the constant up and down to a multiple of the value of
     'TARGET_CONST_ANCHOR'.  'TARGET_CONST_ANCHOR' should be the maximum
     positive value accepted by immediate-add plus one.  We currently
     assume that the value of 'TARGET_CONST_ANCHOR' is a power of 2.
     For example, on MIPS, where add-immediate takes a 16-bit signed
     value, 'TARGET_CONST_ANCHOR' is set to '0x8000'.  The default value
     is zero, which disables this optimization.

 -- Target Hook: unsigned HOST_WIDE_INT TARGET_ASAN_SHADOW_OFFSET (void)
     Return the offset bitwise ored into shifted address to get
     corresponding Address Sanitizer shadow memory address.  NULL if
     Address Sanitizer is not supported by the target.

 -- Target Hook: unsigned HOST_WIDE_INT TARGET_MEMMODEL_CHECK (unsigned
          HOST_WIDE_INT VAL)
     Validate target specific memory model mask bits.  When NULL no
     target specific memory model bits are allowed.

 -- Target Hook: unsigned char TARGET_ATOMIC_TEST_AND_SET_TRUEVAL
     This value should be set if the result written by
     'atomic_test_and_set' is not exactly 1, i.e.  the 'bool' 'true'.

 -- Target Hook: bool TARGET_HAS_IFUNC_P (void)
     It returns true if the target supports GNU indirect functions.  The
     support includes the assembler, linker and dynamic linker.  The
     default value of this hook is based on target's libc.

 -- Target Hook: unsigned int TARGET_ATOMIC_ALIGN_FOR_MODE (machine_mode
          MODE)
     If defined, this function returns an appropriate alignment in bits
     for an atomic object of machine_mode MODE.  If 0 is returned then
     the default alignment for the specified mode is used.

 -- Target Hook: void TARGET_ATOMIC_ASSIGN_EXPAND_FENV (tree *HOLD, tree
          *CLEAR, tree *UPDATE)
     ISO C11 requires atomic compound assignments that may raise
     floating-point exceptions to raise exceptions corresponding to the
     arithmetic operation whose result was successfully stored in a
     compare-and-exchange sequence.  This requires code equivalent to
     calls to 'feholdexcept', 'feclearexcept' and 'feupdateenv' to be
     generated at appropriate points in the compare-and-exchange
     sequence.  This hook should set '*HOLD' to an expression equivalent
     to the call to 'feholdexcept', '*CLEAR' to an expression equivalent
     to the call to 'feclearexcept' and '*UPDATE' to an expression
     equivalent to the call to 'feupdateenv'.  The three expressions are
     'NULL_TREE' on entry to the hook and may be left as 'NULL_TREE' if
     no code is required in a particular place.  The default
     implementation leaves all three expressions as 'NULL_TREE'.  The
     '__atomic_feraiseexcept' function from 'libatomic' may be of use as
     part of the code generated in '*UPDATE'.

 -- Target Hook: void TARGET_RECORD_OFFLOAD_SYMBOL (tree)
     Used when offloaded functions are seen in the compilation unit and
     no named sections are available.  It is called once for each symbol
     that must be recorded in the offload function and variable table.

 -- Target Hook: char * TARGET_OFFLOAD_OPTIONS (void)
     Used when writing out the list of options into an LTO file.  It
     should translate any relevant target-specific options (such as the
     ABI in use) into one of the '-foffload' options that exist as a
     common interface to express such options.  It should return a
     string containing these options, separated by spaces, which the
     caller will free.

 -- Macro: TARGET_SUPPORTS_WIDE_INT

     On older ports, large integers are stored in 'CONST_DOUBLE' rtl
     objects.  Newer ports define 'TARGET_SUPPORTS_WIDE_INT' to be
     nonzero to indicate that large integers are stored in
     'CONST_WIDE_INT' rtl objects.  The 'CONST_WIDE_INT' allows very
     large integer constants to be represented.  'CONST_DOUBLE' is
     limited to twice the size of the host's 'HOST_WIDE_INT'
     representation.

     Converting a port mostly requires looking for the places where
     'CONST_DOUBLE's are used with 'VOIDmode' and replacing that code
     with code that accesses 'CONST_WIDE_INT's.  '"grep -i
     const_double"' at the port level gets you to 95% of the changes
     that need to be made.  There are a few places that require a deeper
     look.

        * There is no equivalent to 'hval' and 'lval' for
          'CONST_WIDE_INT's.  This would be difficult to express in the
          md language since there are a variable number of elements.

          Most ports only check that 'hval' is either 0 or -1 to see if
          the value is small.  As mentioned above, this will no longer
          be necessary since small constants are always 'CONST_INT'.  Of
          course there are still a few exceptions, the alpha's
          constraint used by the zap instruction certainly requires
          careful examination by C code.  However, all the current code
          does is pass the hval and lval to C code, so evolving the c
          code to look at the 'CONST_WIDE_INT' is not really a large
          change.

        * Because there is no standard template that ports use to
          materialize constants, there is likely to be some futzing that
          is unique to each port in this code.

        * The rtx costs may have to be adjusted to properly account for
          larger constants that are represented as 'CONST_WIDE_INT'.

     All and all it does not take long to convert ports that the
     maintainer is familiar with.


File: gccint.info,  Node: Host Config,  Next: Fragments,  Prev: Target Macros,  Up: Top

18 Host Configuration
*********************

Most details about the machine and system on which the compiler is
actually running are detected by the 'configure' script.  Some things
are impossible for 'configure' to detect; these are described in two
ways, either by macros defined in a file named 'xm-MACHINE.h' or by hook
functions in the file specified by the OUT_HOST_HOOK_OBJ variable in
'config.gcc'.  (The intention is that very few hosts will need a header
file but nearly every fully supported host will need to override some
hooks.)

 If you need to define only a few macros, and they have simple
definitions, consider using the 'xm_defines' variable in your
'config.gcc' entry instead of creating a host configuration header.
*Note System Config::.

* Menu:

* Host Common::         Things every host probably needs implemented.
* Filesystem::          Your host can't have the letter 'a' in filenames?
* Host Misc::           Rare configuration options for hosts.


File: gccint.info,  Node: Host Common,  Next: Filesystem,  Up: Host Config

18.1 Host Common
================

Some things are just not portable, even between similar operating
systems, and are too difficult for autoconf to detect.  They get
implemented using hook functions in the file specified by the
HOST_HOOK_OBJ variable in 'config.gcc'.

 -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void)
     This host hook is used to set up handling for extra signals.  The
     most common thing to do in this hook is to detect stack overflow.

 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int
          FD)
     This host hook returns the address of some space that is likely to
     be free in some subsequent invocation of the compiler.  We intend
     to load the PCH data at this address such that the data need not be
     relocated.  The area should be able to hold SIZE bytes.  If the
     host uses 'mmap', FD is an open file descriptor that can be used
     for probing.

 -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS, size_t
          SIZE, int FD, size_t OFFSET)
     This host hook is called when a PCH file is about to be loaded.  We
     want to load SIZE bytes from FD at OFFSET into memory at ADDRESS.
     The given address will be the result of a previous invocation of
     'HOST_HOOKS_GT_PCH_GET_ADDRESS'.  Return -1 if we couldn't allocate
     SIZE bytes at ADDRESS.  Return 0 if the memory is allocated but the
     data is not loaded.  Return 1 if the hook has performed everything.

     If the implementation uses reserved address space, free any
     reserved space beyond SIZE, regardless of the return value.  If no
     PCH will be loaded, this hook may be called with SIZE zero, in
     which case all reserved address space should be freed.

     Do not try to handle values of ADDRESS that could not have been
     returned by this executable; just return -1.  Such values usually
     indicate an out-of-date PCH file (built by some other GCC
     executable), and such a PCH file won't work.

 -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void);
     This host hook returns the alignment required for allocating
     virtual memory.  Usually this is the same as getpagesize, but on
     some hosts the alignment for reserving memory differs from the
     pagesize for committing memory.


File: gccint.info,  Node: Filesystem,  Next: Host Misc,  Prev: Host Common,  Up: Host Config

18.2 Host Filesystem
====================

GCC needs to know a number of things about the semantics of the host
machine's filesystem.  Filesystems with Unix and MS-DOS semantics are
automatically detected.  For other systems, you can define the following
macros in 'xm-MACHINE.h'.

'HAVE_DOS_BASED_FILE_SYSTEM'
     This macro is automatically defined by 'system.h' if the host file
     system obeys the semantics defined by MS-DOS instead of Unix.  DOS
     file systems are case insensitive, file specifications may begin
     with a drive letter, and both forward slash and backslash ('/' and
     '\') are directory separators.

'DIR_SEPARATOR'
'DIR_SEPARATOR_2'
     If defined, these macros expand to character constants specifying
     separators for directory names within a file specification.
     'system.h' will automatically give them appropriate values on Unix
     and MS-DOS file systems.  If your file system is neither of these,
     define one or both appropriately in 'xm-MACHINE.h'.

     However, operating systems like VMS, where constructing a pathname
     is more complicated than just stringing together directory names
     separated by a special character, should not define either of these
     macros.

'PATH_SEPARATOR'
     If defined, this macro should expand to a character constant
     specifying the separator for elements of search paths.  The default
     value is a colon (':').  DOS-based systems usually, but not always,
     use semicolon (';').

'VMS'
     Define this macro if the host system is VMS.

'HOST_OBJECT_SUFFIX'
     Define this macro to be a C string representing the suffix for
     object files on your host machine.  If you do not define this
     macro, GCC will use '.o' as the suffix for object files.

'HOST_EXECUTABLE_SUFFIX'
     Define this macro to be a C string representing the suffix for
     executable files on your host machine.  If you do not define this
     macro, GCC will use the null string as the suffix for executable
     files.

'HOST_BIT_BUCKET'
     A pathname defined by the host operating system, which can be
     opened as a file and written to, but all the information written is
     discarded.  This is commonly known as a "bit bucket" or "null
     device".  If you do not define this macro, GCC will use '/dev/null'
     as the bit bucket.  If the host does not support a bit bucket,
     define this macro to an invalid filename.

'UPDATE_PATH_HOST_CANONICALIZE (PATH)'
     If defined, a C statement (sans semicolon) that performs
     host-dependent canonicalization when a path used in a compilation
     driver or preprocessor is canonicalized.  PATH is a malloc-ed path
     to be canonicalized.  If the C statement does canonicalize PATH
     into a different buffer, the old path should be freed and the new
     buffer should have been allocated with malloc.

'DUMPFILE_FORMAT'
     Define this macro to be a C string representing the format to use
     for constructing the index part of debugging dump file names.  The
     resultant string must fit in fifteen bytes.  The full filename will
     be the concatenation of: the prefix of the assembler file name, the
     string resulting from applying this format to an index number, and
     a string unique to each dump file kind, e.g. 'rtl'.

     If you do not define this macro, GCC will use '.%02d.'.  You should
     define this macro if using the default will create an invalid file
     name.

'DELETE_IF_ORDINARY'
     Define this macro to be a C statement (sans semicolon) that
     performs host-dependent removal of ordinary temp files in the
     compilation driver.

     If you do not define this macro, GCC will use the default version.
     You should define this macro if the default version does not
     reliably remove the temp file as, for example, on VMS which allows
     multiple versions of a file.

'HOST_LACKS_INODE_NUMBERS'
     Define this macro if the host filesystem does not report meaningful
     inode numbers in struct stat.


File: gccint.info,  Node: Host Misc,  Prev: Filesystem,  Up: Host Config

18.3 Host Misc
==============

'FATAL_EXIT_CODE'
     A C expression for the status code to be returned when the compiler
     exits after serious errors.  The default is the system-provided
     macro 'EXIT_FAILURE', or '1' if the system doesn't define that
     macro.  Define this macro only if these defaults are incorrect.

'SUCCESS_EXIT_CODE'
     A C expression for the status code to be returned when the compiler
     exits without serious errors.  (Warnings are not serious errors.)
     The default is the system-provided macro 'EXIT_SUCCESS', or '0' if
     the system doesn't define that macro.  Define this macro only if
     these defaults are incorrect.

'USE_C_ALLOCA'
     Define this macro if GCC should use the C implementation of
     'alloca' provided by 'libiberty.a'.  This only affects how some
     parts of the compiler itself allocate memory.  It does not change
     code generation.

     When GCC is built with a compiler other than itself, the C 'alloca'
     is always used.  This is because most other implementations have
     serious bugs.  You should define this macro only on a system where
     no stack-based 'alloca' can possibly work.  For instance, if a
     system has a small limit on the size of the stack, GCC's builtin
     'alloca' will not work reliably.

'COLLECT2_HOST_INITIALIZATION'
     If defined, a C statement (sans semicolon) that performs
     host-dependent initialization when 'collect2' is being initialized.

'GCC_DRIVER_HOST_INITIALIZATION'
     If defined, a C statement (sans semicolon) that performs
     host-dependent initialization when a compilation driver is being
     initialized.

'HOST_LONG_LONG_FORMAT'
     If defined, the string used to indicate an argument of type 'long
     long' to functions like 'printf'.  The default value is '"ll"'.

'HOST_LONG_FORMAT'
     If defined, the string used to indicate an argument of type 'long'
     to functions like 'printf'.  The default value is '"l"'.

'HOST_PTR_PRINTF'
     If defined, the string used to indicate an argument of type 'void
     *' to functions like 'printf'.  The default value is '"%p"'.

 In addition, if 'configure' generates an incorrect definition of any of
the macros in 'auto-host.h', you can override that definition in a host
configuration header.  If you need to do this, first see if it is
possible to fix 'configure'.


File: gccint.info,  Node: Fragments,  Next: Collect2,  Prev: Host Config,  Up: Top

19 Makefile Fragments
*********************

When you configure GCC using the 'configure' script, it will construct
the file 'Makefile' from the template file 'Makefile.in'.  When it does
this, it can incorporate makefile fragments from the 'config' directory.
These are used to set Makefile parameters that are not amenable to being
calculated by autoconf.  The list of fragments to incorporate is set by
'config.gcc' (and occasionally 'config.build' and 'config.host'); *Note
System Config::.

 Fragments are named either 't-TARGET' or 'x-HOST', depending on whether
they are relevant to configuring GCC to produce code for a particular
target, or to configuring GCC to run on a particular host.  Here TARGET
and HOST are mnemonics which usually have some relationship to the
canonical system name, but no formal connection.

 If these files do not exist, it means nothing needs to be added for a
given target or host.  Most targets need a few 't-TARGET' fragments, but
needing 'x-HOST' fragments is rare.

* Menu:

* Target Fragment:: Writing 't-TARGET' files.
* Host Fragment::   Writing 'x-HOST' files.


File: gccint.info,  Node: Target Fragment,  Next: Host Fragment,  Up: Fragments

19.1 Target Makefile Fragments
==============================

Target makefile fragments can set these Makefile variables.

'LIBGCC2_CFLAGS'
     Compiler flags to use when compiling 'libgcc2.c'.

'LIB2FUNCS_EXTRA'
     A list of source file names to be compiled or assembled and
     inserted into 'libgcc.a'.

'CRTSTUFF_T_CFLAGS'
     Special flags used when compiling 'crtstuff.c'.  *Note
     Initialization::.

'CRTSTUFF_T_CFLAGS_S'
     Special flags used when compiling 'crtstuff.c' for shared linking.
     Used if you use 'crtbeginS.o' and 'crtendS.o' in 'EXTRA-PARTS'.
     *Note Initialization::.

'MULTILIB_OPTIONS'
     For some targets, invoking GCC in different ways produces objects
     that can not be linked together.  For example, for some targets GCC
     produces both big and little endian code.  For these targets, you
     must arrange for multiple versions of 'libgcc.a' to be compiled,
     one for each set of incompatible options.  When GCC invokes the
     linker, it arranges to link in the right version of 'libgcc.a',
     based on the command line options used.

     The 'MULTILIB_OPTIONS' macro lists the set of options for which
     special versions of 'libgcc.a' must be built.  Write options that
     are mutually incompatible side by side, separated by a slash.
     Write options that may be used together separated by a space.  The
     build procedure will build all combinations of compatible options.

     For example, if you set 'MULTILIB_OPTIONS' to 'm68000/m68020
     msoft-float', 'Makefile' will build special versions of 'libgcc.a'
     using the following sets of options: '-m68000', '-m68020',
     '-msoft-float', '-m68000 -msoft-float', and '-m68020 -msoft-float'.

'MULTILIB_DIRNAMES'
     If 'MULTILIB_OPTIONS' is used, this variable specifies the
     directory names that should be used to hold the various libraries.
     Write one element in 'MULTILIB_DIRNAMES' for each element in
     'MULTILIB_OPTIONS'.  If 'MULTILIB_DIRNAMES' is not used, the
     default value will be 'MULTILIB_OPTIONS', with all slashes treated
     as spaces.

     'MULTILIB_DIRNAMES' describes the multilib directories using GCC
     conventions and is applied to directories that are part of the GCC
     installation.  When multilib-enabled, the compiler will add a
     subdirectory of the form PREFIX/MULTILIB before each directory in
     the search path for libraries and crt files.

     For example, if 'MULTILIB_OPTIONS' is set to 'm68000/m68020
     msoft-float', then the default value of 'MULTILIB_DIRNAMES' is
     'm68000 m68020 msoft-float'.  You may specify a different value if
     you desire a different set of directory names.

'MULTILIB_MATCHES'
     Sometimes the same option may be written in two different ways.  If
     an option is listed in 'MULTILIB_OPTIONS', GCC needs to know about
     any synonyms.  In that case, set 'MULTILIB_MATCHES' to a list of
     items of the form 'option=option' to describe all relevant
     synonyms.  For example, 'm68000=mc68000 m68020=mc68020'.

'MULTILIB_EXCEPTIONS'
     Sometimes when there are multiple sets of 'MULTILIB_OPTIONS' being
     specified, there are combinations that should not be built.  In
     that case, set 'MULTILIB_EXCEPTIONS' to be all of the switch
     exceptions in shell case syntax that should not be built.

     For example the ARM processor cannot execute both hardware floating
     point instructions and the reduced size THUMB instructions at the
     same time, so there is no need to build libraries with both of
     these options enabled.  Therefore 'MULTILIB_EXCEPTIONS' is set to:
          *mthumb/*mhard-float*

'MULTILIB_REQUIRED'
     Sometimes when there are only a few combinations are required, it
     would be a big effort to come up with a 'MULTILIB_EXCEPTIONS' list
     to cover all undesired ones.  In such a case, just listing all the
     required combinations in 'MULTILIB_REQUIRED' would be more
     straightforward.

     The way to specify the entries in 'MULTILIB_REQUIRED' is same with
     the way used for 'MULTILIB_EXCEPTIONS', only this time what are
     required will be specified.  Suppose there are multiple sets of
     'MULTILIB_OPTIONS' and only two combinations are required, one for
     ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU,
     the 'MULTILIB_REQUIRED' can be set to:
          MULTILIB_REQUIRED =  mthumb/march=armv7-m
          MULTILIB_REQUIRED += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16

     The 'MULTILIB_REQUIRED' can be used together with
     'MULTILIB_EXCEPTIONS'.  The option combinations generated from
     'MULTILIB_OPTIONS' will be filtered by 'MULTILIB_EXCEPTIONS' and
     then by 'MULTILIB_REQUIRED'.

'MULTILIB_REUSE'
     Sometimes it is desirable to reuse one existing multilib for
     different sets of options.  Such kind of reuse can minimize the
     number of multilib variants.  And for some targets it is better to
     reuse an existing multilib than to fall back to default multilib
     when there is no corresponding multilib.  This can be done by
     adding reuse rules to 'MULTILIB_REUSE'.

     A reuse rule is comprised of two parts connected by equality sign.
     The left part is option set used to build multilib and the right
     part is option set that will reuse this multilib.  The order of
     options in the left part matters and should be same with those
     specified in 'MULTILIB_REQUIRED' or aligned with order in
     'MULTILIB_OPTIONS'.  There is no such limitation for options in
     right part as we don't build multilib from them.  But the equality
     sign in both parts should be replaced with period.

     The 'MULTILIB_REUSE' is different from 'MULTILIB_MATCHES' in that
     it sets up relations between two option sets rather than two
     options.  Here is an example to demo how we reuse libraries built
     in Thumb mode for applications built in ARM mode:
          MULTILIB_REUSE = mthumb/march.armv7-r=marm/march.armv7-r

     Before the advent of 'MULTILIB_REUSE', GCC select multilib by
     comparing command line options with options used to build multilib.
     The 'MULTILIB_REUSE' is complementary to that way.  Only when the
     original comparison matches nothing it will work to see if it is OK
     to reuse some existing multilib.

'MULTILIB_EXTRA_OPTS'
     Sometimes it is desirable that when building multiple versions of
     'libgcc.a' certain options should always be passed on to the
     compiler.  In that case, set 'MULTILIB_EXTRA_OPTS' to be the list
     of options to be used for all builds.  If you set this, you should
     probably set 'CRTSTUFF_T_CFLAGS' to a dash followed by it.

'MULTILIB_OSDIRNAMES'
     If 'MULTILIB_OPTIONS' is used, this variable specifies a list of
     subdirectory names, that are used to modify the search path
     depending on the chosen multilib.  Unlike 'MULTILIB_DIRNAMES',
     'MULTILIB_OSDIRNAMES' describes the multilib directories using
     operating systems conventions, and is applied to the directories
     such as 'lib' or those in the 'LIBRARY_PATH' environment variable.
     The format is either the same as of 'MULTILIB_DIRNAMES', or a set
     of mappings.  When it is the same as 'MULTILIB_DIRNAMES', it
     describes the multilib directories using operating system
     conventions, rather than GCC conventions.  When it is a set of
     mappings of the form GCCDIR=OSDIR, the left side gives the GCC
     convention and the right gives the equivalent OS defined location.
     If the OSDIR part begins with a '!', GCC will not search in the
     non-multilib directory and use exclusively the multilib directory.
     Otherwise, the compiler will examine the search path for libraries
     and crt files twice; the first time it will add MULTILIB to each
     directory in the search path, the second it will not.

     For configurations that support both multilib and multiarch,
     'MULTILIB_OSDIRNAMES' also encodes the multiarch name, thus
     subsuming 'MULTIARCH_DIRNAME'.  The multiarch name is appended to
     each directory name, separated by a colon (e.g.
     '../lib32:i386-linux-gnu').

     Each multiarch subdirectory will be searched before the
     corresponding OS multilib directory, for example
     '/lib/i386-linux-gnu' before '/lib/../lib32'.  The multiarch name
     will also be used to modify the system header search path, as
     explained for 'MULTIARCH_DIRNAME'.

'MULTIARCH_DIRNAME'
     This variable specifies the multiarch name for configurations that
     are multiarch-enabled but not multilibbed configurations.

     The multiarch name is used to augment the search path for
     libraries, crt files and system header files with additional
     locations.  The compiler will add a multiarch subdirectory of the
     form PREFIX/MULTIARCH before each directory in the library and crt
     search path.  It will also add two directories
     'LOCAL_INCLUDE_DIR'/MULTIARCH and
     'NATIVE_SYSTEM_HEADER_DIR'/MULTIARCH) to the system header search
     path, respectively before 'LOCAL_INCLUDE_DIR' and
     'NATIVE_SYSTEM_HEADER_DIR'.

     'MULTIARCH_DIRNAME' is not used for configurations that support
     both multilib and multiarch.  In that case, multiarch names are
     encoded in 'MULTILIB_OSDIRNAMES' instead.

     More documentation about multiarch can be found at
     <https://wiki.debian.org/Multiarch>.

'SPECS'
     Unfortunately, setting 'MULTILIB_EXTRA_OPTS' is not enough, since
     it does not affect the build of target libraries, at least not the
     build of the default multilib.  One possible work-around is to use
     'DRIVER_SELF_SPECS' to bring options from the 'specs' file as if
     they had been passed in the compiler driver command line.  However,
     you don't want to be adding these options after the toolchain is
     installed, so you can instead tweak the 'specs' file that will be
     used during the toolchain build, while you still install the
     original, built-in 'specs'.  The trick is to set 'SPECS' to some
     other filename (say 'specs.install'), that will then be created out
     of the built-in specs, and introduce a 'Makefile' rule to generate
     the 'specs' file that's going to be used at build time out of your
     'specs.install'.

'T_CFLAGS'
     These are extra flags to pass to the C compiler.  They are used
     both when building GCC, and when compiling things with the
     just-built GCC.  This variable is deprecated and should not be
     used.


File: gccint.info,  Node: Host Fragment,  Prev: Target Fragment,  Up: Fragments

19.2 Host Makefile Fragments
============================

The use of 'x-HOST' fragments is discouraged.  You should only use it
for makefile dependencies.


File: gccint.info,  Node: Collect2,  Next: Header Dirs,  Prev: Fragments,  Up: Top

20 'collect2'
*************

GCC uses a utility called 'collect2' on nearly all systems to arrange to
call various initialization functions at start time.

 The program 'collect2' works by linking the program once and looking
through the linker output file for symbols with particular names
indicating they are constructor functions.  If it finds any, it creates
a new temporary '.c' file containing a table of them, compiles it, and
links the program a second time including that file.

 The actual calls to the constructors are carried out by a subroutine
called '__main', which is called (automatically) at the beginning of the
body of 'main' (provided 'main' was compiled with GNU CC).  Calling
'__main' is necessary, even when compiling C code, to allow linking C
and C++ object code together.  (If you use '-nostdlib', you get an
unresolved reference to '__main', since it's defined in the standard GCC
library.  Include '-lgcc' at the end of your compiler command line to
resolve this reference.)

 The program 'collect2' is installed as 'ld' in the directory where the
passes of the compiler are installed.  When 'collect2' needs to find the
_real_ 'ld', it tries the following file names:

   * a hard coded linker file name, if GCC was configured with the
     '--with-ld' option.

   * 'real-ld' in the directories listed in the compiler's search
     directories.

   * 'real-ld' in the directories listed in the environment variable
     'PATH'.

   * The file specified in the 'REAL_LD_FILE_NAME' configuration macro,
     if specified.

   * 'ld' in the compiler's search directories, except that 'collect2'
     will not execute itself recursively.

   * 'ld' in 'PATH'.

 "The compiler's search directories" means all the directories where
'gcc' searches for passes of the compiler.  This includes directories
that you specify with '-B'.

 Cross-compilers search a little differently:

   * 'real-ld' in the compiler's search directories.

   * 'TARGET-real-ld' in 'PATH'.

   * The file specified in the 'REAL_LD_FILE_NAME' configuration macro,
     if specified.

   * 'ld' in the compiler's search directories.

   * 'TARGET-ld' in 'PATH'.

 'collect2' explicitly avoids running 'ld' using the file name under
which 'collect2' itself was invoked.  In fact, it remembers up a list of
such names--in case one copy of 'collect2' finds another copy (or
version) of 'collect2' installed as 'ld' in a second place in the search
path.

 'collect2' searches for the utilities 'nm' and 'strip' using the same
algorithm as above for 'ld'.


File: gccint.info,  Node: Header Dirs,  Next: Type Information,  Prev: Collect2,  Up: Top

21 Standard Header File Directories
***********************************

'GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
where GCC stores its private include files, and also where GCC stores
the fixed include files.  A cross compiled GCC runs 'fixincludes' on the
header files in '$(tooldir)/include'.  (If the cross compilation header
files need to be fixed, they must be installed before GCC is built.  If
the cross compilation header files are already suitable for GCC, nothing
special need be done).

 'GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross.  It
is where 'g++' looks first for header files.  The C++ library installs
only target independent header files in that directory.

 'LOCAL_INCLUDE_DIR' is used only by native compilers.  GCC doesn't
install anything there.  It is normally '/usr/local/include'.  This is
where local additions to a packaged system should place header files.

 'CROSS_INCLUDE_DIR' is used only by cross compilers.  GCC doesn't
install anything there.

 'TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It is
the place for other packages to install header files that GCC will use.
For a cross-compiler, this is the equivalent of '/usr/include'.  When
you build a cross-compiler, 'fixincludes' processes any header files in
this directory.


File: gccint.info,  Node: Type Information,  Next: Plugins,  Prev: Header Dirs,  Up: Top

22 Memory Management and Type Information
*****************************************

GCC uses some fairly sophisticated memory management techniques, which
involve determining information about GCC's data structures from GCC's
source code and using this information to perform garbage collection and
implement precompiled headers.

 A full C++ parser would be too complicated for this task, so a limited
subset of C++ is interpreted and special markers are used to determine
what parts of the source to look at.  All 'struct', 'union' and
'template' structure declarations that define data structures that are
allocated under control of the garbage collector must be marked.  All
global variables that hold pointers to garbage-collected memory must
also be marked.  Finally, all global variables that need to be saved and
restored by a precompiled header must be marked.  (The precompiled
header mechanism can only save static variables if they're scalar.
Complex data structures must be allocated in garbage-collected memory to
be saved in a precompiled header.)

 The full format of a marker is
     GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...))
but in most cases no options are needed.  The outer double parentheses
are still necessary, though: 'GTY(())'.  Markers can appear:

   * In a structure definition, before the open brace;
   * In a global variable declaration, after the keyword 'static' or
     'extern'; and
   * In a structure field definition, before the name of the field.

 Here are some examples of marking simple data structures and globals.

     struct GTY(()) TAG
     {
       FIELDS...
     };

     typedef struct GTY(()) TAG
     {
       FIELDS...
     } *TYPENAME;

     static GTY(()) struct TAG *LIST;   /* points to GC memory */
     static GTY(()) int COUNTER;        /* save counter in a PCH */

 The parser understands simple typedefs such as 'typedef struct TAG
*NAME;' and 'typedef int NAME;'.  These don't need to be marked.

 Since 'gengtype''s understanding of C++ is limited, there are several
constructs and declarations that are not supported inside
classes/structures marked for automatic GC code generation.  The
following C++ constructs produce a 'gengtype' error on
structures/classes marked for automatic GC code generation:

   * Type definitions inside classes/structures are not supported.
   * Enumerations inside classes/structures are not supported.

 If you have a class or structure using any of the above constructs, you
need to mark that class as 'GTY ((user))' and provide your own marking
routines (see section *note User GC:: for details).

 It is always valid to include function definitions inside classes.
Those are always ignored by 'gengtype', as it only cares about data
members.

* Menu:

* GTY Options::         What goes inside a 'GTY(())'.
* Inheritance and GTY:: Adding GTY to a class hierarchy.
* User GC::		Adding user-provided GC marking routines.
* GGC Roots::           Making global variables GGC roots.
* Files::               How the generated files work.
* Invoking the garbage collector::   How to invoke the garbage collector.
* Troubleshooting::     When something does not work as expected.


File: gccint.info,  Node: GTY Options,  Next: Inheritance and GTY,  Up: Type Information

22.1 The Inside of a 'GTY(())'
==============================

Sometimes the C code is not enough to fully describe the type structure.
Extra information can be provided with 'GTY' options and additional
markers.  Some options take a parameter, which may be either a string or
a type name, depending on the parameter.  If an option takes no
parameter, it is acceptable either to omit the parameter entirely, or to
provide an empty string as a parameter.  For example, 'GTY ((skip))' and
'GTY ((skip ("")))' are equivalent.

 When the parameter is a string, often it is a fragment of C code.  Four
special escapes may be used in these strings, to refer to pieces of the
data structure being marked:

'%h'
     The current structure.
'%1'
     The structure that immediately contains the current structure.
'%0'
     The outermost structure that contains the current structure.
'%a'
     A partial expression of the form '[i1][i2]...' that indexes the
     array item currently being marked.

 For instance, suppose that you have a structure of the form
     struct A {
       ...
     };
     struct B {
       struct A foo[12];
     };
and 'b' is a variable of type 'struct B'.  When marking 'b.foo[11]',
'%h' would expand to 'b.foo[11]', '%0' and '%1' would both expand to
'b', and '%a' would expand to '[11]'.

 As in ordinary C, adjacent strings will be concatenated; this is
helpful when you have a complicated expression.
     GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE"
                       " ? TYPE_NEXT_VARIANT (&%h.generic)"
                       " : TREE_CHAIN (&%h.generic)")))

 The available options are:

'length ("EXPRESSION")'

     There are two places the type machinery will need to be explicitly
     told the length of an array of non-atomic objects.  The first case
     is when a structure ends in a variable-length array, like this:
          struct GTY(()) rtvec_def {
            int num_elem;         /* number of elements */
            rtx GTY ((length ("%h.num_elem"))) elem[1];
          };

     In this case, the 'length' option is used to override the specified
     array length (which should usually be '1').  The parameter of the
     option is a fragment of C code that calculates the length.

     The second case is when a structure or a global variable contains a
     pointer to an array, like this:
          struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter;
     In this case, 'iter' has been allocated by writing something like
            x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse);
     and the 'collapse' provides the length of the field.

     This second use of 'length' also works on global variables, like:
     static GTY((length("reg_known_value_size"))) rtx *reg_known_value;

     Note that the 'length' option is only meant for use with arrays of
     non-atomic objects, that is, objects that contain pointers pointing
     to other GTY-managed objects.  For other GC-allocated arrays and
     strings you should use 'atomic'.

'skip'

     If 'skip' is applied to a field, the type machinery will ignore it.
     This is somewhat dangerous; the only safe use is in a union when
     one field really isn't ever used.

     Use this to mark types that need to be marked by user gc routines,
     but are not refered to in a template argument.  So if you have some
     user gc type T1 and a non user gc type T2 you can give T2 the
     for_user option so that the marking functions for T1 can call non
     mangled functions to mark T2.

'desc ("EXPRESSION")'
'tag ("CONSTANT")'
'default'

     The type machinery needs to be told which field of a 'union' is
     currently active.  This is done by giving each field a constant
     'tag' value, and then specifying a discriminator using 'desc'.  The
     value of the expression given by 'desc' is compared against each
     'tag' value, each of which should be different.  If no 'tag' is
     matched, the field marked with 'default' is used if there is one,
     otherwise no field in the union will be marked.

     In the 'desc' option, the "current structure" is the union that it
     discriminates.  Use '%1' to mean the structure containing it.
     There are no escapes available to the 'tag' option, since it is a
     constant.

     For example,
          struct GTY(()) tree_binding
          {
            struct tree_common common;
            union tree_binding_u {
              tree GTY ((tag ("0"))) scope;
              struct cp_binding_level * GTY ((tag ("1"))) level;
            } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope;
            tree value;
          };

     In this example, the value of BINDING_HAS_LEVEL_P when applied to a
     'struct tree_binding *' is presumed to be 0 or 1.  If 1, the type
     mechanism will treat the field 'level' as being present and if 0,
     will treat the field 'scope' as being present.

     The 'desc' and 'tag' options can also be used for inheritance to
     denote which subclass an instance is.  See *note Inheritance and
     GTY:: for more information.

'cache'

     When the 'cache' option is applied to a global variable
     gt_clear_cache is called on that variable between the mark and
     sweep phases of garbage collection.  The gt_clear_cache function is
     free to mark blocks as used, or to clear pointers in the variable.

'deletable'

     'deletable', when applied to a global variable, indicates that when
     garbage collection runs, there's no need to mark anything pointed
     to by this variable, it can just be set to 'NULL' instead.  This is
     used to keep a list of free structures around for re-use.

'maybe_undef'

     When applied to a field, 'maybe_undef' indicates that it's OK if
     the structure that this fields points to is never defined, so long
     as this field is always 'NULL'.  This is used to avoid requiring
     backends to define certain optional structures.  It doesn't work
     with language frontends.

'nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")'

     The type machinery expects all pointers to point to the start of an
     object.  Sometimes for abstraction purposes it's convenient to have
     a pointer which points inside an object.  So long as it's possible
     to convert the original object to and from the pointer, such
     pointers can still be used.  TYPE is the type of the original
     object, the TO EXPRESSION returns the pointer given the original
     object, and the FROM EXPRESSION returns the original object given
     the pointer.  The pointer will be available using the '%h' escape.

'chain_next ("EXPRESSION")'
'chain_prev ("EXPRESSION")'
'chain_circular ("EXPRESSION")'

     It's helpful for the type machinery to know if objects are often
     chained together in long lists; this lets it generate code that
     uses less stack space by iterating along the list instead of
     recursing down it.  'chain_next' is an expression for the next item
     in the list, 'chain_prev' is an expression for the previous item.
     For singly linked lists, use only 'chain_next'; for doubly linked
     lists, use both.  The machinery requires that taking the next item
     of the previous item gives the original item.  'chain_circular' is
     similar to 'chain_next', but can be used for circular single linked
     lists.

'reorder ("FUNCTION NAME")'

     Some data structures depend on the relative ordering of pointers.
     If the precompiled header machinery needs to change that ordering,
     it will call the function referenced by the 'reorder' option,
     before changing the pointers in the object that's pointed to by the
     field the option applies to.  The function must take four
     arguments, with the signature
     'void *, void *, gt_pointer_operator, void *'.  The first parameter
     is a pointer to the structure that contains the object being
     updated, or the object itself if there is no containing structure.
     The second parameter is a cookie that should be ignored.  The third
     parameter is a routine that, given a pointer, will update it to its
     correct new value.  The fourth parameter is a cookie that must be
     passed to the second parameter.

     PCH cannot handle data structures that depend on the absolute
     values of pointers.  'reorder' functions can be expensive.  When
     possible, it is better to depend on properties of the data, like an
     ID number or the hash of a string instead.

'atomic'

     The 'atomic' option can only be used with pointers.  It informs the
     GC machinery that the memory that the pointer points to does not
     contain any pointers, and hence it should be treated by the GC and
     PCH machinery as an "atomic" block of memory that does not need to
     be examined when scanning memory for pointers.  In particular, the
     machinery will not scan that memory for pointers to mark them as
     reachable (when marking pointers for GC) or to relocate them (when
     writing a PCH file).

     The 'atomic' option differs from the 'skip' option.  'atomic' keeps
     the memory under Garbage Collection, but makes the GC ignore the
     contents of the memory.  'skip' is more drastic in that it causes
     the pointer and the memory to be completely ignored by the Garbage
     Collector.  So, memory marked as 'atomic' is automatically freed
     when no longer reachable, while memory marked as 'skip' is not.

     The 'atomic' option must be used with great care, because all sorts
     of problem can occur if used incorrectly, that is, if the memory
     the pointer points to does actually contain a pointer.

     Here is an example of how to use it:
          struct GTY(()) my_struct {
            int number_of_elements;
            unsigned int * GTY ((atomic)) elements;
          };
     In this case, 'elements' is a pointer under GC, and the memory it
     points to needs to be allocated using the Garbage Collector, and
     will be freed automatically by the Garbage Collector when it is no
     longer referenced.  But the memory that the pointer points to is an
     array of 'unsigned int' elements, and the GC must not try to scan
     it to find pointers to mark or relocate, which is why it is marked
     with the 'atomic' option.

     Note that, currently, global variables can not be marked with
     'atomic'; only fields of a struct can.  This is a known limitation.
     It would be useful to be able to mark global pointers with 'atomic'
     to make the PCH machinery aware of them so that they are saved and
     restored correctly to PCH files.

'special ("NAME")'

     The 'special' option is used to mark types that have to be dealt
     with by special case machinery.  The parameter is the name of the
     special case.  See 'gengtype.c' for further details.  Avoid adding
     new special cases unless there is no other alternative.

'user'

     The 'user' option indicates that the code to mark structure fields
     is completely handled by user-provided routines.  See section *note
     User GC:: for details on what functions need to be provided.


File: gccint.info,  Node: Inheritance and GTY,  Next: User GC,  Prev: GTY Options,  Up: Type Information

22.2 Support for inheritance
============================

gengtype has some support for simple class hierarchies.  You can use
this to have gengtype autogenerate marking routines, provided:

   * There must be a concrete base class, with a discriminator
     expression that can be used to identify which subclass an instance
     is.
   * Only single inheritance is used.
   * None of the classes within the hierarchy are templates.

 If your class hierarchy does not fit in this pattern, you must use
*note User GC:: instead.

 The base class and its discriminator must be identified using the
"desc" option.  Each concrete subclass must use the "tag" option to
identify which value of the discriminator it corresponds to.

 Every class in the hierarchy must have a 'GTY(())' marker, as gengtype
will only attempt to parse classes that have such a marker (1).

     class GTY((desc("%h.kind"), tag("0"))) example_base
     {
     public:
         int kind;
         tree a;
     };

     class GTY((tag("1"))) some_subclass : public example_base
     {
     public:
         tree b;
     };

     class GTY((tag("2"))) some_other_subclass : public example_base
     {
     public:
         tree c;
     };

 The generated marking routines for the above will contain a "switch" on
"kind", visiting all appropriate fields.  For example, if kind is 2, it
will cast to "some_other_subclass" and visit fields a, b, and c.

   ---------- Footnotes ----------

   (1) Classes lacking such a marker will not be identified as being
part of the hierarchy, and so the marking routines will not handle them,
leading to a assertion failure within the marking routines due to an
unknown tag value (assuming that assertions are enabled).


File: gccint.info,  Node: User GC,  Next: GGC Roots,  Prev: Inheritance and GTY,  Up: Type Information

22.3 Support for user-provided GC marking routines
==================================================

The garbage collector supports types for which no automatic marking code
is generated.  For these types, the user is required to provide three
functions: one to act as a marker for garbage collection, and two
functions to act as marker and pointer walker for pre-compiled headers.

 Given a structure 'struct GTY((user)) my_struct', the following
functions should be defined to mark 'my_struct':

     void gt_ggc_mx (my_struct *p)
     {
       /* This marks field 'fld'.  */
       gt_ggc_mx (p->fld);
     }

     void gt_pch_nx (my_struct *p)
     {
       /* This marks field 'fld'.  */
       gt_pch_nx (tp->fld);
     }

     void gt_pch_nx (my_struct *p, gt_pointer_operator op, void *cookie)
     {
       /* For every field 'fld', call the given pointer operator.  */
       op (&(tp->fld), cookie);
     }

 In general, each marker 'M' should call 'M' for every pointer field in
the structure.  Fields that are not allocated in GC or are not pointers
must be ignored.

 For embedded lists (e.g., structures with a 'next' or 'prev' pointer),
the marker must follow the chain and mark every element in it.

 Note that the rules for the pointer walker 'gt_pch_nx (my_struct *,
gt_pointer_operator, void *)' are slightly different.  In this case, the
operation 'op' must be applied to the _address_ of every pointer field.

22.3.1 User-provided marking routines for template types
--------------------------------------------------------

When a template type 'TP' is marked with 'GTY', all instances of that
type are considered user-provided types.  This means that the individual
instances of 'TP' do not need to be marked with 'GTY'.  The user needs
to provide template functions to mark all the fields of the type.

 The following code snippets represent all the functions that need to be
provided.  Note that type 'TP' may reference to more than one type.  In
these snippets, there is only one type 'T', but there could be more.

     template<typename T>
     void gt_ggc_mx (TP<T> *tp)
     {
       extern void gt_ggc_mx (T&);

       /* This marks field 'fld' of type 'T'.  */
       gt_ggc_mx (tp->fld);
     }

     template<typename T>
     void gt_pch_nx (TP<T> *tp)
     {
       extern void gt_pch_nx (T&);

       /* This marks field 'fld' of type 'T'.  */
       gt_pch_nx (tp->fld);
     }

     template<typename T>
     void gt_pch_nx (TP<T *> *tp, gt_pointer_operator op, void *cookie)
     {
       /* For every field 'fld' of 'tp' with type 'T *', call the given
          pointer operator.  */
       op (&(tp->fld), cookie);
     }

     template<typename T>
     void gt_pch_nx (TP<T> *tp, gt_pointer_operator, void *cookie)
     {
       extern void gt_pch_nx (T *, gt_pointer_operator, void *);

       /* For every field 'fld' of 'tp' with type 'T', call the pointer
          walker for all the fields of T.  */
       gt_pch_nx (&(tp->fld), op, cookie);
     }

 Support for user-defined types is currently limited.  The following
restrictions apply:

  1. Type 'TP' and all the argument types 'T' must be marked with 'GTY'.

  2. Type 'TP' can only have type names in its argument list.

  3. The pointer walker functions are different for 'TP<T>' and 'TP<T
     *>'.  In the case of 'TP<T>', references to 'T' must be handled by
     calling 'gt_pch_nx' (which will, in turn, walk all the pointers
     inside fields of 'T').  In the case of 'TP<T *>', references to 'T
     *' must be handled by calling the 'op' function on the address of
     the pointer (see the code snippets above).


File: gccint.info,  Node: GGC Roots,  Next: Files,  Prev: User GC,  Up: Type Information

22.4 Marking Roots for the Garbage Collector
============================================

In addition to keeping track of types, the type machinery also locates
the global variables ("roots") that the garbage collector starts at.
Roots must be declared using one of the following syntaxes:

   * 'extern GTY(([OPTIONS])) TYPE NAME;'
   * 'static GTY(([OPTIONS])) TYPE NAME;'
The syntax
   * 'GTY(([OPTIONS])) TYPE NAME;'
is _not_ accepted.  There should be an 'extern' declaration of such a
variable in a header somewhere--mark that, not the definition.  Or, if
the variable is only used in one file, make it 'static'.


File: gccint.info,  Node: Files,  Next: Invoking the garbage collector,  Prev: GGC Roots,  Up: Type Information

22.5 Source Files Containing Type Information
=============================================

Whenever you add 'GTY' markers to a source file that previously had
none, or create a new source file containing 'GTY' markers, there are
three things you need to do:

  1. You need to add the file to the list of source files the type
     machinery scans.  There are four cases:

       a. For a back-end file, this is usually done automatically; if
          not, you should add it to 'target_gtfiles' in the appropriate
          port's entries in 'config.gcc'.

       b. For files shared by all front ends, add the filename to the
          'GTFILES' variable in 'Makefile.in'.

       c. For files that are part of one front end, add the filename to
          the 'gtfiles' variable defined in the appropriate
          'config-lang.in'.  Headers should appear before non-headers in
          this list.

       d. For files that are part of some but not all front ends, add
          the filename to the 'gtfiles' variable of _all_ the front ends
          that use it.

  2. If the file was a header file, you'll need to check that it's
     included in the right place to be visible to the generated files.
     For a back-end header file, this should be done automatically.  For
     a front-end header file, it needs to be included by the same file
     that includes 'gtype-LANG.h'.  For other header files, it needs to
     be included in 'gtype-desc.c', which is a generated file, so add it
     to 'ifiles' in 'open_base_file' in 'gengtype.c'.

     For source files that aren't header files, the machinery will
     generate a header file that should be included in the source file
     you just changed.  The file will be called 'gt-PATH.h' where PATH
     is the pathname relative to the 'gcc' directory with slashes
     replaced by -, so for example the header file to be included in
     'cp/parser.c' is called 'gt-cp-parser.c'.  The generated header
     file should be included after everything else in the source file.
     Don't forget to mention this file as a dependency in the
     'Makefile'!

 For language frontends, there is another file that needs to be included
somewhere.  It will be called 'gtype-LANG.h', where LANG is the name of
the subdirectory the language is contained in.

 Plugins can add additional root tables.  Run the 'gengtype' utility in
plugin mode as 'gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C'
with your plugin files PLUGIN*.C using 'GTY' to generate the PLUGINOUT.H
file.  The GCC build tree is needed to be present in that mode.


File: gccint.info,  Node: Invoking the garbage collector,  Next: Troubleshooting,  Prev: Files,  Up: Type Information

22.6 How to invoke the garbage collector
========================================

The GCC garbage collector GGC is only invoked explicitly.  In contrast
with many other garbage collectors, it is not implicitly invoked by
allocation routines when a lot of memory has been consumed.  So the only
way to have GGC reclaim storage is to call the 'ggc_collect' function
explicitly.  This call is an expensive operation, as it may have to scan
the entire heap.  Beware that local variables (on the GCC call stack)
are not followed by such an invocation (as many other garbage collectors
do): you should reference all your data from static or external 'GTY'-ed
variables, and it is advised to call 'ggc_collect' with a shallow call
stack.  The GGC is an exact mark and sweep garbage collector (so it does
not scan the call stack for pointers).  In practice GCC passes don't
often call 'ggc_collect' themselves, because it is called by the pass
manager between passes.

 At the time of the 'ggc_collect' call all pointers in the GC-marked
structures must be valid or 'NULL'.  In practice this means that there
should not be uninitialized pointer fields in the structures even if
your code never reads or writes those fields at a particular instance.
One way to ensure this is to use cleared versions of allocators unless
all the fields are initialized manually immediately after allocation.


File: gccint.info,  Node: Troubleshooting,  Prev: Invoking the garbage collector,  Up: Type Information

22.7 Troubleshooting the garbage collector
==========================================

With the current garbage collector implementation, most issues should
show up as GCC compilation errors.  Some of the most commonly
encountered issues are described below.

   * Gengtype does not produce allocators for a 'GTY'-marked type.
     Gengtype checks if there is at least one possible path from GC
     roots to at least one instance of each type before outputting
     allocators.  If there is no such path, the 'GTY' markers will be
     ignored and no allocators will be output.  Solve this by making
     sure that there exists at least one such path.  If creating it is
     unfeasible or raises a "code smell", consider if you really must
     use GC for allocating such type.

   * Link-time errors about undefined 'gt_ggc_r_foo_bar' and
     similarly-named symbols.  Check if your 'foo_bar' source file has
     '#include "gt-foo_bar.h"' as its very last line.


File: gccint.info,  Node: Plugins,  Next: LTO,  Prev: Type Information,  Up: Top

23 Plugins
**********

GCC plugins are loadable modules that provide extra features to the
compiler.  Like GCC itself they can be distributed in source and binary
forms.

 GCC plugins provide developers with a rich subset of the GCC API to
allow them to extend GCC as they see fit.  Whether it is writing an
additional optimization pass, transforming code, or analyzing
information, plugins can be quite useful.

* Menu:

* Plugins loading::      How can we load plugins.
* Plugin API::           The APIs for plugins.
* Plugins pass::         How a plugin interact with the pass manager.
* Plugins GC::           How a plugin Interact with GCC Garbage Collector.
* Plugins description::  Giving information about a plugin itself.
* Plugins attr::         Registering custom attributes or pragmas.
* Plugins recording::    Recording information about pass execution.
* Plugins gate::         Controlling which passes are being run.
* Plugins tracking::     Keeping track of available passes.
* Plugins building::     How can we build a plugin.


File: gccint.info,  Node: Plugins loading,  Next: Plugin API,  Up: Plugins

23.1 Loading Plugins
====================

Plugins are supported on platforms that support '-ldl -rdynamic'.  They
are loaded by the compiler using 'dlopen' and invoked at pre-determined
locations in the compilation process.

 Plugins are loaded with

 '-fplugin=/path/to/NAME.so' '-fplugin-arg-NAME-KEY1[=VALUE1]'

 The plugin arguments are parsed by GCC and passed to respective plugins
as key-value pairs.  Multiple plugins can be invoked by specifying
multiple '-fplugin' arguments.

 A plugin can be simply given by its short name (no dots or slashes).
When simply passing '-fplugin=NAME', the plugin is loaded from the
'plugin' directory, so '-fplugin=NAME' is the same as '-fplugin=`gcc
-print-file-name=plugin`/NAME.so', using backquote shell syntax to query
the 'plugin' directory.


File: gccint.info,  Node: Plugin API,  Next: Plugins pass,  Prev: Plugins loading,  Up: Plugins

23.2 Plugin API
===============

Plugins are activated by the compiler at specific events as defined in
'gcc-plugin.h'.  For each event of interest, the plugin should call
'register_callback' specifying the name of the event and address of the
callback function that will handle that event.

 The header 'gcc-plugin.h' must be the first gcc header to be included.

23.2.1 Plugin license check
---------------------------

Every plugin should define the global symbol 'plugin_is_GPL_compatible'
to assert that it has been licensed under a GPL-compatible license.  If
this symbol does not exist, the compiler will emit a fatal error and
exit with the error message:

     fatal error: plugin NAME is not licensed under a GPL-compatible license
     NAME: undefined symbol: plugin_is_GPL_compatible
     compilation terminated

 The declared type of the symbol should be int, to match a forward
declaration in 'gcc-plugin.h' that suppresses C++ mangling.  It does not
need to be in any allocated section, though.  The compiler merely
asserts that the symbol exists in the global scope.  Something like this
is enough:

     int plugin_is_GPL_compatible;

23.2.2 Plugin initialization
----------------------------

Every plugin should export a function called 'plugin_init' that is
called right after the plugin is loaded.  This function is responsible
for registering all the callbacks required by the plugin and do any
other required initialization.

 This function is called from 'compile_file' right before invoking the
parser.  The arguments to 'plugin_init' are:

   * 'plugin_info': Plugin invocation information.
   * 'version': GCC version.

 The 'plugin_info' struct is defined as follows:

     struct plugin_name_args
     {
       char *base_name;              /* Short name of the plugin
                                        (filename without .so suffix). */
       const char *full_name;        /* Path to the plugin as specified with
                                        -fplugin=. */
       int argc;                     /* Number of arguments specified with
                                        -fplugin-arg-.... */
       struct plugin_argument *argv; /* Array of ARGC key-value pairs. */
       const char *version;          /* Version string provided by plugin. */
       const char *help;             /* Help string provided by plugin. */
     }

 If initialization fails, 'plugin_init' must return a non-zero value.
Otherwise, it should return 0.

 The version of the GCC compiler loading the plugin is described by the
following structure:

     struct plugin_gcc_version
     {
       const char *basever;
       const char *datestamp;
       const char *devphase;
       const char *revision;
       const char *configuration_arguments;
     };

 The function 'plugin_default_version_check' takes two pointers to such
structure and compare them field by field.  It can be used by the
plugin's 'plugin_init' function.

 The version of GCC used to compile the plugin can be found in the
symbol 'gcc_version' defined in the header 'plugin-version.h'.  The
recommended version check to perform looks like

     #include "plugin-version.h"
     ...

     int
     plugin_init (struct plugin_name_args *plugin_info,
                  struct plugin_gcc_version *version)
     {
       if (!plugin_default_version_check (version, &gcc_version))
         return 1;

     }

 but you can also check the individual fields if you want a less strict
check.

23.2.3 Plugin callbacks
-----------------------

Callback functions have the following prototype:

     /* The prototype for a plugin callback function.
          gcc_data  - event-specific data provided by GCC
          user_data - plugin-specific data provided by the plug-in.  */
     typedef void (*plugin_callback_func)(void *gcc_data, void *user_data);

 Callbacks can be invoked at the following pre-determined events:

     enum plugin_event
     {
       PLUGIN_START_PARSE_FUNCTION,  /* Called before parsing the body of a function. */
       PLUGIN_FINISH_PARSE_FUNCTION, /* After finishing parsing a function. */
       PLUGIN_PASS_MANAGER_SETUP,    /* To hook into pass manager.  */
       PLUGIN_FINISH_TYPE,           /* After finishing parsing a type.  */
       PLUGIN_FINISH_DECL,           /* After finishing parsing a declaration. */
       PLUGIN_FINISH_UNIT,           /* Useful for summary processing.  */
       PLUGIN_PRE_GENERICIZE,        /* Allows to see low level AST in C and C++ frontends.  */
       PLUGIN_FINISH,                /* Called before GCC exits.  */
       PLUGIN_INFO,                  /* Information about the plugin. */
       PLUGIN_GGC_START,             /* Called at start of GCC Garbage Collection. */
       PLUGIN_GGC_MARKING,           /* Extend the GGC marking. */
       PLUGIN_GGC_END,               /* Called at end of GGC. */
       PLUGIN_REGISTER_GGC_ROOTS,    /* Register an extra GGC root table. */
       PLUGIN_ATTRIBUTES,            /* Called during attribute registration */
       PLUGIN_START_UNIT,            /* Called before processing a translation unit.  */
       PLUGIN_PRAGMAS,               /* Called during pragma registration. */
       /* Called before first pass from all_passes.  */
       PLUGIN_ALL_PASSES_START,
       /* Called after last pass from all_passes.  */
       PLUGIN_ALL_PASSES_END,
       /* Called before first ipa pass.  */
       PLUGIN_ALL_IPA_PASSES_START,
       /* Called after last ipa pass.  */
       PLUGIN_ALL_IPA_PASSES_END,
       /* Allows to override pass gate decision for current_pass.  */
       PLUGIN_OVERRIDE_GATE,
       /* Called before executing a pass.  */
       PLUGIN_PASS_EXECUTION,
       /* Called before executing subpasses of a GIMPLE_PASS in
          execute_ipa_pass_list.  */
       PLUGIN_EARLY_GIMPLE_PASSES_START,
       /* Called after executing subpasses of a GIMPLE_PASS in
          execute_ipa_pass_list.  */
       PLUGIN_EARLY_GIMPLE_PASSES_END,
       /* Called when a pass is first instantiated.  */
       PLUGIN_NEW_PASS,
     /* Called when a file is #include-d or given via the #line directive.
        This could happen many times.  The event data is the included file path,
        as a const char* pointer.  */
       PLUGIN_INCLUDE_FILE,

       PLUGIN_EVENT_FIRST_DYNAMIC    /* Dummy event used for indexing callback
                                        array.  */
     };

 In addition, plugins can also look up the enumerator of a named event,
and / or generate new events dynamically, by calling the function
'get_named_event_id'.

 To register a callback, the plugin calls 'register_callback' with the
arguments:

   * 'char *name': Plugin name.
   * 'int event': The event code.
   * 'plugin_callback_func callback': The function that handles 'event'.
   * 'void *user_data': Pointer to plugin-specific data.

 For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO, and
PLUGIN_REGISTER_GGC_ROOTS pseudo-events the 'callback' should be null,
and the 'user_data' is specific.

 When the PLUGIN_PRAGMAS event is triggered (with a null pointer as data
from GCC), plugins may register their own pragmas.  Notice that pragmas
are not available from 'lto1', so plugins used with '-flto' option to
GCC during link-time optimization cannot use pragmas and do not even see
functions like 'c_register_pragma' or 'pragma_lex'.

 The PLUGIN_INCLUDE_FILE event, with a 'const char*' file path as GCC
data, is triggered for processing of '#include' or '#line' directives.

 The PLUGIN_FINISH event is the last time that plugins can call GCC
functions, notably emit diagnostics with 'warning', 'error' etc.


File: gccint.info,  Node: Plugins pass,  Next: Plugins GC,  Prev: Plugin API,  Up: Plugins

23.3 Interacting with the pass manager
======================================

There needs to be a way to add/reorder/remove passes dynamically.  This
is useful for both analysis plugins (plugging in after a certain pass
such as CFG or an IPA pass) and optimization plugins.

 Basic support for inserting new passes or replacing existing passes is
provided.  A plugin registers a new pass with GCC by calling
'register_callback' with the 'PLUGIN_PASS_MANAGER_SETUP' event and a
pointer to a 'struct register_pass_info' object defined as follows

     enum pass_positioning_ops
     {
       PASS_POS_INSERT_AFTER,  // Insert after the reference pass.
       PASS_POS_INSERT_BEFORE, // Insert before the reference pass.
       PASS_POS_REPLACE        // Replace the reference pass.
     };

     struct register_pass_info
     {
       struct opt_pass *pass;            /* New pass provided by the plugin.  */
       const char *reference_pass_name;  /* Name of the reference pass for hooking
                                            up the new pass.  */
       int ref_pass_instance_number;     /* Insert the pass at the specified
                                            instance number of the reference pass.  */
                                         /* Do it for every instance if it is 0.  */
       enum pass_positioning_ops pos_op; /* how to insert the new pass.  */
     };


     /* Sample plugin code that registers a new pass.  */
     int
     plugin_init (struct plugin_name_args *plugin_info,
                  struct plugin_gcc_version *version)
     {
       struct register_pass_info pass_info;

       ...

       /* Code to fill in the pass_info object with new pass information.  */

       ...

       /* Register the new pass.  */
       register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info);

       ...
     }


File: gccint.info,  Node: Plugins GC,  Next: Plugins description,  Prev: Plugins pass,  Up: Plugins

23.4 Interacting with the GCC Garbage Collector
===============================================

Some plugins may want to be informed when GGC (the GCC Garbage
Collector) is running.  They can register callbacks for the
'PLUGIN_GGC_START' and 'PLUGIN_GGC_END' events (for which the callback
is called with a null 'gcc_data') to be notified of the start or end of
the GCC garbage collection.

 Some plugins may need to have GGC mark additional data.  This can be
done by registering a callback (called with a null 'gcc_data') for the
'PLUGIN_GGC_MARKING' event.  Such callbacks can call the 'ggc_set_mark'
routine, preferably through the 'ggc_mark' macro (and conversely, these
routines should usually not be used in plugins outside of the
'PLUGIN_GGC_MARKING' event).  Plugins that wish to hold weak references
to gc data may also use this event to drop weak references when the
object is about to be collected.  The 'ggc_marked_p' function can be
used to tell if an object is marked, or is about to be collected.  The
'gt_clear_cache' overloads which some types define may also be of use in
managing weak references.

 Some plugins may need to add extra GGC root tables, e.g.  to handle
their own 'GTY'-ed data.  This can be done with the
'PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the
extra root table (of type 'struct ggc_root_tab*') as 'user_data'.
Running the 'gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility
generates these extra root tables.

 You should understand the details of memory management inside GCC
before using 'PLUGIN_GGC_MARKING' or 'PLUGIN_REGISTER_GGC_ROOTS'.


File: gccint.info,  Node: Plugins description,  Next: Plugins attr,  Prev: Plugins GC,  Up: Plugins

23.5 Giving information about a plugin
======================================

A plugin should give some information to the user about itself.  This
uses the following structure:

     struct plugin_info
     {
       const char *version;
       const char *help;
     };

 Such a structure is passed as the 'user_data' by the plugin's init
routine using 'register_callback' with the 'PLUGIN_INFO' pseudo-event
and a null callback.


File: gccint.info,  Node: Plugins attr,  Next: Plugins recording,  Prev: Plugins description,  Up: Plugins

23.6 Registering custom attributes or pragmas
=============================================

For analysis (or other) purposes it is useful to be able to add custom
attributes or pragmas.

 The 'PLUGIN_ATTRIBUTES' callback is called during attribute
registration.  Use the 'register_attribute' function to register custom
attributes.

     /* Attribute handler callback */
     static tree
     handle_user_attribute (tree *node, tree name, tree args,
                            int flags, bool *no_add_attrs)
     {
       return NULL_TREE;
     }

     /* Attribute definition */
     static struct attribute_spec user_attr =
       { "user", 1, 1, false,  false, false, handle_user_attribute, false };

     /* Plugin callback called during attribute registration.
     Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL)
     */
     static void
     register_attributes (void *event_data, void *data)
     {
       warning (0, G_("Callback to register attributes"));
       register_attribute (&user_attr);
     }


 The PLUGIN_PRAGMAS callback is called once during pragmas registration.
Use the 'c_register_pragma', 'c_register_pragma_with_data',
'c_register_pragma_with_expansion',
'c_register_pragma_with_expansion_and_data' functions to register custom
pragmas and their handlers (which often want to call 'pragma_lex') from
'c-family/c-pragma.h'.

     /* Plugin callback called during pragmas registration. Registered with
          register_callback (plugin_name, PLUGIN_PRAGMAS,
                             register_my_pragma, NULL);
     */
     static void
     register_my_pragma (void *event_data, void *data)
     {
       warning (0, G_("Callback to register pragmas"));
       c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello);
     }

 It is suggested to pass '"GCCPLUGIN"' (or a short name identifying your
plugin) as the "space" argument of your pragma.

 Pragmas registered with 'c_register_pragma_with_expansion' or
'c_register_pragma_with_expansion_and_data' support preprocessor
expansions.  For example:

     #define NUMBER 10
     #pragma GCCPLUGIN foothreshold (NUMBER)


File: gccint.info,  Node: Plugins recording,  Next: Plugins gate,  Prev: Plugins attr,  Up: Plugins

23.7 Recording information about pass execution
===============================================

The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass
(the same as current_pass) as 'gcc_data' to the callback.  You can also
inspect cfun to find out about which function this pass is executed for.
Note that this event will only be invoked if the gate check (if
applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds.  You can use
other hooks, like 'PLUGIN_ALL_PASSES_START', 'PLUGIN_ALL_PASSES_END',
'PLUGIN_ALL_IPA_PASSES_START', 'PLUGIN_ALL_IPA_PASSES_END',
'PLUGIN_EARLY_GIMPLE_PASSES_START', and/or
'PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your
plugin(s) in order to get context for the pass execution.


File: gccint.info,  Node: Plugins gate,  Next: Plugins tracking,  Prev: Plugins recording,  Up: Plugins

23.8 Controlling which passes are being run
===========================================

After the original gate function for a pass is called, its result - the
gate status - is stored as an integer.  Then the event
'PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in
the 'gcc_data' parameter to the callback function.  A nonzero value of
the gate status means that the pass is to be executed.  You can both
read and write the gate status via the passed pointer.


File: gccint.info,  Node: Plugins tracking,  Next: Plugins building,  Prev: Plugins gate,  Up: Plugins

23.9 Keeping track of available passes
======================================

When your plugin is loaded, you can inspect the various pass lists to
determine what passes are available.  However, other plugins might add
new passes.  Also, future changes to GCC might cause generic passes to
be added after plugin loading.  When a pass is first added to one of the
pass lists, the event 'PLUGIN_NEW_PASS' is invoked, with the callback
parameter 'gcc_data' pointing to the new pass.


File: gccint.info,  Node: Plugins building,  Prev: Plugins tracking,  Up: Plugins

23.10 Building GCC plugins
==========================

If plugins are enabled, GCC installs the headers needed to build a
plugin (somewhere in the installation tree, e.g.  under '/usr/local').
In particular a 'plugin/include' directory is installed, containing all
the header files needed to build plugins.

 On most systems, you can query this 'plugin' directory by invoking 'gcc
-print-file-name=plugin' (replace if needed 'gcc' with the appropriate
program path).

 Inside plugins, this 'plugin' directory name can be queried by calling
'default_plugin_dir_name ()'.

 Plugins may know, when they are compiled, the GCC version for which
'plugin-version.h' is provided.  The constant macros
'GCCPLUGIN_VERSION_MAJOR', 'GCCPLUGIN_VERSION_MINOR',
'GCCPLUGIN_VERSION_PATCHLEVEL', 'GCCPLUGIN_VERSION' are integer numbers,
so a plugin could ensure it is built for GCC 4.7 with
     #if GCCPLUGIN_VERSION != 4007
     #error this GCC plugin is for GCC 4.7
     #endif

 The following GNU Makefile excerpt shows how to build a simple plugin:

     HOST_GCC=g++
     TARGET_GCC=gcc
     PLUGIN_SOURCE_FILES= plugin1.c plugin2.cc
     GCCPLUGINS_DIR:= $(shell $(TARGET_GCC) -print-file-name=plugin)
     CXXFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -fno-rtti -O2

     plugin.so: $(PLUGIN_SOURCE_FILES)
        $(HOST_GCC) -shared $(CXXFLAGS) $^ -o $@

 A single source file plugin may be built with 'g++ -I`gcc
-print-file-name=plugin`/include -fPIC -shared -fno-rtti -O2 plugin.c -o
plugin.so', using backquote shell syntax to query the 'plugin'
directory.

 When a plugin needs to use 'gengtype', be sure that both 'gengtype' and
'gtype.state' have the same version as the GCC for which the plugin is
built.


File: gccint.info,  Node: LTO,  Next: Match and Simplify,  Prev: Plugins,  Up: Top

24 Link Time Optimization
*************************

Link Time Optimization (LTO) gives GCC the capability of dumping its
internal representation (GIMPLE) to disk, so that all the different
compilation units that make up a single executable can be optimized as a
single module.  This expands the scope of inter-procedural optimizations
to encompass the whole program (or, rather, everything that is visible
at link time).

* Menu:

* LTO Overview::            Overview of LTO.
* LTO object file layout::  LTO file sections in ELF.
* IPA::                     Using summary information in IPA passes.
* WHOPR::                   Whole program assumptions,
                            linker plugin and symbol visibilities.
* Internal flags::          Internal flags controlling 'lto1'.


File: gccint.info,  Node: LTO Overview,  Next: LTO object file layout,  Up: LTO

24.1 Design Overview
====================

Link time optimization is implemented as a GCC front end for a bytecode
representation of GIMPLE that is emitted in special sections of '.o'
files.  Currently, LTO support is enabled in most ELF-based systems, as
well as darwin, cygwin and mingw systems.

 Since GIMPLE bytecode is saved alongside final object code, object
files generated with LTO support are larger than regular object files.
This "fat" object format makes it easy to integrate LTO into existing
build systems, as one can, for instance, produce archives of the files.
Additionally, one might be able to ship one set of fat objects which
could be used both for development and the production of optimized
builds.  A, perhaps surprising, side effect of this feature is that any
mistake in the toolchain that leads to LTO information not being used
(e.g. an older 'libtool' calling 'ld' directly).  This is both an
advantage, as the system is more robust, and a disadvantage, as the user
is not informed that the optimization has been disabled.

 The current implementation only produces "fat" objects, effectively
doubling compilation time and increasing file sizes up to 5x the
original size.  This hides the problem that some tools, such as 'ar' and
'nm', need to understand symbol tables of LTO sections.  These tools
were extended to use the plugin infrastructure, and with these problems
solved, GCC will also support "slim" objects consisting of the
intermediate code alone.

 At the highest level, LTO splits the compiler in two.  The first half
(the "writer") produces a streaming representation of all the internal
data structures needed to optimize and generate code.  This includes
declarations, types, the callgraph and the GIMPLE representation of
function bodies.

 When '-flto' is given during compilation of a source file, the pass
manager executes all the passes in 'all_lto_gen_passes'.  Currently,
this phase is composed of two IPA passes:

   * 'pass_ipa_lto_gimple_out' This pass executes the function
     'lto_output' in 'lto-streamer-out.c', which traverses the call
     graph encoding every reachable declaration, type and function.
     This generates a memory representation of all the file sections
     described below.

   * 'pass_ipa_lto_finish_out' This pass executes the function
     'produce_asm_for_decls' in 'lto-streamer-out.c', which takes the
     memory image built in the previous pass and encodes it in the
     corresponding ELF file sections.

 The second half of LTO support is the "reader".  This is implemented as
the GCC front end 'lto1' in 'lto/lto.c'.  When 'collect2' detects a link
set of '.o'/'.a' files with LTO information and the '-flto' is enabled,
it invokes 'lto1' which reads the set of files and aggregates them into
a single translation unit for optimization.  The main entry point for
the reader is 'lto/lto.c':'lto_main'.

24.1.1 LTO modes of operation
-----------------------------

One of the main goals of the GCC link-time infrastructure was to allow
effective compilation of large programs.  For this reason GCC implements
two link-time compilation modes.

  1. _LTO mode_, in which the whole program is read into the compiler at
     link-time and optimized in a similar way as if it were a single
     source-level compilation unit.

  2. _WHOPR or partitioned mode_, designed to utilize multiple CPUs
     and/or a distributed compilation environment to quickly link large
     applications.  WHOPR stands for WHOle Program optimizeR (not to be
     confused with the semantics of '-fwhole-program').  It partitions
     the aggregated callgraph from many different '.o' files and
     distributes the compilation of the sub-graphs to different CPUs.

     Note that distributed compilation is not implemented yet, but since
     the parallelism is facilitated via generating a 'Makefile', it
     would be easy to implement.

 WHOPR splits LTO into three main stages:
  1. Local generation (LGEN) This stage executes in parallel.  Every
     file in the program is compiled into the intermediate language and
     packaged together with the local call-graph and summary
     information.  This stage is the same for both the LTO and WHOPR
     compilation mode.

  2. Whole Program Analysis (WPA) WPA is performed sequentially.  The
     global call-graph is generated, and a global analysis procedure
     makes transformation decisions.  The global call-graph is
     partitioned to facilitate parallel optimization during phase 3.
     The results of the WPA stage are stored into new object files which
     contain the partitions of program expressed in the intermediate
     language and the optimization decisions.

  3. Local transformations (LTRANS) This stage executes in parallel.
     All the decisions made during phase 2 are implemented locally in
     each partitioned object file, and the final object code is
     generated.  Optimizations which cannot be decided efficiently
     during the phase 2 may be performed on the local call-graph
     partitions.

 WHOPR can be seen as an extension of the usual LTO mode of compilation.
In LTO, WPA and LTRANS are executed within a single execution of the
compiler, after the whole program has been read into memory.

 When compiling in WHOPR mode, the callgraph is partitioned during the
WPA stage.  The whole program is split into a given number of partitions
of roughly the same size.  The compiler tries to minimize the number of
references which cross partition boundaries.  The main advantage of
WHOPR is to allow the parallel execution of LTRANS stages, which are the
most time-consuming part of the compilation process.  Additionally, it
avoids the need to load the whole program into memory.


File: gccint.info,  Node: LTO object file layout,  Next: IPA,  Prev: LTO Overview,  Up: LTO

24.2 LTO file sections
======================

LTO information is stored in several ELF sections inside object files.
Data structures and enum codes for sections are defined in
'lto-streamer.h'.

 These sections are emitted from 'lto-streamer-out.c' and mapped in all
at once from 'lto/lto.c':'lto_file_read'.  The individual functions
dealing with the reading/writing of each section are described below.

   * Command line options ('.gnu.lto_.opts')

     This section contains the command line options used to generate the
     object files.  This is used at link time to determine the
     optimization level and other settings when they are not explicitly
     specified at the linker command line.

     Currently, GCC does not support combining LTO object files compiled
     with different set of the command line options into a single
     binary.  At link time, the options given on the command line and
     the options saved on all the files in a link-time set are applied
     globally.  No attempt is made at validating the combination of
     flags (other than the usual validation done by option processing).
     This is implemented in 'lto/lto.c':'lto_read_all_file_options'.

   * Symbol table ('.gnu.lto_.symtab')

     This table replaces the ELF symbol table for functions and
     variables represented in the LTO IL. Symbols used and exported by
     the optimized assembly code of "fat" objects might not match the
     ones used and exported by the intermediate code.  This table is
     necessary because the intermediate code is less optimized and thus
     requires a separate symbol table.

     Additionally, the binary code in the "fat" object will lack a call
     to a function, since the call was optimized out at compilation time
     after the intermediate language was streamed out.  In some special
     cases, the same optimization may not happen during link-time
     optimization.  This would lead to an undefined symbol if only one
     symbol table was used.

     The symbol table is emitted in
     'lto-streamer-out.c':'produce_symtab'.

   * Global declarations and types ('.gnu.lto_.decls')

     This section contains an intermediate language dump of all
     declarations and types required to represent the callgraph, static
     variables and top-level debug info.

     The contents of this section are emitted in
     'lto-streamer-out.c':'produce_asm_for_decls'.  Types and symbols
     are emitted in a topological order that preserves the sharing of
     pointers when the file is read back in
     ('lto.c':'read_cgraph_and_symbols').

   * The callgraph ('.gnu.lto_.cgraph')

     This section contains the basic data structure used by the GCC
     inter-procedural optimization infrastructure.  This section stores
     an annotated multi-graph which represents the functions and call
     sites as well as the variables, aliases and top-level 'asm'
     statements.

     This section is emitted in 'lto-streamer-out.c':'output_cgraph' and
     read in 'lto-cgraph.c':'input_cgraph'.

   * IPA references ('.gnu.lto_.refs')

     This section contains references between function and static
     variables.  It is emitted by 'lto-cgraph.c':'output_refs' and read
     by 'lto-cgraph.c':'input_refs'.

   * Function bodies ('.gnu.lto_.function_body.<name>')

     This section contains function bodies in the intermediate language
     representation.  Every function body is in a separate section to
     allow copying of the section independently to different object
     files or reading the function on demand.

     Functions are emitted in 'lto-streamer-out.c':'output_function' and
     read in 'lto-streamer-in.c':'input_function'.

   * Static variable initializers ('.gnu.lto_.vars')

     This section contains all the symbols in the global variable pool.
     It is emitted by 'lto-cgraph.c':'output_varpool' and read in
     'lto-cgraph.c':'input_cgraph'.

   * Summaries and optimization summaries used by IPA passes
     ('.gnu.lto_.<xxx>', where '<xxx>' is one of 'jmpfuncs', 'pureconst'
     or 'reference')

     These sections are used by IPA passes that need to emit summary
     information during LTO generation to be read and aggregated at link
     time.  Each pass is responsible for implementing two pass manager
     hooks: one for writing the summary and another for reading it in.
     The format of these sections is entirely up to each individual
     pass.  The only requirement is that the writer and reader hooks
     agree on the format.


File: gccint.info,  Node: IPA,  Next: WHOPR,  Prev: LTO object file layout,  Up: LTO

24.3 Using summary information in IPA passes
============================================

Programs are represented internally as a _callgraph_ (a multi-graph
where nodes are functions and edges are call sites) and a _varpool_ (a
list of static and external variables in the program).

 The inter-procedural optimization is organized as a sequence of
individual passes, which operate on the callgraph and the varpool.  To
make the implementation of WHOPR possible, every inter-procedural
optimization pass is split into several stages that are executed at
different times during WHOPR compilation:

   * LGEN time
       1. _Generate summary_ ('generate_summary' in 'struct
          ipa_opt_pass_d').  This stage analyzes every function body and
          variable initializer is examined and stores relevant
          information into a pass-specific data structure.

       2. _Write summary_ ('write_summary' in 'struct ipa_opt_pass_d').
          This stage writes all the pass-specific information generated
          by 'generate_summary'.  Summaries go into their own
          'LTO_section_*' sections that have to be declared in
          'lto-streamer.h':'enum lto_section_type'.  A new section is
          created by calling 'create_output_block' and data can be
          written using the 'lto_output_*' routines.

   * WPA time
       1. _Read summary_ ('read_summary' in 'struct ipa_opt_pass_d').
          This stage reads all the pass-specific information in exactly
          the same order that it was written by 'write_summary'.

       2. _Execute_ ('execute' in 'struct opt_pass').  This performs
          inter-procedural propagation.  This must be done without
          actual access to the individual function bodies or variable
          initializers.  Typically, this results in a transitive closure
          operation over the summary information of all the nodes in the
          callgraph.

       3. _Write optimization summary_ ('write_optimization_summary' in
          'struct ipa_opt_pass_d').  This writes the result of the
          inter-procedural propagation into the object file.  This can
          use the same data structures and helper routines used in
          'write_summary'.

   * LTRANS time
       1. _Read optimization summary_ ('read_optimization_summary' in
          'struct ipa_opt_pass_d').  The counterpart to
          'write_optimization_summary'.  This reads the interprocedural
          optimization decisions in exactly the same format emitted by
          'write_optimization_summary'.

       2. _Transform_ ('function_transform' and 'variable_transform' in
          'struct ipa_opt_pass_d').  The actual function bodies and
          variable initializers are updated based on the information
          passed down from the _Execute_ stage.

 The implementation of the inter-procedural passes are shared between
LTO, WHOPR and classic non-LTO compilation.

   * During the traditional file-by-file mode every pass executes its
     own _Generate summary_, _Execute_, and _Transform_ stages within
     the single execution context of the compiler.

   * In LTO compilation mode, every pass uses _Generate summary_ and
     _Write summary_ stages at compilation time, while the _Read
     summary_, _Execute_, and _Transform_ stages are executed at link
     time.

   * In WHOPR mode all stages are used.

 To simplify development, the GCC pass manager differentiates between
normal inter-procedural passes and small inter-procedural passes.  A
_small inter-procedural pass_ ('SIMPLE_IPA_PASS') is a pass that does
everything at once and thus it can not be executed during WPA in WHOPR
mode.  It defines only the _Execute_ stage and during this stage it
accesses and modifies the function bodies.  Such passes are useful for
optimization at LGEN or LTRANS time and are used, for example, to
implement early optimization before writing object files.  The simple
inter-procedural passes can also be used for easier prototyping and
development of a new inter-procedural pass.

24.3.1 Virtual clones
---------------------

One of the main challenges of introducing the WHOPR compilation mode was
addressing the interactions between optimization passes.  In LTO
compilation mode, the passes are executed in a sequence, each of which
consists of analysis (or _Generate summary_), propagation (or _Execute_)
and _Transform_ stages.  Once the work of one pass is finished, the next
pass sees the updated program representation and can execute.  This
makes the individual passes dependent on each other.

 In WHOPR mode all passes first execute their _Generate summary_ stage.
Then summary writing marks the end of the LGEN stage.  At WPA time, the
summaries are read back into memory and all passes run the _Execute_
stage.  Optimization summaries are streamed and sent to LTRANS, where
all the passes execute the _Transform_ stage.

 Most optimization passes split naturally into analysis, propagation and
transformation stages.  But some do not.  The main problem arises when
one pass performs changes and the following pass gets confused by seeing
different callgraphs between the _Transform_ stage and the _Generate
summary_ or _Execute_ stage.  This means that the passes are required to
communicate their decisions with each other.

 To facilitate this communication, the GCC callgraph infrastructure
implements _virtual clones_, a method of representing the changes
performed by the optimization passes in the callgraph without needing to
update function bodies.

 A _virtual clone_ in the callgraph is a function that has no associated
body, just a description of how to create its body based on a different
function (which itself may be a virtual clone).

 The description of function modifications includes adjustments to the
function's signature (which allows, for example, removing or adding
function arguments), substitutions to perform on the function body, and,
for inlined functions, a pointer to the function that it will be inlined
into.

 It is also possible to redirect any edge of the callgraph from a
function to its virtual clone.  This implies updating of the call site
to adjust for the new function signature.

 Most of the transformations performed by inter-procedural optimizations
can be represented via virtual clones.  For instance, a constant
propagation pass can produce a virtual clone of the function which
replaces one of its arguments by a constant.  The inliner can represent
its decisions by producing a clone of a function whose body will be
later integrated into a given function.

 Using _virtual clones_, the program can be easily updated during the
_Execute_ stage, solving most of pass interactions problems that would
otherwise occur during _Transform_.

 Virtual clones are later materialized in the LTRANS stage and turned
into real functions.  Passes executed after the virtual clone were
introduced also perform their _Transform_ stage on new functions, so for
a pass there is no significant difference between operating on a real
function or a virtual clone introduced before its _Execute_ stage.

 Optimization passes then work on virtual clones introduced before their
_Execute_ stage as if they were real functions.  The only difference is
that clones are not visible during the _Generate Summary_ stage.

 To keep function summaries updated, the callgraph interface allows an
optimizer to register a callback that is called every time a new clone
is introduced as well as when the actual function or variable is
generated or when a function or variable is removed.  These hooks are
registered in the _Generate summary_ stage and allow the pass to keep
its information intact until the _Execute_ stage.  The same hooks can
also be registered during the _Execute_ stage to keep the optimization
summaries updated for the _Transform_ stage.

24.3.2 IPA references
---------------------

GCC represents IPA references in the callgraph.  For a function or
variable 'A', the _IPA reference_ is a list of all locations where the
address of 'A' is taken and, when 'A' is a variable, a list of all
direct stores and reads to/from 'A'.  References represent an oriented
multi-graph on the union of nodes of the callgraph and the varpool.  See
'ipa-reference.c':'ipa_reference_write_optimization_summary' and
'ipa-reference.c':'ipa_reference_read_optimization_summary' for details.

24.3.3 Jump functions
---------------------

Suppose that an optimization pass sees a function 'A' and it knows the
values of (some of) its arguments.  The _jump function_ describes the
value of a parameter of a given function call in function 'A' based on
this knowledge.

 Jump functions are used by several optimizations, such as the
inter-procedural constant propagation pass and the devirtualization
pass.  The inliner also uses jump functions to perform inlining of
callbacks.


File: gccint.info,  Node: WHOPR,  Next: Internal flags,  Prev: IPA,  Up: LTO

24.4 Whole program assumptions, linker plugin and symbol visibilities
=====================================================================

Link-time optimization gives relatively minor benefits when used alone.
The problem is that propagation of inter-procedural information does not
work well across functions and variables that are called or referenced
by other compilation units (such as from a dynamically linked library).
We say that such functions and variables are _externally visible_.

 To make the situation even more difficult, many applications organize
themselves as a set of shared libraries, and the default ELF visibility
rules allow one to overwrite any externally visible symbol with a
different symbol at runtime.  This basically disables any optimizations
across such functions and variables, because the compiler cannot be sure
that the function body it is seeing is the same function body that will
be used at runtime.  Any function or variable not declared 'static' in
the sources degrades the quality of inter-procedural optimization.

 To avoid this problem the compiler must assume that it sees the whole
program when doing link-time optimization.  Strictly speaking, the whole
program is rarely visible even at link-time.  Standard system libraries
are usually linked dynamically or not provided with the link-time
information.  In GCC, the whole program option ('-fwhole-program')
asserts that every function and variable defined in the current
compilation unit is static, except for function 'main' (note: at link
time, the current unit is the union of all objects compiled with LTO).
Since some functions and variables need to be referenced externally, for
example by another DSO or from an assembler file, GCC also provides the
function and variable attribute 'externally_visible' which can be used
to disable the effect of '-fwhole-program' on a specific symbol.

 The whole program mode assumptions are slightly more complex in C++,
where inline functions in headers are put into _COMDAT_ sections.
COMDAT function and variables can be defined by multiple object files
and their bodies are unified at link-time and dynamic link-time.  COMDAT
functions are changed to local only when their address is not taken and
thus un-sharing them with a library is not harmful.  COMDAT variables
always remain externally visible, however for readonly variables it is
assumed that their initializers cannot be overwritten by a different
value.

 GCC provides the function and variable attribute 'visibility' that can
be used to specify the visibility of externally visible symbols (or
alternatively an '-fdefault-visibility' command line option).  ELF
defines the 'default', 'protected', 'hidden' and 'internal'
visibilities.

 The most commonly used is visibility is 'hidden'.  It specifies that
the symbol cannot be referenced from outside of the current shared
library.  Unfortunately, this information cannot be used directly by the
link-time optimization in the compiler since the whole shared library
also might contain non-LTO objects and those are not visible to the
compiler.

 GCC solves this problem using linker plugins.  A _linker plugin_ is an
interface to the linker that allows an external program to claim the
ownership of a given object file.  The linker then performs the linking
procedure by querying the plugin about the symbol table of the claimed
objects and once the linking decisions are complete, the plugin is
allowed to provide the final object file before the actual linking is
made.  The linker plugin obtains the symbol resolution information which
specifies which symbols provided by the claimed objects are bound from
the rest of a binary being linked.

 GCC is designed to be independent of the rest of the toolchain and aims
to support linkers without plugin support.  For this reason it does not
use the linker plugin by default.  Instead, the object files are
examined by 'collect2' before being passed to the linker and objects
found to have LTO sections are passed to 'lto1' first.  This mode does
not work for library archives.  The decision on what object files from
the archive are needed depends on the actual linking and thus GCC would
have to implement the linker itself.  The resolution information is
missing too and thus GCC needs to make an educated guess based on
'-fwhole-program'.  Without the linker plugin GCC also assumes that
symbols are declared 'hidden' and not referred by non-LTO code by
default.


File: gccint.info,  Node: Internal flags,  Prev: WHOPR,  Up: LTO

24.5 Internal flags controlling 'lto1'
======================================

The following flags are passed into 'lto1' and are not meant to be used
directly from the command line.

   * -fwpa This option runs the serial part of the link-time optimizer
     performing the inter-procedural propagation (WPA mode).  The
     compiler reads in summary information from all inputs and performs
     an analysis based on summary information only.  It generates object
     files for subsequent runs of the link-time optimizer where
     individual object files are optimized using both summary
     information from the WPA mode and the actual function bodies.  It
     then drives the LTRANS phase.

   * -fltrans This option runs the link-time optimizer in the
     local-transformation (LTRANS) mode, which reads in output from a
     previous run of the LTO in WPA mode.  In the LTRANS mode, LTO
     optimizes an object and produces the final assembly.

   * -fltrans-output-list=FILE This option specifies a file to which the
     names of LTRANS output files are written.  This option is only
     meaningful in conjunction with '-fwpa'.

   * -fresolution=FILE This option specifies the linker resolution file.
     This option is only meaningful in conjunction with '-fwpa' and as
     option to pass through to the LTO linker plugin.


File: gccint.info,  Node: Match and Simplify,  Next: Funding,  Prev: LTO,  Up: Top

25 Match and Simplify
*********************

The GIMPLE and GENERIC pattern matching project match-and-simplify tries
to address several issues.

  1. unify expression simplifications currently spread and duplicated
     over separate files like fold-const.c, gimple-fold.c and builtins.c
  2. allow for a cheap way to implement building and simplifying
     non-trivial GIMPLE expressions, avoiding the need to go through
     building and simplifying GENERIC via fold_buildN and then
     gimplifying via force_gimple_operand

 To address these the project introduces a simple domain specific
language to write expression simplifications from which code targeting
GIMPLE and GENERIC is auto-generated.  The GENERIC variant follows the
fold_buildN API while for the GIMPLE variant and to address 2) new APIs
are introduced.

* Menu:

* GIMPLE API::
* The Language::


File: gccint.info,  Node: GIMPLE API,  Next: The Language,  Up: Match and Simplify

25.1 GIMPLE API
===============

 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree,
          gimple_seq *, tree (*)(tree))
 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree,
          tree, gimple_seq *, tree (*)(tree))
 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree,
          tree, tree, gimple_seq *, tree (*)(tree))
 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree,
          tree, gimple_seq *, tree (*)(tree))
 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree,
          tree, tree, gimple_seq *, tree (*)(tree))
 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree,
          tree, tree, tree, gimple_seq *, tree (*)(tree))
     The main GIMPLE API entry to the expression simplifications
     mimicing that of the GENERIC fold_{unary,binary,ternary} functions.

 thus providing n-ary overloads for operation or function.  The
additional arguments are a gimple_seq where built statements are
inserted on (if 'NULL' then simplifications requiring new statements are
not performed) and a valueization hook that can be used to tie
simplifications to a SSA lattice.

 In addition to those APIs 'fold_stmt' is overloaded with a valueization
hook:

 -- bool: fold_stmt (gimple_stmt_iterator *, tree (*)(tree));

 Ontop of these a 'fold_buildN'-like API for GIMPLE is introduced:

 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
          tree_code, tree, tree, tree (*valueize) (tree) = NULL);
 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
          tree_code, tree, tree, tree, tree (*valueize) (tree) = NULL);
 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
          tree_code, tree, tree, tree, tree, tree (*valueize) (tree) =
          NULL);
 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
          built_in_function, tree, tree, tree (*valueize) (tree) =
          NULL);
 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
          built_in_function, tree, tree, tree, tree (*valueize) (tree) =
          NULL);
 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
          built_in_function, tree, tree, tree, tree, tree (*valueize)
          (tree) = NULL);
 -- GIMPLE function: tree gimple_convert (gimple_seq *, location_t,
          tree, tree);

 which is supposed to replace 'force_gimple_operand (fold_buildN (...),
...)' and calls to 'fold_convert'.  Overloads without the 'location_t'
argument exist.  Built statements are inserted on the provided sequence
and simplification is performed using the optional valueization hook.


File: gccint.info,  Node: The Language,  Prev: GIMPLE API,  Up: Match and Simplify

25.2 The Language
=================

The language to write expression simplifications in resembles other
domain-specific languages GCC uses.  Thus it is lispy.  Lets start with
an example from the match.pd file:

     (simplify
       (bit_and @0 integer_all_onesp)
       @0)

 This example contains all required parts of an expression
simplification.  A simplification is wrapped inside a '(simplify ...)'
expression.  That contains at least two operands - an expression that is
matched with the GIMPLE or GENERIC IL and a replacement expression that
is returned if the match was successful.

 Expressions have an operator ID, 'bit_and' in this case.  Expressions
can be lower-case tree codes with '_expr' stripped off or builtin
function code names in all-caps, like 'BUILT_IN_SQRT'.

 '@n' denotes a so-called capture.  It captures the operand and lets you
refer to it in other places of the match-and-simplify.  In the above
example it is refered to in the replacement expression.  Captures are
'@' followed by a number or an identifier.

     (simplify
       (bit_xor @0 @0)
       { build_zero_cst (type); })

 In this example '@0' is mentioned twice which constrains the matched
expression to have two equal operands.  This example also introduces
operands written in C code.  These can be used in the expression
replacements and are supposed to evaluate to a tree node which has to be
a valid GIMPLE operand (so you cannot generate expressions in C code).

     (simplify
       (trunc_mod integer_zerop@0 @1)
       (if (!integer_zerop (@1))
        @0))

 Here '@0' captures the first operand of the trunc_mod expression which
is also predicated with 'integer_zerop'.  Expression operands may be
either expressions, predicates or captures.  Captures can be
unconstrained or capture expresions or predicates.

 This example introduces an optional operand of simplify, the
if-expression.  This condition is evaluated after the expression matched
in the IL and is required to evaluate to true to enable the replacement
expression in the second operand position.  The expression operand of
the 'if' is a standard C expression which may contain references to
captures.  The 'if' has an optional third operand which may contain the
replacement expression that is enabled when the condition evaluates to
false.

 A 'if' expression can be used to specify a common condition for
multiple simplify patterns, avoiding the need to repeat that multiple
times:

     (if (!TYPE_SATURATING (type)
          && !FLOAT_TYPE_P (type) && !FIXED_POINT_TYPE_P (type))
       (simplify
         (minus (plus @0 @1) @0)
         @1)
       (simplify
         (minus (minus @0 @1) @0)
         (negate @1)))

 Note that 'if's in outer position do not have the optional else clause
but instead have multiple then clauses.

 Ifs can be nested.

 There exists a 'switch' expression which can be used to chain
conditions avoiding nesting 'if's too much:

     (simplify
      (simple_comparison @0 REAL_CST@1)
      (switch
       /* a CMP (-0) -> a CMP 0  */
       (if (REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (@1)))
        (cmp @0 { build_real (TREE_TYPE (@1), dconst0); }))
       /* x != NaN is always true, other ops are always false.  */
       (if (REAL_VALUE_ISNAN (TREE_REAL_CST (@1))
            && ! HONOR_SNANS (@1))
        { constant_boolean_node (cmp == NE_EXPR, type); })))

 Is equal to

     (simplify
      (simple_comparison @0 REAL_CST@1)
      (switch
       /* a CMP (-0) -> a CMP 0  */
       (if (REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (@1)))
        (cmp @0 { build_real (TREE_TYPE (@1), dconst0); })
        /* x != NaN is always true, other ops are always false.  */
        (if (REAL_VALUE_ISNAN (TREE_REAL_CST (@1))
             && ! HONOR_SNANS (@1))
         { constant_boolean_node (cmp == NE_EXPR, type); }))))

 which has the second 'if' in the else operand of the first.  The
'switch' expression takes 'if' expressions as operands (which may not
have else clauses) and as a last operand a replacement expression which
should be enabled by default if no other condition evaluated to true.

 Captures can also be used for capturing results of sub-expressions.

     #if GIMPLE
     (simplify
       (pointer_plus (addr@2 @0) INTEGER_CST_P@1)
       (if (is_gimple_min_invariant (@2)))
       {
         HOST_WIDE_INT off;
         tree base = get_addr_base_and_unit_offset (@0, &off);
         off += tree_to_uhwi (@1);
         /* Now with that we should be able to simply write
            (addr (mem_ref (addr @base) (plus @off @1)))  */
         build1 (ADDR_EXPR, type,
                 build2 (MEM_REF, TREE_TYPE (TREE_TYPE (@2)),
                         build_fold_addr_expr (base),
                         build_int_cst (ptr_type_node, off)));
       })
     #endif

 In the above example, '@2' captures the result of the expression '(addr
@0)'.  For outermost expression only its type can be captured, and the
keyword 'type' is reserved for this purpose.  The above example also
gives a way to conditionalize patterns to only apply to 'GIMPLE' or
'GENERIC' by means of using the pre-defined preprocessor macros 'GIMPLE'
and 'GENERIC' and using preprocessor directives.

     (simplify
       (bit_and:c integral_op_p@0 (bit_ior:c (bit_not @0) @1))
       (bit_and @1 @0))

 Here we introduce flags on match expressions.  The flag used above,
'c', denotes that the expression should be also matched commutated.
Thus the above match expression is really the following four match
expressions:

       (bit_and integral_op_p@0 (bit_ior (bit_not @0) @1))
       (bit_and (bit_ior (bit_not @0) @1) integral_op_p@0)
       (bit_and integral_op_p@0 (bit_ior @1 (bit_not @0)))
       (bit_and (bit_ior @1 (bit_not @0)) integral_op_p@0)

 Usual canonicalizations you know from GENERIC expressions are applied
before matching, so for example constant operands always come second in
commutative expressions.

 The second supported flag is 's' which tells the code generator to fail
the pattern if the expression marked with 's' does have more than one
use.  For example in

     (simplify
       (pointer_plus (pointer_plus:s @0 @1) @3)
       (pointer_plus @0 (plus @1 @3)))

 this avoids the association if '(pointer_plus @0 @1)' is used outside
of the matched expression and thus it would stay live and not trivially
removed by dead code elimination.

 More features exist to avoid too much repetition.

     (for op (plus pointer_plus minus bit_ior bit_xor)
       (simplify
         (op @0 integer_zerop)
         @0))

 A 'for' expression can be used to repeat a pattern for each operator
specified, substituting 'op'.  'for' can be nested and a 'for' can have
multiple operators to iterate.

     (for opa (plus minus)
          opb (minus plus)
       (for opc (plus minus)
         (simplify...

 In this example the pattern will be repeated four times with 'opa, opb,
opc' being 'plus, minus, plus', 'plus, minus, minus', 'minus, plus,
plus', 'minus, plus, minus'.

 To avoid repeating operator lists in 'for' you can name them via

     (define_operator_list pmm plus minus mult)

 and use them in 'for' operator lists where they get expanded.

     (for opa (pmm trunc_div)
      (simplify...

 So this example iterates over 'plus', 'minus', 'mult' and 'trunc_div'.

 Using operator lists can also remove the need to explicitely write a
'for'.  All operator list uses that appear in a 'simplify' or 'match'
pattern in operator positions will implicitely be added to a new 'for'.
For example

     (define_operator_list SQRT BUILT_IN_SQRTF BUILT_IN_SQRT BUILT_IN_SQRTL)
     (define_operator_list POW BUILT_IN_POWF BUILT_IN_POW BUILT_IN_POWL)
     (simplify
      (SQRT (POW @0 @1))
      (POW (abs @0) (mult @1 { built_real (TREE_TYPE (@1), dconsthalf); })))

 is the same as

     (for SQRT (BUILT_IN_SQRTF BUILT_IN_SQRT BUILT_IN_SQRTL)
          POW (BUILT_IN_POWF BUILT_IN_POW BUILT_IN_POWL)
      (simplify
       (SQRT (POW @0 @1))
       (POW (abs @0) (mult @1 { built_real (TREE_TYPE (@1), dconsthalf); }))))

 'for's and operator lists can include the special identifier 'null'
that matches nothing and can never be generated.  This can be used to
pad an operator list so that it has a standard form, even if there isn't
a suitable operator for every form.

 Another building block are 'with' expressions in the result expression
which nest the generated code in a new C block followed by its argument:

     (simplify
      (convert (mult @0 @1))
      (with { tree utype = unsigned_type_for (type); }
       (convert (mult (convert:utype @0) (convert:utype @1)))))

 This allows code nested in the 'with' to refer to the declared
variables.  In the above case we use the feature to specify the type of
a generated expression with the ':type' syntax where 'type' needs to be
an identifier that refers to the desired type.  Usually the types of the
generated result expressions are determined from the context, but
sometimes like in the above case it is required that you specify them
explicitely.

 As intermediate conversions are often optional there is a way to avoid
the need to repeat patterns both with and without such conversions.
Namely you can mark a conversion as being optional with a '?':

     (simplify
      (eq (convert@0 @1) (convert? @2))
      (eq @1 (convert @2)))

 which will match both '(eq (convert @1) (convert @2))' and '(eq
(convert @1) @2)'.  The optional converts are supposed to be all either
present or not, thus '(eq (convert? @1) (convert? @2))' will result in
two patterns only.  If you want to match all four combinations you have
access to two additional conditional converts as in '(eq (convert1? @1)
(convert2? @2))'.

 Predicates available from the GCC middle-end need to be made available
explicitely via 'define_predicates':

     (define_predicates
      integer_onep integer_zerop integer_all_onesp)

 You can also define predicates using the pattern matching language and
the 'match' form:

     (match negate_expr_p
      INTEGER_CST
      (if (TYPE_OVERFLOW_WRAPS (type)
           || may_negate_without_overflow_p (t))))
     (match negate_expr_p
      (negate @0))

 This shows that for 'match' expressions there is 't' available which
captures the outermost expression (something not possible in the
'simplify' context).  As you can see 'match' has an identifier as first
operand which is how you refer to the predicate in patterns.  Multiple
'match' for the same identifier add additional cases where the predicate
matches.

 Predicates can also match an expression in which case you need to
provide a template specifying the identifier and where to get its
operands from:

     (match (logical_inverted_value @0)
      (eq @0 integer_zerop))
     (match (logical_inverted_value @0)
      (bit_not truth_valued_p@0))

 You can use the above predicate like

     (simplify
      (bit_and @0 (logical_inverted_value @0))
      { build_zero_cst (type); })

 Which will match a bitwise and of an operand with its logical inverted
value.


File: gccint.info,  Node: Funding,  Next: GNU Project,  Prev: Match and Simplify,  Up: Top

Funding Free Software
*********************

If you want to have more free software a few years from now, it makes
sense for you to help encourage people to contribute funds for its
development.  The most effective approach known is to encourage
commercial redistributors to donate.

 Users of free software systems can boost the pace of development by
encouraging for-a-fee distributors to donate part of their selling price
to free software developers--the Free Software Foundation, and others.

 The way to convince distributors to do this is to demand it and expect
it from them.  So when you compare distributors, judge them partly by
how much they give to free software development.  Show distributors they
must compete to be the one who gives the most.

 To make this approach work, you must insist on numbers that you can
compare, such as, "We will donate ten dollars to the Frobnitz project
for each disk sold."  Don't be satisfied with a vague promise, such as
"A portion of the profits are donated," since it doesn't give a basis
for comparison.

 Even a precise fraction "of the profits from this disk" is not very
meaningful, since creative accounting and unrelated business decisions
can greatly alter what fraction of the sales price counts as profit.  If
the price you pay is $50, ten percent of the profit is probably less
than a dollar; it might be a few cents, or nothing at all.

 Some redistributors do development work themselves.  This is useful
too; but to keep everyone honest, you need to inquire how much they do,
and what kind.  Some kinds of development make much more long-term
difference than others.  For example, maintaining a separate version of
a program contributes very little; maintaining the standard version of a
program for the whole community contributes much.  Easy new ports
contribute little, since someone else would surely do them; difficult
ports such as adding a new CPU to the GNU Compiler Collection contribute
more; major new features or packages contribute the most.

 By establishing the idea that supporting further development is "the
proper thing to do" when distributing free software for a fee, we can
assure a steady flow of resources into making more free software.

     Copyright (C) 1994 Free Software Foundation, Inc.
     Verbatim copying and redistribution of this section is permitted
     without royalty; alteration is not permitted.


File: gccint.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top

The GNU Project and GNU/Linux
*****************************

The GNU Project was launched in 1984 to develop a complete Unix-like
operating system which is free software: the GNU system.  (GNU is a
recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
Variants of the GNU operating system, which use the kernel Linux, are
now widely used; though these systems are often referred to as "Linux",
they are more accurately called GNU/Linux systems.

 For more information, see:
     <http://www.gnu.org/>
     <http://www.gnu.org/gnu/linux-and-gnu.html>


File: gccint.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top

GNU General Public License
**************************

                        Version 3, 29 June 2007

     Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>

     Everyone is permitted to copy and distribute verbatim copies of this
     license document, but changing it is not allowed.

Preamble
========

The GNU General Public License is a free, copyleft license for software
and other kinds of works.

 The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program-to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

 When we speak of free software, we are referring to freedom, not price.
Our General Public Licenses are designed to make sure that you have the
freedom to distribute copies of free software (and charge for them if
you wish), that you receive source code or can get it if you want it,
that you can change the software or use pieces of it in new free
programs, and that you know you can do these things.

 To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

 For example, if you distribute copies of such a program, whether gratis
or for a fee, you must pass on to the recipients the same freedoms that
you received.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

 Developers that use the GNU GPL protect your rights with two steps: (1)
assert copyright on the software, and (2) offer you this License giving
you legal permission to copy, distribute and/or modify it.

 For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

 Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

 Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

 The precise terms and conditions for copying, distribution and
modification follow.

TERMS AND CONDITIONS
====================

  0. Definitions.

     "This License" refers to version 3 of the GNU General Public
     License.

     "Copyright" also means copyright-like laws that apply to other
     kinds of works, such as semiconductor masks.

     "The Program" refers to any copyrightable work licensed under this
     License.  Each licensee is addressed as "you".  "Licensees" and
     "recipients" may be individuals or organizations.

     To "modify" a work means to copy from or adapt all or part of the
     work in a fashion requiring copyright permission, other than the
     making of an exact copy.  The resulting work is called a "modified
     version" of the earlier work or a work "based on" the earlier work.

     A "covered work" means either the unmodified Program or a work
     based on the Program.

     To "propagate" a work means to do anything with it that, without
     permission, would make you directly or secondarily liable for
     infringement under applicable copyright law, except executing it on
     a computer or modifying a private copy.  Propagation includes
     copying, distribution (with or without modification), making
     available to the public, and in some countries other activities as
     well.

     To "convey" a work means any kind of propagation that enables other
     parties to make or receive copies.  Mere interaction with a user
     through a computer network, with no transfer of a copy, is not
     conveying.

     An interactive user interface displays "Appropriate Legal Notices"
     to the extent that it includes a convenient and prominently visible
     feature that (1) displays an appropriate copyright notice, and (2)
     tells the user that there is no warranty for the work (except to
     the extent that warranties are provided), that licensees may convey
     the work under this License, and how to view a copy of this
     License.  If the interface presents a list of user commands or
     options, such as a menu, a prominent item in the list meets this
     criterion.

  1. Source Code.

     The "source code" for a work means the preferred form of the work
     for making modifications to it.  "Object code" means any non-source
     form of a work.

     A "Standard Interface" means an interface that either is an
     official standard defined by a recognized standards body, or, in
     the case of interfaces specified for a particular programming
     language, one that is widely used among developers working in that
     language.

     The "System Libraries" of an executable work include anything,
     other than the work as a whole, that (a) is included in the normal
     form of packaging a Major Component, but which is not part of that
     Major Component, and (b) serves only to enable use of the work with
     that Major Component, or to implement a Standard Interface for
     which an implementation is available to the public in source code
     form.  A "Major Component", in this context, means a major
     essential component (kernel, window system, and so on) of the
     specific operating system (if any) on which the executable work
     runs, or a compiler used to produce the work, or an object code
     interpreter used to run it.

     The "Corresponding Source" for a work in object code form means all
     the source code needed to generate, install, and (for an executable
     work) run the object code and to modify the work, including scripts
     to control those activities.  However, it does not include the
     work's System Libraries, or general-purpose tools or generally
     available free programs which are used unmodified in performing
     those activities but which are not part of the work.  For example,
     Corresponding Source includes interface definition files associated
     with source files for the work, and the source code for shared
     libraries and dynamically linked subprograms that the work is
     specifically designed to require, such as by intimate data
     communication or control flow between those subprograms and other
     parts of the work.

     The Corresponding Source need not include anything that users can
     regenerate automatically from other parts of the Corresponding
     Source.

     The Corresponding Source for a work in source code form is that
     same work.

  2. Basic Permissions.

     All rights granted under this License are granted for the term of
     copyright on the Program, and are irrevocable provided the stated
     conditions are met.  This License explicitly affirms your unlimited
     permission to run the unmodified Program.  The output from running
     a covered work is covered by this License only if the output, given
     its content, constitutes a covered work.  This License acknowledges
     your rights of fair use or other equivalent, as provided by
     copyright law.

     You may make, run and propagate covered works that you do not
     convey, without conditions so long as your license otherwise
     remains in force.  You may convey covered works to others for the
     sole purpose of having them make modifications exclusively for you,
     or provide you with facilities for running those works, provided
     that you comply with the terms of this License in conveying all
     material for which you do not control copyright.  Those thus making
     or running the covered works for you must do so exclusively on your
     behalf, under your direction and control, on terms that prohibit
     them from making any copies of your copyrighted material outside
     their relationship with you.

     Conveying under any other circumstances is permitted solely under
     the conditions stated below.  Sublicensing is not allowed; section
     10 makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

     No covered work shall be deemed part of an effective technological
     measure under any applicable law fulfilling obligations under
     article 11 of the WIPO copyright treaty adopted on 20 December
     1996, or similar laws prohibiting or restricting circumvention of
     such measures.

     When you convey a covered work, you waive any legal power to forbid
     circumvention of technological measures to the extent such
     circumvention is effected by exercising rights under this License
     with respect to the covered work, and you disclaim any intention to
     limit operation or modification of the work as a means of
     enforcing, against the work's users, your or third parties' legal
     rights to forbid circumvention of technological measures.

  4. Conveying Verbatim Copies.

     You may convey verbatim copies of the Program's source code as you
     receive it, in any medium, provided that you conspicuously and
     appropriately publish on each copy an appropriate copyright notice;
     keep intact all notices stating that this License and any
     non-permissive terms added in accord with section 7 apply to the
     code; keep intact all notices of the absence of any warranty; and
     give all recipients a copy of this License along with the Program.

     You may charge any price or no price for each copy that you convey,
     and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

     You may convey a work based on the Program, or the modifications to
     produce it from the Program, in the form of source code under the
     terms of section 4, provided that you also meet all of these
     conditions:

       a. The work must carry prominent notices stating that you
          modified it, and giving a relevant date.

       b. The work must carry prominent notices stating that it is
          released under this License and any conditions added under
          section 7.  This requirement modifies the requirement in
          section 4 to "keep intact all notices".

       c. You must license the entire work, as a whole, under this
          License to anyone who comes into possession of a copy.  This
          License will therefore apply, along with any applicable
          section 7 additional terms, to the whole of the work, and all
          its parts, regardless of how they are packaged.  This License
          gives no permission to license the work in any other way, but
          it does not invalidate such permission if you have separately
          received it.

       d. If the work has interactive user interfaces, each must display
          Appropriate Legal Notices; however, if the Program has
          interactive interfaces that do not display Appropriate Legal
          Notices, your work need not make them do so.

     A compilation of a covered work with other separate and independent
     works, which are not by their nature extensions of the covered
     work, and which are not combined with it such as to form a larger
     program, in or on a volume of a storage or distribution medium, is
     called an "aggregate" if the compilation and its resulting
     copyright are not used to limit the access or legal rights of the
     compilation's users beyond what the individual works permit.
     Inclusion of a covered work in an aggregate does not cause this
     License to apply to the other parts of the aggregate.

  6. Conveying Non-Source Forms.

     You may convey a covered work in object code form under the terms
     of sections 4 and 5, provided that you also convey the
     machine-readable Corresponding Source under the terms of this
     License, in one of these ways:

       a. Convey the object code in, or embodied in, a physical product
          (including a physical distribution medium), accompanied by the
          Corresponding Source fixed on a durable physical medium
          customarily used for software interchange.

       b. Convey the object code in, or embodied in, a physical product
          (including a physical distribution medium), accompanied by a
          written offer, valid for at least three years and valid for as
          long as you offer spare parts or customer support for that
          product model, to give anyone who possesses the object code
          either (1) a copy of the Corresponding Source for all the
          software in the product that is covered by this License, on a
          durable physical medium customarily used for software
          interchange, for a price no more than your reasonable cost of
          physically performing this conveying of source, or (2) access
          to copy the Corresponding Source from a network server at no
          charge.

       c. Convey individual copies of the object code with a copy of the
          written offer to provide the Corresponding Source.  This
          alternative is allowed only occasionally and noncommercially,
          and only if you received the object code with such an offer,
          in accord with subsection 6b.

       d. Convey the object code by offering access from a designated
          place (gratis or for a charge), and offer equivalent access to
          the Corresponding Source in the same way through the same
          place at no further charge.  You need not require recipients
          to copy the Corresponding Source along with the object code.
          If the place to copy the object code is a network server, the
          Corresponding Source may be on a different server (operated by
          you or a third party) that supports equivalent copying
          facilities, provided you maintain clear directions next to the
          object code saying where to find the Corresponding Source.
          Regardless of what server hosts the Corresponding Source, you
          remain obligated to ensure that it is available for as long as
          needed to satisfy these requirements.

       e. Convey the object code using peer-to-peer transmission,
          provided you inform other peers where the object code and
          Corresponding Source of the work are being offered to the
          general public at no charge under subsection 6d.

     A separable portion of the object code, whose source code is
     excluded from the Corresponding Source as a System Library, need
     not be included in conveying the object code work.

     A "User Product" is either (1) a "consumer product", which means
     any tangible personal property which is normally used for personal,
     family, or household purposes, or (2) anything designed or sold for
     incorporation into a dwelling.  In determining whether a product is
     a consumer product, doubtful cases shall be resolved in favor of
     coverage.  For a particular product received by a particular user,
     "normally used" refers to a typical or common use of that class of
     product, regardless of the status of the particular user or of the
     way in which the particular user actually uses, or expects or is
     expected to use, the product.  A product is a consumer product
     regardless of whether the product has substantial commercial,
     industrial or non-consumer uses, unless such uses represent the
     only significant mode of use of the product.

     "Installation Information" for a User Product means any methods,
     procedures, authorization keys, or other information required to
     install and execute modified versions of a covered work in that
     User Product from a modified version of its Corresponding Source.
     The information must suffice to ensure that the continued
     functioning of the modified object code is in no case prevented or
     interfered with solely because modification has been made.

     If you convey an object code work under this section in, or with,
     or specifically for use in, a User Product, and the conveying
     occurs as part of a transaction in which the right of possession
     and use of the User Product is transferred to the recipient in
     perpetuity or for a fixed term (regardless of how the transaction
     is characterized), the Corresponding Source conveyed under this
     section must be accompanied by the Installation Information.  But
     this requirement does not apply if neither you nor any third party
     retains the ability to install modified object code on the User
     Product (for example, the work has been installed in ROM).

     The requirement to provide Installation Information does not
     include a requirement to continue to provide support service,
     warranty, or updates for a work that has been modified or installed
     by the recipient, or for the User Product in which it has been
     modified or installed.  Access to a network may be denied when the
     modification itself materially and adversely affects the operation
     of the network or violates the rules and protocols for
     communication across the network.

     Corresponding Source conveyed, and Installation Information
     provided, in accord with this section must be in a format that is
     publicly documented (and with an implementation available to the
     public in source code form), and must require no special password
     or key for unpacking, reading or copying.

  7. Additional Terms.

     "Additional permissions" are terms that supplement the terms of
     this License by making exceptions from one or more of its
     conditions.  Additional permissions that are applicable to the
     entire Program shall be treated as though they were included in
     this License, to the extent that they are valid under applicable
     law.  If additional permissions apply only to part of the Program,
     that part may be used separately under those permissions, but the
     entire Program remains governed by this License without regard to
     the additional permissions.

     When you convey a copy of a covered work, you may at your option
     remove any additional permissions from that copy, or from any part
     of it.  (Additional permissions may be written to require their own
     removal in certain cases when you modify the work.)  You may place
     additional permissions on material, added by you to a covered work,
     for which you have or can give appropriate copyright permission.

     Notwithstanding any other provision of this License, for material
     you add to a covered work, you may (if authorized by the copyright
     holders of that material) supplement the terms of this License with
     terms:

       a. Disclaiming warranty or limiting liability differently from
          the terms of sections 15 and 16 of this License; or

       b. Requiring preservation of specified reasonable legal notices
          or author attributions in that material or in the Appropriate
          Legal Notices displayed by works containing it; or

       c. Prohibiting misrepresentation of the origin of that material,
          or requiring that modified versions of such material be marked
          in reasonable ways as different from the original version; or

       d. Limiting the use for publicity purposes of names of licensors
          or authors of the material; or

       e. Declining to grant rights under trademark law for use of some
          trade names, trademarks, or service marks; or

       f. Requiring indemnification of licensors and authors of that
          material by anyone who conveys the material (or modified
          versions of it) with contractual assumptions of liability to
          the recipient, for any liability that these contractual
          assumptions directly impose on those licensors and authors.

     All other non-permissive additional terms are considered "further
     restrictions" within the meaning of section 10.  If the Program as
     you received it, or any part of it, contains a notice stating that
     it is governed by this License along with a term that is a further
     restriction, you may remove that term.  If a license document
     contains a further restriction but permits relicensing or conveying
     under this License, you may add to a covered work material governed
     by the terms of that license document, provided that the further
     restriction does not survive such relicensing or conveying.

     If you add terms to a covered work in accord with this section, you
     must place, in the relevant source files, a statement of the
     additional terms that apply to those files, or a notice indicating
     where to find the applicable terms.

     Additional terms, permissive or non-permissive, may be stated in
     the form of a separately written license, or stated as exceptions;
     the above requirements apply either way.

  8. Termination.

     You may not propagate or modify a covered work except as expressly
     provided under this License.  Any attempt otherwise to propagate or
     modify it is void, and will automatically terminate your rights
     under this License (including any patent licenses granted under the
     third paragraph of section 11).

     However, if you cease all violation of this License, then your
     license from a particular copyright holder is reinstated (a)
     provisionally, unless and until the copyright holder explicitly and
     finally terminates your license, and (b) permanently, if the
     copyright holder fails to notify you of the violation by some
     reasonable means prior to 60 days after the cessation.

     Moreover, your license from a particular copyright holder is
     reinstated permanently if the copyright holder notifies you of the
     violation by some reasonable means, this is the first time you have
     received notice of violation of this License (for any work) from
     that copyright holder, and you cure the violation prior to 30 days
     after your receipt of the notice.

     Termination of your rights under this section does not terminate
     the licenses of parties who have received copies or rights from you
     under this License.  If your rights have been terminated and not
     permanently reinstated, you do not qualify to receive new licenses
     for the same material under section 10.

  9. Acceptance Not Required for Having Copies.

     You are not required to accept this License in order to receive or
     run a copy of the Program.  Ancillary propagation of a covered work
     occurring solely as a consequence of using peer-to-peer
     transmission to receive a copy likewise does not require
     acceptance.  However, nothing other than this License grants you
     permission to propagate or modify any covered work.  These actions
     infringe copyright if you do not accept this License.  Therefore,
     by modifying or propagating a covered work, you indicate your
     acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

     Each time you convey a covered work, the recipient automatically
     receives a license from the original licensors, to run, modify and
     propagate that work, subject to this License.  You are not
     responsible for enforcing compliance by third parties with this
     License.

     An "entity transaction" is a transaction transferring control of an
     organization, or substantially all assets of one, or subdividing an
     organization, or merging organizations.  If propagation of a
     covered work results from an entity transaction, each party to that
     transaction who receives a copy of the work also receives whatever
     licenses to the work the party's predecessor in interest had or
     could give under the previous paragraph, plus a right to possession
     of the Corresponding Source of the work from the predecessor in
     interest, if the predecessor has it or can get it with reasonable
     efforts.

     You may not impose any further restrictions on the exercise of the
     rights granted or affirmed under this License.  For example, you
     may not impose a license fee, royalty, or other charge for exercise
     of rights granted under this License, and you may not initiate
     litigation (including a cross-claim or counterclaim in a lawsuit)
     alleging that any patent claim is infringed by making, using,
     selling, offering for sale, or importing the Program or any portion
     of it.

  11. Patents.

     A "contributor" is a copyright holder who authorizes use under this
     License of the Program or a work on which the Program is based.
     The work thus licensed is called the contributor's "contributor
     version".

     A contributor's "essential patent claims" are all patent claims
     owned or controlled by the contributor, whether already acquired or
     hereafter acquired, that would be infringed by some manner,
     permitted by this License, of making, using, or selling its
     contributor version, but do not include claims that would be
     infringed only as a consequence of further modification of the
     contributor version.  For purposes of this definition, "control"
     includes the right to grant patent sublicenses in a manner
     consistent with the requirements of this License.

     Each contributor grants you a non-exclusive, worldwide,
     royalty-free patent license under the contributor's essential
     patent claims, to make, use, sell, offer for sale, import and
     otherwise run, modify and propagate the contents of its contributor
     version.

     In the following three paragraphs, a "patent license" is any
     express agreement or commitment, however denominated, not to
     enforce a patent (such as an express permission to practice a
     patent or covenant not to sue for patent infringement).  To "grant"
     such a patent license to a party means to make such an agreement or
     commitment not to enforce a patent against the party.

     If you convey a covered work, knowingly relying on a patent
     license, and the Corresponding Source of the work is not available
     for anyone to copy, free of charge and under the terms of this
     License, through a publicly available network server or other
     readily accessible means, then you must either (1) cause the
     Corresponding Source to be so available, or (2) arrange to deprive
     yourself of the benefit of the patent license for this particular
     work, or (3) arrange, in a manner consistent with the requirements
     of this License, to extend the patent license to downstream
     recipients.  "Knowingly relying" means you have actual knowledge
     that, but for the patent license, your conveying the covered work
     in a country, or your recipient's use of the covered work in a
     country, would infringe one or more identifiable patents in that
     country that you have reason to believe are valid.

     If, pursuant to or in connection with a single transaction or
     arrangement, you convey, or propagate by procuring conveyance of, a
     covered work, and grant a patent license to some of the parties
     receiving the covered work authorizing them to use, propagate,
     modify or convey a specific copy of the covered work, then the
     patent license you grant is automatically extended to all
     recipients of the covered work and works based on it.

     A patent license is "discriminatory" if it does not include within
     the scope of its coverage, prohibits the exercise of, or is
     conditioned on the non-exercise of one or more of the rights that
     are specifically granted under this License.  You may not convey a
     covered work if you are a party to an arrangement with a third
     party that is in the business of distributing software, under which
     you make payment to the third party based on the extent of your
     activity of conveying the work, and under which the third party
     grants, to any of the parties who would receive the covered work
     from you, a discriminatory patent license (a) in connection with
     copies of the covered work conveyed by you (or copies made from
     those copies), or (b) primarily for and in connection with specific
     products or compilations that contain the covered work, unless you
     entered into that arrangement, or that patent license was granted,
     prior to 28 March 2007.

     Nothing in this License shall be construed as excluding or limiting
     any implied license or other defenses to infringement that may
     otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

     If conditions are imposed on you (whether by court order, agreement
     or otherwise) that contradict the conditions of this License, they
     do not excuse you from the conditions of this License.  If you
     cannot convey a covered work so as to satisfy simultaneously your
     obligations under this License and any other pertinent obligations,
     then as a consequence you may not convey it at all.  For example,
     if you agree to terms that obligate you to collect a royalty for
     further conveying from those to whom you convey the Program, the
     only way you could satisfy both those terms and this License would
     be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

     Notwithstanding any other provision of this License, you have
     permission to link or combine any covered work with a work licensed
     under version 3 of the GNU Affero General Public License into a
     single combined work, and to convey the resulting work.  The terms
     of this License will continue to apply to the part which is the
     covered work, but the special requirements of the GNU Affero
     General Public License, section 13, concerning interaction through
     a network will apply to the combination as such.

  14. Revised Versions of this License.

     The Free Software Foundation may publish revised and/or new
     versions of the GNU General Public License from time to time.  Such
     new versions will be similar in spirit to the present version, but
     may differ in detail to address new problems or concerns.

     Each version is given a distinguishing version number.  If the
     Program specifies that a certain numbered version of the GNU
     General Public License "or any later version" applies to it, you
     have the option of following the terms and conditions either of
     that numbered version or of any later version published by the Free
     Software Foundation.  If the Program does not specify a version
     number of the GNU General Public License, you may choose any
     version ever published by the Free Software Foundation.

     If the Program specifies that a proxy can decide which future
     versions of the GNU General Public License can be used, that
     proxy's public statement of acceptance of a version permanently
     authorizes you to choose that version for the Program.

     Later license versions may give you additional or different
     permissions.  However, no additional obligations are imposed on any
     author or copyright holder as a result of your choosing to follow a
     later version.

  15. Disclaimer of Warranty.

     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
     APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
     NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
     DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
     THE POSSIBILITY OF SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

     If the disclaimer of warranty and limitation of liability provided
     above cannot be given local legal effect according to their terms,
     reviewing courts shall apply local law that most closely
     approximates an absolute waiver of all civil liability in
     connection with the Program, unless a warranty or assumption of
     liability accompanies a copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS
===========================

How to Apply These Terms to Your New Programs
=============================================

If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.

 To do so, attach the following notices to the program.  It is safest to
attach them to the start of each source file to most effectively state
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
     Copyright (C) YEAR NAME OF AUTHOR

     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 3 of the License, or (at
     your option) any later version.

     This program is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.

 Also add information on how to contact you by electronic and paper
mail.

 If the program does terminal interaction, make it output a short notice
like this when it starts in an interactive mode:

     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
     This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type 'show c' for details.

 The hypothetical commands 'show w' and 'show c' should show the
appropriate parts of the General Public License.  Of course, your
program's commands might be different; for a GUI interface, you would
use an "about box".

 You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  For more information on this, and how to apply and follow
the GNU GPL, see <http://www.gnu.org/licenses/>.

 The GNU General Public License does not permit incorporating your
program into proprietary programs.  If your program is a subroutine
library, you may consider it more useful to permit linking proprietary
applications with the library.  If this is what you want to do, use the
GNU Lesser General Public License instead of this License.  But first,
please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.


File: gccint.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top

GNU Free Documentation License
******************************

                     Version 1.3, 3 November 2008

     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
     <http://fsf.org/>

     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

  0. PREAMBLE

     The purpose of this License is to make a manual, textbook, or other
     functional and useful document "free" in the sense of freedom: to
     assure everyone the effective freedom to copy and redistribute it,
     with or without modifying it, either commercially or
     noncommercially.  Secondarily, this License preserves for the
     author and publisher a way to get credit for their work, while not
     being considered responsible for modifications made by others.

     This License is a kind of "copyleft", which means that derivative
     works of the document must themselves be free in the same sense.
     It complements the GNU General Public License, which is a copyleft
     license designed for free software.

     We have designed this License in order to use it for manuals for
     free software, because free software needs free documentation: a
     free program should come with manuals providing the same freedoms
     that the software does.  But this License is not limited to
     software manuals; it can be used for any textual work, regardless
     of subject matter or whether it is published as a printed book.  We
     recommend this License principally for works whose purpose is
     instruction or reference.

  1. APPLICABILITY AND DEFINITIONS

     This License applies to any manual or other work, in any medium,
     that contains a notice placed by the copyright holder saying it can
     be distributed under the terms of this License.  Such a notice
     grants a world-wide, royalty-free license, unlimited in duration,
     to use that work under the conditions stated herein.  The
     "Document", below, refers to any such manual or work.  Any member
     of the public is a licensee, and is addressed as "you".  You accept
     the license if you copy, modify or distribute the work in a way
     requiring permission under copyright law.

     A "Modified Version" of the Document means any work containing the
     Document or a portion of it, either copied verbatim, or with
     modifications and/or translated into another language.

     A "Secondary Section" is a named appendix or a front-matter section
     of the Document that deals exclusively with the relationship of the
     publishers or authors of the Document to the Document's overall
     subject (or to related matters) and contains nothing that could
     fall directly within that overall subject.  (Thus, if the Document
     is in part a textbook of mathematics, a Secondary Section may not
     explain any mathematics.)  The relationship could be a matter of
     historical connection with the subject or with related matters, or
     of legal, commercial, philosophical, ethical or political position
     regarding them.

     The "Invariant Sections" are certain Secondary Sections whose
     titles are designated, as being those of Invariant Sections, in the
     notice that says that the Document is released under this License.
     If a section does not fit the above definition of Secondary then it
     is not allowed to be designated as Invariant.  The Document may
     contain zero Invariant Sections.  If the Document does not identify
     any Invariant Sections then there are none.

     The "Cover Texts" are certain short passages of text that are
     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
     that says that the Document is released under this License.  A
     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
     be at most 25 words.

     A "Transparent" copy of the Document means a machine-readable copy,
     represented in a format whose specification is available to the
     general public, that is suitable for revising the document
     straightforwardly with generic text editors or (for images composed
     of pixels) generic paint programs or (for drawings) some widely
     available drawing editor, and that is suitable for input to text
     formatters or for automatic translation to a variety of formats
     suitable for input to text formatters.  A copy made in an otherwise
     Transparent file format whose markup, or absence of markup, has
     been arranged to thwart or discourage subsequent modification by
     readers is not Transparent.  An image format is not Transparent if
     used for any substantial amount of text.  A copy that is not
     "Transparent" is called "Opaque".

     Examples of suitable formats for Transparent copies include plain
     ASCII without markup, Texinfo input format, LaTeX input format,
     SGML or XML using a publicly available DTD, and standard-conforming
     simple HTML, PostScript or PDF designed for human modification.
     Examples of transparent image formats include PNG, XCF and JPG.
     Opaque formats include proprietary formats that can be read and
     edited only by proprietary word processors, SGML or XML for which
     the DTD and/or processing tools are not generally available, and
     the machine-generated HTML, PostScript or PDF produced by some word
     processors for output purposes only.

     The "Title Page" means, for a printed book, the title page itself,
     plus such following pages as are needed to hold, legibly, the
     material this License requires to appear in the title page.  For
     works in formats which do not have any title page as such, "Title
     Page" means the text near the most prominent appearance of the
     work's title, preceding the beginning of the body of the text.

     The "publisher" means any person or entity that distributes copies
     of the Document to the public.

     A section "Entitled XYZ" means a named subunit of the Document
     whose title either is precisely XYZ or contains XYZ in parentheses
     following text that translates XYZ in another language.  (Here XYZ
     stands for a specific section name mentioned below, such as
     "Acknowledgements", "Dedications", "Endorsements", or "History".)
     To "Preserve the Title" of such a section when you modify the
     Document means that it remains a section "Entitled XYZ" according
     to this definition.

     The Document may include Warranty Disclaimers next to the notice
     which states that this License applies to the Document.  These
     Warranty Disclaimers are considered to be included by reference in
     this License, but only as regards disclaiming warranties: any other
     implication that these Warranty Disclaimers may have is void and
     has no effect on the meaning of this License.

  2. VERBATIM COPYING

     You may copy and distribute the Document in any medium, either
     commercially or noncommercially, provided that this License, the
     copyright notices, and the license notice saying this License
     applies to the Document are reproduced in all copies, and that you
     add no other conditions whatsoever to those of this License.  You
     may not use technical measures to obstruct or control the reading
     or further copying of the copies you make or distribute.  However,
     you may accept compensation in exchange for copies.  If you
     distribute a large enough number of copies you must also follow the
     conditions in section 3.

     You may also lend copies, under the same conditions stated above,
     and you may publicly display copies.

  3. COPYING IN QUANTITY

     If you publish printed copies (or copies in media that commonly
     have printed covers) of the Document, numbering more than 100, and
     the Document's license notice requires Cover Texts, you must
     enclose the copies in covers that carry, clearly and legibly, all
     these Cover Texts: Front-Cover Texts on the front cover, and
     Back-Cover Texts on the back cover.  Both covers must also clearly
     and legibly identify you as the publisher of these copies.  The
     front cover must present the full title with all words of the title
     equally prominent and visible.  You may add other material on the
     covers in addition.  Copying with changes limited to the covers, as
     long as they preserve the title of the Document and satisfy these
     conditions, can be treated as verbatim copying in other respects.

     If the required texts for either cover are too voluminous to fit
     legibly, you should put the first ones listed (as many as fit
     reasonably) on the actual cover, and continue the rest onto
     adjacent pages.

     If you publish or distribute Opaque copies of the Document
     numbering more than 100, you must either include a machine-readable
     Transparent copy along with each Opaque copy, or state in or with
     each Opaque copy a computer-network location from which the general
     network-using public has access to download using public-standard
     network protocols a complete Transparent copy of the Document, free
     of added material.  If you use the latter option, you must take
     reasonably prudent steps, when you begin distribution of Opaque
     copies in quantity, to ensure that this Transparent copy will
     remain thus accessible at the stated location until at least one
     year after the last time you distribute an Opaque copy (directly or
     through your agents or retailers) of that edition to the public.

     It is requested, but not required, that you contact the authors of
     the Document well before redistributing any large number of copies,
     to give them a chance to provide you with an updated version of the
     Document.

  4. MODIFICATIONS

     You may copy and distribute a Modified Version of the Document
     under the conditions of sections 2 and 3 above, provided that you
     release the Modified Version under precisely this License, with the
     Modified Version filling the role of the Document, thus licensing
     distribution and modification of the Modified Version to whoever
     possesses a copy of it.  In addition, you must do these things in
     the Modified Version:

       A. Use in the Title Page (and on the covers, if any) a title
          distinct from that of the Document, and from those of previous
          versions (which should, if there were any, be listed in the
          History section of the Document).  You may use the same title
          as a previous version if the original publisher of that
          version gives permission.

       B. List on the Title Page, as authors, one or more persons or
          entities responsible for authorship of the modifications in
          the Modified Version, together with at least five of the
          principal authors of the Document (all of its principal
          authors, if it has fewer than five), unless they release you
          from this requirement.

       C. State on the Title page the name of the publisher of the
          Modified Version, as the publisher.

       D. Preserve all the copyright notices of the Document.

       E. Add an appropriate copyright notice for your modifications
          adjacent to the other copyright notices.

       F. Include, immediately after the copyright notices, a license
          notice giving the public permission to use the Modified
          Version under the terms of this License, in the form shown in
          the Addendum below.

       G. Preserve in that license notice the full lists of Invariant
          Sections and required Cover Texts given in the Document's
          license notice.

       H. Include an unaltered copy of this License.

       I. Preserve the section Entitled "History", Preserve its Title,
          and add to it an item stating at least the title, year, new
          authors, and publisher of the Modified Version as given on the
          Title Page.  If there is no section Entitled "History" in the
          Document, create one stating the title, year, authors, and
          publisher of the Document as given on its Title Page, then add
          an item describing the Modified Version as stated in the
          previous sentence.

       J. Preserve the network location, if any, given in the Document
          for public access to a Transparent copy of the Document, and
          likewise the network locations given in the Document for
          previous versions it was based on.  These may be placed in the
          "History" section.  You may omit a network location for a work
          that was published at least four years before the Document
          itself, or if the original publisher of the version it refers
          to gives permission.

       K. For any section Entitled "Acknowledgements" or "Dedications",
          Preserve the Title of the section, and preserve in the section
          all the substance and tone of each of the contributor
          acknowledgements and/or dedications given therein.

       L. Preserve all the Invariant Sections of the Document, unaltered
          in their text and in their titles.  Section numbers or the
          equivalent are not considered part of the section titles.

       M. Delete any section Entitled "Endorsements".  Such a section
          may not be included in the Modified Version.

       N. Do not retitle any existing section to be Entitled
          "Endorsements" or to conflict in title with any Invariant
          Section.

       O. Preserve any Warranty Disclaimers.

     If the Modified Version includes new front-matter sections or
     appendices that qualify as Secondary Sections and contain no
     material copied from the Document, you may at your option designate
     some or all of these sections as invariant.  To do this, add their
     titles to the list of Invariant Sections in the Modified Version's
     license notice.  These titles must be distinct from any other
     section titles.

     You may add a section Entitled "Endorsements", provided it contains
     nothing but endorsements of your Modified Version by various
     parties--for example, statements of peer review or that the text
     has been approved by an organization as the authoritative
     definition of a standard.

     You may add a passage of up to five words as a Front-Cover Text,
     and a passage of up to 25 words as a Back-Cover Text, to the end of
     the list of Cover Texts in the Modified Version.  Only one passage
     of Front-Cover Text and one of Back-Cover Text may be added by (or
     through arrangements made by) any one entity.  If the Document
     already includes a cover text for the same cover, previously added
     by you or by arrangement made by the same entity you are acting on
     behalf of, you may not add another; but you may replace the old
     one, on explicit permission from the previous publisher that added
     the old one.

     The author(s) and publisher(s) of the Document do not by this
     License give permission to use their names for publicity for or to
     assert or imply endorsement of any Modified Version.

  5. COMBINING DOCUMENTS

     You may combine the Document with other documents released under
     this License, under the terms defined in section 4 above for
     modified versions, provided that you include in the combination all
     of the Invariant Sections of all of the original documents,
     unmodified, and list them all as Invariant Sections of your
     combined work in its license notice, and that you preserve all
     their Warranty Disclaimers.

     The combined work need only contain one copy of this License, and
     multiple identical Invariant Sections may be replaced with a single
     copy.  If there are multiple Invariant Sections with the same name
     but different contents, make the title of each such section unique
     by adding at the end of it, in parentheses, the name of the
     original author or publisher of that section if known, or else a
     unique number.  Make the same adjustment to the section titles in
     the list of Invariant Sections in the license notice of the
     combined work.

     In the combination, you must combine any sections Entitled
     "History" in the various original documents, forming one section
     Entitled "History"; likewise combine any sections Entitled
     "Acknowledgements", and any sections Entitled "Dedications".  You
     must delete all sections Entitled "Endorsements."

  6. COLLECTIONS OF DOCUMENTS

     You may make a collection consisting of the Document and other
     documents released under this License, and replace the individual
     copies of this License in the various documents with a single copy
     that is included in the collection, provided that you follow the
     rules of this License for verbatim copying of each of the documents
     in all other respects.

     You may extract a single document from such a collection, and
     distribute it individually under this License, provided you insert
     a copy of this License into the extracted document, and follow this
     License in all other respects regarding verbatim copying of that
     document.

  7. AGGREGATION WITH INDEPENDENT WORKS

     A compilation of the Document or its derivatives with other
     separate and independent documents or works, in or on a volume of a
     storage or distribution medium, is called an "aggregate" if the
     copyright resulting from the compilation is not used to limit the
     legal rights of the compilation's users beyond what the individual
     works permit.  When the Document is included in an aggregate, this
     License does not apply to the other works in the aggregate which
     are not themselves derivative works of the Document.

     If the Cover Text requirement of section 3 is applicable to these
     copies of the Document, then if the Document is less than one half
     of the entire aggregate, the Document's Cover Texts may be placed
     on covers that bracket the Document within the aggregate, or the
     electronic equivalent of covers if the Document is in electronic
     form.  Otherwise they must appear on printed covers that bracket
     the whole aggregate.

  8. TRANSLATION

     Translation is considered a kind of modification, so you may
     distribute translations of the Document under the terms of section
     4.  Replacing Invariant Sections with translations requires special
     permission from their copyright holders, but you may include
     translations of some or all Invariant Sections in addition to the
     original versions of these Invariant Sections.  You may include a
     translation of this License, and all the license notices in the
     Document, and any Warranty Disclaimers, provided that you also
     include the original English version of this License and the
     original versions of those notices and disclaimers.  In case of a
     disagreement between the translation and the original version of
     this License or a notice or disclaimer, the original version will
     prevail.

     If a section in the Document is Entitled "Acknowledgements",
     "Dedications", or "History", the requirement (section 4) to
     Preserve its Title (section 1) will typically require changing the
     actual title.

  9. TERMINATION

     You may not copy, modify, sublicense, or distribute the Document
     except as expressly provided under this License.  Any attempt
     otherwise to copy, modify, sublicense, or distribute it is void,
     and will automatically terminate your rights under this License.

     However, if you cease all violation of this License, then your
     license from a particular copyright holder is reinstated (a)
     provisionally, unless and until the copyright holder explicitly and
     finally terminates your license, and (b) permanently, if the
     copyright holder fails to notify you of the violation by some
     reasonable means prior to 60 days after the cessation.

     Moreover, your license from a particular copyright holder is
     reinstated permanently if the copyright holder notifies you of the
     violation by some reasonable means, this is the first time you have
     received notice of violation of this License (for any work) from
     that copyright holder, and you cure the violation prior to 30 days
     after your receipt of the notice.

     Termination of your rights under this section does not terminate
     the licenses of parties who have received copies or rights from you
     under this License.  If your rights have been terminated and not
     permanently reinstated, receipt of a copy of some or all of the
     same material does not give you any rights to use it.

  10. FUTURE REVISIONS OF THIS LICENSE

     The Free Software Foundation may publish new, revised versions of
     the GNU Free Documentation License from time to time.  Such new
     versions will be similar in spirit to the present version, but may
     differ in detail to address new problems or concerns.  See
     <http://www.gnu.org/copyleft/>.

     Each version of the License is given a distinguishing version
     number.  If the Document specifies that a particular numbered
     version of this License "or any later version" applies to it, you
     have the option of following the terms and conditions either of
     that specified version or of any later version that has been
     published (not as a draft) by the Free Software Foundation.  If the
     Document does not specify a version number of this License, you may
     choose any version ever published (not as a draft) by the Free
     Software Foundation.  If the Document specifies that a proxy can
     decide which future versions of this License can be used, that
     proxy's public statement of acceptance of a version permanently
     authorizes you to choose that version for the Document.

  11. RELICENSING

     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
     World Wide Web server that publishes copyrightable works and also
     provides prominent facilities for anybody to edit those works.  A
     public wiki that anybody can edit is an example of such a server.
     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
     site means any set of copyrightable works thus published on the MMC
     site.

     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
     license published by Creative Commons Corporation, a not-for-profit
     corporation with a principal place of business in San Francisco,
     California, as well as future copyleft versions of that license
     published by that same organization.

     "Incorporate" means to publish or republish a Document, in whole or
     in part, as part of another Document.

     An MMC is "eligible for relicensing" if it is licensed under this
     License, and if all works that were first published under this
     License somewhere other than this MMC, and subsequently
     incorporated in whole or in part into the MMC, (1) had no cover
     texts or invariant sections, and (2) were thus incorporated prior
     to November 1, 2008.

     The operator of an MMC Site may republish an MMC contained in the
     site under CC-BY-SA on the same site at any time before August 1,
     2009, provided the MMC is eligible for relicensing.

ADDENDUM: How to use this License for your documents
====================================================

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:

       Copyright (C)  YEAR  YOUR NAME.
       Permission is granted to copy, distribute and/or modify this document
       under the terms of the GNU Free Documentation License, Version 1.3
       or any later version published by the Free Software Foundation;
       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
       Texts.  A copy of the license is included in the section entitled ``GNU
       Free Documentation License''.

 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the "with...Texts."  line with this:

         with the Invariant Sections being LIST THEIR TITLES, with
         the Front-Cover Texts being LIST, and with the Back-Cover Texts
         being LIST.

 If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.

 If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of free
software license, such as the GNU General Public License, to permit
their use in free software.


File: gccint.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top

Contributors to GCC
*******************

The GCC project would like to thank its many contributors.  Without them
the project would not have been nearly as successful as it has been.
Any omissions in this list are accidental.  Feel free to contact
<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
some of your contributions are not listed.  Please keep this list in
alphabetical order.

   * Analog Devices helped implement the support for complex data types
     and iterators.

   * John David Anglin for threading-related fixes and improvements to
     libstdc++-v3, and the HP-UX port.

   * James van Artsdalen wrote the code that makes efficient use of the
     Intel 80387 register stack.

   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
     Series port.

   * Alasdair Baird for various bug fixes.

   * Giovanni Bajo for analyzing lots of complicated C++ problem
     reports.

   * Peter Barada for his work to improve code generation for new
     ColdFire cores.

   * Gerald Baumgartner added the signature extension to the C++ front
     end.

   * Godmar Back for his Java improvements and encouragement.

   * Scott Bambrough for help porting the Java compiler.

   * Wolfgang Bangerth for processing tons of bug reports.

   * Jon Beniston for his Microsoft Windows port of Java and port to
     Lattice Mico32.

   * Daniel Berlin for better DWARF 2 support, faster/better
     optimizations, improved alias analysis, plus migrating GCC to
     Bugzilla.

   * Geoff Berry for his Java object serialization work and various
     patches.

   * David Binderman tests weekly snapshots of GCC trunk against Fedora
     Rawhide for several architectures.

   * Laurynas Biveinis for memory management work and DJGPP port fixes.

   * Uros Bizjak for the implementation of x87 math built-in functions
     and for various middle end and i386 back end improvements and bug
     fixes.

   * Eric Blake for helping to make GCJ and libgcj conform to the
     specifications.

   * Janne Blomqvist for contributions to GNU Fortran.

   * Segher Boessenkool for various fixes.

   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
     other Java work.

   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
     miscellaneous clean-ups.

   * Steven Bosscher for integrating the GNU Fortran front end into GCC
     and for contributing to the tree-ssa branch.

   * Eric Botcazou for fixing middle- and backend bugs left and right.

   * Per Bothner for his direction via the steering committee and
     various improvements to the infrastructure for supporting new
     languages.  Chill front end implementation.  Initial
     implementations of cpplib, fix-header, config.guess, libio, and
     past C++ library (libg++) maintainer.  Dreaming up, designing and
     implementing much of GCJ.

   * Devon Bowen helped port GCC to the Tahoe.

   * Don Bowman for mips-vxworks contributions.

   * James Bowman for the FT32 port.

   * Dave Brolley for work on cpplib and Chill.

   * Paul Brook for work on the ARM architecture and maintaining GNU
     Fortran.

   * Robert Brown implemented the support for Encore 32000 systems.

   * Christian Bruel for improvements to local store elimination.

   * Herman A.J. ten Brugge for various fixes.

   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
     FAQ.

   * Joe Buck for his direction via the steering committee from its
     creation to 2013.

   * Craig Burley for leadership of the G77 Fortran effort.

   * Stephan Buys for contributing Doxygen notes for libstdc++.

   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
     to the C++ strings, streambufs and formatted I/O, hard detective
     work on the frustrating localization issues, and keeping up with
     the problem reports.

   * John Carr for his alias work, SPARC hacking, infrastructure
     improvements, previous contributions to the steering committee,
     loop optimizations, etc.

   * Stephane Carrez for 68HC11 and 68HC12 ports.

   * Steve Chamberlain for support for the Renesas SH and H8 processors
     and the PicoJava processor, and for GCJ config fixes.

   * Glenn Chambers for help with the GCJ FAQ.

   * John-Marc Chandonia for various libgcj patches.

   * Denis Chertykov for contributing and maintaining the AVR port, the
     first GCC port for an 8-bit architecture.

   * Scott Christley for his Objective-C contributions.

   * Eric Christopher for his Java porting help and clean-ups.

   * Branko Cibej for more warning contributions.

   * The GNU Classpath project for all of their merged runtime code.

   * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
     '--help', and other random hacking.

   * Michael Cook for libstdc++ cleanup patches to reduce warnings.

   * R. Kelley Cook for making GCC buildable from a read-only directory
     as well as other miscellaneous build process and documentation
     clean-ups.

   * Ralf Corsepius for SH testing and minor bug fixing.

   * Stan Cox for care and feeding of the x86 port and lots of behind
     the scenes hacking.

   * Alex Crain provided changes for the 3b1.

   * Ian Dall for major improvements to the NS32k port.

   * Paul Dale for his work to add uClinux platform support to the m68k
     backend.

   * Dario Dariol contributed the four varieties of sample programs that
     print a copy of their source.

   * Russell Davidson for fstream and stringstream fixes in libstdc++.

   * Bud Davis for work on the G77 and GNU Fortran compilers.

   * Mo DeJong for GCJ and libgcj bug fixes.

   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
     various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.

   * Arnaud Desitter for helping to debug GNU Fortran.

   * Gabriel Dos Reis for contributions to G++, contributions and
     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
     including 'valarray<>', 'complex<>', maintaining the numerics
     library (including that pesky '<limits>' :-) and keeping up-to-date
     anything to do with numbers.

   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
     ISO C99 support, CFG dumping support, etc., plus support of the C++
     runtime libraries including for all kinds of C interface issues,
     contributing and maintaining 'complex<>', sanity checking and
     disbursement, configuration architecture, libio maintenance, and
     early math work.

   * Franc,ois Dumont for his work on libstdc++-v3, especially
     maintaining and improving 'debug-mode' and associative and
     unordered containers.

   * Zdenek Dvorak for a new loop unroller and various fixes.

   * Michael Eager for his work on the Xilinx MicroBlaze port.

   * Richard Earnshaw for his ongoing work with the ARM.

   * David Edelsohn for his direction via the steering committee,
     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
     loop changes, doing the entire AIX port of libstdc++ with his bare
     hands, and for ensuring GCC properly keeps working on AIX.

   * Kevin Ediger for the floating point formatting of num_put::do_put
     in libstdc++.

   * Phil Edwards for libstdc++ work including configuration hackery,
     documentation maintainer, chief breaker of the web pages, the
     occasional iostream bug fix, and work on shared library symbol
     versioning.

   * Paul Eggert for random hacking all over GCC.

   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
     configuration support for locales and fstream-related fixes.

   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
     iostreams.

   * Christian Ehrhardt for dealing with bug reports.

   * Ben Elliston for his work to move the Objective-C runtime into its
     own subdirectory and for his work on autoconf.

   * Revital Eres for work on the PowerPC 750CL port.

   * Marc Espie for OpenBSD support.

   * Doug Evans for much of the global optimization framework, arc,
     m32r, and SPARC work.

   * Christopher Faylor for his work on the Cygwin port and for caring
     and feeding the gcc.gnu.org box and saving its users tons of spam.

   * Fred Fish for BeOS support and Ada fixes.

   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.

   * Peter Gerwinski for various bug fixes and the Pascal front end.

   * Kaveh R. Ghazi for his direction via the steering committee,
     amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
     on a plethora of platforms.  Kaveh extends his gratitude to the
     CAIP Center at Rutgers University for providing him with computing
     resources to work on Free Software from the late 1980s to 2010.

   * John Gilmore for a donation to the FSF earmarked improving GNU
     Java.

   * Judy Goldberg for c++ contributions.

   * Torbjorn Granlund for various fixes and the c-torture testsuite,
     multiply- and divide-by-constant optimization, improved long long
     support, improved leaf function register allocation, and his
     direction via the steering committee.

   * Jonny Grant for improvements to 'collect2's' '--help'
     documentation.

   * Anthony Green for his '-Os' contributions, the moxie port, and Java
     front end work.

   * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
     code.

   * Michael K. Gschwind contributed the port to the PDP-11.

   * Richard Biener for his ongoing middle-end contributions and bug
     fixes and for release management.

   * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
     the support for DWARF 1 symbolic debugging information, and much of
     the support for System V Release 4.  He has also worked heavily on
     the Intel 386 and 860 support.

   * Sumanth Gundapaneni for contributing the CR16 port.

   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
     GCSE.

   * Bruno Haible for improvements in the runtime overhead for EH, new
     warnings and assorted bug fixes.

   * Andrew Haley for his amazing Java compiler and library efforts.

   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
     series 300.

   * Michael Hayes for various thankless work he's done trying to get
     the c30/c40 ports functional.  Lots of loop and unroll improvements
     and fixes.

   * Dara Hazeghi for wading through myriads of target-specific bug
     reports.

   * Kate Hedstrom for staking the G77 folks with an initial testsuite.

   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
     work, loop opts, and generally fixing lots of old problems we've
     ignored for years, flow rewrite and lots of further stuff,
     including reviewing tons of patches.

   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
     various fixes.

   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
     contributed the support for the Sony NEWS machine.

   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
     various fixes.

   * Katherine Holcomb for work on GNU Fortran.

   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
     of testing and bug fixing, particularly of GCC configury code.

   * Steve Holmgren for MachTen patches.

   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.

   * Jan Hubicka for his x86 port improvements.

   * Falk Hueffner for working on C and optimization bug reports.

   * Bernardo Innocenti for his m68k work, including merging of ColdFire
     improvements and uClinux support.

   * Christian Iseli for various bug fixes.

   * Kamil Iskra for general m68k hacking.

   * Lee Iverson for random fixes and MIPS testing.

   * Balaji V. Iyer for Cilk+ development and merging.

   * Andreas Jaeger for testing and benchmarking of GCC and various bug
     fixes.

   * Martin Jambor for his work on inter-procedural optimizations, the
     switch conversion pass, and scalar replacement of aggregates.

   * Jakub Jelinek for his SPARC work and sibling call optimizations as
     well as lots of bug fixes and test cases, and for improving the
     Java build system.

   * Janis Johnson for ia64 testing and fixes, her quality improvement
     sidetracks, and web page maintenance.

   * Kean Johnston for SCO OpenServer support and various fixes.

   * Tim Josling for the sample language treelang based originally on
     Richard Kenner's "toy" language.

   * Nicolai Josuttis for additional libstdc++ documentation.

   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
     target.

   * Steven G. Kargl for work on GNU Fortran.

   * David Kashtan of SRI adapted GCC to VMS.

   * Ryszard Kabatek for many, many libstdc++ bug fixes and
     optimizations of strings, especially member functions, and for
     auto_ptr fixes.

   * Geoffrey Keating for his ongoing work to make the PPC work for
     GNU/Linux and his automatic regression tester.

   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
     work in just about every part of libstdc++.

   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
     MIL-STD-1750A.

   * Richard Kenner of the New York University Ultracomputer Research
     Laboratory wrote the machine descriptions for the AMD 29000, the
     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
     support for instruction attributes.  He also made changes to better
     support RISC processors including changes to common subexpression
     elimination, strength reduction, function calling sequence
     handling, and condition code support, in addition to generalizing
     the code for frame pointer elimination and delay slot scheduling.
     Richard Kenner was also the head maintainer of GCC for several
     years.

   * Mumit Khan for various contributions to the Cygwin and Mingw32
     ports and maintaining binary releases for Microsoft Windows hosts,
     and for massive libstdc++ porting work to Cygwin/Mingw32.

   * Robin Kirkham for cpu32 support.

   * Mark Klein for PA improvements.

   * Thomas Koenig for various bug fixes.

   * Bruce Korb for the new and improved fixincludes code.

   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
     effort.

   * Maxim Kuvyrkov for contributions to the instruction scheduler, the
     Android and m68k/Coldfire ports, and optimizations.

   * Charles LaBrec contributed the support for the Integrated Solutions
     68020 system.

   * Asher Langton and Mike Kumbera for contributing Cray pointer
     support to GNU Fortran, and for other GNU Fortran improvements.

   * Jeff Law for his direction via the steering committee, coordinating
     the entire egcs project and GCC 2.95, rolling out snapshots and
     releases, handling merges from GCC2, reviewing tons of patches that
     might have fallen through the cracks else, and random but extensive
     hacking.

   * Walter Lee for work on the TILE-Gx and TILEPro ports.

   * Marc Lehmann for his direction via the steering committee and
     helping with analysis and improvements of x86 performance.

   * Victor Leikehman for work on GNU Fortran.

   * Ted Lemon wrote parts of the RTL reader and printer.

   * Kriang Lerdsuwanakij for C++ improvements including template as
     template parameter support, and many C++ fixes.

   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
     and random work on the Java front end.

   * Alain Lichnewsky ported GCC to the MIPS CPU.

   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
     and patches.

   * Robert Lipe for OpenServer support, new testsuites, testing, etc.

   * Chen Liqin for various S+core related fixes/improvement, and for
     maintaining the S+core port.

   * Weiwen Liu for testing and various bug fixes.

   * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
     diagnostics fixes and improvements.

   * Dave Love for his ongoing work with the Fortran front end and
     runtime libraries.

   * Martin von Lo"wis for internal consistency checking infrastructure,
     various C++ improvements including namespace support, and tons of
     assistance with libstdc++/compiler merges.

   * H.J. Lu for his previous contributions to the steering committee,
     many x86 bug reports, prototype patches, and keeping the GNU/Linux
     ports working.

   * Greg McGary for random fixes and (someday) bounded pointers.

   * Andrew MacLeod for his ongoing work in building a real EH system,
     various code generation improvements, work on the global optimizer,
     etc.

   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
     hacking improvements to compile-time performance, overall knowledge
     and direction in the area of instruction scheduling, and design and
     implementation of the automaton based instruction scheduler.

   * Bob Manson for his behind the scenes work on dejagnu.

   * John Marino for contributing the DragonFly BSD port.

   * Philip Martin for lots of libstdc++ string and vector iterator
     fixes and improvements, and string clean up and testsuites.

   * Michael Matz for his work on dominance tree discovery, the x86-64
     port, link-time optimization framework and general optimization
     improvements.

   * All of the Mauve project contributors, for Java test code.

   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.

   * Adam Megacz for his work on the Microsoft Windows port of GCJ.

   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
     powerpc, haifa, ECOFF debug support, and other assorted hacking.

   * Jason Merrill for his direction via the steering committee and
     leading the G++ effort.

   * Martin Michlmayr for testing GCC on several architectures using the
     entire Debian archive.

   * David Miller for his direction via the steering committee, lots of
     SPARC work, improvements in jump.c and interfacing with the Linux
     kernel developers.

   * Gary Miller ported GCC to Charles River Data Systems machines.

   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
     the entire libstdc++ testsuite namespace-compatible.

   * Mark Mitchell for his direction via the steering committee,
     mountains of C++ work, load/store hoisting out of loops, alias
     analysis improvements, ISO C 'restrict' support, and serving as
     release manager from 2000 to 2011.

   * Alan Modra for various GNU/Linux bits and testing.

   * Toon Moene for his direction via the steering committee, Fortran
     maintenance, and his ongoing work to make us make Fortran run fast.

   * Jason Molenda for major help in the care and feeding of all the
     services on the gcc.gnu.org (formerly egcs.cygnus.com)
     machine--mail, web services, ftp services, etc etc.  Doing all this
     work on scrap paper and the backs of envelopes would have been...
     difficult.

   * Catherine Moore for fixing various ugly problems we have sent her
     way, including the haifa bug which was killing the Alpha & PowerPC
     Linux kernels.

   * Mike Moreton for his various Java patches.

   * David Mosberger-Tang for various Alpha improvements, and for the
     initial IA-64 port.

   * Stephen Moshier contributed the floating point emulator that
     assists in cross-compilation and permits support for floating point
     numbers wider than 64 bits and for ISO C99 support.

   * Bill Moyer for his behind the scenes work on various issues.

   * Philippe De Muyter for his work on the m68k port.

   * Joseph S. Myers for his work on the PDP-11 port, format checking
     and ISO C99 support, and continuous emphasis on (and contributions
     to) documentation.

   * Nathan Myers for his work on libstdc++-v3: architecture and
     authorship through the first three snapshots, including
     implementation of locale infrastructure, string, shadow C headers,
     and the initial project documentation (DESIGN, CHECKLIST, and so
     forth).  Later, more work on MT-safe string and shadow headers.

   * Felix Natter for documentation on porting libstdc++.

   * Nathanael Nerode for cleaning up the configuration/build process.

   * NeXT, Inc. donated the front end that supports the Objective-C
     language.

   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
     search engine setup, various documentation fixes and other small
     fixes.

   * Geoff Noer for his work on getting cygwin native builds working.

   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
     tracking web pages, GIMPLE tuples, and assorted fixes.

   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
     infrastructure improvements.

   * Alexandre Oliva for various build infrastructure improvements,
     scripts and amazing testing work, including keeping libtool issues
     sane and happy.

   * Stefan Olsson for work on mt_alloc.

   * Melissa O'Neill for various NeXT fixes.

   * Rainer Orth for random MIPS work, including improvements to GCC's
     o32 ABI support, improvements to dejagnu's MIPS support, Java
     configuration clean-ups and porting work, and maintaining the IRIX,
     Solaris 2, and Tru64 UNIX ports.

   * Hartmut Penner for work on the s390 port.

   * Paul Petersen wrote the machine description for the Alliant FX/8.

   * Alexandre Petit-Bianco for implementing much of the Java compiler
     and continued Java maintainership.

   * Matthias Pfaller for major improvements to the NS32k port.

   * Gerald Pfeifer for his direction via the steering committee,
     pointing out lots of problems we need to solve, maintenance of the
     web pages, and taking care of documentation maintenance in general.

   * Andrew Pinski for processing bug reports by the dozen.

   * Ovidiu Predescu for his work on the Objective-C front end and
     runtime libraries.

   * Jerry Quinn for major performance improvements in C++ formatted
     I/O.

   * Ken Raeburn for various improvements to checker, MIPS ports and
     various cleanups in the compiler.

   * Rolf W. Rasmussen for hacking on AWT.

   * David Reese of Sun Microsystems contributed to the Solaris on
     PowerPC port.

   * Volker Reichelt for keeping up with the problem reports.

   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
     hacking and developing and maintaining the Epiphany port.

   * Loren J. Rittle for improvements to libstdc++-v3 including the
     FreeBSD port, threading fixes, thread-related configury changes,
     critical threading documentation, and solutions to really tricky
     I/O problems, as well as keeping GCC properly working on FreeBSD
     and continuous testing.

   * Craig Rodrigues for processing tons of bug reports.

   * Ola Ro"nnerup for work on mt_alloc.

   * Gavin Romig-Koch for lots of behind the scenes MIPS work.

   * David Ronis inspired and encouraged Craig to rewrite the G77
     documentation in texinfo format by contributing a first pass at a
     translation of the old 'g77-0.5.16/f/DOC' file.

   * Ken Rose for fixes to GCC's delay slot filling code.

   * Ira Rosen for her contributions to the auto-vectorizer.

   * Paul Rubin wrote most of the preprocessor.

   * Pe'tur Runo'lfsson for major performance improvements in C++
     formatted I/O and large file support in C++ filebuf.

   * Chip Salzenberg for libstdc++ patches and improvements to locales,
     traits, Makefiles, libio, libtool hackery, and "long long" support.

   * Juha Sarlin for improvements to the H8 code generator.

   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
     300.

   * Roger Sayle for improvements to constant folding and GCC's RTL
     optimizers as well as for fixing numerous bugs.

   * Bradley Schatz for his work on the GCJ FAQ.

   * Peter Schauer wrote the code to allow debugging to work on the
     Alpha.

   * William Schelter did most of the work on the Intel 80386 support.

   * Tobias Schlu"ter for work on GNU Fortran.

   * Bernd Schmidt for various code generation improvements and major
     work in the reload pass, serving as release manager for GCC 2.95.3,
     and work on the Blackfin and C6X ports.

   * Peter Schmid for constant testing of libstdc++--especially
     application testing, going above and beyond what was requested for
     the release criteria--and libstdc++ header file tweaks.

   * Jason Schroeder for jcf-dump patches.

   * Andreas Schwab for his work on the m68k port.

   * Lars Segerlund for work on GNU Fortran.

   * Dodji Seketeli for numerous C++ bug fixes and debug info
     improvements.

   * Tim Shen for major work on '<regex>'.

   * Joel Sherrill for his direction via the steering committee, RTEMS
     contributions and RTEMS testing.

   * Nathan Sidwell for many C++ fixes/improvements.

   * Jeffrey Siegal for helping RMS with the original design of GCC,
     some code which handles the parse tree and RTL data structures,
     constant folding and help with the original VAX & m68k ports.

   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
     from the LWG (thereby keeping GCC in line with updates from the
     ISO).

   * Franz Sirl for his ongoing work with making the PPC port stable for
     GNU/Linux.

   * Andrey Slepuhin for assorted AIX hacking.

   * Trevor Smigiel for contributing the SPU port.

   * Christopher Smith did the port for Convex machines.

   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
     Retired from GCC maintainership August 2010, having mentored two
     new maintainers into the role.

   * Randy Smith finished the Sun FPA support.

   * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
     functions, '<random>', and various improvements to C++11 features.

   * Scott Snyder for queue, iterator, istream, and string fixes and
     libstdc++ testsuite entries.  Also for providing the patch to G77
     to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
     'LOGICAL*1'.

   * Zdenek Sojka for running automated regression testing of GCC and
     reporting numerous bugs.

   * Jayant Sonar for contributing the CR16 port.

   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.

   * Richard Stallman, for writing the original GCC and launching the
     GNU project.

   * Jan Stein of the Chalmers Computer Society provided support for
     Genix, as well as part of the 32000 machine description.

   * Nigel Stephens for various mips16 related fixes/improvements.

   * Jonathan Stone wrote the machine description for the Pyramid
     computer.

   * Graham Stott for various infrastructure improvements.

   * John Stracke for his Java HTTP protocol fixes.

   * Mike Stump for his Elxsi port, G++ contributions over the years and
     more recently his vxworks contributions

   * Jeff Sturm for Java porting help, bug fixes, and encouragement.

   * Shigeya Suzuki for this fixes for the bsdi platforms.

   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
     support, general configury hacking, fixincludes, etc.

   * Holger Teutsch provided the support for the Clipper CPU.

   * Gary Thomas for his ongoing work to make the PPC work for
     GNU/Linux.

   * Philipp Thomas for random bug fixes throughout the compiler

   * Jason Thorpe for thread support in libstdc++ on NetBSD.

   * Kresten Krab Thorup wrote the run time support for the Objective-C
     language and the fantastic Java bytecode interpreter.

   * Michael Tiemann for random bug fixes, the first instruction
     scheduler, initial C++ support, function integration, NS32k, SPARC
     and M88k machine description work, delay slot scheduling.

   * Andreas Tobler for his work porting libgcj to Darwin.

   * Teemu Torma for thread safe exception handling support.

   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
     definitions, and of the VAX machine description.

   * Daniel Towner and Hariharan Sandanagobalane contributed and
     maintain the picoChip port.

   * Tom Tromey for internationalization support and for his many Java
     contributions and libgcj maintainership.

   * Lassi Tuura for improvements to config.guess to determine HP
     processor types.

   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.

   * Andy Vaught for the design and initial implementation of the GNU
     Fortran front end.

   * Brent Verner for work with the libstdc++ cshadow files and their
     associated configure steps.

   * Todd Vierling for contributions for NetBSD ports.

   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
     guidance.

   * Dean Wakerley for converting the install documentation from HTML to
     texinfo in time for GCC 3.0.

   * Krister Walfridsson for random bug fixes.

   * Feng Wang for contributions to GNU Fortran.

   * Stephen M. Webb for time and effort on making libstdc++ shadow
     files work with the tricky Solaris 8+ headers, and for pushing the
     build-time header tree.  Also, for starting and driving the
     '<regex>' effort.

   * John Wehle for various improvements for the x86 code generator,
     related infrastructure improvements to help x86 code generation,
     value range propagation and other work, WE32k port.

   * Ulrich Weigand for work on the s390 port.

   * Zack Weinberg for major work on cpplib and various other bug fixes.

   * Matt Welsh for help with Linux Threads support in GCJ.

   * Urban Widmark for help fixing java.io.

   * Mark Wielaard for new Java library code and his work integrating
     with Classpath.

   * Dale Wiles helped port GCC to the Tahoe.

   * Bob Wilson from Tensilica, Inc. for the Xtensa port.

   * Jim Wilson for his direction via the steering committee, tackling
     hard problems in various places that nobody else wanted to work on,
     strength reduction and other loop optimizations.

   * Paul Woegerer and Tal Agmon for the CRX port.

   * Carlo Wood for various fixes.

   * Tom Wood for work on the m88k port.

   * Chung-Ju Wu for his work on the Andes NDS32 port.

   * Canqun Yang for work on GNU Fortran.

   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
     description for the Tron architecture (specifically, the Gmicro).

   * Kevin Zachmann helped port GCC to the Tahoe.

   * Ayal Zaks for Swing Modulo Scheduling (SMS).

   * Xiaoqiang Zhang for work on GNU Fortran.

   * Gilles Zunino for help porting Java to Irix.

 The following people are recognized for their contributions to GNAT,
the Ada front end of GCC:
   * Bernard Banner

   * Romain Berrendonner

   * Geert Bosch

   * Emmanuel Briot

   * Joel Brobecker

   * Ben Brosgol

   * Vincent Celier

   * Arnaud Charlet

   * Chien Chieng

   * Cyrille Comar

   * Cyrille Crozes

   * Robert Dewar

   * Gary Dismukes

   * Robert Duff

   * Ed Falis

   * Ramon Fernandez

   * Sam Figueroa

   * Vasiliy Fofanov

   * Michael Friess

   * Franco Gasperoni

   * Ted Giering

   * Matthew Gingell

   * Laurent Guerby

   * Jerome Guitton

   * Olivier Hainque

   * Jerome Hugues

   * Hristian Kirtchev

   * Jerome Lambourg

   * Bruno Leclerc

   * Albert Lee

   * Sean McNeil

   * Javier Miranda

   * Laurent Nana

   * Pascal Obry

   * Dong-Ik Oh

   * Laurent Pautet

   * Brett Porter

   * Thomas Quinot

   * Nicolas Roche

   * Pat Rogers

   * Jose Ruiz

   * Douglas Rupp

   * Sergey Rybin

   * Gail Schenker

   * Ed Schonberg

   * Nicolas Setton

   * Samuel Tardieu

 The following people are recognized for their contributions of new
features, bug reports, testing and integration of classpath/libgcj for
GCC version 4.1:
   * Lillian Angel for 'JTree' implementation and lots Free Swing
     additions and bug fixes.

   * Wolfgang Baer for 'GapContent' bug fixes.

   * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
     event fixes, lots of Free Swing work including 'JTable' editing.

   * Stuart Ballard for RMI constant fixes.

   * Goffredo Baroncelli for 'HTTPURLConnection' fixes.

   * Gary Benson for 'MessageFormat' fixes.

   * Daniel Bonniot for 'Serialization' fixes.

   * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
     and 'DOM xml:id' support.

   * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.

   * Archie Cobbs for build fixes, VM interface updates,
     'URLClassLoader' updates.

   * Kelley Cook for build fixes.

   * Martin Cordova for Suggestions for better 'SocketTimeoutException'.

   * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
     improvements.

   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
     2D support.  Lots of imageio framework additions, lots of AWT and
     Free Swing bug fixes.

   * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
     fixes, better 'Proxy' support, bug fixes and IKVM integration.

   * Santiago Gala for 'AccessControlContext' fixes.

   * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
     improvements.

   * David Gilbert for 'basic' and 'metal' icon and plaf support and
     lots of documenting, Lots of Free Swing and metal theme additions.
     'MetalIconFactory' implementation.

   * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.

   * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
     build speedups.

   * Kim Ho for 'JFileChooser' implementation.

   * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
     'Serialization' fixes, 'Properties' XML support and generic branch
     work, VMIntegration guide update.

   * Bastiaan Huisman for 'TimeZone' bug fixing.

   * Andreas Jaeger for mprec updates.

   * Paul Jenner for better '-Werror' support.

   * Ito Kazumitsu for 'NetworkInterface' implementation and updates.

   * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
     bug fixes all over.  Lots of Free Swing work including styled text.

   * Simon Kitching for 'String' cleanups and optimization suggestions.

   * Michael Koch for configuration fixes, 'Locale' updates, bug and
     build fixes.

   * Guilhem Lavaux for configuration, thread and channel fixes and
     Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
     fixes.

   * David Lichteblau for JCL support library global/local reference
     cleanups.

   * Aaron Luchko for JDWP updates and documentation fixes.

   * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
     features.

   * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
     fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
     and implementing the Qt4 peers.

   * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
     'SystemLogger' and 'FileHandler' rotate implementations, NIO
     'FileChannel.map' support, security and policy updates.

   * Bryce McKinlay for RMI work.

   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
     testing and documenting.

   * Kalle Olavi Niemitalo for build fixes.

   * Rainer Orth for build fixes.

   * Andrew Overholt for 'File' locking fixes.

   * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.

   * Olga Rodimina for 'MenuSelectionManager' implementation.

   * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.

   * Julian Scheid for documentation updates and gjdoc support.

   * Christian Schlichtherle for zip fixes and cleanups.

   * Robert Schuster for documentation updates and beans fixes,
     'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
     and URL, AWT and Free Swing bug fixes.

   * Keith Seitz for lots of JDWP work.

   * Christian Thalinger for 64-bit cleanups, Configuration and VM
     interface fixes and 'CACAO' integration, 'fdlibm' updates.

   * Gael Thomas for 'VMClassLoader' boot packages support suggestions.

   * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
     support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates.

   * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
     integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
     'GdkPixbugDecoder' updates.

   * Tom Tromey for Eclipse integration, generics work, lots of bug
     fixes and gcj integration including coordinating The Big Merge.

   * Mark Wielaard for bug fixes, packaging and release management,
     'Clipboard' implementation, system call interrupts and network
     timeouts and 'GdkPixpufDecoder' fixes.

 In addition to the above, all of which also contributed time and energy
in testing GCC, we would like to thank the following for their
contributions to testing:

   * Michael Abd-El-Malek

   * Thomas Arend

   * Bonzo Armstrong

   * Steven Ashe

   * Chris Baldwin

   * David Billinghurst

   * Jim Blandy

   * Stephane Bortzmeyer

   * Horst von Brand

   * Frank Braun

   * Rodney Brown

   * Sidney Cadot

   * Bradford Castalia

   * Robert Clark

   * Jonathan Corbet

   * Ralph Doncaster

   * Richard Emberson

   * Levente Farkas

   * Graham Fawcett

   * Mark Fernyhough

   * Robert A. French

   * Jo"rgen Freyh

   * Mark K. Gardner

   * Charles-Antoine Gauthier

   * Yung Shing Gene

   * David Gilbert

   * Simon Gornall

   * Fred Gray

   * John Griffin

   * Patrik Hagglund

   * Phil Hargett

   * Amancio Hasty

   * Takafumi Hayashi

   * Bryan W. Headley

   * Kevin B. Hendricks

   * Joep Jansen

   * Christian Joensson

   * Michel Kern

   * David Kidd

   * Tobias Kuipers

   * Anand Krishnaswamy

   * A. O. V. Le Blanc

   * llewelly

   * Damon Love

   * Brad Lucier

   * Matthias Klose

   * Martin Knoblauch

   * Rick Lutowski

   * Jesse Macnish

   * Stefan Morrell

   * Anon A. Mous

   * Matthias Mueller

   * Pekka Nikander

   * Rick Niles

   * Jon Olson

   * Magnus Persson

   * Chris Pollard

   * Richard Polton

   * Derk Reefman

   * David Rees

   * Paul Reilly

   * Tom Reilly

   * Torsten Rueger

   * Danny Sadinoff

   * Marc Schifer

   * Erik Schnetter

   * Wayne K. Schroll

   * David Schuler

   * Vin Shelton

   * Tim Souder

   * Adam Sulmicki

   * Bill Thorson

   * George Talbot

   * Pedro A. M. Vazquez

   * Gregory Warnes

   * Ian Watson

   * David E. Young

   * And many others

 And finally we'd like to thank everyone who uses the compiler, provides
feedback and generally reminds us why we're doing this work in the first
place.


File: gccint.info,  Node: Option Index,  Next: Concept Index,  Prev: Contributors,  Up: Top

Option Index
************

GCC's command line options are indexed here without any initial '-' or
'--'.  Where an option has both positive and negative forms (such as
'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
indexed under the most appropriate form; it may sometimes be useful to
look up both forms.

 [index ]
* Menu:

* fltrans:                               Internal flags.       (line 18)
* fltrans-output-list:                   Internal flags.       (line 23)
* fresolution:                           Internal flags.       (line 27)
* fwpa:                                  Internal flags.       (line  9)
* msoft-float:                           Soft float library routines.
                                                               (line  6)


File: gccint.info,  Node: Concept Index,  Prev: Option Index,  Up: Top

Concept Index
*************

 [index ]
* Menu:

* ! in constraint:                       Multi-Alternative.  (line   48)
* # in constraint:                       Modifiers.          (line   78)
* # in template:                         Output Template.    (line   66)
* #pragma:                               Misc.               (line  387)
* $ in constraint:                       Multi-Alternative.  (line   57)
* % in constraint:                       Modifiers.          (line   52)
* % in GTY option:                       GTY Options.        (line   18)
* % in template:                         Output Template.    (line    6)
* & in constraint:                       Modifiers.          (line   25)
* (gimple_stmt_iterator:                 GIMPLE API.         (line   30)
* (nil):                                 RTL Objects.        (line   73)
* * in constraint:                       Modifiers.          (line   83)
* * in template:                         Output Statement.   (line   29)
* *gimple_build_asm_vec:                 GIMPLE_ASM.         (line    6)
* *gimple_build_assign:                  GIMPLE_ASSIGN.      (line    6)
* *gimple_build_assign <1>:              GIMPLE_ASSIGN.      (line   18)
* *gimple_build_assign <2>:              GIMPLE_ASSIGN.      (line   29)
* *gimple_build_assign <3>:              GIMPLE_ASSIGN.      (line   35)
* *gimple_build_bind:                    GIMPLE_BIND.        (line    6)
* *gimple_build_call:                    GIMPLE_CALL.        (line    6)
* *gimple_build_call_from_tree:          GIMPLE_CALL.        (line   15)
* *gimple_build_call_vec:                GIMPLE_CALL.        (line   23)
* *gimple_build_catch:                   GIMPLE_CATCH.       (line    6)
* *gimple_build_cond:                    GIMPLE_COND.        (line    6)
* *gimple_build_cond_from_tree:          GIMPLE_COND.        (line   14)
* *gimple_build_debug_bind:              GIMPLE_DEBUG.       (line    6)
* *gimple_build_eh_filter:               GIMPLE_EH_FILTER.   (line    6)
* *gimple_build_goto:                    GIMPLE_GOTO.        (line    6)
* *gimple_build_label:                   GIMPLE_LABEL.       (line    6)
* *gimple_build_omp_atomic_load:         GIMPLE_OMP_ATOMIC_LOAD.
                                                             (line    6)
* *gimple_build_omp_atomic_store:        GIMPLE_OMP_ATOMIC_STORE.
                                                             (line    6)
* *gimple_build_omp_continue:            GIMPLE_OMP_CONTINUE.
                                                             (line    6)
* *gimple_build_omp_critical:            GIMPLE_OMP_CRITICAL.
                                                             (line    6)
* *gimple_build_omp_for:                 GIMPLE_OMP_FOR.     (line    6)
* *gimple_build_omp_parallel:            GIMPLE_OMP_PARALLEL.
                                                             (line    6)
* *gimple_build_omp_sections:            GIMPLE_OMP_SECTIONS.
                                                             (line    6)
* *gimple_build_omp_single:              GIMPLE_OMP_SINGLE.  (line    6)
* *gimple_build_resx:                    GIMPLE_RESX.        (line    6)
* *gimple_build_return:                  GIMPLE_RETURN.      (line    6)
* *gimple_build_switch:                  GIMPLE_SWITCH.      (line    6)
* *gimple_build_try:                     GIMPLE_TRY.         (line    6)
* + in constraint:                       Modifiers.          (line   12)
* -fsection-anchors:                     Special Accessors.  (line  117)
* -fsection-anchors <1>:                 Anchored Addresses. (line    6)
* /c in RTL dump:                        Flags.              (line  221)
* /f in RTL dump:                        Flags.              (line  229)
* /i in RTL dump:                        Flags.              (line  274)
* /j in RTL dump:                        Flags.              (line  286)
* /s in RTL dump:                        Flags.              (line  245)
* /u in RTL dump:                        Flags.              (line  296)
* /v in RTL dump:                        Flags.              (line  328)
* 0 in constraint:                       Simple Constraints. (line  128)
* < in constraint:                       Simple Constraints. (line   47)
* = in constraint:                       Modifiers.          (line    8)
* > in constraint:                       Simple Constraints. (line   59)
* ? in constraint:                       Multi-Alternative.  (line   42)
* \:                                     Output Template.    (line   46)
* ^ in constraint:                       Multi-Alternative.  (line   53)
* __absvdi2:                             Integer library routines.
                                                             (line  106)
* __absvsi2:                             Integer library routines.
                                                             (line  105)
* __addda3:                              Fixed-point fractional library routines.
                                                             (line   52)
* __adddf3:                              Soft float library routines.
                                                             (line   22)
* __adddq3:                              Fixed-point fractional library routines.
                                                             (line   39)
* __addha3:                              Fixed-point fractional library routines.
                                                             (line   49)
* __addhq3:                              Fixed-point fractional library routines.
                                                             (line   37)
* __addqq3:                              Fixed-point fractional library routines.
                                                             (line   35)
* __addsa3:                              Fixed-point fractional library routines.
                                                             (line   51)
* __addsf3:                              Soft float library routines.
                                                             (line   21)
* __addsq3:                              Fixed-point fractional library routines.
                                                             (line   38)
* __addta3:                              Fixed-point fractional library routines.
                                                             (line   53)
* __addtf3:                              Soft float library routines.
                                                             (line   23)
* __adduda3:                             Fixed-point fractional library routines.
                                                             (line   59)
* __addudq3:                             Fixed-point fractional library routines.
                                                             (line   47)
* __adduha3:                             Fixed-point fractional library routines.
                                                             (line   55)
* __adduhq3:                             Fixed-point fractional library routines.
                                                             (line   43)
* __adduqq3:                             Fixed-point fractional library routines.
                                                             (line   41)
* __addusa3:                             Fixed-point fractional library routines.
                                                             (line   57)
* __addusq3:                             Fixed-point fractional library routines.
                                                             (line   45)
* __adduta3:                             Fixed-point fractional library routines.
                                                             (line   61)
* __addvdi3:                             Integer library routines.
                                                             (line  110)
* __addvsi3:                             Integer library routines.
                                                             (line  109)
* __addxf3:                              Soft float library routines.
                                                             (line   25)
* __ashlda3:                             Fixed-point fractional library routines.
                                                             (line  358)
* __ashldi3:                             Integer library routines.
                                                             (line   13)
* __ashldq3:                             Fixed-point fractional library routines.
                                                             (line  346)
* __ashlha3:                             Fixed-point fractional library routines.
                                                             (line  356)
* __ashlhq3:                             Fixed-point fractional library routines.
                                                             (line  344)
* __ashlqq3:                             Fixed-point fractional library routines.
                                                             (line  343)
* __ashlsa3:                             Fixed-point fractional library routines.
                                                             (line  357)
* __ashlsi3:                             Integer library routines.
                                                             (line   12)
* __ashlsq3:                             Fixed-point fractional library routines.
                                                             (line  345)
* __ashlta3:                             Fixed-point fractional library routines.
                                                             (line  359)
* __ashlti3:                             Integer library routines.
                                                             (line   14)
* __ashluda3:                            Fixed-point fractional library routines.
                                                             (line  365)
* __ashludq3:                            Fixed-point fractional library routines.
                                                             (line  354)
* __ashluha3:                            Fixed-point fractional library routines.
                                                             (line  361)
* __ashluhq3:                            Fixed-point fractional library routines.
                                                             (line  350)
* __ashluqq3:                            Fixed-point fractional library routines.
                                                             (line  348)
* __ashlusa3:                            Fixed-point fractional library routines.
                                                             (line  363)
* __ashlusq3:                            Fixed-point fractional library routines.
                                                             (line  352)
* __ashluta3:                            Fixed-point fractional library routines.
                                                             (line  367)
* __ashrda3:                             Fixed-point fractional library routines.
                                                             (line  378)
* __ashrdi3:                             Integer library routines.
                                                             (line   18)
* __ashrdq3:                             Fixed-point fractional library routines.
                                                             (line  374)
* __ashrha3:                             Fixed-point fractional library routines.
                                                             (line  376)
* __ashrhq3:                             Fixed-point fractional library routines.
                                                             (line  372)
* __ashrqq3:                             Fixed-point fractional library routines.
                                                             (line  371)
* __ashrsa3:                             Fixed-point fractional library routines.
                                                             (line  377)
* __ashrsi3:                             Integer library routines.
                                                             (line   17)
* __ashrsq3:                             Fixed-point fractional library routines.
                                                             (line  373)
* __ashrta3:                             Fixed-point fractional library routines.
                                                             (line  379)
* __ashrti3:                             Integer library routines.
                                                             (line   19)
* __bid_adddd3:                          Decimal float library routines.
                                                             (line   23)
* __bid_addsd3:                          Decimal float library routines.
                                                             (line   19)
* __bid_addtd3:                          Decimal float library routines.
                                                             (line   27)
* __bid_divdd3:                          Decimal float library routines.
                                                             (line   66)
* __bid_divsd3:                          Decimal float library routines.
                                                             (line   62)
* __bid_divtd3:                          Decimal float library routines.
                                                             (line   70)
* __bid_eqdd2:                           Decimal float library routines.
                                                             (line  258)
* __bid_eqsd2:                           Decimal float library routines.
                                                             (line  256)
* __bid_eqtd2:                           Decimal float library routines.
                                                             (line  260)
* __bid_extendddtd2:                     Decimal float library routines.
                                                             (line   91)
* __bid_extendddtf:                      Decimal float library routines.
                                                             (line  139)
* __bid_extendddxf:                      Decimal float library routines.
                                                             (line  133)
* __bid_extenddfdd:                      Decimal float library routines.
                                                             (line  146)
* __bid_extenddftd:                      Decimal float library routines.
                                                             (line  106)
* __bid_extendsddd2:                     Decimal float library routines.
                                                             (line   87)
* __bid_extendsddf:                      Decimal float library routines.
                                                             (line  127)
* __bid_extendsdtd2:                     Decimal float library routines.
                                                             (line   89)
* __bid_extendsdtf:                      Decimal float library routines.
                                                             (line  137)
* __bid_extendsdxf:                      Decimal float library routines.
                                                             (line  131)
* __bid_extendsfdd:                      Decimal float library routines.
                                                             (line  102)
* __bid_extendsfsd:                      Decimal float library routines.
                                                             (line  144)
* __bid_extendsftd:                      Decimal float library routines.
                                                             (line  104)
* __bid_extendtftd:                      Decimal float library routines.
                                                             (line  148)
* __bid_extendxftd:                      Decimal float library routines.
                                                             (line  108)
* __bid_fixdddi:                         Decimal float library routines.
                                                             (line  169)
* __bid_fixddsi:                         Decimal float library routines.
                                                             (line  161)
* __bid_fixsddi:                         Decimal float library routines.
                                                             (line  167)
* __bid_fixsdsi:                         Decimal float library routines.
                                                             (line  159)
* __bid_fixtddi:                         Decimal float library routines.
                                                             (line  171)
* __bid_fixtdsi:                         Decimal float library routines.
                                                             (line  163)
* __bid_fixunsdddi:                      Decimal float library routines.
                                                             (line  186)
* __bid_fixunsddsi:                      Decimal float library routines.
                                                             (line  177)
* __bid_fixunssddi:                      Decimal float library routines.
                                                             (line  184)
* __bid_fixunssdsi:                      Decimal float library routines.
                                                             (line  175)
* __bid_fixunstddi:                      Decimal float library routines.
                                                             (line  188)
* __bid_fixunstdsi:                      Decimal float library routines.
                                                             (line  179)
* __bid_floatdidd:                       Decimal float library routines.
                                                             (line  204)
* __bid_floatdisd:                       Decimal float library routines.
                                                             (line  202)
* __bid_floatditd:                       Decimal float library routines.
                                                             (line  206)
* __bid_floatsidd:                       Decimal float library routines.
                                                             (line  195)
* __bid_floatsisd:                       Decimal float library routines.
                                                             (line  193)
* __bid_floatsitd:                       Decimal float library routines.
                                                             (line  197)
* __bid_floatunsdidd:                    Decimal float library routines.
                                                             (line  222)
* __bid_floatunsdisd:                    Decimal float library routines.
                                                             (line  220)
* __bid_floatunsditd:                    Decimal float library routines.
                                                             (line  224)
* __bid_floatunssidd:                    Decimal float library routines.
                                                             (line  213)
* __bid_floatunssisd:                    Decimal float library routines.
                                                             (line  211)
* __bid_floatunssitd:                    Decimal float library routines.
                                                             (line  215)
* __bid_gedd2:                           Decimal float library routines.
                                                             (line  276)
* __bid_gesd2:                           Decimal float library routines.
                                                             (line  274)
* __bid_getd2:                           Decimal float library routines.
                                                             (line  278)
* __bid_gtdd2:                           Decimal float library routines.
                                                             (line  303)
* __bid_gtsd2:                           Decimal float library routines.
                                                             (line  301)
* __bid_gttd2:                           Decimal float library routines.
                                                             (line  305)
* __bid_ledd2:                           Decimal float library routines.
                                                             (line  294)
* __bid_lesd2:                           Decimal float library routines.
                                                             (line  292)
* __bid_letd2:                           Decimal float library routines.
                                                             (line  296)
* __bid_ltdd2:                           Decimal float library routines.
                                                             (line  285)
* __bid_ltsd2:                           Decimal float library routines.
                                                             (line  283)
* __bid_lttd2:                           Decimal float library routines.
                                                             (line  287)
* __bid_muldd3:                          Decimal float library routines.
                                                             (line   52)
* __bid_mulsd3:                          Decimal float library routines.
                                                             (line   48)
* __bid_multd3:                          Decimal float library routines.
                                                             (line   56)
* __bid_nedd2:                           Decimal float library routines.
                                                             (line  267)
* __bid_negdd2:                          Decimal float library routines.
                                                             (line   77)
* __bid_negsd2:                          Decimal float library routines.
                                                             (line   75)
* __bid_negtd2:                          Decimal float library routines.
                                                             (line   79)
* __bid_nesd2:                           Decimal float library routines.
                                                             (line  265)
* __bid_netd2:                           Decimal float library routines.
                                                             (line  269)
* __bid_subdd3:                          Decimal float library routines.
                                                             (line   37)
* __bid_subsd3:                          Decimal float library routines.
                                                             (line   33)
* __bid_subtd3:                          Decimal float library routines.
                                                             (line   41)
* __bid_truncdddf:                       Decimal float library routines.
                                                             (line  152)
* __bid_truncddsd2:                      Decimal float library routines.
                                                             (line   93)
* __bid_truncddsf:                       Decimal float library routines.
                                                             (line  123)
* __bid_truncdfsd:                       Decimal float library routines.
                                                             (line  110)
* __bid_truncsdsf:                       Decimal float library routines.
                                                             (line  150)
* __bid_trunctddd2:                      Decimal float library routines.
                                                             (line   97)
* __bid_trunctddf:                       Decimal float library routines.
                                                             (line  129)
* __bid_trunctdsd2:                      Decimal float library routines.
                                                             (line   95)
* __bid_trunctdsf:                       Decimal float library routines.
                                                             (line  125)
* __bid_trunctdtf:                       Decimal float library routines.
                                                             (line  154)
* __bid_trunctdxf:                       Decimal float library routines.
                                                             (line  135)
* __bid_trunctfdd:                       Decimal float library routines.
                                                             (line  118)
* __bid_trunctfsd:                       Decimal float library routines.
                                                             (line  114)
* __bid_truncxfdd:                       Decimal float library routines.
                                                             (line  116)
* __bid_truncxfsd:                       Decimal float library routines.
                                                             (line  112)
* __bid_unorddd2:                        Decimal float library routines.
                                                             (line  234)
* __bid_unordsd2:                        Decimal float library routines.
                                                             (line  232)
* __bid_unordtd2:                        Decimal float library routines.
                                                             (line  236)
* __bswapdi2:                            Integer library routines.
                                                             (line  161)
* __bswapsi2:                            Integer library routines.
                                                             (line  160)
* __builtin_classify_type:               Varargs.            (line   48)
* __builtin_next_arg:                    Varargs.            (line   39)
* __builtin_saveregs:                    Varargs.            (line   22)
* __chkp_bndcl:                          Misc.               (line  650)
* __chkp_bndcu:                          Misc.               (line  656)
* __chkp_bndldx:                         Misc.               (line  644)
* __chkp_bndmk:                          Misc.               (line  631)
* __chkp_bndret:                         Misc.               (line  662)
* __chkp_bndstx:                         Misc.               (line  638)
* __chkp_intersect:                      Misc.               (line  668)
* __chkp_narrow:                         Misc.               (line  673)
* __chkp_sizeof:                         Misc.               (line  679)
* __clear_cache:                         Miscellaneous routines.
                                                             (line    9)
* __clzdi2:                              Integer library routines.
                                                             (line  130)
* __clzsi2:                              Integer library routines.
                                                             (line  129)
* __clzti2:                              Integer library routines.
                                                             (line  131)
* __cmpda2:                              Fixed-point fractional library routines.
                                                             (line  458)
* __cmpdf2:                              Soft float library routines.
                                                             (line  163)
* __cmpdi2:                              Integer library routines.
                                                             (line   86)
* __cmpdq2:                              Fixed-point fractional library routines.
                                                             (line  447)
* __cmpha2:                              Fixed-point fractional library routines.
                                                             (line  456)
* __cmphq2:                              Fixed-point fractional library routines.
                                                             (line  445)
* __cmpqq2:                              Fixed-point fractional library routines.
                                                             (line  444)
* __cmpsa2:                              Fixed-point fractional library routines.
                                                             (line  457)
* __cmpsf2:                              Soft float library routines.
                                                             (line  162)
* __cmpsq2:                              Fixed-point fractional library routines.
                                                             (line  446)
* __cmpta2:                              Fixed-point fractional library routines.
                                                             (line  459)
* __cmptf2:                              Soft float library routines.
                                                             (line  164)
* __cmpti2:                              Integer library routines.
                                                             (line   87)
* __cmpuda2:                             Fixed-point fractional library routines.
                                                             (line  464)
* __cmpudq2:                             Fixed-point fractional library routines.
                                                             (line  454)
* __cmpuha2:                             Fixed-point fractional library routines.
                                                             (line  461)
* __cmpuhq2:                             Fixed-point fractional library routines.
                                                             (line  451)
* __cmpuqq2:                             Fixed-point fractional library routines.
                                                             (line  449)
* __cmpusa2:                             Fixed-point fractional library routines.
                                                             (line  463)
* __cmpusq2:                             Fixed-point fractional library routines.
                                                             (line  452)
* __cmputa2:                             Fixed-point fractional library routines.
                                                             (line  466)
* __CTOR_LIST__:                         Initialization.     (line   25)
* __ctzdi2:                              Integer library routines.
                                                             (line  137)
* __ctzsi2:                              Integer library routines.
                                                             (line  136)
* __ctzti2:                              Integer library routines.
                                                             (line  138)
* __divda3:                              Fixed-point fractional library routines.
                                                             (line  234)
* __divdc3:                              Soft float library routines.
                                                             (line  250)
* __divdf3:                              Soft float library routines.
                                                             (line   47)
* __divdi3:                              Integer library routines.
                                                             (line   24)
* __divdq3:                              Fixed-point fractional library routines.
                                                             (line  229)
* __divha3:                              Fixed-point fractional library routines.
                                                             (line  231)
* __divhq3:                              Fixed-point fractional library routines.
                                                             (line  227)
* __divqq3:                              Fixed-point fractional library routines.
                                                             (line  225)
* __divsa3:                              Fixed-point fractional library routines.
                                                             (line  233)
* __divsc3:                              Soft float library routines.
                                                             (line  248)
* __divsf3:                              Soft float library routines.
                                                             (line   46)
* __divsi3:                              Integer library routines.
                                                             (line   23)
* __divsq3:                              Fixed-point fractional library routines.
                                                             (line  228)
* __divta3:                              Fixed-point fractional library routines.
                                                             (line  235)
* __divtc3:                              Soft float library routines.
                                                             (line  252)
* __divtf3:                              Soft float library routines.
                                                             (line   48)
* __divti3:                              Integer library routines.
                                                             (line   25)
* __divxc3:                              Soft float library routines.
                                                             (line  254)
* __divxf3:                              Soft float library routines.
                                                             (line   50)
* __dpd_adddd3:                          Decimal float library routines.
                                                             (line   21)
* __dpd_addsd3:                          Decimal float library routines.
                                                             (line   17)
* __dpd_addtd3:                          Decimal float library routines.
                                                             (line   25)
* __dpd_divdd3:                          Decimal float library routines.
                                                             (line   64)
* __dpd_divsd3:                          Decimal float library routines.
                                                             (line   60)
* __dpd_divtd3:                          Decimal float library routines.
                                                             (line   68)
* __dpd_eqdd2:                           Decimal float library routines.
                                                             (line  257)
* __dpd_eqsd2:                           Decimal float library routines.
                                                             (line  255)
* __dpd_eqtd2:                           Decimal float library routines.
                                                             (line  259)
* __dpd_extendddtd2:                     Decimal float library routines.
                                                             (line   90)
* __dpd_extendddtf:                      Decimal float library routines.
                                                             (line  138)
* __dpd_extendddxf:                      Decimal float library routines.
                                                             (line  132)
* __dpd_extenddfdd:                      Decimal float library routines.
                                                             (line  145)
* __dpd_extenddftd:                      Decimal float library routines.
                                                             (line  105)
* __dpd_extendsddd2:                     Decimal float library routines.
                                                             (line   86)
* __dpd_extendsddf:                      Decimal float library routines.
                                                             (line  126)
* __dpd_extendsdtd2:                     Decimal float library routines.
                                                             (line   88)
* __dpd_extendsdtf:                      Decimal float library routines.
                                                             (line  136)
* __dpd_extendsdxf:                      Decimal float library routines.
                                                             (line  130)
* __dpd_extendsfdd:                      Decimal float library routines.
                                                             (line  101)
* __dpd_extendsfsd:                      Decimal float library routines.
                                                             (line  143)
* __dpd_extendsftd:                      Decimal float library routines.
                                                             (line  103)
* __dpd_extendtftd:                      Decimal float library routines.
                                                             (line  147)
* __dpd_extendxftd:                      Decimal float library routines.
                                                             (line  107)
* __dpd_fixdddi:                         Decimal float library routines.
                                                             (line  168)
* __dpd_fixddsi:                         Decimal float library routines.
                                                             (line  160)
* __dpd_fixsddi:                         Decimal float library routines.
                                                             (line  166)
* __dpd_fixsdsi:                         Decimal float library routines.
                                                             (line  158)
* __dpd_fixtddi:                         Decimal float library routines.
                                                             (line  170)
* __dpd_fixtdsi:                         Decimal float library routines.
                                                             (line  162)
* __dpd_fixunsdddi:                      Decimal float library routines.
                                                             (line  185)
* __dpd_fixunsddsi:                      Decimal float library routines.
                                                             (line  176)
* __dpd_fixunssddi:                      Decimal float library routines.
                                                             (line  183)
* __dpd_fixunssdsi:                      Decimal float library routines.
                                                             (line  174)
* __dpd_fixunstddi:                      Decimal float library routines.
                                                             (line  187)
* __dpd_fixunstdsi:                      Decimal float library routines.
                                                             (line  178)
* __dpd_floatdidd:                       Decimal float library routines.
                                                             (line  203)
* __dpd_floatdisd:                       Decimal float library routines.
                                                             (line  201)
* __dpd_floatditd:                       Decimal float library routines.
                                                             (line  205)
* __dpd_floatsidd:                       Decimal float library routines.
                                                             (line  194)
* __dpd_floatsisd:                       Decimal float library routines.
                                                             (line  192)
* __dpd_floatsitd:                       Decimal float library routines.
                                                             (line  196)
* __dpd_floatunsdidd:                    Decimal float library routines.
                                                             (line  221)
* __dpd_floatunsdisd:                    Decimal float library routines.
                                                             (line  219)
* __dpd_floatunsditd:                    Decimal float library routines.
                                                             (line  223)
* __dpd_floatunssidd:                    Decimal float library routines.
                                                             (line  212)
* __dpd_floatunssisd:                    Decimal float library routines.
                                                             (line  210)
* __dpd_floatunssitd:                    Decimal float library routines.
                                                             (line  214)
* __dpd_gedd2:                           Decimal float library routines.
                                                             (line  275)
* __dpd_gesd2:                           Decimal float library routines.
                                                             (line  273)
* __dpd_getd2:                           Decimal float library routines.
                                                             (line  277)
* __dpd_gtdd2:                           Decimal float library routines.
                                                             (line  302)
* __dpd_gtsd2:                           Decimal float library routines.
                                                             (line  300)
* __dpd_gttd2:                           Decimal float library routines.
                                                             (line  304)
* __dpd_ledd2:                           Decimal float library routines.
                                                             (line  293)
* __dpd_lesd2:                           Decimal float library routines.
                                                             (line  291)
* __dpd_letd2:                           Decimal float library routines.
                                                             (line  295)
* __dpd_ltdd2:                           Decimal float library routines.
                                                             (line  284)
* __dpd_ltsd2:                           Decimal float library routines.
                                                             (line  282)
* __dpd_lttd2:                           Decimal float library routines.
                                                             (line  286)
* __dpd_muldd3:                          Decimal float library routines.
                                                             (line   50)
* __dpd_mulsd3:                          Decimal float library routines.
                                                             (line   46)
* __dpd_multd3:                          Decimal float library routines.
                                                             (line   54)
* __dpd_nedd2:                           Decimal float library routines.
                                                             (line  266)
* __dpd_negdd2:                          Decimal float library routines.
                                                             (line   76)
* __dpd_negsd2:                          Decimal float library routines.
                                                             (line   74)
* __dpd_negtd2:                          Decimal float library routines.
                                                             (line   78)
* __dpd_nesd2:                           Decimal float library routines.
                                                             (line  264)
* __dpd_netd2:                           Decimal float library routines.
                                                             (line  268)
* __dpd_subdd3:                          Decimal float library routines.
                                                             (line   35)
* __dpd_subsd3:                          Decimal float library routines.
                                                             (line   31)
* __dpd_subtd3:                          Decimal float library routines.
                                                             (line   39)
* __dpd_truncdddf:                       Decimal float library routines.
                                                             (line  151)
* __dpd_truncddsd2:                      Decimal float library routines.
                                                             (line   92)
* __dpd_truncddsf:                       Decimal float library routines.
                                                             (line  122)
* __dpd_truncdfsd:                       Decimal float library routines.
                                                             (line  109)
* __dpd_truncsdsf:                       Decimal float library routines.
                                                             (line  149)
* __dpd_trunctddd2:                      Decimal float library routines.
                                                             (line   96)
* __dpd_trunctddf:                       Decimal float library routines.
                                                             (line  128)
* __dpd_trunctdsd2:                      Decimal float library routines.
                                                             (line   94)
* __dpd_trunctdsf:                       Decimal float library routines.
                                                             (line  124)
* __dpd_trunctdtf:                       Decimal float library routines.
                                                             (line  153)
* __dpd_trunctdxf:                       Decimal float library routines.
                                                             (line  134)
* __dpd_trunctfdd:                       Decimal float library routines.
                                                             (line  117)
* __dpd_trunctfsd:                       Decimal float library routines.
                                                             (line  113)
* __dpd_truncxfdd:                       Decimal float library routines.
                                                             (line  115)
* __dpd_truncxfsd:                       Decimal float library routines.
                                                             (line  111)
* __dpd_unorddd2:                        Decimal float library routines.
                                                             (line  233)
* __dpd_unordsd2:                        Decimal float library routines.
                                                             (line  231)
* __dpd_unordtd2:                        Decimal float library routines.
                                                             (line  235)
* __DTOR_LIST__:                         Initialization.     (line   25)
* __eqdf2:                               Soft float library routines.
                                                             (line  193)
* __eqsf2:                               Soft float library routines.
                                                             (line  192)
* __eqtf2:                               Soft float library routines.
                                                             (line  194)
* __extenddftf2:                         Soft float library routines.
                                                             (line   67)
* __extenddfxf2:                         Soft float library routines.
                                                             (line   68)
* __extendsfdf2:                         Soft float library routines.
                                                             (line   64)
* __extendsftf2:                         Soft float library routines.
                                                             (line   65)
* __extendsfxf2:                         Soft float library routines.
                                                             (line   66)
* __ffsdi2:                              Integer library routines.
                                                             (line  143)
* __ffsti2:                              Integer library routines.
                                                             (line  144)
* __fixdfdi:                             Soft float library routines.
                                                             (line   87)
* __fixdfsi:                             Soft float library routines.
                                                             (line   80)
* __fixdfti:                             Soft float library routines.
                                                             (line   93)
* __fixsfdi:                             Soft float library routines.
                                                             (line   86)
* __fixsfsi:                             Soft float library routines.
                                                             (line   79)
* __fixsfti:                             Soft float library routines.
                                                             (line   92)
* __fixtfdi:                             Soft float library routines.
                                                             (line   88)
* __fixtfsi:                             Soft float library routines.
                                                             (line   81)
* __fixtfti:                             Soft float library routines.
                                                             (line   94)
* __fixunsdfdi:                          Soft float library routines.
                                                             (line  107)
* __fixunsdfsi:                          Soft float library routines.
                                                             (line  100)
* __fixunsdfti:                          Soft float library routines.
                                                             (line  114)
* __fixunssfdi:                          Soft float library routines.
                                                             (line  106)
* __fixunssfsi:                          Soft float library routines.
                                                             (line   99)
* __fixunssfti:                          Soft float library routines.
                                                             (line  113)
* __fixunstfdi:                          Soft float library routines.
                                                             (line  108)
* __fixunstfsi:                          Soft float library routines.
                                                             (line  101)
* __fixunstfti:                          Soft float library routines.
                                                             (line  115)
* __fixunsxfdi:                          Soft float library routines.
                                                             (line  109)
* __fixunsxfsi:                          Soft float library routines.
                                                             (line  102)
* __fixunsxfti:                          Soft float library routines.
                                                             (line  116)
* __fixxfdi:                             Soft float library routines.
                                                             (line   89)
* __fixxfsi:                             Soft float library routines.
                                                             (line   82)
* __fixxfti:                             Soft float library routines.
                                                             (line   95)
* __floatdidf:                           Soft float library routines.
                                                             (line  127)
* __floatdisf:                           Soft float library routines.
                                                             (line  126)
* __floatditf:                           Soft float library routines.
                                                             (line  128)
* __floatdixf:                           Soft float library routines.
                                                             (line  129)
* __floatsidf:                           Soft float library routines.
                                                             (line  121)
* __floatsisf:                           Soft float library routines.
                                                             (line  120)
* __floatsitf:                           Soft float library routines.
                                                             (line  122)
* __floatsixf:                           Soft float library routines.
                                                             (line  123)
* __floattidf:                           Soft float library routines.
                                                             (line  133)
* __floattisf:                           Soft float library routines.
                                                             (line  132)
* __floattitf:                           Soft float library routines.
                                                             (line  134)
* __floattixf:                           Soft float library routines.
                                                             (line  135)
* __floatundidf:                         Soft float library routines.
                                                             (line  145)
* __floatundisf:                         Soft float library routines.
                                                             (line  144)
* __floatunditf:                         Soft float library routines.
                                                             (line  146)
* __floatundixf:                         Soft float library routines.
                                                             (line  147)
* __floatunsidf:                         Soft float library routines.
                                                             (line  139)
* __floatunsisf:                         Soft float library routines.
                                                             (line  138)
* __floatunsitf:                         Soft float library routines.
                                                             (line  140)
* __floatunsixf:                         Soft float library routines.
                                                             (line  141)
* __floatuntidf:                         Soft float library routines.
                                                             (line  151)
* __floatuntisf:                         Soft float library routines.
                                                             (line  150)
* __floatuntitf:                         Soft float library routines.
                                                             (line  152)
* __floatuntixf:                         Soft float library routines.
                                                             (line  153)
* __fractdadf:                           Fixed-point fractional library routines.
                                                             (line  643)
* __fractdadi:                           Fixed-point fractional library routines.
                                                             (line  640)
* __fractdadq:                           Fixed-point fractional library routines.
                                                             (line  623)
* __fractdaha2:                          Fixed-point fractional library routines.
                                                             (line  624)
* __fractdahi:                           Fixed-point fractional library routines.
                                                             (line  638)
* __fractdahq:                           Fixed-point fractional library routines.
                                                             (line  621)
* __fractdaqi:                           Fixed-point fractional library routines.
                                                             (line  637)
* __fractdaqq:                           Fixed-point fractional library routines.
                                                             (line  620)
* __fractdasa2:                          Fixed-point fractional library routines.
                                                             (line  625)
* __fractdasf:                           Fixed-point fractional library routines.
                                                             (line  642)
* __fractdasi:                           Fixed-point fractional library routines.
                                                             (line  639)
* __fractdasq:                           Fixed-point fractional library routines.
                                                             (line  622)
* __fractdata2:                          Fixed-point fractional library routines.
                                                             (line  626)
* __fractdati:                           Fixed-point fractional library routines.
                                                             (line  641)
* __fractdauda:                          Fixed-point fractional library routines.
                                                             (line  634)
* __fractdaudq:                          Fixed-point fractional library routines.
                                                             (line  630)
* __fractdauha:                          Fixed-point fractional library routines.
                                                             (line  632)
* __fractdauhq:                          Fixed-point fractional library routines.
                                                             (line  628)
* __fractdauqq:                          Fixed-point fractional library routines.
                                                             (line  627)
* __fractdausa:                          Fixed-point fractional library routines.
                                                             (line  633)
* __fractdausq:                          Fixed-point fractional library routines.
                                                             (line  629)
* __fractdauta:                          Fixed-point fractional library routines.
                                                             (line  635)
* __fractdfda:                           Fixed-point fractional library routines.
                                                             (line 1032)
* __fractdfdq:                           Fixed-point fractional library routines.
                                                             (line 1029)
* __fractdfha:                           Fixed-point fractional library routines.
                                                             (line 1030)
* __fractdfhq:                           Fixed-point fractional library routines.
                                                             (line 1027)
* __fractdfqq:                           Fixed-point fractional library routines.
                                                             (line 1026)
* __fractdfsa:                           Fixed-point fractional library routines.
                                                             (line 1031)
* __fractdfsq:                           Fixed-point fractional library routines.
                                                             (line 1028)
* __fractdfta:                           Fixed-point fractional library routines.
                                                             (line 1033)
* __fractdfuda:                          Fixed-point fractional library routines.
                                                             (line 1040)
* __fractdfudq:                          Fixed-point fractional library routines.
                                                             (line 1037)
* __fractdfuha:                          Fixed-point fractional library routines.
                                                             (line 1038)
* __fractdfuhq:                          Fixed-point fractional library routines.
                                                             (line 1035)
* __fractdfuqq:                          Fixed-point fractional library routines.
                                                             (line 1034)
* __fractdfusa:                          Fixed-point fractional library routines.
                                                             (line 1039)
* __fractdfusq:                          Fixed-point fractional library routines.
                                                             (line 1036)
* __fractdfuta:                          Fixed-point fractional library routines.
                                                             (line 1041)
* __fractdida:                           Fixed-point fractional library routines.
                                                             (line  982)
* __fractdidq:                           Fixed-point fractional library routines.
                                                             (line  979)
* __fractdiha:                           Fixed-point fractional library routines.
                                                             (line  980)
* __fractdihq:                           Fixed-point fractional library routines.
                                                             (line  977)
* __fractdiqq:                           Fixed-point fractional library routines.
                                                             (line  976)
* __fractdisa:                           Fixed-point fractional library routines.
                                                             (line  981)
* __fractdisq:                           Fixed-point fractional library routines.
                                                             (line  978)
* __fractdita:                           Fixed-point fractional library routines.
                                                             (line  983)
* __fractdiuda:                          Fixed-point fractional library routines.
                                                             (line  990)
* __fractdiudq:                          Fixed-point fractional library routines.
                                                             (line  987)
* __fractdiuha:                          Fixed-point fractional library routines.
                                                             (line  988)
* __fractdiuhq:                          Fixed-point fractional library routines.
                                                             (line  985)
* __fractdiuqq:                          Fixed-point fractional library routines.
                                                             (line  984)
* __fractdiusa:                          Fixed-point fractional library routines.
                                                             (line  989)
* __fractdiusq:                          Fixed-point fractional library routines.
                                                             (line  986)
* __fractdiuta:                          Fixed-point fractional library routines.
                                                             (line  991)
* __fractdqda:                           Fixed-point fractional library routines.
                                                             (line  551)
* __fractdqdf:                           Fixed-point fractional library routines.
                                                             (line  573)
* __fractdqdi:                           Fixed-point fractional library routines.
                                                             (line  570)
* __fractdqha:                           Fixed-point fractional library routines.
                                                             (line  549)
* __fractdqhi:                           Fixed-point fractional library routines.
                                                             (line  568)
* __fractdqhq2:                          Fixed-point fractional library routines.
                                                             (line  547)
* __fractdqqi:                           Fixed-point fractional library routines.
                                                             (line  567)
* __fractdqqq2:                          Fixed-point fractional library routines.
                                                             (line  546)
* __fractdqsa:                           Fixed-point fractional library routines.
                                                             (line  550)
* __fractdqsf:                           Fixed-point fractional library routines.
                                                             (line  572)
* __fractdqsi:                           Fixed-point fractional library routines.
                                                             (line  569)
* __fractdqsq2:                          Fixed-point fractional library routines.
                                                             (line  548)
* __fractdqta:                           Fixed-point fractional library routines.
                                                             (line  552)
* __fractdqti:                           Fixed-point fractional library routines.
                                                             (line  571)
* __fractdquda:                          Fixed-point fractional library routines.
                                                             (line  563)
* __fractdqudq:                          Fixed-point fractional library routines.
                                                             (line  558)
* __fractdquha:                          Fixed-point fractional library routines.
                                                             (line  560)
* __fractdquhq:                          Fixed-point fractional library routines.
                                                             (line  555)
* __fractdquqq:                          Fixed-point fractional library routines.
                                                             (line  553)
* __fractdqusa:                          Fixed-point fractional library routines.
                                                             (line  562)
* __fractdqusq:                          Fixed-point fractional library routines.
                                                             (line  556)
* __fractdquta:                          Fixed-point fractional library routines.
                                                             (line  565)
* __fracthada2:                          Fixed-point fractional library routines.
                                                             (line  579)
* __fracthadf:                           Fixed-point fractional library routines.
                                                             (line  597)
* __fracthadi:                           Fixed-point fractional library routines.
                                                             (line  594)
* __fracthadq:                           Fixed-point fractional library routines.
                                                             (line  577)
* __fracthahi:                           Fixed-point fractional library routines.
                                                             (line  592)
* __fracthahq:                           Fixed-point fractional library routines.
                                                             (line  575)
* __fracthaqi:                           Fixed-point fractional library routines.
                                                             (line  591)
* __fracthaqq:                           Fixed-point fractional library routines.
                                                             (line  574)
* __fracthasa2:                          Fixed-point fractional library routines.
                                                             (line  578)
* __fracthasf:                           Fixed-point fractional library routines.
                                                             (line  596)
* __fracthasi:                           Fixed-point fractional library routines.
                                                             (line  593)
* __fracthasq:                           Fixed-point fractional library routines.
                                                             (line  576)
* __fracthata2:                          Fixed-point fractional library routines.
                                                             (line  580)
* __fracthati:                           Fixed-point fractional library routines.
                                                             (line  595)
* __fracthauda:                          Fixed-point fractional library routines.
                                                             (line  588)
* __fracthaudq:                          Fixed-point fractional library routines.
                                                             (line  584)
* __fracthauha:                          Fixed-point fractional library routines.
                                                             (line  586)
* __fracthauhq:                          Fixed-point fractional library routines.
                                                             (line  582)
* __fracthauqq:                          Fixed-point fractional library routines.
                                                             (line  581)
* __fracthausa:                          Fixed-point fractional library routines.
                                                             (line  587)
* __fracthausq:                          Fixed-point fractional library routines.
                                                             (line  583)
* __fracthauta:                          Fixed-point fractional library routines.
                                                             (line  589)
* __fracthida:                           Fixed-point fractional library routines.
                                                             (line  950)
* __fracthidq:                           Fixed-point fractional library routines.
                                                             (line  947)
* __fracthiha:                           Fixed-point fractional library routines.
                                                             (line  948)
* __fracthihq:                           Fixed-point fractional library routines.
                                                             (line  945)
* __fracthiqq:                           Fixed-point fractional library routines.
                                                             (line  944)
* __fracthisa:                           Fixed-point fractional library routines.
                                                             (line  949)
* __fracthisq:                           Fixed-point fractional library routines.
                                                             (line  946)
* __fracthita:                           Fixed-point fractional library routines.
                                                             (line  951)
* __fracthiuda:                          Fixed-point fractional library routines.
                                                             (line  958)
* __fracthiudq:                          Fixed-point fractional library routines.
                                                             (line  955)
* __fracthiuha:                          Fixed-point fractional library routines.
                                                             (line  956)
* __fracthiuhq:                          Fixed-point fractional library routines.
                                                             (line  953)
* __fracthiuqq:                          Fixed-point fractional library routines.
                                                             (line  952)
* __fracthiusa:                          Fixed-point fractional library routines.
                                                             (line  957)
* __fracthiusq:                          Fixed-point fractional library routines.
                                                             (line  954)
* __fracthiuta:                          Fixed-point fractional library routines.
                                                             (line  959)
* __fracthqda:                           Fixed-point fractional library routines.
                                                             (line  505)
* __fracthqdf:                           Fixed-point fractional library routines.
                                                             (line  521)
* __fracthqdi:                           Fixed-point fractional library routines.
                                                             (line  518)
* __fracthqdq2:                          Fixed-point fractional library routines.
                                                             (line  502)
* __fracthqha:                           Fixed-point fractional library routines.
                                                             (line  503)
* __fracthqhi:                           Fixed-point fractional library routines.
                                                             (line  516)
* __fracthqqi:                           Fixed-point fractional library routines.
                                                             (line  515)
* __fracthqqq2:                          Fixed-point fractional library routines.
                                                             (line  500)
* __fracthqsa:                           Fixed-point fractional library routines.
                                                             (line  504)
* __fracthqsf:                           Fixed-point fractional library routines.
                                                             (line  520)
* __fracthqsi:                           Fixed-point fractional library routines.
                                                             (line  517)
* __fracthqsq2:                          Fixed-point fractional library routines.
                                                             (line  501)
* __fracthqta:                           Fixed-point fractional library routines.
                                                             (line  506)
* __fracthqti:                           Fixed-point fractional library routines.
                                                             (line  519)
* __fracthquda:                          Fixed-point fractional library routines.
                                                             (line  513)
* __fracthqudq:                          Fixed-point fractional library routines.
                                                             (line  510)
* __fracthquha:                          Fixed-point fractional library routines.
                                                             (line  511)
* __fracthquhq:                          Fixed-point fractional library routines.
                                                             (line  508)
* __fracthquqq:                          Fixed-point fractional library routines.
                                                             (line  507)
* __fracthqusa:                          Fixed-point fractional library routines.
                                                             (line  512)
* __fracthqusq:                          Fixed-point fractional library routines.
                                                             (line  509)
* __fracthquta:                          Fixed-point fractional library routines.
                                                             (line  514)
* __fractqida:                           Fixed-point fractional library routines.
                                                             (line  932)
* __fractqidq:                           Fixed-point fractional library routines.
                                                             (line  929)
* __fractqiha:                           Fixed-point fractional library routines.
                                                             (line  930)
* __fractqihq:                           Fixed-point fractional library routines.
                                                             (line  927)
* __fractqiqq:                           Fixed-point fractional library routines.
                                                             (line  926)
* __fractqisa:                           Fixed-point fractional library routines.
                                                             (line  931)
* __fractqisq:                           Fixed-point fractional library routines.
                                                             (line  928)
* __fractqita:                           Fixed-point fractional library routines.
                                                             (line  933)
* __fractqiuda:                          Fixed-point fractional library routines.
                                                             (line  941)
* __fractqiudq:                          Fixed-point fractional library routines.
                                                             (line  937)
* __fractqiuha:                          Fixed-point fractional library routines.
                                                             (line  939)
* __fractqiuhq:                          Fixed-point fractional library routines.
                                                             (line  935)
* __fractqiuqq:                          Fixed-point fractional library routines.
                                                             (line  934)
* __fractqiusa:                          Fixed-point fractional library routines.
                                                             (line  940)
* __fractqiusq:                          Fixed-point fractional library routines.
                                                             (line  936)
* __fractqiuta:                          Fixed-point fractional library routines.
                                                             (line  942)
* __fractqqda:                           Fixed-point fractional library routines.
                                                             (line  481)
* __fractqqdf:                           Fixed-point fractional library routines.
                                                             (line  499)
* __fractqqdi:                           Fixed-point fractional library routines.
                                                             (line  496)
* __fractqqdq2:                          Fixed-point fractional library routines.
                                                             (line  478)
* __fractqqha:                           Fixed-point fractional library routines.
                                                             (line  479)
* __fractqqhi:                           Fixed-point fractional library routines.
                                                             (line  494)
* __fractqqhq2:                          Fixed-point fractional library routines.
                                                             (line  476)
* __fractqqqi:                           Fixed-point fractional library routines.
                                                             (line  493)
* __fractqqsa:                           Fixed-point fractional library routines.
                                                             (line  480)
* __fractqqsf:                           Fixed-point fractional library routines.
                                                             (line  498)
* __fractqqsi:                           Fixed-point fractional library routines.
                                                             (line  495)
* __fractqqsq2:                          Fixed-point fractional library routines.
                                                             (line  477)
* __fractqqta:                           Fixed-point fractional library routines.
                                                             (line  482)
* __fractqqti:                           Fixed-point fractional library routines.
                                                             (line  497)
* __fractqquda:                          Fixed-point fractional library routines.
                                                             (line  490)
* __fractqqudq:                          Fixed-point fractional library routines.
                                                             (line  486)
* __fractqquha:                          Fixed-point fractional library routines.
                                                             (line  488)
* __fractqquhq:                          Fixed-point fractional library routines.
                                                             (line  484)
* __fractqquqq:                          Fixed-point fractional library routines.
                                                             (line  483)
* __fractqqusa:                          Fixed-point fractional library routines.
                                                             (line  489)
* __fractqqusq:                          Fixed-point fractional library routines.
                                                             (line  485)
* __fractqquta:                          Fixed-point fractional library routines.
                                                             (line  491)
* __fractsada2:                          Fixed-point fractional library routines.
                                                             (line  603)
* __fractsadf:                           Fixed-point fractional library routines.
                                                             (line  619)
* __fractsadi:                           Fixed-point fractional library routines.
                                                             (line  616)
* __fractsadq:                           Fixed-point fractional library routines.
                                                             (line  601)
* __fractsaha2:                          Fixed-point fractional library routines.
                                                             (line  602)
* __fractsahi:                           Fixed-point fractional library routines.
                                                             (line  614)
* __fractsahq:                           Fixed-point fractional library routines.
                                                             (line  599)
* __fractsaqi:                           Fixed-point fractional library routines.
                                                             (line  613)
* __fractsaqq:                           Fixed-point fractional library routines.
                                                             (line  598)
* __fractsasf:                           Fixed-point fractional library routines.
                                                             (line  618)
* __fractsasi:                           Fixed-point fractional library routines.
                                                             (line  615)
* __fractsasq:                           Fixed-point fractional library routines.
                                                             (line  600)
* __fractsata2:                          Fixed-point fractional library routines.
                                                             (line  604)
* __fractsati:                           Fixed-point fractional library routines.
                                                             (line  617)
* __fractsauda:                          Fixed-point fractional library routines.
                                                             (line  611)
* __fractsaudq:                          Fixed-point fractional library routines.
                                                             (line  608)
* __fractsauha:                          Fixed-point fractional library routines.
                                                             (line  609)
* __fractsauhq:                          Fixed-point fractional library routines.
                                                             (line  606)
* __fractsauqq:                          Fixed-point fractional library routines.
                                                             (line  605)
* __fractsausa:                          Fixed-point fractional library routines.
                                                             (line  610)
* __fractsausq:                          Fixed-point fractional library routines.
                                                             (line  607)
* __fractsauta:                          Fixed-point fractional library routines.
                                                             (line  612)
* __fractsfda:                           Fixed-point fractional library routines.
                                                             (line 1016)
* __fractsfdq:                           Fixed-point fractional library routines.
                                                             (line 1013)
* __fractsfha:                           Fixed-point fractional library routines.
                                                             (line 1014)
* __fractsfhq:                           Fixed-point fractional library routines.
                                                             (line 1011)
* __fractsfqq:                           Fixed-point fractional library routines.
                                                             (line 1010)
* __fractsfsa:                           Fixed-point fractional library routines.
                                                             (line 1015)
* __fractsfsq:                           Fixed-point fractional library routines.
                                                             (line 1012)
* __fractsfta:                           Fixed-point fractional library routines.
                                                             (line 1017)
* __fractsfuda:                          Fixed-point fractional library routines.
                                                             (line 1024)
* __fractsfudq:                          Fixed-point fractional library routines.
                                                             (line 1021)
* __fractsfuha:                          Fixed-point fractional library routines.
                                                             (line 1022)
* __fractsfuhq:                          Fixed-point fractional library routines.
                                                             (line 1019)
* __fractsfuqq:                          Fixed-point fractional library routines.
                                                             (line 1018)
* __fractsfusa:                          Fixed-point fractional library routines.
                                                             (line 1023)
* __fractsfusq:                          Fixed-point fractional library routines.
                                                             (line 1020)
* __fractsfuta:                          Fixed-point fractional library routines.
                                                             (line 1025)
* __fractsida:                           Fixed-point fractional library routines.
                                                             (line  966)
* __fractsidq:                           Fixed-point fractional library routines.
                                                             (line  963)
* __fractsiha:                           Fixed-point fractional library routines.
                                                             (line  964)
* __fractsihq:                           Fixed-point fractional library routines.
                                                             (line  961)
* __fractsiqq:                           Fixed-point fractional library routines.
                                                             (line  960)
* __fractsisa:                           Fixed-point fractional library routines.
                                                             (line  965)
* __fractsisq:                           Fixed-point fractional library routines.
                                                             (line  962)
* __fractsita:                           Fixed-point fractional library routines.
                                                             (line  967)
* __fractsiuda:                          Fixed-point fractional library routines.
                                                             (line  974)
* __fractsiudq:                          Fixed-point fractional library routines.
                                                             (line  971)
* __fractsiuha:                          Fixed-point fractional library routines.
                                                             (line  972)
* __fractsiuhq:                          Fixed-point fractional library routines.
                                                             (line  969)
* __fractsiuqq:                          Fixed-point fractional library routines.
                                                             (line  968)
* __fractsiusa:                          Fixed-point fractional library routines.
                                                             (line  973)
* __fractsiusq:                          Fixed-point fractional library routines.
                                                             (line  970)
* __fractsiuta:                          Fixed-point fractional library routines.
                                                             (line  975)
* __fractsqda:                           Fixed-point fractional library routines.
                                                             (line  527)
* __fractsqdf:                           Fixed-point fractional library routines.
                                                             (line  545)
* __fractsqdi:                           Fixed-point fractional library routines.
                                                             (line  542)
* __fractsqdq2:                          Fixed-point fractional library routines.
                                                             (line  524)
* __fractsqha:                           Fixed-point fractional library routines.
                                                             (line  525)
* __fractsqhi:                           Fixed-point fractional library routines.
                                                             (line  540)
* __fractsqhq2:                          Fixed-point fractional library routines.
                                                             (line  523)
* __fractsqqi:                           Fixed-point fractional library routines.
                                                             (line  539)
* __fractsqqq2:                          Fixed-point fractional library routines.
                                                             (line  522)
* __fractsqsa:                           Fixed-point fractional library routines.
                                                             (line  526)
* __fractsqsf:                           Fixed-point fractional library routines.
                                                             (line  544)
* __fractsqsi:                           Fixed-point fractional library routines.
                                                             (line  541)
* __fractsqta:                           Fixed-point fractional library routines.
                                                             (line  528)
* __fractsqti:                           Fixed-point fractional library routines.
                                                             (line  543)
* __fractsquda:                          Fixed-point fractional library routines.
                                                             (line  536)
* __fractsqudq:                          Fixed-point fractional library routines.
                                                             (line  532)
* __fractsquha:                          Fixed-point fractional library routines.
                                                             (line  534)
* __fractsquhq:                          Fixed-point fractional library routines.
                                                             (line  530)
* __fractsquqq:                          Fixed-point fractional library routines.
                                                             (line  529)
* __fractsqusa:                          Fixed-point fractional library routines.
                                                             (line  535)
* __fractsqusq:                          Fixed-point fractional library routines.
                                                             (line  531)
* __fractsquta:                          Fixed-point fractional library routines.
                                                             (line  537)
* __fracttada2:                          Fixed-point fractional library routines.
                                                             (line  650)
* __fracttadf:                           Fixed-point fractional library routines.
                                                             (line  671)
* __fracttadi:                           Fixed-point fractional library routines.
                                                             (line  668)
* __fracttadq:                           Fixed-point fractional library routines.
                                                             (line  647)
* __fracttaha2:                          Fixed-point fractional library routines.
                                                             (line  648)
* __fracttahi:                           Fixed-point fractional library routines.
                                                             (line  666)
* __fracttahq:                           Fixed-point fractional library routines.
                                                             (line  645)
* __fracttaqi:                           Fixed-point fractional library routines.
                                                             (line  665)
* __fracttaqq:                           Fixed-point fractional library routines.
                                                             (line  644)
* __fracttasa2:                          Fixed-point fractional library routines.
                                                             (line  649)
* __fracttasf:                           Fixed-point fractional library routines.
                                                             (line  670)
* __fracttasi:                           Fixed-point fractional library routines.
                                                             (line  667)
* __fracttasq:                           Fixed-point fractional library routines.
                                                             (line  646)
* __fracttati:                           Fixed-point fractional library routines.
                                                             (line  669)
* __fracttauda:                          Fixed-point fractional library routines.
                                                             (line  661)
* __fracttaudq:                          Fixed-point fractional library routines.
                                                             (line  656)
* __fracttauha:                          Fixed-point fractional library routines.
                                                             (line  658)
* __fracttauhq:                          Fixed-point fractional library routines.
                                                             (line  653)
* __fracttauqq:                          Fixed-point fractional library routines.
                                                             (line  651)
* __fracttausa:                          Fixed-point fractional library routines.
                                                             (line  660)
* __fracttausq:                          Fixed-point fractional library routines.
                                                             (line  654)
* __fracttauta:                          Fixed-point fractional library routines.
                                                             (line  663)
* __fracttida:                           Fixed-point fractional library routines.
                                                             (line  998)
* __fracttidq:                           Fixed-point fractional library routines.
                                                             (line  995)
* __fracttiha:                           Fixed-point fractional library routines.
                                                             (line  996)
* __fracttihq:                           Fixed-point fractional library routines.
                                                             (line  993)
* __fracttiqq:                           Fixed-point fractional library routines.
                                                             (line  992)
* __fracttisa:                           Fixed-point fractional library routines.
                                                             (line  997)
* __fracttisq:                           Fixed-point fractional library routines.
                                                             (line  994)
* __fracttita:                           Fixed-point fractional library routines.
                                                             (line  999)
* __fracttiuda:                          Fixed-point fractional library routines.
                                                             (line 1007)
* __fracttiudq:                          Fixed-point fractional library routines.
                                                             (line 1003)
* __fracttiuha:                          Fixed-point fractional library routines.
                                                             (line 1005)
* __fracttiuhq:                          Fixed-point fractional library routines.
                                                             (line 1001)
* __fracttiuqq:                          Fixed-point fractional library routines.
                                                             (line 1000)
* __fracttiusa:                          Fixed-point fractional library routines.
                                                             (line 1006)
* __fracttiusq:                          Fixed-point fractional library routines.
                                                             (line 1002)
* __fracttiuta:                          Fixed-point fractional library routines.
                                                             (line 1008)
* __fractudada:                          Fixed-point fractional library routines.
                                                             (line  865)
* __fractudadf:                          Fixed-point fractional library routines.
                                                             (line  888)
* __fractudadi:                          Fixed-point fractional library routines.
                                                             (line  885)
* __fractudadq:                          Fixed-point fractional library routines.
                                                             (line  861)
* __fractudaha:                          Fixed-point fractional library routines.
                                                             (line  863)
* __fractudahi:                          Fixed-point fractional library routines.
                                                             (line  883)
* __fractudahq:                          Fixed-point fractional library routines.
                                                             (line  859)
* __fractudaqi:                          Fixed-point fractional library routines.
                                                             (line  882)
* __fractudaqq:                          Fixed-point fractional library routines.
                                                             (line  858)
* __fractudasa:                          Fixed-point fractional library routines.
                                                             (line  864)
* __fractudasf:                          Fixed-point fractional library routines.
                                                             (line  887)
* __fractudasi:                          Fixed-point fractional library routines.
                                                             (line  884)
* __fractudasq:                          Fixed-point fractional library routines.
                                                             (line  860)
* __fractudata:                          Fixed-point fractional library routines.
                                                             (line  866)
* __fractudati:                          Fixed-point fractional library routines.
                                                             (line  886)
* __fractudaudq:                         Fixed-point fractional library routines.
                                                             (line  874)
* __fractudauha2:                        Fixed-point fractional library routines.
                                                             (line  876)
* __fractudauhq:                         Fixed-point fractional library routines.
                                                             (line  870)
* __fractudauqq:                         Fixed-point fractional library routines.
                                                             (line  868)
* __fractudausa2:                        Fixed-point fractional library routines.
                                                             (line  878)
* __fractudausq:                         Fixed-point fractional library routines.
                                                             (line  872)
* __fractudauta2:                        Fixed-point fractional library routines.
                                                             (line  880)
* __fractudqda:                          Fixed-point fractional library routines.
                                                             (line  772)
* __fractudqdf:                          Fixed-point fractional library routines.
                                                             (line  798)
* __fractudqdi:                          Fixed-point fractional library routines.
                                                             (line  794)
* __fractudqdq:                          Fixed-point fractional library routines.
                                                             (line  767)
* __fractudqha:                          Fixed-point fractional library routines.
                                                             (line  769)
* __fractudqhi:                          Fixed-point fractional library routines.
                                                             (line  792)
* __fractudqhq:                          Fixed-point fractional library routines.
                                                             (line  764)
* __fractudqqi:                          Fixed-point fractional library routines.
                                                             (line  790)
* __fractudqqq:                          Fixed-point fractional library routines.
                                                             (line  762)
* __fractudqsa:                          Fixed-point fractional library routines.
                                                             (line  771)
* __fractudqsf:                          Fixed-point fractional library routines.
                                                             (line  797)
* __fractudqsi:                          Fixed-point fractional library routines.
                                                             (line  793)
* __fractudqsq:                          Fixed-point fractional library routines.
                                                             (line  765)
* __fractudqta:                          Fixed-point fractional library routines.
                                                             (line  774)
* __fractudqti:                          Fixed-point fractional library routines.
                                                             (line  795)
* __fractudquda:                         Fixed-point fractional library routines.
                                                             (line  786)
* __fractudquha:                         Fixed-point fractional library routines.
                                                             (line  782)
* __fractudquhq2:                        Fixed-point fractional library routines.
                                                             (line  778)
* __fractudquqq2:                        Fixed-point fractional library routines.
                                                             (line  776)
* __fractudqusa:                         Fixed-point fractional library routines.
                                                             (line  784)
* __fractudqusq2:                        Fixed-point fractional library routines.
                                                             (line  780)
* __fractudquta:                         Fixed-point fractional library routines.
                                                             (line  788)
* __fractuhada:                          Fixed-point fractional library routines.
                                                             (line  806)
* __fractuhadf:                          Fixed-point fractional library routines.
                                                             (line  829)
* __fractuhadi:                          Fixed-point fractional library routines.
                                                             (line  826)
* __fractuhadq:                          Fixed-point fractional library routines.
                                                             (line  802)
* __fractuhaha:                          Fixed-point fractional library routines.
                                                             (line  804)
* __fractuhahi:                          Fixed-point fractional library routines.
                                                             (line  824)
* __fractuhahq:                          Fixed-point fractional library routines.
                                                             (line  800)
* __fractuhaqi:                          Fixed-point fractional library routines.
                                                             (line  823)
* __fractuhaqq:                          Fixed-point fractional library routines.
                                                             (line  799)
* __fractuhasa:                          Fixed-point fractional library routines.
                                                             (line  805)
* __fractuhasf:                          Fixed-point fractional library routines.
                                                             (line  828)
* __fractuhasi:                          Fixed-point fractional library routines.
                                                             (line  825)
* __fractuhasq:                          Fixed-point fractional library routines.
                                                             (line  801)
* __fractuhata:                          Fixed-point fractional library routines.
                                                             (line  807)
* __fractuhati:                          Fixed-point fractional library routines.
                                                             (line  827)
* __fractuhauda2:                        Fixed-point fractional library routines.
                                                             (line  819)
* __fractuhaudq:                         Fixed-point fractional library routines.
                                                             (line  815)
* __fractuhauhq:                         Fixed-point fractional library routines.
                                                             (line  811)
* __fractuhauqq:                         Fixed-point fractional library routines.
                                                             (line  809)
* __fractuhausa2:                        Fixed-point fractional library routines.
                                                             (line  817)
* __fractuhausq:                         Fixed-point fractional library routines.
                                                             (line  813)
* __fractuhauta2:                        Fixed-point fractional library routines.
                                                             (line  821)
* __fractuhqda:                          Fixed-point fractional library routines.
                                                             (line  709)
* __fractuhqdf:                          Fixed-point fractional library routines.
                                                             (line  730)
* __fractuhqdi:                          Fixed-point fractional library routines.
                                                             (line  727)
* __fractuhqdq:                          Fixed-point fractional library routines.
                                                             (line  706)
* __fractuhqha:                          Fixed-point fractional library routines.
                                                             (line  707)
* __fractuhqhi:                          Fixed-point fractional library routines.
                                                             (line  725)
* __fractuhqhq:                          Fixed-point fractional library routines.
                                                             (line  704)
* __fractuhqqi:                          Fixed-point fractional library routines.
                                                             (line  724)
* __fractuhqqq:                          Fixed-point fractional library routines.
                                                             (line  703)
* __fractuhqsa:                          Fixed-point fractional library routines.
                                                             (line  708)
* __fractuhqsf:                          Fixed-point fractional library routines.
                                                             (line  729)
* __fractuhqsi:                          Fixed-point fractional library routines.
                                                             (line  726)
* __fractuhqsq:                          Fixed-point fractional library routines.
                                                             (line  705)
* __fractuhqta:                          Fixed-point fractional library routines.
                                                             (line  710)
* __fractuhqti:                          Fixed-point fractional library routines.
                                                             (line  728)
* __fractuhquda:                         Fixed-point fractional library routines.
                                                             (line  720)
* __fractuhqudq2:                        Fixed-point fractional library routines.
                                                             (line  715)
* __fractuhquha:                         Fixed-point fractional library routines.
                                                             (line  717)
* __fractuhquqq2:                        Fixed-point fractional library routines.
                                                             (line  711)
* __fractuhqusa:                         Fixed-point fractional library routines.
                                                             (line  719)
* __fractuhqusq2:                        Fixed-point fractional library routines.
                                                             (line  713)
* __fractuhquta:                         Fixed-point fractional library routines.
                                                             (line  722)
* __fractunsdadi:                        Fixed-point fractional library routines.
                                                             (line 1562)
* __fractunsdahi:                        Fixed-point fractional library routines.
                                                             (line 1560)
* __fractunsdaqi:                        Fixed-point fractional library routines.
                                                             (line 1559)
* __fractunsdasi:                        Fixed-point fractional library routines.
                                                             (line 1561)
* __fractunsdati:                        Fixed-point fractional library routines.
                                                             (line 1563)
* __fractunsdida:                        Fixed-point fractional library routines.
                                                             (line 1714)
* __fractunsdidq:                        Fixed-point fractional library routines.
                                                             (line 1711)
* __fractunsdiha:                        Fixed-point fractional library routines.
                                                             (line 1712)
* __fractunsdihq:                        Fixed-point fractional library routines.
                                                             (line 1709)
* __fractunsdiqq:                        Fixed-point fractional library routines.
                                                             (line 1708)
* __fractunsdisa:                        Fixed-point fractional library routines.
                                                             (line 1713)
* __fractunsdisq:                        Fixed-point fractional library routines.
                                                             (line 1710)
* __fractunsdita:                        Fixed-point fractional library routines.
                                                             (line 1715)
* __fractunsdiuda:                       Fixed-point fractional library routines.
                                                             (line 1726)
* __fractunsdiudq:                       Fixed-point fractional library routines.
                                                             (line 1721)
* __fractunsdiuha:                       Fixed-point fractional library routines.
                                                             (line 1723)
* __fractunsdiuhq:                       Fixed-point fractional library routines.
                                                             (line 1718)
* __fractunsdiuqq:                       Fixed-point fractional library routines.
                                                             (line 1716)
* __fractunsdiusa:                       Fixed-point fractional library routines.
                                                             (line 1725)
* __fractunsdiusq:                       Fixed-point fractional library routines.
                                                             (line 1719)
* __fractunsdiuta:                       Fixed-point fractional library routines.
                                                             (line 1728)
* __fractunsdqdi:                        Fixed-point fractional library routines.
                                                             (line 1546)
* __fractunsdqhi:                        Fixed-point fractional library routines.
                                                             (line 1544)
* __fractunsdqqi:                        Fixed-point fractional library routines.
                                                             (line 1543)
* __fractunsdqsi:                        Fixed-point fractional library routines.
                                                             (line 1545)
* __fractunsdqti:                        Fixed-point fractional library routines.
                                                             (line 1547)
* __fractunshadi:                        Fixed-point fractional library routines.
                                                             (line 1552)
* __fractunshahi:                        Fixed-point fractional library routines.
                                                             (line 1550)
* __fractunshaqi:                        Fixed-point fractional library routines.
                                                             (line 1549)
* __fractunshasi:                        Fixed-point fractional library routines.
                                                             (line 1551)
* __fractunshati:                        Fixed-point fractional library routines.
                                                             (line 1553)
* __fractunshida:                        Fixed-point fractional library routines.
                                                             (line 1670)
* __fractunshidq:                        Fixed-point fractional library routines.
                                                             (line 1667)
* __fractunshiha:                        Fixed-point fractional library routines.
                                                             (line 1668)
* __fractunshihq:                        Fixed-point fractional library routines.
                                                             (line 1665)
* __fractunshiqq:                        Fixed-point fractional library routines.
                                                             (line 1664)
* __fractunshisa:                        Fixed-point fractional library routines.
                                                             (line 1669)
* __fractunshisq:                        Fixed-point fractional library routines.
                                                             (line 1666)
* __fractunshita:                        Fixed-point fractional library routines.
                                                             (line 1671)
* __fractunshiuda:                       Fixed-point fractional library routines.
                                                             (line 1682)
* __fractunshiudq:                       Fixed-point fractional library routines.
                                                             (line 1677)
* __fractunshiuha:                       Fixed-point fractional library routines.
                                                             (line 1679)
* __fractunshiuhq:                       Fixed-point fractional library routines.
                                                             (line 1674)
* __fractunshiuqq:                       Fixed-point fractional library routines.
                                                             (line 1672)
* __fractunshiusa:                       Fixed-point fractional library routines.
                                                             (line 1681)
* __fractunshiusq:                       Fixed-point fractional library routines.
                                                             (line 1675)
* __fractunshiuta:                       Fixed-point fractional library routines.
                                                             (line 1684)
* __fractunshqdi:                        Fixed-point fractional library routines.
                                                             (line 1536)
* __fractunshqhi:                        Fixed-point fractional library routines.
                                                             (line 1534)
* __fractunshqqi:                        Fixed-point fractional library routines.
                                                             (line 1533)
* __fractunshqsi:                        Fixed-point fractional library routines.
                                                             (line 1535)
* __fractunshqti:                        Fixed-point fractional library routines.
                                                             (line 1537)
* __fractunsqida:                        Fixed-point fractional library routines.
                                                             (line 1648)
* __fractunsqidq:                        Fixed-point fractional library routines.
                                                             (line 1645)
* __fractunsqiha:                        Fixed-point fractional library routines.
                                                             (line 1646)
* __fractunsqihq:                        Fixed-point fractional library routines.
                                                             (line 1643)
* __fractunsqiqq:                        Fixed-point fractional library routines.
                                                             (line 1642)
* __fractunsqisa:                        Fixed-point fractional library routines.
                                                             (line 1647)
* __fractunsqisq:                        Fixed-point fractional library routines.
                                                             (line 1644)
* __fractunsqita:                        Fixed-point fractional library routines.
                                                             (line 1649)
* __fractunsqiuda:                       Fixed-point fractional library routines.
                                                             (line 1660)
* __fractunsqiudq:                       Fixed-point fractional library routines.
                                                             (line 1655)
* __fractunsqiuha:                       Fixed-point fractional library routines.
                                                             (line 1657)
* __fractunsqiuhq:                       Fixed-point fractional library routines.
                                                             (line 1652)
* __fractunsqiuqq:                       Fixed-point fractional library routines.
                                                             (line 1650)
* __fractunsqiusa:                       Fixed-point fractional library routines.
                                                             (line 1659)
* __fractunsqiusq:                       Fixed-point fractional library routines.
                                                             (line 1653)
* __fractunsqiuta:                       Fixed-point fractional library routines.
                                                             (line 1662)
* __fractunsqqdi:                        Fixed-point fractional library routines.
                                                             (line 1531)
* __fractunsqqhi:                        Fixed-point fractional library routines.
                                                             (line 1529)
* __fractunsqqqi:                        Fixed-point fractional library routines.
                                                             (line 1528)
* __fractunsqqsi:                        Fixed-point fractional library routines.
                                                             (line 1530)
* __fractunsqqti:                        Fixed-point fractional library routines.
                                                             (line 1532)
* __fractunssadi:                        Fixed-point fractional library routines.
                                                             (line 1557)
* __fractunssahi:                        Fixed-point fractional library routines.
                                                             (line 1555)
* __fractunssaqi:                        Fixed-point fractional library routines.
                                                             (line 1554)
* __fractunssasi:                        Fixed-point fractional library routines.
                                                             (line 1556)
* __fractunssati:                        Fixed-point fractional library routines.
                                                             (line 1558)
* __fractunssida:                        Fixed-point fractional library routines.
                                                             (line 1692)
* __fractunssidq:                        Fixed-point fractional library routines.
                                                             (line 1689)
* __fractunssiha:                        Fixed-point fractional library routines.
                                                             (line 1690)
* __fractunssihq:                        Fixed-point fractional library routines.
                                                             (line 1687)
* __fractunssiqq:                        Fixed-point fractional library routines.
                                                             (line 1686)
* __fractunssisa:                        Fixed-point fractional library routines.
                                                             (line 1691)
* __fractunssisq:                        Fixed-point fractional library routines.
                                                             (line 1688)
* __fractunssita:                        Fixed-point fractional library routines.
                                                             (line 1693)
* __fractunssiuda:                       Fixed-point fractional library routines.
                                                             (line 1704)
* __fractunssiudq:                       Fixed-point fractional library routines.
                                                             (line 1699)
* __fractunssiuha:                       Fixed-point fractional library routines.
                                                             (line 1701)
* __fractunssiuhq:                       Fixed-point fractional library routines.
                                                             (line 1696)
* __fractunssiuqq:                       Fixed-point fractional library routines.
                                                             (line 1694)
* __fractunssiusa:                       Fixed-point fractional library routines.
                                                             (line 1703)
* __fractunssiusq:                       Fixed-point fractional library routines.
                                                             (line 1697)
* __fractunssiuta:                       Fixed-point fractional library routines.
                                                             (line 1706)
* __fractunssqdi:                        Fixed-point fractional library routines.
                                                             (line 1541)
* __fractunssqhi:                        Fixed-point fractional library routines.
                                                             (line 1539)
* __fractunssqqi:                        Fixed-point fractional library routines.
                                                             (line 1538)
* __fractunssqsi:                        Fixed-point fractional library routines.
                                                             (line 1540)
* __fractunssqti:                        Fixed-point fractional library routines.
                                                             (line 1542)
* __fractunstadi:                        Fixed-point fractional library routines.
                                                             (line 1567)
* __fractunstahi:                        Fixed-point fractional library routines.
                                                             (line 1565)
* __fractunstaqi:                        Fixed-point fractional library routines.
                                                             (line 1564)
* __fractunstasi:                        Fixed-point fractional library routines.
                                                             (line 1566)
* __fractunstati:                        Fixed-point fractional library routines.
                                                             (line 1568)
* __fractunstida:                        Fixed-point fractional library routines.
                                                             (line 1737)
* __fractunstidq:                        Fixed-point fractional library routines.
                                                             (line 1733)
* __fractunstiha:                        Fixed-point fractional library routines.
                                                             (line 1735)
* __fractunstihq:                        Fixed-point fractional library routines.
                                                             (line 1731)
* __fractunstiqq:                        Fixed-point fractional library routines.
                                                             (line 1730)
* __fractunstisa:                        Fixed-point fractional library routines.
                                                             (line 1736)
* __fractunstisq:                        Fixed-point fractional library routines.
                                                             (line 1732)
* __fractunstita:                        Fixed-point fractional library routines.
                                                             (line 1738)
* __fractunstiuda:                       Fixed-point fractional library routines.
                                                             (line 1752)
* __fractunstiudq:                       Fixed-point fractional library routines.
                                                             (line 1746)
* __fractunstiuha:                       Fixed-point fractional library routines.
                                                             (line 1748)
* __fractunstiuhq:                       Fixed-point fractional library routines.
                                                             (line 1742)
* __fractunstiuqq:                       Fixed-point fractional library routines.
                                                             (line 1740)
* __fractunstiusa:                       Fixed-point fractional library routines.
                                                             (line 1750)
* __fractunstiusq:                       Fixed-point fractional library routines.
                                                             (line 1744)
* __fractunstiuta:                       Fixed-point fractional library routines.
                                                             (line 1754)
* __fractunsudadi:                       Fixed-point fractional library routines.
                                                             (line 1628)
* __fractunsudahi:                       Fixed-point fractional library routines.
                                                             (line 1624)
* __fractunsudaqi:                       Fixed-point fractional library routines.
                                                             (line 1622)
* __fractunsudasi:                       Fixed-point fractional library routines.
                                                             (line 1626)
* __fractunsudati:                       Fixed-point fractional library routines.
                                                             (line 1630)
* __fractunsudqdi:                       Fixed-point fractional library routines.
                                                             (line 1602)
* __fractunsudqhi:                       Fixed-point fractional library routines.
                                                             (line 1598)
* __fractunsudqqi:                       Fixed-point fractional library routines.
                                                             (line 1596)
* __fractunsudqsi:                       Fixed-point fractional library routines.
                                                             (line 1600)
* __fractunsudqti:                       Fixed-point fractional library routines.
                                                             (line 1604)
* __fractunsuhadi:                       Fixed-point fractional library routines.
                                                             (line 1612)
* __fractunsuhahi:                       Fixed-point fractional library routines.
                                                             (line 1608)
* __fractunsuhaqi:                       Fixed-point fractional library routines.
                                                             (line 1606)
* __fractunsuhasi:                       Fixed-point fractional library routines.
                                                             (line 1610)
* __fractunsuhati:                       Fixed-point fractional library routines.
                                                             (line 1614)
* __fractunsuhqdi:                       Fixed-point fractional library routines.
                                                             (line 1583)
* __fractunsuhqhi:                       Fixed-point fractional library routines.
                                                             (line 1581)
* __fractunsuhqqi:                       Fixed-point fractional library routines.
                                                             (line 1580)
* __fractunsuhqsi:                       Fixed-point fractional library routines.
                                                             (line 1582)
* __fractunsuhqti:                       Fixed-point fractional library routines.
                                                             (line 1584)
* __fractunsuqqdi:                       Fixed-point fractional library routines.
                                                             (line 1576)
* __fractunsuqqhi:                       Fixed-point fractional library routines.
                                                             (line 1572)
* __fractunsuqqqi:                       Fixed-point fractional library routines.
                                                             (line 1570)
* __fractunsuqqsi:                       Fixed-point fractional library routines.
                                                             (line 1574)
* __fractunsuqqti:                       Fixed-point fractional library routines.
                                                             (line 1578)
* __fractunsusadi:                       Fixed-point fractional library routines.
                                                             (line 1619)
* __fractunsusahi:                       Fixed-point fractional library routines.
                                                             (line 1617)
* __fractunsusaqi:                       Fixed-point fractional library routines.
                                                             (line 1616)
* __fractunsusasi:                       Fixed-point fractional library routines.
                                                             (line 1618)
* __fractunsusati:                       Fixed-point fractional library routines.
                                                             (line 1620)
* __fractunsusqdi:                       Fixed-point fractional library routines.
                                                             (line 1592)
* __fractunsusqhi:                       Fixed-point fractional library routines.
                                                             (line 1588)
* __fractunsusqqi:                       Fixed-point fractional library routines.
                                                             (line 1586)
* __fractunsusqsi:                       Fixed-point fractional library routines.
                                                             (line 1590)
* __fractunsusqti:                       Fixed-point fractional library routines.
                                                             (line 1594)
* __fractunsutadi:                       Fixed-point fractional library routines.
                                                             (line 1638)
* __fractunsutahi:                       Fixed-point fractional library routines.
                                                             (line 1634)
* __fractunsutaqi:                       Fixed-point fractional library routines.
                                                             (line 1632)
* __fractunsutasi:                       Fixed-point fractional library routines.
                                                             (line 1636)
* __fractunsutati:                       Fixed-point fractional library routines.
                                                             (line 1640)
* __fractuqqda:                          Fixed-point fractional library routines.
                                                             (line  679)
* __fractuqqdf:                          Fixed-point fractional library routines.
                                                             (line  702)
* __fractuqqdi:                          Fixed-point fractional library routines.
                                                             (line  699)
* __fractuqqdq:                          Fixed-point fractional library routines.
                                                             (line  675)
* __fractuqqha:                          Fixed-point fractional library routines.
                                                             (line  677)
* __fractuqqhi:                          Fixed-point fractional library routines.
                                                             (line  697)
* __fractuqqhq:                          Fixed-point fractional library routines.
                                                             (line  673)
* __fractuqqqi:                          Fixed-point fractional library routines.
                                                             (line  696)
* __fractuqqqq:                          Fixed-point fractional library routines.
                                                             (line  672)
* __fractuqqsa:                          Fixed-point fractional library routines.
                                                             (line  678)
* __fractuqqsf:                          Fixed-point fractional library routines.
                                                             (line  701)
* __fractuqqsi:                          Fixed-point fractional library routines.
                                                             (line  698)
* __fractuqqsq:                          Fixed-point fractional library routines.
                                                             (line  674)
* __fractuqqta:                          Fixed-point fractional library routines.
                                                             (line  680)
* __fractuqqti:                          Fixed-point fractional library routines.
                                                             (line  700)
* __fractuqquda:                         Fixed-point fractional library routines.
                                                             (line  692)
* __fractuqqudq2:                        Fixed-point fractional library routines.
                                                             (line  686)
* __fractuqquha:                         Fixed-point fractional library routines.
                                                             (line  688)
* __fractuqquhq2:                        Fixed-point fractional library routines.
                                                             (line  682)
* __fractuqqusa:                         Fixed-point fractional library routines.
                                                             (line  690)
* __fractuqqusq2:                        Fixed-point fractional library routines.
                                                             (line  684)
* __fractuqquta:                         Fixed-point fractional library routines.
                                                             (line  694)
* __fractusada:                          Fixed-point fractional library routines.
                                                             (line  836)
* __fractusadf:                          Fixed-point fractional library routines.
                                                             (line  857)
* __fractusadi:                          Fixed-point fractional library routines.
                                                             (line  854)
* __fractusadq:                          Fixed-point fractional library routines.
                                                             (line  833)
* __fractusaha:                          Fixed-point fractional library routines.
                                                             (line  834)
* __fractusahi:                          Fixed-point fractional library routines.
                                                             (line  852)
* __fractusahq:                          Fixed-point fractional library routines.
                                                             (line  831)
* __fractusaqi:                          Fixed-point fractional library routines.
                                                             (line  851)
* __fractusaqq:                          Fixed-point fractional library routines.
                                                             (line  830)
* __fractusasa:                          Fixed-point fractional library routines.
                                                             (line  835)
* __fractusasf:                          Fixed-point fractional library routines.
                                                             (line  856)
* __fractusasi:                          Fixed-point fractional library routines.
                                                             (line  853)
* __fractusasq:                          Fixed-point fractional library routines.
                                                             (line  832)
* __fractusata:                          Fixed-point fractional library routines.
                                                             (line  837)
* __fractusati:                          Fixed-point fractional library routines.
                                                             (line  855)
* __fractusauda2:                        Fixed-point fractional library routines.
                                                             (line  847)
* __fractusaudq:                         Fixed-point fractional library routines.
                                                             (line  843)
* __fractusauha2:                        Fixed-point fractional library routines.
                                                             (line  845)
* __fractusauhq:                         Fixed-point fractional library routines.
                                                             (line  840)
* __fractusauqq:                         Fixed-point fractional library routines.
                                                             (line  838)
* __fractusausq:                         Fixed-point fractional library routines.
                                                             (line  841)
* __fractusauta2:                        Fixed-point fractional library routines.
                                                             (line  849)
* __fractusqda:                          Fixed-point fractional library routines.
                                                             (line  738)
* __fractusqdf:                          Fixed-point fractional library routines.
                                                             (line  761)
* __fractusqdi:                          Fixed-point fractional library routines.
                                                             (line  758)
* __fractusqdq:                          Fixed-point fractional library routines.
                                                             (line  734)
* __fractusqha:                          Fixed-point fractional library routines.
                                                             (line  736)
* __fractusqhi:                          Fixed-point fractional library routines.
                                                             (line  756)
* __fractusqhq:                          Fixed-point fractional library routines.
                                                             (line  732)
* __fractusqqi:                          Fixed-point fractional library routines.
                                                             (line  755)
* __fractusqqq:                          Fixed-point fractional library routines.
                                                             (line  731)
* __fractusqsa:                          Fixed-point fractional library routines.
                                                             (line  737)
* __fractusqsf:                          Fixed-point fractional library routines.
                                                             (line  760)
* __fractusqsi:                          Fixed-point fractional library routines.
                                                             (line  757)
* __fractusqsq:                          Fixed-point fractional library routines.
                                                             (line  733)
* __fractusqta:                          Fixed-point fractional library routines.
                                                             (line  739)
* __fractusqti:                          Fixed-point fractional library routines.
                                                             (line  759)
* __fractusquda:                         Fixed-point fractional library routines.
                                                             (line  751)
* __fractusqudq2:                        Fixed-point fractional library routines.
                                                             (line  745)
* __fractusquha:                         Fixed-point fractional library routines.
                                                             (line  747)
* __fractusquhq2:                        Fixed-point fractional library routines.
                                                             (line  743)
* __fractusquqq2:                        Fixed-point fractional library routines.
                                                             (line  741)
* __fractusqusa:                         Fixed-point fractional library routines.
                                                             (line  749)
* __fractusquta:                         Fixed-point fractional library routines.
                                                             (line  753)
* __fractutada:                          Fixed-point fractional library routines.
                                                             (line  899)
* __fractutadf:                          Fixed-point fractional library routines.
                                                             (line  925)
* __fractutadi:                          Fixed-point fractional library routines.
                                                             (line  921)
* __fractutadq:                          Fixed-point fractional library routines.
                                                             (line  894)
* __fractutaha:                          Fixed-point fractional library routines.
                                                             (line  896)
* __fractutahi:                          Fixed-point fractional library routines.
                                                             (line  919)
* __fractutahq:                          Fixed-point fractional library routines.
                                                             (line  891)
* __fractutaqi:                          Fixed-point fractional library routines.
                                                             (line  917)
* __fractutaqq:                          Fixed-point fractional library routines.
                                                             (line  889)
* __fractutasa:                          Fixed-point fractional library routines.
                                                             (line  898)
* __fractutasf:                          Fixed-point fractional library routines.
                                                             (line  924)
* __fractutasi:                          Fixed-point fractional library routines.
                                                             (line  920)
* __fractutasq:                          Fixed-point fractional library routines.
                                                             (line  892)
* __fractutata:                          Fixed-point fractional library routines.
                                                             (line  901)
* __fractutati:                          Fixed-point fractional library routines.
                                                             (line  922)
* __fractutauda2:                        Fixed-point fractional library routines.
                                                             (line  915)
* __fractutaudq:                         Fixed-point fractional library routines.
                                                             (line  909)
* __fractutauha2:                        Fixed-point fractional library routines.
                                                             (line  911)
* __fractutauhq:                         Fixed-point fractional library routines.
                                                             (line  905)
* __fractutauqq:                         Fixed-point fractional library routines.
                                                             (line  903)
* __fractutausa2:                        Fixed-point fractional library routines.
                                                             (line  913)
* __fractutausq:                         Fixed-point fractional library routines.
                                                             (line  907)
* __gedf2:                               Soft float library routines.
                                                             (line  205)
* __gesf2:                               Soft float library routines.
                                                             (line  204)
* __getf2:                               Soft float library routines.
                                                             (line  206)
* __gtdf2:                               Soft float library routines.
                                                             (line  223)
* __gtsf2:                               Soft float library routines.
                                                             (line  222)
* __gttf2:                               Soft float library routines.
                                                             (line  224)
* __ledf2:                               Soft float library routines.
                                                             (line  217)
* __lesf2:                               Soft float library routines.
                                                             (line  216)
* __letf2:                               Soft float library routines.
                                                             (line  218)
* __lshrdi3:                             Integer library routines.
                                                             (line   30)
* __lshrsi3:                             Integer library routines.
                                                             (line   29)
* __lshrti3:                             Integer library routines.
                                                             (line   31)
* __lshruda3:                            Fixed-point fractional library routines.
                                                             (line  396)
* __lshrudq3:                            Fixed-point fractional library routines.
                                                             (line  390)
* __lshruha3:                            Fixed-point fractional library routines.
                                                             (line  392)
* __lshruhq3:                            Fixed-point fractional library routines.
                                                             (line  386)
* __lshruqq3:                            Fixed-point fractional library routines.
                                                             (line  384)
* __lshrusa3:                            Fixed-point fractional library routines.
                                                             (line  394)
* __lshrusq3:                            Fixed-point fractional library routines.
                                                             (line  388)
* __lshruta3:                            Fixed-point fractional library routines.
                                                             (line  398)
* __ltdf2:                               Soft float library routines.
                                                             (line  211)
* __ltsf2:                               Soft float library routines.
                                                             (line  210)
* __lttf2:                               Soft float library routines.
                                                             (line  212)
* __main:                                Collect2.           (line   15)
* __moddi3:                              Integer library routines.
                                                             (line   36)
* __modsi3:                              Integer library routines.
                                                             (line   35)
* __modti3:                              Integer library routines.
                                                             (line   37)
* __morestack_current_segment:           Miscellaneous routines.
                                                             (line   45)
* __morestack_initial_sp:                Miscellaneous routines.
                                                             (line   46)
* __morestack_segments:                  Miscellaneous routines.
                                                             (line   44)
* __mulda3:                              Fixed-point fractional library routines.
                                                             (line  178)
* __muldc3:                              Soft float library routines.
                                                             (line  239)
* __muldf3:                              Soft float library routines.
                                                             (line   39)
* __muldi3:                              Integer library routines.
                                                             (line   42)
* __muldq3:                              Fixed-point fractional library routines.
                                                             (line  165)
* __mulha3:                              Fixed-point fractional library routines.
                                                             (line  175)
* __mulhq3:                              Fixed-point fractional library routines.
                                                             (line  163)
* __mulqq3:                              Fixed-point fractional library routines.
                                                             (line  161)
* __mulsa3:                              Fixed-point fractional library routines.
                                                             (line  177)
* __mulsc3:                              Soft float library routines.
                                                             (line  237)
* __mulsf3:                              Soft float library routines.
                                                             (line   38)
* __mulsi3:                              Integer library routines.
                                                             (line   41)
* __mulsq3:                              Fixed-point fractional library routines.
                                                             (line  164)
* __multa3:                              Fixed-point fractional library routines.
                                                             (line  179)
* __multc3:                              Soft float library routines.
                                                             (line  241)
* __multf3:                              Soft float library routines.
                                                             (line   40)
* __multi3:                              Integer library routines.
                                                             (line   43)
* __muluda3:                             Fixed-point fractional library routines.
                                                             (line  185)
* __muludq3:                             Fixed-point fractional library routines.
                                                             (line  173)
* __muluha3:                             Fixed-point fractional library routines.
                                                             (line  181)
* __muluhq3:                             Fixed-point fractional library routines.
                                                             (line  169)
* __muluqq3:                             Fixed-point fractional library routines.
                                                             (line  167)
* __mulusa3:                             Fixed-point fractional library routines.
                                                             (line  183)
* __mulusq3:                             Fixed-point fractional library routines.
                                                             (line  171)
* __muluta3:                             Fixed-point fractional library routines.
                                                             (line  187)
* __mulvdi3:                             Integer library routines.
                                                             (line  114)
* __mulvsi3:                             Integer library routines.
                                                             (line  113)
* __mulxc3:                              Soft float library routines.
                                                             (line  243)
* __mulxf3:                              Soft float library routines.
                                                             (line   42)
* __nedf2:                               Soft float library routines.
                                                             (line  199)
* __negda2:                              Fixed-point fractional library routines.
                                                             (line  306)
* __negdf2:                              Soft float library routines.
                                                             (line   55)
* __negdi2:                              Integer library routines.
                                                             (line   46)
* __negdq2:                              Fixed-point fractional library routines.
                                                             (line  296)
* __negha2:                              Fixed-point fractional library routines.
                                                             (line  304)
* __neghq2:                              Fixed-point fractional library routines.
                                                             (line  294)
* __negqq2:                              Fixed-point fractional library routines.
                                                             (line  293)
* __negsa2:                              Fixed-point fractional library routines.
                                                             (line  305)
* __negsf2:                              Soft float library routines.
                                                             (line   54)
* __negsq2:                              Fixed-point fractional library routines.
                                                             (line  295)
* __negta2:                              Fixed-point fractional library routines.
                                                             (line  307)
* __negtf2:                              Soft float library routines.
                                                             (line   56)
* __negti2:                              Integer library routines.
                                                             (line   47)
* __neguda2:                             Fixed-point fractional library routines.
                                                             (line  311)
* __negudq2:                             Fixed-point fractional library routines.
                                                             (line  302)
* __neguha2:                             Fixed-point fractional library routines.
                                                             (line  308)
* __neguhq2:                             Fixed-point fractional library routines.
                                                             (line  299)
* __neguqq2:                             Fixed-point fractional library routines.
                                                             (line  297)
* __negusa2:                             Fixed-point fractional library routines.
                                                             (line  310)
* __negusq2:                             Fixed-point fractional library routines.
                                                             (line  300)
* __neguta2:                             Fixed-point fractional library routines.
                                                             (line  313)
* __negvdi2:                             Integer library routines.
                                                             (line  118)
* __negvsi2:                             Integer library routines.
                                                             (line  117)
* __negxf2:                              Soft float library routines.
                                                             (line   57)
* __nesf2:                               Soft float library routines.
                                                             (line  198)
* __netf2:                               Soft float library routines.
                                                             (line  200)
* __paritydi2:                           Integer library routines.
                                                             (line  150)
* __paritysi2:                           Integer library routines.
                                                             (line  149)
* __parityti2:                           Integer library routines.
                                                             (line  151)
* __popcountdi2:                         Integer library routines.
                                                             (line  156)
* __popcountsi2:                         Integer library routines.
                                                             (line  155)
* __popcountti2:                         Integer library routines.
                                                             (line  157)
* __powidf2:                             Soft float library routines.
                                                             (line  232)
* __powisf2:                             Soft float library routines.
                                                             (line  231)
* __powitf2:                             Soft float library routines.
                                                             (line  233)
* __powixf2:                             Soft float library routines.
                                                             (line  234)
* __satfractdadq:                        Fixed-point fractional library routines.
                                                             (line 1160)
* __satfractdaha2:                       Fixed-point fractional library routines.
                                                             (line 1161)
* __satfractdahq:                        Fixed-point fractional library routines.
                                                             (line 1158)
* __satfractdaqq:                        Fixed-point fractional library routines.
                                                             (line 1157)
* __satfractdasa2:                       Fixed-point fractional library routines.
                                                             (line 1162)
* __satfractdasq:                        Fixed-point fractional library routines.
                                                             (line 1159)
* __satfractdata2:                       Fixed-point fractional library routines.
                                                             (line 1163)
* __satfractdauda:                       Fixed-point fractional library routines.
                                                             (line 1173)
* __satfractdaudq:                       Fixed-point fractional library routines.
                                                             (line 1168)
* __satfractdauha:                       Fixed-point fractional library routines.
                                                             (line 1170)
* __satfractdauhq:                       Fixed-point fractional library routines.
                                                             (line 1166)
* __satfractdauqq:                       Fixed-point fractional library routines.
                                                             (line 1164)
* __satfractdausa:                       Fixed-point fractional library routines.
                                                             (line 1172)
* __satfractdausq:                       Fixed-point fractional library routines.
                                                             (line 1167)
* __satfractdauta:                       Fixed-point fractional library routines.
                                                             (line 1174)
* __satfractdfda:                        Fixed-point fractional library routines.
                                                             (line 1513)
* __satfractdfdq:                        Fixed-point fractional library routines.
                                                             (line 1510)
* __satfractdfha:                        Fixed-point fractional library routines.
                                                             (line 1511)
* __satfractdfhq:                        Fixed-point fractional library routines.
                                                             (line 1508)
* __satfractdfqq:                        Fixed-point fractional library routines.
                                                             (line 1507)
* __satfractdfsa:                        Fixed-point fractional library routines.
                                                             (line 1512)
* __satfractdfsq:                        Fixed-point fractional library routines.
                                                             (line 1509)
* __satfractdfta:                        Fixed-point fractional library routines.
                                                             (line 1514)
* __satfractdfuda:                       Fixed-point fractional library routines.
                                                             (line 1522)
* __satfractdfudq:                       Fixed-point fractional library routines.
                                                             (line 1518)
* __satfractdfuha:                       Fixed-point fractional library routines.
                                                             (line 1520)
* __satfractdfuhq:                       Fixed-point fractional library routines.
                                                             (line 1516)
* __satfractdfuqq:                       Fixed-point fractional library routines.
                                                             (line 1515)
* __satfractdfusa:                       Fixed-point fractional library routines.
                                                             (line 1521)
* __satfractdfusq:                       Fixed-point fractional library routines.
                                                             (line 1517)
* __satfractdfuta:                       Fixed-point fractional library routines.
                                                             (line 1523)
* __satfractdida:                        Fixed-point fractional library routines.
                                                             (line 1463)
* __satfractdidq:                        Fixed-point fractional library routines.
                                                             (line 1460)
* __satfractdiha:                        Fixed-point fractional library routines.
                                                             (line 1461)
* __satfractdihq:                        Fixed-point fractional library routines.
                                                             (line 1458)
* __satfractdiqq:                        Fixed-point fractional library routines.
                                                             (line 1457)
* __satfractdisa:                        Fixed-point fractional library routines.
                                                             (line 1462)
* __satfractdisq:                        Fixed-point fractional library routines.
                                                             (line 1459)
* __satfractdita:                        Fixed-point fractional library routines.
                                                             (line 1464)
* __satfractdiuda:                       Fixed-point fractional library routines.
                                                             (line 1471)
* __satfractdiudq:                       Fixed-point fractional library routines.
                                                             (line 1468)
* __satfractdiuha:                       Fixed-point fractional library routines.
                                                             (line 1469)
* __satfractdiuhq:                       Fixed-point fractional library routines.
                                                             (line 1466)
* __satfractdiuqq:                       Fixed-point fractional library routines.
                                                             (line 1465)
* __satfractdiusa:                       Fixed-point fractional library routines.
                                                             (line 1470)
* __satfractdiusq:                       Fixed-point fractional library routines.
                                                             (line 1467)
* __satfractdiuta:                       Fixed-point fractional library routines.
                                                             (line 1472)
* __satfractdqda:                        Fixed-point fractional library routines.
                                                             (line 1105)
* __satfractdqha:                        Fixed-point fractional library routines.
                                                             (line 1103)
* __satfractdqhq2:                       Fixed-point fractional library routines.
                                                             (line 1101)
* __satfractdqqq2:                       Fixed-point fractional library routines.
                                                             (line 1100)
* __satfractdqsa:                        Fixed-point fractional library routines.
                                                             (line 1104)
* __satfractdqsq2:                       Fixed-point fractional library routines.
                                                             (line 1102)
* __satfractdqta:                        Fixed-point fractional library routines.
                                                             (line 1106)
* __satfractdquda:                       Fixed-point fractional library routines.
                                                             (line 1117)
* __satfractdqudq:                       Fixed-point fractional library routines.
                                                             (line 1112)
* __satfractdquha:                       Fixed-point fractional library routines.
                                                             (line 1114)
* __satfractdquhq:                       Fixed-point fractional library routines.
                                                             (line 1109)
* __satfractdquqq:                       Fixed-point fractional library routines.
                                                             (line 1107)
* __satfractdqusa:                       Fixed-point fractional library routines.
                                                             (line 1116)
* __satfractdqusq:                       Fixed-point fractional library routines.
                                                             (line 1110)
* __satfractdquta:                       Fixed-point fractional library routines.
                                                             (line 1119)
* __satfracthada2:                       Fixed-point fractional library routines.
                                                             (line 1126)
* __satfracthadq:                        Fixed-point fractional library routines.
                                                             (line 1124)
* __satfracthahq:                        Fixed-point fractional library routines.
                                                             (line 1122)
* __satfracthaqq:                        Fixed-point fractional library routines.
                                                             (line 1121)
* __satfracthasa2:                       Fixed-point fractional library routines.
                                                             (line 1125)
* __satfracthasq:                        Fixed-point fractional library routines.
                                                             (line 1123)
* __satfracthata2:                       Fixed-point fractional library routines.
                                                             (line 1127)
* __satfracthauda:                       Fixed-point fractional library routines.
                                                             (line 1138)
* __satfracthaudq:                       Fixed-point fractional library routines.
                                                             (line 1133)
* __satfracthauha:                       Fixed-point fractional library routines.
                                                             (line 1135)
* __satfracthauhq:                       Fixed-point fractional library routines.
                                                             (line 1130)
* __satfracthauqq:                       Fixed-point fractional library routines.
                                                             (line 1128)
* __satfracthausa:                       Fixed-point fractional library routines.
                                                             (line 1137)
* __satfracthausq:                       Fixed-point fractional library routines.
                                                             (line 1131)
* __satfracthauta:                       Fixed-point fractional library routines.
                                                             (line 1140)
* __satfracthida:                        Fixed-point fractional library routines.
                                                             (line 1431)
* __satfracthidq:                        Fixed-point fractional library routines.
                                                             (line 1428)
* __satfracthiha:                        Fixed-point fractional library routines.
                                                             (line 1429)
* __satfracthihq:                        Fixed-point fractional library routines.
                                                             (line 1426)
* __satfracthiqq:                        Fixed-point fractional library routines.
                                                             (line 1425)
* __satfracthisa:                        Fixed-point fractional library routines.
                                                             (line 1430)
* __satfracthisq:                        Fixed-point fractional library routines.
                                                             (line 1427)
* __satfracthita:                        Fixed-point fractional library routines.
                                                             (line 1432)
* __satfracthiuda:                       Fixed-point fractional library routines.
                                                             (line 1439)
* __satfracthiudq:                       Fixed-point fractional library routines.
                                                             (line 1436)
* __satfracthiuha:                       Fixed-point fractional library routines.
                                                             (line 1437)
* __satfracthiuhq:                       Fixed-point fractional library routines.
                                                             (line 1434)
* __satfracthiuqq:                       Fixed-point fractional library routines.
                                                             (line 1433)
* __satfracthiusa:                       Fixed-point fractional library routines.
                                                             (line 1438)
* __satfracthiusq:                       Fixed-point fractional library routines.
                                                             (line 1435)
* __satfracthiuta:                       Fixed-point fractional library routines.
                                                             (line 1440)
* __satfracthqda:                        Fixed-point fractional library routines.
                                                             (line 1071)
* __satfracthqdq2:                       Fixed-point fractional library routines.
                                                             (line 1068)
* __satfracthqha:                        Fixed-point fractional library routines.
                                                             (line 1069)
* __satfracthqqq2:                       Fixed-point fractional library routines.
                                                             (line 1066)
* __satfracthqsa:                        Fixed-point fractional library routines.
                                                             (line 1070)
* __satfracthqsq2:                       Fixed-point fractional library routines.
                                                             (line 1067)
* __satfracthqta:                        Fixed-point fractional library routines.
                                                             (line 1072)
* __satfracthquda:                       Fixed-point fractional library routines.
                                                             (line 1079)
* __satfracthqudq:                       Fixed-point fractional library routines.
                                                             (line 1076)
* __satfracthquha:                       Fixed-point fractional library routines.
                                                             (line 1077)
* __satfracthquhq:                       Fixed-point fractional library routines.
                                                             (line 1074)
* __satfracthquqq:                       Fixed-point fractional library routines.
                                                             (line 1073)
* __satfracthqusa:                       Fixed-point fractional library routines.
                                                             (line 1078)
* __satfracthqusq:                       Fixed-point fractional library routines.
                                                             (line 1075)
* __satfracthquta:                       Fixed-point fractional library routines.
                                                             (line 1080)
* __satfractqida:                        Fixed-point fractional library routines.
                                                             (line 1409)
* __satfractqidq:                        Fixed-point fractional library routines.
                                                             (line 1406)
* __satfractqiha:                        Fixed-point fractional library routines.
                                                             (line 1407)
* __satfractqihq:                        Fixed-point fractional library routines.
                                                             (line 1404)
* __satfractqiqq:                        Fixed-point fractional library routines.
                                                             (line 1403)
* __satfractqisa:                        Fixed-point fractional library routines.
                                                             (line 1408)
* __satfractqisq:                        Fixed-point fractional library routines.
                                                             (line 1405)
* __satfractqita:                        Fixed-point fractional library routines.
                                                             (line 1410)
* __satfractqiuda:                       Fixed-point fractional library routines.
                                                             (line 1421)
* __satfractqiudq:                       Fixed-point fractional library routines.
                                                             (line 1416)
* __satfractqiuha:                       Fixed-point fractional library routines.
                                                             (line 1418)
* __satfractqiuhq:                       Fixed-point fractional library routines.
                                                             (line 1413)
* __satfractqiuqq:                       Fixed-point fractional library routines.
                                                             (line 1411)
* __satfractqiusa:                       Fixed-point fractional library routines.
                                                             (line 1420)
* __satfractqiusq:                       Fixed-point fractional library routines.
                                                             (line 1414)
* __satfractqiuta:                       Fixed-point fractional library routines.
                                                             (line 1423)
* __satfractqqda:                        Fixed-point fractional library routines.
                                                             (line 1050)
* __satfractqqdq2:                       Fixed-point fractional library routines.
                                                             (line 1047)
* __satfractqqha:                        Fixed-point fractional library routines.
                                                             (line 1048)
* __satfractqqhq2:                       Fixed-point fractional library routines.
                                                             (line 1045)
* __satfractqqsa:                        Fixed-point fractional library routines.
                                                             (line 1049)
* __satfractqqsq2:                       Fixed-point fractional library routines.
                                                             (line 1046)
* __satfractqqta:                        Fixed-point fractional library routines.
                                                             (line 1051)
* __satfractqquda:                       Fixed-point fractional library routines.
                                                             (line 1062)
* __satfractqqudq:                       Fixed-point fractional library routines.
                                                             (line 1057)
* __satfractqquha:                       Fixed-point fractional library routines.
                                                             (line 1059)
* __satfractqquhq:                       Fixed-point fractional library routines.
                                                             (line 1054)
* __satfractqquqq:                       Fixed-point fractional library routines.
                                                             (line 1052)
* __satfractqqusa:                       Fixed-point fractional library routines.
                                                             (line 1061)
* __satfractqqusq:                       Fixed-point fractional library routines.
                                                             (line 1055)
* __satfractqquta:                       Fixed-point fractional library routines.
                                                             (line 1064)
* __satfractsada2:                       Fixed-point fractional library routines.
                                                             (line 1147)
* __satfractsadq:                        Fixed-point fractional library routines.
                                                             (line 1145)
* __satfractsaha2:                       Fixed-point fractional library routines.
                                                             (line 1146)
* __satfractsahq:                        Fixed-point fractional library routines.
                                                             (line 1143)
* __satfractsaqq:                        Fixed-point fractional library routines.
                                                             (line 1142)
* __satfractsasq:                        Fixed-point fractional library routines.
                                                             (line 1144)
* __satfractsata2:                       Fixed-point fractional library routines.
                                                             (line 1148)
* __satfractsauda:                       Fixed-point fractional library routines.
                                                             (line 1155)
* __satfractsaudq:                       Fixed-point fractional library routines.
                                                             (line 1152)
* __satfractsauha:                       Fixed-point fractional library routines.
                                                             (line 1153)
* __satfractsauhq:                       Fixed-point fractional library routines.
                                                             (line 1150)
* __satfractsauqq:                       Fixed-point fractional library routines.
                                                             (line 1149)
* __satfractsausa:                       Fixed-point fractional library routines.
                                                             (line 1154)
* __satfractsausq:                       Fixed-point fractional library routines.
                                                             (line 1151)
* __satfractsauta:                       Fixed-point fractional library routines.
                                                             (line 1156)
* __satfractsfda:                        Fixed-point fractional library routines.
                                                             (line 1497)
* __satfractsfdq:                        Fixed-point fractional library routines.
                                                             (line 1494)
* __satfractsfha:                        Fixed-point fractional library routines.
                                                             (line 1495)
* __satfractsfhq:                        Fixed-point fractional library routines.
                                                             (line 1492)
* __satfractsfqq:                        Fixed-point fractional library routines.
                                                             (line 1491)
* __satfractsfsa:                        Fixed-point fractional library routines.
                                                             (line 1496)
* __satfractsfsq:                        Fixed-point fractional library routines.
                                                             (line 1493)
* __satfractsfta:                        Fixed-point fractional library routines.
                                                             (line 1498)
* __satfractsfuda:                       Fixed-point fractional library routines.
                                                             (line 1505)
* __satfractsfudq:                       Fixed-point fractional library routines.
                                                             (line 1502)
* __satfractsfuha:                       Fixed-point fractional library routines.
                                                             (line 1503)
* __satfractsfuhq:                       Fixed-point fractional library routines.
                                                             (line 1500)
* __satfractsfuqq:                       Fixed-point fractional library routines.
                                                             (line 1499)
* __satfractsfusa:                       Fixed-point fractional library routines.
                                                             (line 1504)
* __satfractsfusq:                       Fixed-point fractional library routines.
                                                             (line 1501)
* __satfractsfuta:                       Fixed-point fractional library routines.
                                                             (line 1506)
* __satfractsida:                        Fixed-point fractional library routines.
                                                             (line 1447)
* __satfractsidq:                        Fixed-point fractional library routines.
                                                             (line 1444)
* __satfractsiha:                        Fixed-point fractional library routines.
                                                             (line 1445)
* __satfractsihq:                        Fixed-point fractional library routines.
                                                             (line 1442)
* __satfractsiqq:                        Fixed-point fractional library routines.
                                                             (line 1441)
* __satfractsisa:                        Fixed-point fractional library routines.
                                                             (line 1446)
* __satfractsisq:                        Fixed-point fractional library routines.
                                                             (line 1443)
* __satfractsita:                        Fixed-point fractional library routines.
                                                             (line 1448)
* __satfractsiuda:                       Fixed-point fractional library routines.
                                                             (line 1455)
* __satfractsiudq:                       Fixed-point fractional library routines.
                                                             (line 1452)
* __satfractsiuha:                       Fixed-point fractional library routines.
                                                             (line 1453)
* __satfractsiuhq:                       Fixed-point fractional library routines.
                                                             (line 1450)
* __satfractsiuqq:                       Fixed-point fractional library routines.
                                                             (line 1449)
* __satfractsiusa:                       Fixed-point fractional library routines.
                                                             (line 1454)
* __satfractsiusq:                       Fixed-point fractional library routines.
                                                             (line 1451)
* __satfractsiuta:                       Fixed-point fractional library routines.
                                                             (line 1456)
* __satfractsqda:                        Fixed-point fractional library routines.
                                                             (line 1086)
* __satfractsqdq2:                       Fixed-point fractional library routines.
                                                             (line 1083)
* __satfractsqha:                        Fixed-point fractional library routines.
                                                             (line 1084)
* __satfractsqhq2:                       Fixed-point fractional library routines.
                                                             (line 1082)
* __satfractsqqq2:                       Fixed-point fractional library routines.
                                                             (line 1081)
* __satfractsqsa:                        Fixed-point fractional library routines.
                                                             (line 1085)
* __satfractsqta:                        Fixed-point fractional library routines.
                                                             (line 1087)
* __satfractsquda:                       Fixed-point fractional library routines.
                                                             (line 1097)
* __satfractsqudq:                       Fixed-point fractional library routines.
                                                             (line 1092)
* __satfractsquha:                       Fixed-point fractional library routines.
                                                             (line 1094)
* __satfractsquhq:                       Fixed-point fractional library routines.
                                                             (line 1090)
* __satfractsquqq:                       Fixed-point fractional library routines.
                                                             (line 1088)
* __satfractsqusa:                       Fixed-point fractional library routines.
                                                             (line 1096)
* __satfractsqusq:                       Fixed-point fractional library routines.
                                                             (line 1091)
* __satfractsquta:                       Fixed-point fractional library routines.
                                                             (line 1098)
* __satfracttada2:                       Fixed-point fractional library routines.
                                                             (line 1182)
* __satfracttadq:                        Fixed-point fractional library routines.
                                                             (line 1179)
* __satfracttaha2:                       Fixed-point fractional library routines.
                                                             (line 1180)
* __satfracttahq:                        Fixed-point fractional library routines.
                                                             (line 1177)
* __satfracttaqq:                        Fixed-point fractional library routines.
                                                             (line 1176)
* __satfracttasa2:                       Fixed-point fractional library routines.
                                                             (line 1181)
* __satfracttasq:                        Fixed-point fractional library routines.
                                                             (line 1178)
* __satfracttauda:                       Fixed-point fractional library routines.
                                                             (line 1193)
* __satfracttaudq:                       Fixed-point fractional library routines.
                                                             (line 1188)
* __satfracttauha:                       Fixed-point fractional library routines.
                                                             (line 1190)
* __satfracttauhq:                       Fixed-point fractional library routines.
                                                             (line 1185)
* __satfracttauqq:                       Fixed-point fractional library routines.
                                                             (line 1183)
* __satfracttausa:                       Fixed-point fractional library routines.
                                                             (line 1192)
* __satfracttausq:                       Fixed-point fractional library routines.
                                                             (line 1186)
* __satfracttauta:                       Fixed-point fractional library routines.
                                                             (line 1195)
* __satfracttida:                        Fixed-point fractional library routines.
                                                             (line 1479)
* __satfracttidq:                        Fixed-point fractional library routines.
                                                             (line 1476)
* __satfracttiha:                        Fixed-point fractional library routines.
                                                             (line 1477)
* __satfracttihq:                        Fixed-point fractional library routines.
                                                             (line 1474)
* __satfracttiqq:                        Fixed-point fractional library routines.
                                                             (line 1473)
* __satfracttisa:                        Fixed-point fractional library routines.
                                                             (line 1478)
* __satfracttisq:                        Fixed-point fractional library routines.
                                                             (line 1475)
* __satfracttita:                        Fixed-point fractional library routines.
                                                             (line 1480)
* __satfracttiuda:                       Fixed-point fractional library routines.
                                                             (line 1488)
* __satfracttiudq:                       Fixed-point fractional library routines.
                                                             (line 1484)
* __satfracttiuha:                       Fixed-point fractional library routines.
                                                             (line 1486)
* __satfracttiuhq:                       Fixed-point fractional library routines.
                                                             (line 1482)
* __satfracttiuqq:                       Fixed-point fractional library routines.
                                                             (line 1481)
* __satfracttiusa:                       Fixed-point fractional library routines.
                                                             (line 1487)
* __satfracttiusq:                       Fixed-point fractional library routines.
                                                             (line 1483)
* __satfracttiuta:                       Fixed-point fractional library routines.
                                                             (line 1489)
* __satfractudada:                       Fixed-point fractional library routines.
                                                             (line 1358)
* __satfractudadq:                       Fixed-point fractional library routines.
                                                             (line 1353)
* __satfractudaha:                       Fixed-point fractional library routines.
                                                             (line 1355)
* __satfractudahq:                       Fixed-point fractional library routines.
                                                             (line 1351)
* __satfractudaqq:                       Fixed-point fractional library routines.
                                                             (line 1349)
* __satfractudasa:                       Fixed-point fractional library routines.
                                                             (line 1357)
* __satfractudasq:                       Fixed-point fractional library routines.
                                                             (line 1352)
* __satfractudata:                       Fixed-point fractional library routines.
                                                             (line 1359)
* __satfractudaudq:                      Fixed-point fractional library routines.
                                                             (line 1367)
* __satfractudauha2:                     Fixed-point fractional library routines.
                                                             (line 1369)
* __satfractudauhq:                      Fixed-point fractional library routines.
                                                             (line 1363)
* __satfractudauqq:                      Fixed-point fractional library routines.
                                                             (line 1361)
* __satfractudausa2:                     Fixed-point fractional library routines.
                                                             (line 1371)
* __satfractudausq:                      Fixed-point fractional library routines.
                                                             (line 1365)
* __satfractudauta2:                     Fixed-point fractional library routines.
                                                             (line 1373)
* __satfractudqda:                       Fixed-point fractional library routines.
                                                             (line 1282)
* __satfractudqdq:                       Fixed-point fractional library routines.
                                                             (line 1277)
* __satfractudqha:                       Fixed-point fractional library routines.
                                                             (line 1279)
* __satfractudqhq:                       Fixed-point fractional library routines.
                                                             (line 1274)
* __satfractudqqq:                       Fixed-point fractional library routines.
                                                             (line 1272)
* __satfractudqsa:                       Fixed-point fractional library routines.
                                                             (line 1281)
* __satfractudqsq:                       Fixed-point fractional library routines.
                                                             (line 1275)
* __satfractudqta:                       Fixed-point fractional library routines.
                                                             (line 1284)
* __satfractudquda:                      Fixed-point fractional library routines.
                                                             (line 1296)
* __satfractudquha:                      Fixed-point fractional library routines.
                                                             (line 1292)
* __satfractudquhq2:                     Fixed-point fractional library routines.
                                                             (line 1288)
* __satfractudquqq2:                     Fixed-point fractional library routines.
                                                             (line 1286)
* __satfractudqusa:                      Fixed-point fractional library routines.
                                                             (line 1294)
* __satfractudqusq2:                     Fixed-point fractional library routines.
                                                             (line 1290)
* __satfractudquta:                      Fixed-point fractional library routines.
                                                             (line 1298)
* __satfractuhada:                       Fixed-point fractional library routines.
                                                             (line 1310)
* __satfractuhadq:                       Fixed-point fractional library routines.
                                                             (line 1305)
* __satfractuhaha:                       Fixed-point fractional library routines.
                                                             (line 1307)
* __satfractuhahq:                       Fixed-point fractional library routines.
                                                             (line 1302)
* __satfractuhaqq:                       Fixed-point fractional library routines.
                                                             (line 1300)
* __satfractuhasa:                       Fixed-point fractional library routines.
                                                             (line 1309)
* __satfractuhasq:                       Fixed-point fractional library routines.
                                                             (line 1303)
* __satfractuhata:                       Fixed-point fractional library routines.
                                                             (line 1312)
* __satfractuhauda2:                     Fixed-point fractional library routines.
                                                             (line 1324)
* __satfractuhaudq:                      Fixed-point fractional library routines.
                                                             (line 1320)
* __satfractuhauhq:                      Fixed-point fractional library routines.
                                                             (line 1316)
* __satfractuhauqq:                      Fixed-point fractional library routines.
                                                             (line 1314)
* __satfractuhausa2:                     Fixed-point fractional library routines.
                                                             (line 1322)
* __satfractuhausq:                      Fixed-point fractional library routines.
                                                             (line 1318)
* __satfractuhauta2:                     Fixed-point fractional library routines.
                                                             (line 1326)
* __satfractuhqda:                       Fixed-point fractional library routines.
                                                             (line 1231)
* __satfractuhqdq:                       Fixed-point fractional library routines.
                                                             (line 1228)
* __satfractuhqha:                       Fixed-point fractional library routines.
                                                             (line 1229)
* __satfractuhqhq:                       Fixed-point fractional library routines.
                                                             (line 1226)
* __satfractuhqqq:                       Fixed-point fractional library routines.
                                                             (line 1225)
* __satfractuhqsa:                       Fixed-point fractional library routines.
                                                             (line 1230)
* __satfractuhqsq:                       Fixed-point fractional library routines.
                                                             (line 1227)
* __satfractuhqta:                       Fixed-point fractional library routines.
                                                             (line 1232)
* __satfractuhquda:                      Fixed-point fractional library routines.
                                                             (line 1242)
* __satfractuhqudq2:                     Fixed-point fractional library routines.
                                                             (line 1237)
* __satfractuhquha:                      Fixed-point fractional library routines.
                                                             (line 1239)
* __satfractuhquqq2:                     Fixed-point fractional library routines.
                                                             (line 1233)
* __satfractuhqusa:                      Fixed-point fractional library routines.
                                                             (line 1241)
* __satfractuhqusq2:                     Fixed-point fractional library routines.
                                                             (line 1235)
* __satfractuhquta:                      Fixed-point fractional library routines.
                                                             (line 1244)
* __satfractunsdida:                     Fixed-point fractional library routines.
                                                             (line 1841)
* __satfractunsdidq:                     Fixed-point fractional library routines.
                                                             (line 1837)
* __satfractunsdiha:                     Fixed-point fractional library routines.
                                                             (line 1839)
* __satfractunsdihq:                     Fixed-point fractional library routines.
                                                             (line 1835)
* __satfractunsdiqq:                     Fixed-point fractional library routines.
                                                             (line 1834)
* __satfractunsdisa:                     Fixed-point fractional library routines.
                                                             (line 1840)
* __satfractunsdisq:                     Fixed-point fractional library routines.
                                                             (line 1836)
* __satfractunsdita:                     Fixed-point fractional library routines.
                                                             (line 1842)
* __satfractunsdiuda:                    Fixed-point fractional library routines.
                                                             (line 1856)
* __satfractunsdiudq:                    Fixed-point fractional library routines.
                                                             (line 1850)
* __satfractunsdiuha:                    Fixed-point fractional library routines.
                                                             (line 1852)
* __satfractunsdiuhq:                    Fixed-point fractional library routines.
                                                             (line 1846)
* __satfractunsdiuqq:                    Fixed-point fractional library routines.
                                                             (line 1844)
* __satfractunsdiusa:                    Fixed-point fractional library routines.
                                                             (line 1854)
* __satfractunsdiusq:                    Fixed-point fractional library routines.
                                                             (line 1848)
* __satfractunsdiuta:                    Fixed-point fractional library routines.
                                                             (line 1858)
* __satfractunshida:                     Fixed-point fractional library routines.
                                                             (line 1793)
* __satfractunshidq:                     Fixed-point fractional library routines.
                                                             (line 1789)
* __satfractunshiha:                     Fixed-point fractional library routines.
                                                             (line 1791)
* __satfractunshihq:                     Fixed-point fractional library routines.
                                                             (line 1787)
* __satfractunshiqq:                     Fixed-point fractional library routines.
                                                             (line 1786)
* __satfractunshisa:                     Fixed-point fractional library routines.
                                                             (line 1792)
* __satfractunshisq:                     Fixed-point fractional library routines.
                                                             (line 1788)
* __satfractunshita:                     Fixed-point fractional library routines.
                                                             (line 1794)
* __satfractunshiuda:                    Fixed-point fractional library routines.
                                                             (line 1808)
* __satfractunshiudq:                    Fixed-point fractional library routines.
                                                             (line 1802)
* __satfractunshiuha:                    Fixed-point fractional library routines.
                                                             (line 1804)
* __satfractunshiuhq:                    Fixed-point fractional library routines.
                                                             (line 1798)
* __satfractunshiuqq:                    Fixed-point fractional library routines.
                                                             (line 1796)
* __satfractunshiusa:                    Fixed-point fractional library routines.
                                                             (line 1806)
* __satfractunshiusq:                    Fixed-point fractional library routines.
                                                             (line 1800)
* __satfractunshiuta:                    Fixed-point fractional library routines.
                                                             (line 1810)
* __satfractunsqida:                     Fixed-point fractional library routines.
                                                             (line 1767)
* __satfractunsqidq:                     Fixed-point fractional library routines.
                                                             (line 1763)
* __satfractunsqiha:                     Fixed-point fractional library routines.
                                                             (line 1765)
* __satfractunsqihq:                     Fixed-point fractional library routines.
                                                             (line 1761)
* __satfractunsqiqq:                     Fixed-point fractional library routines.
                                                             (line 1760)
* __satfractunsqisa:                     Fixed-point fractional library routines.
                                                             (line 1766)
* __satfractunsqisq:                     Fixed-point fractional library routines.
                                                             (line 1762)
* __satfractunsqita:                     Fixed-point fractional library routines.
                                                             (line 1768)
* __satfractunsqiuda:                    Fixed-point fractional library routines.
                                                             (line 1782)
* __satfractunsqiudq:                    Fixed-point fractional library routines.
                                                             (line 1776)
* __satfractunsqiuha:                    Fixed-point fractional library routines.
                                                             (line 1778)
* __satfractunsqiuhq:                    Fixed-point fractional library routines.
                                                             (line 1772)
* __satfractunsqiuqq:                    Fixed-point fractional library routines.
                                                             (line 1770)
* __satfractunsqiusa:                    Fixed-point fractional library routines.
                                                             (line 1780)
* __satfractunsqiusq:                    Fixed-point fractional library routines.
                                                             (line 1774)
* __satfractunsqiuta:                    Fixed-point fractional library routines.
                                                             (line 1784)
* __satfractunssida:                     Fixed-point fractional library routines.
                                                             (line 1818)
* __satfractunssidq:                     Fixed-point fractional library routines.
                                                             (line 1815)
* __satfractunssiha:                     Fixed-point fractional library routines.
                                                             (line 1816)
* __satfractunssihq:                     Fixed-point fractional library routines.
                                                             (line 1813)
* __satfractunssiqq:                     Fixed-point fractional library routines.
                                                             (line 1812)
* __satfractunssisa:                     Fixed-point fractional library routines.
                                                             (line 1817)
* __satfractunssisq:                     Fixed-point fractional library routines.
                                                             (line 1814)
* __satfractunssita:                     Fixed-point fractional library routines.
                                                             (line 1819)
* __satfractunssiuda:                    Fixed-point fractional library routines.
                                                             (line 1830)
* __satfractunssiudq:                    Fixed-point fractional library routines.
                                                             (line 1825)
* __satfractunssiuha:                    Fixed-point fractional library routines.
                                                             (line 1827)
* __satfractunssiuhq:                    Fixed-point fractional library routines.
                                                             (line 1822)
* __satfractunssiuqq:                    Fixed-point fractional library routines.
                                                             (line 1820)
* __satfractunssiusa:                    Fixed-point fractional library routines.
                                                             (line 1829)
* __satfractunssiusq:                    Fixed-point fractional library routines.
                                                             (line 1823)
* __satfractunssiuta:                    Fixed-point fractional library routines.
                                                             (line 1832)
* __satfractunstida:                     Fixed-point fractional library routines.
                                                             (line 1870)
* __satfractunstidq:                     Fixed-point fractional library routines.
                                                             (line 1865)
* __satfractunstiha:                     Fixed-point fractional library routines.
                                                             (line 1867)
* __satfractunstihq:                     Fixed-point fractional library routines.
                                                             (line 1862)
* __satfractunstiqq:                     Fixed-point fractional library routines.
                                                             (line 1860)
* __satfractunstisa:                     Fixed-point fractional library routines.
                                                             (line 1869)
* __satfractunstisq:                     Fixed-point fractional library routines.
                                                             (line 1863)
* __satfractunstita:                     Fixed-point fractional library routines.
                                                             (line 1872)
* __satfractunstiuda:                    Fixed-point fractional library routines.
                                                             (line 1886)
* __satfractunstiudq:                    Fixed-point fractional library routines.
                                                             (line 1880)
* __satfractunstiuha:                    Fixed-point fractional library routines.
                                                             (line 1882)
* __satfractunstiuhq:                    Fixed-point fractional library routines.
                                                             (line 1876)
* __satfractunstiuqq:                    Fixed-point fractional library routines.
                                                             (line 1874)
* __satfractunstiusa:                    Fixed-point fractional library routines.
                                                             (line 1884)
* __satfractunstiusq:                    Fixed-point fractional library routines.
                                                             (line 1878)
* __satfractunstiuta:                    Fixed-point fractional library routines.
                                                             (line 1888)
* __satfractuqqda:                       Fixed-point fractional library routines.
                                                             (line 1207)
* __satfractuqqdq:                       Fixed-point fractional library routines.
                                                             (line 1202)
* __satfractuqqha:                       Fixed-point fractional library routines.
                                                             (line 1204)
* __satfractuqqhq:                       Fixed-point fractional library routines.
                                                             (line 1199)
* __satfractuqqqq:                       Fixed-point fractional library routines.
                                                             (line 1197)
* __satfractuqqsa:                       Fixed-point fractional library routines.
                                                             (line 1206)
* __satfractuqqsq:                       Fixed-point fractional library routines.
                                                             (line 1200)
* __satfractuqqta:                       Fixed-point fractional library routines.
                                                             (line 1209)
* __satfractuqquda:                      Fixed-point fractional library routines.
                                                             (line 1221)
* __satfractuqqudq2:                     Fixed-point fractional library routines.
                                                             (line 1215)
* __satfractuqquha:                      Fixed-point fractional library routines.
                                                             (line 1217)
* __satfractuqquhq2:                     Fixed-point fractional library routines.
                                                             (line 1211)
* __satfractuqqusa:                      Fixed-point fractional library routines.
                                                             (line 1219)
* __satfractuqqusq2:                     Fixed-point fractional library routines.
                                                             (line 1213)
* __satfractuqquta:                      Fixed-point fractional library routines.
                                                             (line 1223)
* __satfractusada:                       Fixed-point fractional library routines.
                                                             (line 1334)
* __satfractusadq:                       Fixed-point fractional library routines.
                                                             (line 1331)
* __satfractusaha:                       Fixed-point fractional library routines.
                                                             (line 1332)
* __satfractusahq:                       Fixed-point fractional library routines.
                                                             (line 1329)
* __satfractusaqq:                       Fixed-point fractional library routines.
                                                             (line 1328)
* __satfractusasa:                       Fixed-point fractional library routines.
                                                             (line 1333)
* __satfractusasq:                       Fixed-point fractional library routines.
                                                             (line 1330)
* __satfractusata:                       Fixed-point fractional library routines.
                                                             (line 1335)
* __satfractusauda2:                     Fixed-point fractional library routines.
                                                             (line 1345)
* __satfractusaudq:                      Fixed-point fractional library routines.
                                                             (line 1341)
* __satfractusauha2:                     Fixed-point fractional library routines.
                                                             (line 1343)
* __satfractusauhq:                      Fixed-point fractional library routines.
                                                             (line 1338)
* __satfractusauqq:                      Fixed-point fractional library routines.
                                                             (line 1336)
* __satfractusausq:                      Fixed-point fractional library routines.
                                                             (line 1339)
* __satfractusauta2:                     Fixed-point fractional library routines.
                                                             (line 1347)
* __satfractusqda:                       Fixed-point fractional library routines.
                                                             (line 1255)
* __satfractusqdq:                       Fixed-point fractional library routines.
                                                             (line 1250)
* __satfractusqha:                       Fixed-point fractional library routines.
                                                             (line 1252)
* __satfractusqhq:                       Fixed-point fractional library routines.
                                                             (line 1248)
* __satfractusqqq:                       Fixed-point fractional library routines.
                                                             (line 1246)
* __satfractusqsa:                       Fixed-point fractional library routines.
                                                             (line 1254)
* __satfractusqsq:                       Fixed-point fractional library routines.
                                                             (line 1249)
* __satfractusqta:                       Fixed-point fractional library routines.
                                                             (line 1256)
* __satfractusquda:                      Fixed-point fractional library routines.
                                                             (line 1268)
* __satfractusqudq2:                     Fixed-point fractional library routines.
                                                             (line 1262)
* __satfractusquha:                      Fixed-point fractional library routines.
                                                             (line 1264)
* __satfractusquhq2:                     Fixed-point fractional library routines.
                                                             (line 1260)
* __satfractusquqq2:                     Fixed-point fractional library routines.
                                                             (line 1258)
* __satfractusqusa:                      Fixed-point fractional library routines.
                                                             (line 1266)
* __satfractusquta:                      Fixed-point fractional library routines.
                                                             (line 1270)
* __satfractutada:                       Fixed-point fractional library routines.
                                                             (line 1385)
* __satfractutadq:                       Fixed-point fractional library routines.
                                                             (line 1380)
* __satfractutaha:                       Fixed-point fractional library routines.
                                                             (line 1382)
* __satfractutahq:                       Fixed-point fractional library routines.
                                                             (line 1377)
* __satfractutaqq:                       Fixed-point fractional library routines.
                                                             (line 1375)
* __satfractutasa:                       Fixed-point fractional library routines.
                                                             (line 1384)
* __satfractutasq:                       Fixed-point fractional library routines.
                                                             (line 1378)
* __satfractutata:                       Fixed-point fractional library routines.
                                                             (line 1387)
* __satfractutauda2:                     Fixed-point fractional library routines.
                                                             (line 1401)
* __satfractutaudq:                      Fixed-point fractional library routines.
                                                             (line 1395)
* __satfractutauha2:                     Fixed-point fractional library routines.
                                                             (line 1397)
* __satfractutauhq:                      Fixed-point fractional library routines.
                                                             (line 1391)
* __satfractutauqq:                      Fixed-point fractional library routines.
                                                             (line 1389)
* __satfractutausa2:                     Fixed-point fractional library routines.
                                                             (line 1399)
* __satfractutausq:                      Fixed-point fractional library routines.
                                                             (line 1393)
* __splitstack_find:                     Miscellaneous routines.
                                                             (line   15)
* __ssaddda3:                            Fixed-point fractional library routines.
                                                             (line   74)
* __ssadddq3:                            Fixed-point fractional library routines.
                                                             (line   69)
* __ssaddha3:                            Fixed-point fractional library routines.
                                                             (line   71)
* __ssaddhq3:                            Fixed-point fractional library routines.
                                                             (line   67)
* __ssaddqq3:                            Fixed-point fractional library routines.
                                                             (line   65)
* __ssaddsa3:                            Fixed-point fractional library routines.
                                                             (line   73)
* __ssaddsq3:                            Fixed-point fractional library routines.
                                                             (line   68)
* __ssaddta3:                            Fixed-point fractional library routines.
                                                             (line   75)
* __ssashlda3:                           Fixed-point fractional library routines.
                                                             (line  409)
* __ssashldq3:                           Fixed-point fractional library routines.
                                                             (line  405)
* __ssashlha3:                           Fixed-point fractional library routines.
                                                             (line  407)
* __ssashlhq3:                           Fixed-point fractional library routines.
                                                             (line  403)
* __ssashlsa3:                           Fixed-point fractional library routines.
                                                             (line  408)
* __ssashlsq3:                           Fixed-point fractional library routines.
                                                             (line  404)
* __ssashlta3:                           Fixed-point fractional library routines.
                                                             (line  410)
* __ssdivda3:                            Fixed-point fractional library routines.
                                                             (line  268)
* __ssdivdq3:                            Fixed-point fractional library routines.
                                                             (line  263)
* __ssdivha3:                            Fixed-point fractional library routines.
                                                             (line  265)
* __ssdivhq3:                            Fixed-point fractional library routines.
                                                             (line  261)
* __ssdivqq3:                            Fixed-point fractional library routines.
                                                             (line  259)
* __ssdivsa3:                            Fixed-point fractional library routines.
                                                             (line  267)
* __ssdivsq3:                            Fixed-point fractional library routines.
                                                             (line  262)
* __ssdivta3:                            Fixed-point fractional library routines.
                                                             (line  269)
* __ssmulda3:                            Fixed-point fractional library routines.
                                                             (line  200)
* __ssmuldq3:                            Fixed-point fractional library routines.
                                                             (line  195)
* __ssmulha3:                            Fixed-point fractional library routines.
                                                             (line  197)
* __ssmulhq3:                            Fixed-point fractional library routines.
                                                             (line  193)
* __ssmulqq3:                            Fixed-point fractional library routines.
                                                             (line  191)
* __ssmulsa3:                            Fixed-point fractional library routines.
                                                             (line  199)
* __ssmulsq3:                            Fixed-point fractional library routines.
                                                             (line  194)
* __ssmulta3:                            Fixed-point fractional library routines.
                                                             (line  201)
* __ssnegda2:                            Fixed-point fractional library routines.
                                                             (line  323)
* __ssnegdq2:                            Fixed-point fractional library routines.
                                                             (line  320)
* __ssnegha2:                            Fixed-point fractional library routines.
                                                             (line  321)
* __ssneghq2:                            Fixed-point fractional library routines.
                                                             (line  318)
* __ssnegqq2:                            Fixed-point fractional library routines.
                                                             (line  317)
* __ssnegsa2:                            Fixed-point fractional library routines.
                                                             (line  322)
* __ssnegsq2:                            Fixed-point fractional library routines.
                                                             (line  319)
* __ssnegta2:                            Fixed-point fractional library routines.
                                                             (line  324)
* __sssubda3:                            Fixed-point fractional library routines.
                                                             (line  136)
* __sssubdq3:                            Fixed-point fractional library routines.
                                                             (line  131)
* __sssubha3:                            Fixed-point fractional library routines.
                                                             (line  133)
* __sssubhq3:                            Fixed-point fractional library routines.
                                                             (line  129)
* __sssubqq3:                            Fixed-point fractional library routines.
                                                             (line  127)
* __sssubsa3:                            Fixed-point fractional library routines.
                                                             (line  135)
* __sssubsq3:                            Fixed-point fractional library routines.
                                                             (line  130)
* __sssubta3:                            Fixed-point fractional library routines.
                                                             (line  137)
* __subda3:                              Fixed-point fractional library routines.
                                                             (line  114)
* __subdf3:                              Soft float library routines.
                                                             (line   30)
* __subdq3:                              Fixed-point fractional library routines.
                                                             (line  101)
* __subha3:                              Fixed-point fractional library routines.
                                                             (line  111)
* __subhq3:                              Fixed-point fractional library routines.
                                                             (line   99)
* __subqq3:                              Fixed-point fractional library routines.
                                                             (line   97)
* __subsa3:                              Fixed-point fractional library routines.
                                                             (line  113)
* __subsf3:                              Soft float library routines.
                                                             (line   29)
* __subsq3:                              Fixed-point fractional library routines.
                                                             (line  100)
* __subta3:                              Fixed-point fractional library routines.
                                                             (line  115)
* __subtf3:                              Soft float library routines.
                                                             (line   31)
* __subuda3:                             Fixed-point fractional library routines.
                                                             (line  121)
* __subudq3:                             Fixed-point fractional library routines.
                                                             (line  109)
* __subuha3:                             Fixed-point fractional library routines.
                                                             (line  117)
* __subuhq3:                             Fixed-point fractional library routines.
                                                             (line  105)
* __subuqq3:                             Fixed-point fractional library routines.
                                                             (line  103)
* __subusa3:                             Fixed-point fractional library routines.
                                                             (line  119)
* __subusq3:                             Fixed-point fractional library routines.
                                                             (line  107)
* __subuta3:                             Fixed-point fractional library routines.
                                                             (line  123)
* __subvdi3:                             Integer library routines.
                                                             (line  122)
* __subvsi3:                             Integer library routines.
                                                             (line  121)
* __subxf3:                              Soft float library routines.
                                                             (line   33)
* __truncdfsf2:                          Soft float library routines.
                                                             (line   75)
* __trunctfdf2:                          Soft float library routines.
                                                             (line   72)
* __trunctfsf2:                          Soft float library routines.
                                                             (line   74)
* __truncxfdf2:                          Soft float library routines.
                                                             (line   71)
* __truncxfsf2:                          Soft float library routines.
                                                             (line   73)
* __ucmpdi2:                             Integer library routines.
                                                             (line   92)
* __ucmpti2:                             Integer library routines.
                                                             (line   93)
* __udivdi3:                             Integer library routines.
                                                             (line   52)
* __udivmoddi4:                          Integer library routines.
                                                             (line   59)
* __udivmodti4:                          Integer library routines.
                                                             (line   61)
* __udivsi3:                             Integer library routines.
                                                             (line   50)
* __udivti3:                             Integer library routines.
                                                             (line   54)
* __udivuda3:                            Fixed-point fractional library routines.
                                                             (line  252)
* __udivudq3:                            Fixed-point fractional library routines.
                                                             (line  246)
* __udivuha3:                            Fixed-point fractional library routines.
                                                             (line  248)
* __udivuhq3:                            Fixed-point fractional library routines.
                                                             (line  242)
* __udivuqq3:                            Fixed-point fractional library routines.
                                                             (line  240)
* __udivusa3:                            Fixed-point fractional library routines.
                                                             (line  250)
* __udivusq3:                            Fixed-point fractional library routines.
                                                             (line  244)
* __udivuta3:                            Fixed-point fractional library routines.
                                                             (line  254)
* __umoddi3:                             Integer library routines.
                                                             (line   69)
* __umodsi3:                             Integer library routines.
                                                             (line   67)
* __umodti3:                             Integer library routines.
                                                             (line   71)
* __unorddf2:                            Soft float library routines.
                                                             (line  172)
* __unordsf2:                            Soft float library routines.
                                                             (line  171)
* __unordtf2:                            Soft float library routines.
                                                             (line  173)
* __usadduda3:                           Fixed-point fractional library routines.
                                                             (line   91)
* __usaddudq3:                           Fixed-point fractional library routines.
                                                             (line   85)
* __usadduha3:                           Fixed-point fractional library routines.
                                                             (line   87)
* __usadduhq3:                           Fixed-point fractional library routines.
                                                             (line   81)
* __usadduqq3:                           Fixed-point fractional library routines.
                                                             (line   79)
* __usaddusa3:                           Fixed-point fractional library routines.
                                                             (line   89)
* __usaddusq3:                           Fixed-point fractional library routines.
                                                             (line   83)
* __usadduta3:                           Fixed-point fractional library routines.
                                                             (line   93)
* __usashluda3:                          Fixed-point fractional library routines.
                                                             (line  427)
* __usashludq3:                          Fixed-point fractional library routines.
                                                             (line  421)
* __usashluha3:                          Fixed-point fractional library routines.
                                                             (line  423)
* __usashluhq3:                          Fixed-point fractional library routines.
                                                             (line  417)
* __usashluqq3:                          Fixed-point fractional library routines.
                                                             (line  415)
* __usashlusa3:                          Fixed-point fractional library routines.
                                                             (line  425)
* __usashlusq3:                          Fixed-point fractional library routines.
                                                             (line  419)
* __usashluta3:                          Fixed-point fractional library routines.
                                                             (line  429)
* __usdivuda3:                           Fixed-point fractional library routines.
                                                             (line  286)
* __usdivudq3:                           Fixed-point fractional library routines.
                                                             (line  280)
* __usdivuha3:                           Fixed-point fractional library routines.
                                                             (line  282)
* __usdivuhq3:                           Fixed-point fractional library routines.
                                                             (line  276)
* __usdivuqq3:                           Fixed-point fractional library routines.
                                                             (line  274)
* __usdivusa3:                           Fixed-point fractional library routines.
                                                             (line  284)
* __usdivusq3:                           Fixed-point fractional library routines.
                                                             (line  278)
* __usdivuta3:                           Fixed-point fractional library routines.
                                                             (line  288)
* __usmuluda3:                           Fixed-point fractional library routines.
                                                             (line  218)
* __usmuludq3:                           Fixed-point fractional library routines.
                                                             (line  212)
* __usmuluha3:                           Fixed-point fractional library routines.
                                                             (line  214)
* __usmuluhq3:                           Fixed-point fractional library routines.
                                                             (line  208)
* __usmuluqq3:                           Fixed-point fractional library routines.
                                                             (line  206)
* __usmulusa3:                           Fixed-point fractional library routines.
                                                             (line  216)
* __usmulusq3:                           Fixed-point fractional library routines.
                                                             (line  210)
* __usmuluta3:                           Fixed-point fractional library routines.
                                                             (line  220)
* __usneguda2:                           Fixed-point fractional library routines.
                                                             (line  337)
* __usnegudq2:                           Fixed-point fractional library routines.
                                                             (line  332)
* __usneguha2:                           Fixed-point fractional library routines.
                                                             (line  334)
* __usneguhq2:                           Fixed-point fractional library routines.
                                                             (line  329)
* __usneguqq2:                           Fixed-point fractional library routines.
                                                             (line  327)
* __usnegusa2:                           Fixed-point fractional library routines.
                                                             (line  336)
* __usnegusq2:                           Fixed-point fractional library routines.
                                                             (line  330)
* __usneguta2:                           Fixed-point fractional library routines.
                                                             (line  339)
* __ussubuda3:                           Fixed-point fractional library routines.
                                                             (line  154)
* __ussubudq3:                           Fixed-point fractional library routines.
                                                             (line  148)
* __ussubuha3:                           Fixed-point fractional library routines.
                                                             (line  150)
* __ussubuhq3:                           Fixed-point fractional library routines.
                                                             (line  144)
* __ussubuqq3:                           Fixed-point fractional library routines.
                                                             (line  142)
* __ussubusa3:                           Fixed-point fractional library routines.
                                                             (line  152)
* __ussubusq3:                           Fixed-point fractional library routines.
                                                             (line  146)
* __ussubuta3:                           Fixed-point fractional library routines.
                                                             (line  156)
* abort:                                 Portability.        (line   20)
* abs:                                   Arithmetic.         (line  200)
* abs and attributes:                    Expressions.        (line   83)
* absence_set:                           Processor pipeline description.
                                                             (line  223)
* absM2 instruction pattern:             Standard Names.     (line  610)
* absolute value:                        Arithmetic.         (line  200)
* ABS_EXPR:                              Unary and Binary Expressions.
                                                             (line    6)
* access to operands:                    Accessors.          (line    6)
* access to special operands:            Special Accessors.  (line    6)
* accessors:                             Accessors.          (line    6)
* ACCUMULATE_OUTGOING_ARGS:              Stack Arguments.    (line   48)
* ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line  133)
* ACCUM_TYPE_SIZE:                       Type Layout.        (line   87)
* acosM2 instruction pattern:            Standard Names.     (line  697)
* ADA_LONG_TYPE_SIZE:                    Type Layout.        (line   25)
* Adding a new GIMPLE statement code:    Adding a new GIMPLE statement code.
                                                             (line    6)
* ADDITIONAL_REGISTER_NAMES:             Instruction Output. (line   14)
* addM3 instruction pattern:             Standard Names.     (line  295)
* addMODEcc instruction pattern:         Standard Names.     (line 1266)
* addptrM3 instruction pattern:          Standard Names.     (line  328)
* address constraints:                   Simple Constraints. (line  162)
* addressing modes:                      Addressing Modes.   (line    6)
* address_operand:                       Machine-Independent Predicates.
                                                             (line   62)
* address_operand <1>:                   Simple Constraints. (line  166)
* addr_diff_vec:                         Side Effects.       (line  314)
* addr_diff_vec, length of:              Insn Lengths.       (line   26)
* ADDR_EXPR:                             Storage References. (line    6)
* addr_vec:                              Side Effects.       (line  309)
* addr_vec, length of:                   Insn Lengths.       (line   26)
* addvM4 instruction pattern:            Standard Names.     (line  311)
* ADJUST_FIELD_ALIGN:                    Storage Layout.     (line  195)
* ADJUST_INSN_LENGTH:                    Insn Lengths.       (line   41)
* ADJUST_REG_ALLOC_ORDER:                Allocation Order.   (line   22)
* aggregates as return values:           Aggregate Return.   (line    6)
* alias:                                 Alias analysis.     (line    6)
* allocate_stack instruction pattern:    Standard Names.     (line 1594)
* ALL_REGS:                              Register Classes.   (line   17)
* alternate entry points:                Insns.              (line  146)
* anchored addresses:                    Anchored Addresses. (line    6)
* and:                                   Arithmetic.         (line  158)
* and and attributes:                    Expressions.        (line   50)
* and, canonicalization of:              Insn Canonicalizations.
                                                             (line   51)
* andM3 instruction pattern:             Standard Names.     (line  301)
* ANNOTATE_EXPR:                         Unary and Binary Expressions.
                                                             (line    6)
* annotations:                           Annotations.        (line    6)
* APPLY_RESULT_SIZE:                     Scalar Return.      (line  112)
* ARGS_GROW_DOWNWARD:                    Frame Layout.       (line   30)
* argument passing:                      Interface.          (line   36)
* arguments in registers:                Register Arguments. (line    6)
* arguments on stack:                    Stack Arguments.    (line    6)
* ARG_POINTER_CFA_OFFSET:                Frame Layout.       (line  190)
* ARG_POINTER_REGNUM:                    Frame Registers.    (line   40)
* ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line   65)
* arg_pointer_rtx:                       Frame Registers.    (line  104)
* arithmetic library:                    Soft float library routines.
                                                             (line    6)
* arithmetic shift:                      Arithmetic.         (line  173)
* arithmetic shift with signed saturation: Arithmetic.       (line  173)
* arithmetic shift with unsigned saturation: Arithmetic.     (line  173)
* arithmetic, in RTL:                    Arithmetic.         (line    6)
* ARITHMETIC_TYPE_P:                     Types for C++.      (line   59)
* array:                                 Types.              (line    6)
* ARRAY_RANGE_REF:                       Storage References. (line    6)
* ARRAY_REF:                             Storage References. (line    6)
* ARRAY_TYPE:                            Types.              (line    6)
* ashift:                                Arithmetic.         (line  173)
* ashift and attributes:                 Expressions.        (line   83)
* ashiftrt:                              Arithmetic.         (line  190)
* ashiftrt and attributes:               Expressions.        (line   83)
* ashlM3 instruction pattern:            Standard Names.     (line  579)
* ashrM3 instruction pattern:            Standard Names.     (line  591)
* asinM2 instruction pattern:            Standard Names.     (line  691)
* ASM_APP_OFF:                           File Framework.     (line   76)
* ASM_APP_ON:                            File Framework.     (line   69)
* ASM_COMMENT_START:                     File Framework.     (line   64)
* ASM_DECLARE_COLD_FUNCTION_NAME:        Label Output.       (line  136)
* ASM_DECLARE_COLD_FUNCTION_SIZE:        Label Output.       (line  151)
* ASM_DECLARE_FUNCTION_NAME:             Label Output.       (line  108)
* ASM_DECLARE_FUNCTION_SIZE:             Label Output.       (line  123)
* ASM_DECLARE_OBJECT_NAME:               Label Output.       (line  164)
* ASM_DECLARE_REGISTER_GLOBAL:           Label Output.       (line  192)
* ASM_FINAL_SPEC:                        Driver.             (line   81)
* ASM_FINISH_DECLARE_OBJECT:             Label Output.       (line  200)
* ASM_FORMAT_PRIVATE_NAME:               Label Output.       (line  426)
* asm_fprintf:                           Instruction Output. (line  150)
* ASM_FPRINTF_EXTENSIONS:                Instruction Output. (line  160)
* ASM_GENERATE_INTERNAL_LABEL:           Label Output.       (line  410)
* asm_input:                             Side Effects.       (line  296)
* asm_input and /v:                      Flags.              (line   76)
* ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX:     Exception Handling. (line   80)
* asm_noperands:                         Insns.              (line  304)
* ASM_NO_SKIP_IN_TEXT:                   Alignment Output.   (line   78)
* asm_operands and /v:                   Flags.              (line   76)
* asm_operands, RTL sharing:             Sharing.            (line   45)
* asm_operands, usage:                   Assembler.          (line    6)
* ASM_OUTPUT_ADDR_DIFF_ELT:              Dispatch Tables.    (line    8)
* ASM_OUTPUT_ADDR_VEC_ELT:               Dispatch Tables.    (line   25)
* ASM_OUTPUT_ALIGN:                      Alignment Output.   (line   85)
* ASM_OUTPUT_ALIGNED_BSS:                Uninitialized Data. (line   45)
* ASM_OUTPUT_ALIGNED_COMMON:             Uninitialized Data. (line   29)
* ASM_OUTPUT_ALIGNED_DECL_COMMON:        Uninitialized Data. (line   36)
* ASM_OUTPUT_ALIGNED_DECL_LOCAL:         Uninitialized Data. (line   89)
* ASM_OUTPUT_ALIGNED_LOCAL:              Uninitialized Data. (line   82)
* ASM_OUTPUT_ALIGN_WITH_NOP:             Alignment Output.   (line   90)
* ASM_OUTPUT_ASCII:                      Data Output.        (line   54)
* ASM_OUTPUT_CASE_END:                   Dispatch Tables.    (line   50)
* ASM_OUTPUT_CASE_LABEL:                 Dispatch Tables.    (line   37)
* ASM_OUTPUT_COMMON:                     Uninitialized Data. (line    9)
* ASM_OUTPUT_DEBUG_LABEL:                Label Output.       (line  398)
* ASM_OUTPUT_DEF:                        Label Output.       (line  447)
* ASM_OUTPUT_DEF_FROM_DECLS:             Label Output.       (line  454)
* ASM_OUTPUT_DWARF_DATAREL:              SDB and DWARF.      (line   97)
* ASM_OUTPUT_DWARF_DELTA:                SDB and DWARF.      (line   77)
* ASM_OUTPUT_DWARF_OFFSET:               SDB and DWARF.      (line   86)
* ASM_OUTPUT_DWARF_PCREL:                SDB and DWARF.      (line   92)
* ASM_OUTPUT_DWARF_TABLE_REF:            SDB and DWARF.      (line  102)
* ASM_OUTPUT_DWARF_VMS_DELTA:            SDB and DWARF.      (line   81)
* ASM_OUTPUT_EXTERNAL:                   Label Output.       (line  327)
* ASM_OUTPUT_FDESC:                      Data Output.        (line   63)
* ASM_OUTPUT_FUNCTION_LABEL:             Label Output.       (line   16)
* ASM_OUTPUT_INTERNAL_LABEL:             Label Output.       (line   27)
* ASM_OUTPUT_LABEL:                      Label Output.       (line    8)
* ASM_OUTPUT_LABELREF:                   Label Output.       (line  349)
* ASM_OUTPUT_LABEL_REF:                  Label Output.       (line  371)
* ASM_OUTPUT_LOCAL:                      Uninitialized Data. (line   69)
* ASM_OUTPUT_MAX_SKIP_ALIGN:             Alignment Output.   (line   94)
* ASM_OUTPUT_MEASURED_SIZE:              Label Output.       (line   51)
* ASM_OUTPUT_OPCODE:                     Instruction Output. (line   35)
* ASM_OUTPUT_POOL_EPILOGUE:              Data Output.        (line  112)
* ASM_OUTPUT_POOL_PROLOGUE:              Data Output.        (line   76)
* ASM_OUTPUT_REG_POP:                    Instruction Output. (line  206)
* ASM_OUTPUT_REG_PUSH:                   Instruction Output. (line  201)
* ASM_OUTPUT_SIZE_DIRECTIVE:             Label Output.       (line   45)
* ASM_OUTPUT_SKIP:                       Alignment Output.   (line   72)
* ASM_OUTPUT_SOURCE_FILENAME:            File Framework.     (line   83)
* ASM_OUTPUT_SPECIAL_POOL_ENTRY:         Data Output.        (line   87)
* ASM_OUTPUT_SYMBOL_REF:                 Label Output.       (line  364)
* ASM_OUTPUT_TYPE_DIRECTIVE:             Label Output.       (line   98)
* ASM_OUTPUT_WEAKREF:                    Label Output.       (line  259)
* ASM_OUTPUT_WEAK_ALIAS:                 Label Output.       (line  473)
* ASM_PREFERRED_EH_DATA_FORMAT:          Exception Handling. (line   66)
* ASM_SPEC:                              Driver.             (line   73)
* ASM_STABD_OP:                          DBX Options.        (line   34)
* ASM_STABN_OP:                          DBX Options.        (line   41)
* ASM_STABS_OP:                          DBX Options.        (line   28)
* ASM_WEAKEN_DECL:                       Label Output.       (line  251)
* ASM_WEAKEN_LABEL:                      Label Output.       (line  238)
* assembler format:                      File Framework.     (line    6)
* assembler instructions in RTL:         Assembler.          (line    6)
* ASSEMBLER_DIALECT:                     Instruction Output. (line  172)
* assemble_name:                         Label Output.       (line    8)
* assemble_name_raw:                     Label Output.       (line   27)
* assigning attribute values to insns:   Tagging Insns.      (line    6)
* ASSUME_EXTENDED_UNWIND_CONTEXT:        Frame Registers.    (line  165)
* asterisk in template:                  Output Statement.   (line   29)
* AS_NEEDS_DASH_FOR_PIPED_INPUT:         Driver.             (line   88)
* atan2M3 instruction pattern:           Standard Names.     (line  792)
* atanM2 instruction pattern:            Standard Names.     (line  703)
* atomic:                                GTY Options.        (line  195)
* atomic_addMODE instruction pattern:    Standard Names.     (line 1996)
* atomic_add_fetchMODE instruction pattern: Standard Names.  (line 2025)
* atomic_andMODE instruction pattern:    Standard Names.     (line 1996)
* atomic_and_fetchMODE instruction pattern: Standard Names.  (line 2025)
* atomic_compare_and_swapMODE instruction pattern: Standard Names.
                                                             (line 1932)
* atomic_exchangeMODE instruction pattern: Standard Names.   (line 1984)
* atomic_fetch_addMODE instruction pattern: Standard Names.  (line 2010)
* atomic_fetch_andMODE instruction pattern: Standard Names.  (line 2010)
* atomic_fetch_nandMODE instruction pattern: Standard Names. (line 2010)
* atomic_fetch_orMODE instruction pattern: Standard Names.   (line 2010)
* atomic_fetch_subMODE instruction pattern: Standard Names.  (line 2010)
* atomic_fetch_xorMODE instruction pattern: Standard Names.  (line 2010)
* atomic_loadMODE instruction pattern:   Standard Names.     (line 1963)
* atomic_nandMODE instruction pattern:   Standard Names.     (line 1996)
* atomic_nand_fetchMODE instruction pattern: Standard Names. (line 2025)
* atomic_orMODE instruction pattern:     Standard Names.     (line 1996)
* atomic_or_fetchMODE instruction pattern: Standard Names.   (line 2025)
* atomic_storeMODE instruction pattern:  Standard Names.     (line 1973)
* atomic_subMODE instruction pattern:    Standard Names.     (line 1996)
* atomic_sub_fetchMODE instruction pattern: Standard Names.  (line 2025)
* atomic_test_and_set instruction pattern: Standard Names.   (line 2042)
* atomic_xorMODE instruction pattern:    Standard Names.     (line 1996)
* atomic_xor_fetchMODE instruction pattern: Standard Names.  (line 2025)
* attr:                                  Expressions.        (line  163)
* attr <1>:                              Tagging Insns.      (line   54)
* attribute expressions:                 Expressions.        (line    6)
* attribute specifications:              Attr Example.       (line    6)
* attribute specifications example:      Attr Example.       (line    6)
* attributes:                            Attributes.         (line    6)
* attributes, defining:                  Defining Attributes.
                                                             (line    6)
* attributes, target-specific:           Target Attributes.  (line    6)
* ATTRIBUTE_ALIGNED_VALUE:               Storage Layout.     (line  177)
* attr_flag:                             Expressions.        (line  138)
* autoincrement addressing, availability: Portability.       (line   20)
* autoincrement/decrement addressing:    Simple Constraints. (line   30)
* automata_option:                       Processor pipeline description.
                                                             (line  304)
* automaton based pipeline description:  Processor pipeline description.
                                                             (line    6)
* automaton based pipeline description <1>: Processor pipeline description.
                                                             (line   49)
* automaton based scheduler:             Processor pipeline description.
                                                             (line    6)
* AVOID_CCMODE_COPIES:                   Values in Registers.
                                                             (line  150)
* backslash:                             Output Template.    (line   46)
* barrier:                               Insns.              (line  176)
* barrier and /f:                        Flags.              (line  107)
* barrier and /v:                        Flags.              (line   44)
* BASE_REG_CLASS:                        Register Classes.   (line  111)
* basic block:                           Basic Blocks.       (line    6)
* Basic Statements:                      Basic Statements.   (line    6)
* basic-block.h:                         Control Flow.       (line    6)
* basic_block:                           Basic Blocks.       (line    6)
* BASIC_BLOCK:                           Basic Blocks.       (line   14)
* BB_HEAD, BB_END:                       Maintaining the CFG.
                                                             (line   76)
* bb_seq:                                GIMPLE sequences.   (line   72)
* BIGGEST_ALIGNMENT:                     Storage Layout.     (line  162)
* BIGGEST_FIELD_ALIGNMENT:               Storage Layout.     (line  188)
* BImode:                                Machine Modes.      (line   22)
* BIND_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* BINFO_TYPE:                            Classes.            (line    6)
* bit-fields:                            Bit-Fields.         (line    6)
* BITFIELD_NBYTES_LIMITED:               Storage Layout.     (line  398)
* BITS_BIG_ENDIAN:                       Storage Layout.     (line   11)
* BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields.       (line    8)
* BITS_PER_UNIT:                         Machine Modes.      (line  354)
* BITS_PER_WORD:                         Storage Layout.     (line   50)
* bitwise complement:                    Arithmetic.         (line  154)
* bitwise exclusive-or:                  Arithmetic.         (line  168)
* bitwise inclusive-or:                  Arithmetic.         (line  163)
* bitwise logical-and:                   Arithmetic.         (line  158)
* BIT_AND_EXPR:                          Unary and Binary Expressions.
                                                             (line    6)
* BIT_IOR_EXPR:                          Unary and Binary Expressions.
                                                             (line    6)
* BIT_NOT_EXPR:                          Unary and Binary Expressions.
                                                             (line    6)
* BIT_XOR_EXPR:                          Unary and Binary Expressions.
                                                             (line    6)
* BLKmode:                               Machine Modes.      (line  185)
* BLKmode, and function return values:   Calls.              (line   23)
* blockage instruction pattern:          Standard Names.     (line 1795)
* Blocks:                                Blocks.             (line    6)
* BLOCK_FOR_INSN, gimple_bb:             Maintaining the CFG.
                                                             (line   28)
* BLOCK_REG_PADDING:                     Register Arguments. (line  242)
* BND32mode:                             Machine Modes.      (line  209)
* BND64mode:                             Machine Modes.      (line  209)
* bool:                                  Misc.               (line  994)
* BOOLEAN_TYPE:                          Types.              (line    6)
* BOOL_TYPE_SIZE:                        Type Layout.        (line   43)
* branch prediction:                     Profile information.
                                                             (line   24)
* BRANCH_COST:                           Costs.              (line  104)
* break_out_memory_refs:                 Addressing Modes.   (line  134)
* BREAK_STMT:                            Statements for C++. (line    6)
* BSS_SECTION_ASM_OP:                    Sections.           (line   67)
* bswap:                                 Arithmetic.         (line  246)
* bswapM2 instruction pattern:           Standard Names.     (line  599)
* btruncM2 instruction pattern:          Standard Names.     (line  807)
* build0:                                Macros and Functions.
                                                             (line   16)
* build1:                                Macros and Functions.
                                                             (line   17)
* build2:                                Macros and Functions.
                                                             (line   18)
* build3:                                Macros and Functions.
                                                             (line   19)
* build4:                                Macros and Functions.
                                                             (line   20)
* build5:                                Macros and Functions.
                                                             (line   21)
* build6:                                Macros and Functions.
                                                             (line   22)
* builtin_longjmp instruction pattern:   Standard Names.     (line 1692)
* builtin_setjmp_receiver instruction pattern: Standard Names.
                                                             (line 1682)
* builtin_setjmp_setup instruction pattern: Standard Names.  (line 1671)
* BYTES_BIG_ENDIAN:                      Storage Layout.     (line   23)
* BYTES_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  219)
* byte_mode:                             Machine Modes.      (line  367)
* C statements for assembler output:     Output Statement.   (line    6)
* cache:                                 GTY Options.        (line  125)
* call:                                  Flags.              (line  221)
* call <1>:                              Side Effects.       (line   92)
* call instruction pattern:              Standard Names.     (line 1337)
* call usage:                            Calls.              (line   10)
* call, in call_insn:                    Flags.              (line   33)
* call, in mem:                          Flags.              (line   81)
* call-clobbered register:               Register Basics.    (line   35)
* call-clobbered register <1>:           Register Basics.    (line   46)
* call-clobbered register <2>:           Register Basics.    (line   53)
* call-saved register:                   Register Basics.    (line   35)
* call-saved register <1>:               Register Basics.    (line   46)
* call-saved register <2>:               Register Basics.    (line   53)
* call-used register:                    Register Basics.    (line   35)
* call-used register <1>:                Register Basics.    (line   46)
* call-used register <2>:                Register Basics.    (line   53)
* calling conventions:                   Stack and Calling.  (line    6)
* calling functions in RTL:              Calls.              (line    6)
* CALL_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* call_insn:                             Insns.              (line   95)
* call_insn and /c:                      Flags.              (line   33)
* call_insn and /f:                      Flags.              (line  107)
* call_insn and /i:                      Flags.              (line   24)
* call_insn and /j:                      Flags.              (line  161)
* call_insn and /s:                      Flags.              (line   49)
* call_insn and /s <1>:                  Flags.              (line  148)
* call_insn and /u:                      Flags.              (line   19)
* call_insn and /u <1>:                  Flags.              (line   39)
* call_insn and /u or /i:                Flags.              (line   29)
* call_insn and /v:                      Flags.              (line   44)
* CALL_INSN_FUNCTION_USAGE:              Insns.              (line  101)
* call_pop instruction pattern:          Standard Names.     (line 1365)
* CALL_POPS_ARGS:                        Stack Arguments.    (line  138)
* CALL_REALLY_USED_REGISTERS:            Register Basics.    (line   45)
* CALL_USED_REGISTERS:                   Register Basics.    (line   34)
* call_used_regs:                        Register Basics.    (line   59)
* call_value instruction pattern:        Standard Names.     (line 1357)
* call_value_pop instruction pattern:    Standard Names.     (line 1365)
* canadian:                              Configure Terms.    (line    6)
* CANNOT_CHANGE_MODE_CLASS:              Register Classes.   (line  533)
* CANNOT_CHANGE_MODE_CLASS and subreg semantics: Regs and Memory.
                                                             (line  276)
* canonicalization of instructions:      Insn Canonicalizations.
                                                             (line    6)
* canonicalize_funcptr_for_compare instruction pattern: Standard Names.
                                                             (line 1526)
* can_create_pseudo_p:                   Standard Names.     (line   75)
* can_fallthru:                          Basic Blocks.       (line   67)
* caret:                                 Multi-Alternative.  (line   53)
* casesi instruction pattern:            Standard Names.     (line 1458)
* CASE_VECTOR_MODE:                      Misc.               (line   26)
* CASE_VECTOR_PC_RELATIVE:               Misc.               (line   39)
* CASE_VECTOR_SHORTEN_MODE:              Misc.               (line   30)
* cbranchMODE4 instruction pattern:      Standard Names.     (line 1326)
* cc0:                                   Regs and Memory.    (line  303)
* cc0 <1>:                               CC0 Condition Codes.
                                                             (line    6)
* cc0, RTL sharing:                      Sharing.            (line   27)
* cc0_rtx:                               Regs and Memory.    (line  329)
* CC1PLUS_SPEC:                          Driver.             (line   63)
* CC1_SPEC:                              Driver.             (line   55)
* CCmode:                                Machine Modes.      (line  178)
* CCmode <1>:                            MODE_CC Condition Codes.
                                                             (line    6)
* cc_status:                             CC0 Condition Codes.
                                                             (line    6)
* CC_STATUS_MDEP:                        CC0 Condition Codes.
                                                             (line   16)
* CC_STATUS_MDEP_INIT:                   CC0 Condition Codes.
                                                             (line   22)
* CDImode:                               Machine Modes.      (line  204)
* ceilM2 instruction pattern:            Standard Names.     (line  822)
* CEIL_DIV_EXPR:                         Unary and Binary Expressions.
                                                             (line    6)
* CEIL_MOD_EXPR:                         Unary and Binary Expressions.
                                                             (line    6)
* CFA_FRAME_BASE_OFFSET:                 Frame Layout.       (line  222)
* CFG verification:                      Maintaining the CFG.
                                                             (line  117)
* CFG, Control Flow Graph:               Control Flow.       (line    6)
* cfghooks.h:                            Maintaining the CFG.
                                                             (line    6)
* cgraph_finalize_function:              Parsing pass.       (line   51)
* chain_circular:                        GTY Options.        (line  158)
* chain_next:                            GTY Options.        (line  158)
* chain_prev:                            GTY Options.        (line  158)
* change_address:                        Standard Names.     (line   47)
* CHAR_TYPE_SIZE:                        Type Layout.        (line   38)
* check_stack instruction pattern:       Standard Names.     (line 1612)
* CHImode:                               Machine Modes.      (line  204)
* CILK_PLUS:                             Cilk Plus Transformation.
                                                             (line    6)
* class definitions, register:           Register Classes.   (line    6)
* class preference constraints:          Class Preferences.  (line    6)
* class, scope:                          Classes.            (line    6)
* classes of RTX codes:                  RTL Classes.        (line    6)
* CLASSTYPE_DECLARED_CLASS:              Classes.            (line    6)
* CLASSTYPE_HAS_MUTABLE:                 Classes.            (line   85)
* CLASSTYPE_NON_POD_P:                   Classes.            (line   90)
* CLASS_MAX_NREGS:                       Register Classes.   (line  521)
* CLASS_TYPE_P:                          Types for C++.      (line   63)
* Cleanups:                              Cleanups.           (line    6)
* CLEANUP_DECL:                          Statements for C++. (line    6)
* CLEANUP_EXPR:                          Statements for C++. (line    6)
* CLEANUP_POINT_EXPR:                    Unary and Binary Expressions.
                                                             (line    6)
* CLEANUP_STMT:                          Statements for C++. (line    6)
* clear_cache instruction pattern:       Standard Names.     (line 2102)
* CLEAR_INSN_CACHE:                      Trampolines.        (line   98)
* CLEAR_RATIO:                           Costs.              (line  204)
* clobber:                               Side Effects.       (line  106)
* clrsb:                                 Arithmetic.         (line  215)
* clrsbM2 instruction pattern:           Standard Names.     (line  885)
* clz:                                   Arithmetic.         (line  222)
* clzM2 instruction pattern:             Standard Names.     (line  901)
* CLZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  304)
* cmpmemM instruction pattern:           Standard Names.     (line 1066)
* cmpstrM instruction pattern:           Standard Names.     (line 1045)
* cmpstrnM instruction pattern:          Standard Names.     (line 1032)
* code generation RTL sequences:         Expander Definitions.
                                                             (line    6)
* code iterators in .md files:           Code Iterators.     (line    6)
* codes, RTL expression:                 RTL Objects.        (line   47)
* code_label:                            Insns.              (line  125)
* CODE_LABEL:                            Basic Blocks.       (line   50)
* code_label and /i:                     Flags.              (line   59)
* code_label and /v:                     Flags.              (line   44)
* CODE_LABEL_NUMBER:                     Insns.              (line  125)
* COImode:                               Machine Modes.      (line  204)
* COLLECT2_HOST_INITIALIZATION:          Host Misc.          (line   32)
* COLLECT_EXPORT_LIST:                   Misc.               (line  867)
* COLLECT_SHARED_FINI_FUNC:              Macros for Initialization.
                                                             (line   43)
* COLLECT_SHARED_INIT_FUNC:              Macros for Initialization.
                                                             (line   32)
* commit_edge_insertions:                Maintaining the CFG.
                                                             (line  105)
* compare:                               Arithmetic.         (line   46)
* compare, canonicalization of:          Insn Canonicalizations.
                                                             (line   36)
* comparison_operator:                   Machine-Independent Predicates.
                                                             (line  110)
* compiler passes and files:             Passes.             (line    6)
* complement, bitwise:                   Arithmetic.         (line  154)
* COMPLEX_CST:                           Constant expressions.
                                                             (line    6)
* COMPLEX_EXPR:                          Unary and Binary Expressions.
                                                             (line    6)
* COMPLEX_TYPE:                          Types.              (line    6)
* COMPONENT_REF:                         Storage References. (line    6)
* Compound Expressions:                  Compound Expressions.
                                                             (line    6)
* Compound Lvalues:                      Compound Lvalues.   (line    6)
* COMPOUND_EXPR:                         Unary and Binary Expressions.
                                                             (line    6)
* COMPOUND_LITERAL_EXPR:                 Unary and Binary Expressions.
                                                             (line    6)
* COMPOUND_LITERAL_EXPR_DECL:            Unary and Binary Expressions.
                                                             (line  377)
* COMPOUND_LITERAL_EXPR_DECL_EXPR:       Unary and Binary Expressions.
                                                             (line  377)
* computed jump:                         Edges.              (line  127)
* computing the length of an insn:       Insn Lengths.       (line    6)
* concat:                                Regs and Memory.    (line  381)
* concatn:                               Regs and Memory.    (line  387)
* cond:                                  Comparisons.        (line   90)
* cond and attributes:                   Expressions.        (line   37)
* condition code register:               Regs and Memory.    (line  303)
* condition code status:                 Condition Code.     (line    6)
* condition codes:                       Comparisons.        (line   20)
* conditional execution:                 Conditional Execution.
                                                             (line    6)
* Conditional Expressions:               Conditional Expressions.
                                                             (line    6)
* conditions, in patterns:               Patterns.           (line   43)
* cond_exec:                             Side Effects.       (line  254)
* COND_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* configuration file:                    Filesystem.         (line    6)
* configuration file <1>:                Host Misc.          (line    6)
* configure terms:                       Configure Terms.    (line    6)
* CONJ_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* const:                                 Constants.          (line  140)
* const0_rtx:                            Constants.          (line   21)
* CONST0_RTX:                            Constants.          (line  160)
* const1_rtx:                            Constants.          (line   21)
* CONST1_RTX:                            Constants.          (line  160)
* const2_rtx:                            Constants.          (line   21)
* CONST2_RTX:                            Constants.          (line  160)
* constant attributes:                   Constant Attributes.
                                                             (line    6)
* constant definitions:                  Constant Definitions.
                                                             (line    6)
* constants in constraints:              Simple Constraints. (line   68)
* CONSTANT_ADDRESS_P:                    Addressing Modes.   (line   28)
* CONSTANT_ALIGNMENT:                    Storage Layout.     (line  241)
* CONSTANT_P:                            Addressing Modes.   (line   35)
* CONSTANT_POOL_ADDRESS_P:               Flags.              (line   10)
* CONSTANT_POOL_BEFORE_FUNCTION:         Data Output.        (line   68)
* constm1_rtx:                           Constants.          (line   21)
* constraint modifier characters:        Modifiers.          (line    6)
* constraint, matching:                  Simple Constraints. (line  140)
* constraints:                           Constraints.        (line    6)
* constraints, defining:                 Define Constraints. (line    6)
* constraints, machine specific:         Machine Constraints.
                                                             (line    6)
* constraints, testing:                  C Constraint Interface.
                                                             (line    6)
* constraint_num:                        C Constraint Interface.
                                                             (line   30)
* constraint_satisfied_p:                C Constraint Interface.
                                                             (line   42)
* CONSTRUCTOR:                           Unary and Binary Expressions.
                                                             (line    6)
* constructors, automatic calls:         Collect2.           (line   15)
* constructors, output of:               Initialization.     (line    6)
* CONST_DECL:                            Declarations.       (line    6)
* const_double:                          Constants.          (line   37)
* const_double, RTL sharing:             Sharing.            (line   29)
* CONST_DOUBLE_LOW:                      Constants.          (line   54)
* const_double_operand:                  Machine-Independent Predicates.
                                                             (line   20)
* const_fixed:                           Constants.          (line   93)
* const_int:                             Constants.          (line    8)
* const_int and attribute tests:         Expressions.        (line   47)
* const_int and attributes:              Expressions.        (line   10)
* const_int, RTL sharing:                Sharing.            (line   23)
* const_int_operand:                     Machine-Independent Predicates.
                                                             (line   15)
* const_string:                          Constants.          (line  112)
* const_string and attributes:           Expressions.        (line   20)
* const_true_rtx:                        Constants.          (line   31)
* const_vector:                          Constants.          (line  100)
* const_vector, RTL sharing:             Sharing.            (line   32)
* CONST_WIDE_INT:                        Constants.          (line   67)
* CONST_WIDE_INT_ELT:                    Constants.          (line   89)
* CONST_WIDE_INT_NUNITS:                 Constants.          (line   84)
* CONST_WIDE_INT_VEC:                    Constants.          (line   80)
* container:                             Containers.         (line    6)
* CONTINUE_STMT:                         Statements for C++. (line    6)
* contributors:                          Contributors.       (line    6)
* controlling register usage:            Register Basics.    (line   73)
* controlling the compilation driver:    Driver.             (line    6)
* conventions, run-time:                 Interface.          (line    6)
* conversions:                           Conversions.        (line    6)
* CONVERT_EXPR:                          Unary and Binary Expressions.
                                                             (line    6)
* copysignM3 instruction pattern:        Standard Names.     (line  865)
* copy_rtx:                              Addressing Modes.   (line  189)
* copy_rtx_if_shared:                    Sharing.            (line   64)
* cosM2 instruction pattern:             Standard Names.     (line  662)
* costs of instructions:                 Costs.              (line    6)
* CPLUSPLUS_CPP_SPEC:                    Driver.             (line   50)
* CPP_SPEC:                              Driver.             (line   43)
* CP_INTEGRAL_TYPE:                      Types for C++.      (line   55)
* cp_namespace_decls:                    Namespaces.         (line   49)
* CP_TYPE_CONST_NON_VOLATILE_P:          Types for C++.      (line   33)
* CP_TYPE_CONST_P:                       Types for C++.      (line   24)
* cp_type_quals:                         Types for C++.      (line    6)
* cp_type_quals <1>:                     Types for C++.      (line   16)
* CP_TYPE_RESTRICT_P:                    Types for C++.      (line   30)
* CP_TYPE_VOLATILE_P:                    Types for C++.      (line   27)
* CQImode:                               Machine Modes.      (line  204)
* cross compilation and floating point:  Floating Point.     (line    6)
* crtl->args.pops_args:                  Function Entry.     (line  104)
* crtl->args.pretend_args_size:          Function Entry.     (line  110)
* crtl->outgoing_args_size:              Stack Arguments.    (line   48)
* CRTSTUFF_T_CFLAGS:                     Target Fragment.    (line   15)
* CRTSTUFF_T_CFLAGS_S:                   Target Fragment.    (line   19)
* CRT_CALL_STATIC_FUNCTION:              Sections.           (line  120)
* CSImode:                               Machine Modes.      (line  204)
* cstoreMODE4 instruction pattern:       Standard Names.     (line 1287)
* CTImode:                               Machine Modes.      (line  204)
* ctrapMM4 instruction pattern:          Standard Names.     (line 1764)
* ctz:                                   Arithmetic.         (line  230)
* ctzM2 instruction pattern:             Standard Names.     (line  916)
* CTZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  305)
* CUMULATIVE_ARGS:                       Register Arguments. (line  140)
* current_function_is_leaf:              Leaf Functions.     (line   50)
* current_function_uses_only_leaf_regs:  Leaf Functions.     (line   50)
* current_insn_predicate:                Conditional Execution.
                                                             (line   27)
* C_COMMON_OVERRIDE_OPTIONS:             Run-time Target.    (line  136)
* c_register_pragma:                     Misc.               (line  407)
* c_register_pragma_with_expansion:      Misc.               (line  409)
* DAmode:                                Machine Modes.      (line  154)
* data bypass:                           Processor pipeline description.
                                                             (line  105)
* data bypass <1>:                       Processor pipeline description.
                                                             (line  196)
* data dependence delays:                Processor pipeline description.
                                                             (line    6)
* Data Dependency Analysis:              Dependency analysis.
                                                             (line    6)
* data structures:                       Per-Function Data.  (line    6)
* DATA_ABI_ALIGNMENT:                    Storage Layout.     (line  233)
* DATA_ALIGNMENT:                        Storage Layout.     (line  220)
* DATA_SECTION_ASM_OP:                   Sections.           (line   52)
* DBR_OUTPUT_SEQEND:                     Instruction Output. (line  133)
* dbr_sequence_length:                   Instruction Output. (line  133)
* DBX_BLOCKS_FUNCTION_RELATIVE:          DBX Options.        (line  100)
* DBX_CONTIN_CHAR:                       DBX Options.        (line   63)
* DBX_CONTIN_LENGTH:                     DBX Options.        (line   53)
* DBX_DEBUGGING_INFO:                    DBX Options.        (line    8)
* DBX_FUNCTION_FIRST:                    DBX Options.        (line   94)
* DBX_LINES_FUNCTION_RELATIVE:           DBX Options.        (line  106)
* DBX_NO_XREFS:                          DBX Options.        (line   47)
* DBX_OUTPUT_MAIN_SOURCE_FILENAME:       File Names and DBX. (line    8)
* DBX_OUTPUT_MAIN_SOURCE_FILE_END:       File Names and DBX. (line   33)
* DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX.
                                                             (line   41)
* DBX_OUTPUT_SOURCE_LINE:                DBX Hooks.          (line    8)
* DBX_REGISTER_NUMBER:                   All Debuggers.      (line    8)
* DBX_REGPARM_STABS_CODE:                DBX Options.        (line   84)
* DBX_REGPARM_STABS_LETTER:              DBX Options.        (line   89)
* DBX_STATIC_CONST_VAR_CODE:             DBX Options.        (line   79)
* DBX_STATIC_STAB_DATA_SECTION:          DBX Options.        (line   70)
* DBX_TYPE_DECL_STABS_CODE:              DBX Options.        (line   75)
* DBX_USE_BINCL:                         DBX Options.        (line  112)
* DCmode:                                Machine Modes.      (line  199)
* DDmode:                                Machine Modes.      (line   93)
* De Morgan's law:                       Insn Canonicalizations.
                                                             (line   51)
* dead_or_set_p:                         define_peephole.    (line   65)
* DEBUGGER_ARG_OFFSET:                   All Debuggers.      (line   36)
* DEBUGGER_AUTO_OFFSET:                  All Debuggers.      (line   27)
* debug_expr:                            Debug Information.  (line   22)
* DEBUG_EXPR_DECL:                       Declarations.       (line    6)
* debug_insn:                            Insns.              (line  236)
* DEBUG_SYMS_TEXT:                       DBX Options.        (line   24)
* decimal float library:                 Decimal float library routines.
                                                             (line    6)
* declaration:                           Declarations.       (line    6)
* declarations, RTL:                     RTL Declarations.   (line    6)
* DECLARE_LIBRARY_RENAMES:               Library Calls.      (line    8)
* DECL_ALIGN:                            Declarations.       (line    6)
* DECL_ANTICIPATED:                      Functions for C++.  (line   42)
* DECL_ARGUMENTS:                        Function Basics.    (line   36)
* DECL_ARRAY_DELETE_OPERATOR_P:          Functions for C++.  (line  158)
* DECL_ARTIFICIAL:                       Working with declarations.
                                                             (line   24)
* DECL_ARTIFICIAL <1>:                   Function Basics.    (line    6)
* DECL_ARTIFICIAL <2>:                   Function Properties.
                                                             (line   47)
* DECL_ASSEMBLER_NAME:                   Function Basics.    (line    6)
* DECL_ASSEMBLER_NAME <1>:               Function Basics.    (line   19)
* DECL_ATTRIBUTES:                       Attributes.         (line   21)
* DECL_BASE_CONSTRUCTOR_P:               Functions for C++.  (line   88)
* DECL_COMPLETE_CONSTRUCTOR_P:           Functions for C++.  (line   84)
* DECL_COMPLETE_DESTRUCTOR_P:            Functions for C++.  (line   98)
* DECL_CONSTRUCTOR_P:                    Functions for C++.  (line   77)
* DECL_CONST_MEMFUNC_P:                  Functions for C++.  (line   71)
* DECL_CONTEXT:                          Namespaces.         (line   31)
* DECL_CONV_FN_P:                        Functions for C++.  (line  105)
* DECL_COPY_CONSTRUCTOR_P:               Functions for C++.  (line   92)
* DECL_DESTRUCTOR_P:                     Functions for C++.  (line   95)
* DECL_EXTERNAL:                         Declarations.       (line    6)
* DECL_EXTERNAL <1>:                     Function Properties.
                                                             (line   25)
* DECL_EXTERN_C_FUNCTION_P:              Functions for C++.  (line   46)
* DECL_FUNCTION_MEMBER_P:                Functions for C++.  (line   61)
* DECL_FUNCTION_SPECIFIC_OPTIMIZATION:   Function Basics.    (line    6)
* DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties.
                                                             (line   61)
* DECL_FUNCTION_SPECIFIC_TARGET:         Function Basics.    (line    6)
* DECL_FUNCTION_SPECIFIC_TARGET <1>:     Function Properties.
                                                             (line   55)
* DECL_GLOBAL_CTOR_P:                    Functions for C++.  (line  108)
* DECL_GLOBAL_DTOR_P:                    Functions for C++.  (line  112)
* DECL_INITIAL:                          Declarations.       (line    6)
* DECL_INITIAL <1>:                      Function Basics.    (line   51)
* DECL_LINKONCE_P:                       Functions for C++.  (line   50)
* DECL_LOCAL_FUNCTION_P:                 Functions for C++.  (line   38)
* DECL_MAIN_P:                           Functions for C++.  (line   34)
* DECL_NAME:                             Working with declarations.
                                                             (line    7)
* DECL_NAME <1>:                         Function Basics.    (line    6)
* DECL_NAME <2>:                         Function Basics.    (line    9)
* DECL_NAME <3>:                         Namespaces.         (line   20)
* DECL_NAMESPACE_ALIAS:                  Namespaces.         (line   35)
* DECL_NAMESPACE_STD_P:                  Namespaces.         (line   45)
* DECL_NONCONVERTING_P:                  Functions for C++.  (line   80)
* DECL_NONSTATIC_MEMBER_FUNCTION_P:      Functions for C++.  (line   68)
* DECL_NON_THUNK_FUNCTION_P:             Functions for C++.  (line  138)
* DECL_OVERLOADED_OPERATOR_P:            Functions for C++.  (line  102)
* DECL_PURE_P:                           Function Properties.
                                                             (line   40)
* DECL_RESULT:                           Function Basics.    (line   41)
* DECL_SAVED_TREE:                       Function Basics.    (line   44)
* DECL_SIZE:                             Declarations.       (line    6)
* DECL_STATIC_FUNCTION_P:                Functions for C++.  (line   65)
* DECL_STMT:                             Statements for C++. (line    6)
* DECL_STMT_DECL:                        Statements for C++. (line    6)
* DECL_THUNK_P:                          Functions for C++.  (line  116)
* DECL_VIRTUAL_P:                        Function Properties.
                                                             (line   44)
* DECL_VOLATILE_MEMFUNC_P:               Functions for C++.  (line   74)
* decrement_and_branch_until_zero instruction pattern: Standard Names.
                                                             (line 1495)
* default:                               GTY Options.        (line   88)
* default_file_start:                    File Framework.     (line    8)
* DEFAULT_GDB_EXTENSIONS:                DBX Options.        (line   17)
* DEFAULT_PCC_STRUCT_RETURN:             Aggregate Return.   (line   34)
* DEFAULT_SIGNED_CHAR:                   Type Layout.        (line  123)
* define_address_constraint:             Define Constraints. (line  113)
* define_asm_attributes:                 Tagging Insns.      (line   73)
* define_attr:                           Defining Attributes.
                                                             (line    6)
* define_automaton:                      Processor pipeline description.
                                                             (line   53)
* define_bypass:                         Processor pipeline description.
                                                             (line  196)
* define_code_attr:                      Code Iterators.     (line    6)
* define_code_iterator:                  Code Iterators.     (line    6)
* define_cond_exec:                      Conditional Execution.
                                                             (line   13)
* define_constants:                      Constant Definitions.
                                                             (line    6)
* define_constraint:                     Define Constraints. (line   45)
* define_cpu_unit:                       Processor pipeline description.
                                                             (line   68)
* define_c_enum:                         Constant Definitions.
                                                             (line   49)
* define_delay:                          Delay Slots.        (line   25)
* define_enum:                           Constant Definitions.
                                                             (line  118)
* define_enum_attr:                      Defining Attributes.
                                                             (line   83)
* define_enum_attr <1>:                  Constant Definitions.
                                                             (line  136)
* define_expand:                         Expander Definitions.
                                                             (line   11)
* define_insn:                           Patterns.           (line    6)
* define_insn example:                   Example.            (line    6)
* define_insn_and_split:                 Insn Splitting.     (line  170)
* define_insn_reservation:               Processor pipeline description.
                                                             (line  105)
* define_int_attr:                       Int Iterators.      (line    6)
* define_int_iterator:                   Int Iterators.      (line    6)
* define_memory_constraint:              Define Constraints. (line   80)
* define_mode_attr:                      Substitutions.      (line    6)
* define_mode_iterator:                  Defining Mode Iterators.
                                                             (line    6)
* define_peephole:                       define_peephole.    (line    6)
* define_peephole2:                      define_peephole2.   (line    6)
* define_predicate:                      Defining Predicates.
                                                             (line    6)
* define_query_cpu_unit:                 Processor pipeline description.
                                                             (line   90)
* define_register_constraint:            Define Constraints. (line   26)
* define_reservation:                    Processor pipeline description.
                                                             (line  185)
* define_special_memory_constraint:      Define Constraints. (line   99)
* define_special_predicate:              Defining Predicates.
                                                             (line    6)
* define_split:                          Insn Splitting.     (line   32)
* define_subst:                          Define Subst.       (line    6)
* define_subst <1>:                      Define Subst Example.
                                                             (line    6)
* define_subst <2>:                      Define Subst Pattern Matching.
                                                             (line    6)
* define_subst <3>:                      Define Subst Output Template.
                                                             (line    6)
* define_subst <4>:                      Define Subst.       (line   14)
* define_subst <5>:                      Subst Iterators.    (line    6)
* define_subst_attr:                     Subst Iterators.    (line    6)
* define_subst_attr <1>:                 Subst Iterators.    (line   26)
* defining attributes and their values:  Defining Attributes.
                                                             (line    6)
* defining constraints:                  Define Constraints. (line    6)
* defining jump instruction patterns:    Jump Patterns.      (line    6)
* defining looping instruction patterns: Looping Patterns.   (line    6)
* defining peephole optimizers:          Peephole Definitions.
                                                             (line    6)
* defining predicates:                   Defining Predicates.
                                                             (line    6)
* defining RTL sequences for code generation: Expander Definitions.
                                                             (line    6)
* delay slots, defining:                 Delay Slots.        (line    6)
* deletable:                             GTY Options.        (line  132)
* DELETE_IF_ORDINARY:                    Filesystem.         (line   79)
* Dependent Patterns:                    Dependent Patterns. (line    6)
* desc:                                  GTY Options.        (line   88)
* destructors, output of:                Initialization.     (line    6)
* deterministic finite state automaton:  Processor pipeline description.
                                                             (line    6)
* deterministic finite state automaton <1>: Processor pipeline description.
                                                             (line  304)
* DFmode:                                Machine Modes.      (line   76)
* digits in constraint:                  Simple Constraints. (line  128)
* DImode:                                Machine Modes.      (line   45)
* directory options .md:                 Including Patterns. (line   47)
* DIR_SEPARATOR:                         Filesystem.         (line   18)
* DIR_SEPARATOR_2:                       Filesystem.         (line   19)
* disabling certain registers:           Register Basics.    (line   73)
* dispatch table:                        Dispatch Tables.    (line    8)
* div:                                   Arithmetic.         (line  116)
* div and attributes:                    Expressions.        (line   83)
* division:                              Arithmetic.         (line  116)
* division <1>:                          Arithmetic.         (line  130)
* division <2>:                          Arithmetic.         (line  136)
* divM3 instruction pattern:             Standard Names.     (line  301)
* divmodM4 instruction pattern:          Standard Names.     (line  559)
* dollar sign:                           Multi-Alternative.  (line   57)
* DOLLARS_IN_IDENTIFIERS:                Misc.               (line  452)
* doloop_begin instruction pattern:      Standard Names.     (line 1517)
* doloop_end instruction pattern:        Standard Names.     (line 1505)
* DONE:                                  Expander Definitions.
                                                             (line   77)
* DONT_USE_BUILTIN_SETJMP:               Exception Region Output.
                                                             (line   78)
* DOUBLE_TYPE_SIZE:                      Type Layout.        (line   52)
* DO_BODY:                               Statements for C++. (line    6)
* DO_COND:                               Statements for C++. (line    6)
* DO_STMT:                               Statements for C++. (line    6)
* DQmode:                                Machine Modes.      (line  118)
* driver:                                Driver.             (line    6)
* DRIVER_SELF_SPECS:                     Driver.             (line    8)
* dump examples:                         Dump examples.      (line    6)
* dump setup:                            Dump setup.         (line    6)
* dump types:                            Dump types.         (line    6)
* dump verbosity:                        Dump output verbosity.
                                                             (line    6)
* DUMPFILE_FORMAT:                       Filesystem.         (line   67)
* dump_basic_block:                      Dump types.         (line   29)
* dump_generic_expr:                     Dump types.         (line   31)
* dump_gimple_stmt:                      Dump types.         (line   33)
* dump_printf:                           Dump types.         (line    6)
* DWARF2_ASM_LINE_DEBUG_INFO:            SDB and DWARF.      (line   49)
* DWARF2_DEBUGGING_INFO:                 SDB and DWARF.      (line   12)
* DWARF2_FRAME_INFO:                     SDB and DWARF.      (line   29)
* DWARF2_FRAME_REG_OUT:                  Frame Registers.    (line  151)
* DWARF2_UNWIND_INFO:                    Exception Region Output.
                                                             (line   39)
* DWARF_ALT_FRAME_RETURN_COLUMN:         Frame Layout.       (line  148)
* DWARF_CIE_DATA_ALIGNMENT:              Exception Region Output.
                                                             (line   90)
* DWARF_FRAME_REGISTERS:                 Frame Registers.    (line  109)
* DWARF_FRAME_REGNUM:                    Frame Registers.    (line  143)
* DWARF_REG_TO_UNWIND_COLUMN:            Frame Registers.    (line  134)
* DWARF_ZERO_REG:                        Frame Layout.       (line  159)
* DYNAMIC_CHAIN_ADDRESS:                 Frame Layout.       (line   86)
* E in constraint:                       Simple Constraints. (line   87)
* earlyclobber operand:                  Modifiers.          (line   25)
* edge:                                  Edges.              (line    6)
* edge in the flow graph:                Edges.              (line    6)
* edge iterators:                        Edges.              (line   15)
* edge splitting:                        Maintaining the CFG.
                                                             (line  105)
* EDGE_ABNORMAL:                         Edges.              (line  127)
* EDGE_ABNORMAL, EDGE_ABNORMAL_CALL:     Edges.              (line  171)
* EDGE_ABNORMAL, EDGE_EH:                Edges.              (line   95)
* EDGE_ABNORMAL, EDGE_SIBCALL:           Edges.              (line  121)
* EDGE_FALLTHRU, force_nonfallthru:      Edges.              (line   85)
* EDOM, implicit usage:                  Library Calls.      (line   59)
* EH_FRAME_SECTION_NAME:                 Exception Region Output.
                                                             (line    9)
* EH_FRAME_THROUGH_COLLECT2:             Exception Region Output.
                                                             (line   19)
* eh_return instruction pattern:         Standard Names.     (line 1698)
* EH_RETURN_DATA_REGNO:                  Exception Handling. (line    6)
* EH_RETURN_HANDLER_RTX:                 Exception Handling. (line   38)
* EH_RETURN_STACKADJ_RTX:                Exception Handling. (line   21)
* EH_TABLES_CAN_BE_READ_ONLY:            Exception Region Output.
                                                             (line   29)
* EH_USES:                               Function Entry.     (line  155)
* ei_edge:                               Edges.              (line   43)
* ei_end_p:                              Edges.              (line   27)
* ei_last:                               Edges.              (line   23)
* ei_next:                               Edges.              (line   35)
* ei_one_before_end_p:                   Edges.              (line   31)
* ei_prev:                               Edges.              (line   39)
* ei_safe_safe:                          Edges.              (line   47)
* ei_start:                              Edges.              (line   19)
* ELIMINABLE_REGS:                       Elimination.        (line   46)
* ELSE_CLAUSE:                           Statements for C++. (line    6)
* Embedded C:                            Fixed-point fractional library routines.
                                                             (line    6)
* Empty Statements:                      Empty Statements.   (line    6)
* EMPTY_CLASS_EXPR:                      Statements for C++. (line    6)
* EMPTY_FIELD_BOUNDARY:                  Storage Layout.     (line  311)
* Emulated TLS:                          Emulated TLS.       (line    6)
* enabled:                               Disable Insn Alternatives.
                                                             (line    6)
* ENDFILE_SPEC:                          Driver.             (line  155)
* endianness:                            Portability.        (line   20)
* ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR:       Basic Blocks.       (line   10)
* enum reg_class:                        Register Classes.   (line   70)
* ENUMERAL_TYPE:                         Types.              (line    6)
* enumerations:                          Constant Definitions.
                                                             (line   49)
* epilogue:                              Function Entry.     (line    6)
* epilogue instruction pattern:          Standard Names.     (line 1736)
* EPILOGUE_USES:                         Function Entry.     (line  149)
* eq:                                    Comparisons.        (line   52)
* eq and attributes:                     Expressions.        (line   83)
* equal:                                 Comparisons.        (line   52)
* eq_attr:                               Expressions.        (line  104)
* EQ_EXPR:                               Unary and Binary Expressions.
                                                             (line    6)
* errno, implicit usage:                 Library Calls.      (line   71)
* EXACT_DIV_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* examining SSA_NAMEs:                   SSA.                (line  182)
* exception handling:                    Edges.              (line   95)
* exception handling <1>:                Exception Handling. (line    6)
* exception_receiver instruction pattern: Standard Names.    (line 1663)
* exclamation point:                     Multi-Alternative.  (line   48)
* exclusion_set:                         Processor pipeline description.
                                                             (line  223)
* exclusive-or, bitwise:                 Arithmetic.         (line  168)
* EXIT_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* EXIT_IGNORE_STACK:                     Function Entry.     (line  137)
* exp10M2 instruction pattern:           Standard Names.     (line  726)
* exp2M2 instruction pattern:            Standard Names.     (line  733)
* expander definitions:                  Expander Definitions.
                                                             (line    6)
* expm1M2 instruction pattern:           Standard Names.     (line  716)
* expM2 instruction pattern:             Standard Names.     (line  709)
* expression:                            Expression trees.   (line    6)
* expression codes:                      RTL Objects.        (line   47)
* EXPR_FILENAME:                         Working with declarations.
                                                             (line   14)
* EXPR_LINENO:                           Working with declarations.
                                                             (line   20)
* expr_list:                             Insns.              (line  540)
* EXPR_STMT:                             Statements for C++. (line    6)
* EXPR_STMT_EXPR:                        Statements for C++. (line    6)
* extendMN2 instruction pattern:         Standard Names.     (line 1124)
* extensible constraints:                Simple Constraints. (line  171)
* EXTRA_SPECS:                           Driver.             (line  182)
* extv instruction pattern:              Standard Names.     (line 1215)
* extvM instruction pattern:             Standard Names.     (line 1160)
* extvmisalignM instruction pattern:     Standard Names.     (line 1170)
* extzv instruction pattern:             Standard Names.     (line 1233)
* extzvM instruction pattern:            Standard Names.     (line 1184)
* extzvmisalignM instruction pattern:    Standard Names.     (line 1187)
* F in constraint:                       Simple Constraints. (line   92)
* FAIL:                                  Expander Definitions.
                                                             (line   83)
* fall-thru:                             Edges.              (line   68)
* FATAL_EXIT_CODE:                       Host Misc.          (line    6)
* FDL, GNU Free Documentation License:   GNU Free Documentation License.
                                                             (line    6)
* features, optional, in system conventions: Run-time Target.
                                                             (line   59)
* ffs:                                   Arithmetic.         (line  210)
* ffsM2 instruction pattern:             Standard Names.     (line  872)
* FIELD_DECL:                            Declarations.       (line    6)
* files and passes of the compiler:      Passes.             (line    6)
* files, generated:                      Files.              (line    6)
* file_end_indicate_exec_stack:          File Framework.     (line   39)
* final_absence_set:                     Processor pipeline description.
                                                             (line  223)
* FINAL_PRESCAN_INSN:                    Instruction Output. (line   60)
* final_presence_set:                    Processor pipeline description.
                                                             (line  223)
* final_sequence:                        Instruction Output. (line  144)
* FIND_BASE_TERM:                        Addressing Modes.   (line  117)
* finite state automaton minimization:   Processor pipeline description.
                                                             (line  304)
* FINI_ARRAY_SECTION_ASM_OP:             Sections.           (line  113)
* FINI_SECTION_ASM_OP:                   Sections.           (line   98)
* FIRST_PARM_OFFSET:                     Frame Layout.       (line   61)
* FIRST_PARM_OFFSET and virtual registers: Regs and Memory.  (line   65)
* FIRST_PSEUDO_REGISTER:                 Register Basics.    (line    8)
* FIRST_STACK_REG:                       Stack Registers.    (line   26)
* FIRST_VIRTUAL_REGISTER:                Regs and Memory.    (line   51)
* fix:                                   Conversions.        (line   66)
* fixed register:                        Register Basics.    (line   15)
* fixed-point fractional library:        Fixed-point fractional library routines.
                                                             (line    6)
* FIXED_CONVERT_EXPR:                    Unary and Binary Expressions.
                                                             (line    6)
* FIXED_CST:                             Constant expressions.
                                                             (line    6)
* FIXED_POINT_TYPE:                      Types.              (line    6)
* FIXED_REGISTERS:                       Register Basics.    (line   14)
* fixed_regs:                            Register Basics.    (line   59)
* fixMN2 instruction pattern:            Standard Names.     (line 1091)
* fixunsMN2 instruction pattern:         Standard Names.     (line 1100)
* fixuns_truncMN2 instruction pattern:   Standard Names.     (line 1115)
* fix_truncMN2 instruction pattern:      Standard Names.     (line 1111)
* FIX_TRUNC_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* flags in RTL expression:               Flags.              (line    6)
* float:                                 Conversions.        (line   58)
* floating point and cross compilation:  Floating Point.     (line    6)
* floatMN2 instruction pattern:          Standard Names.     (line 1083)
* floatunsMN2 instruction pattern:       Standard Names.     (line 1087)
* FLOAT_EXPR:                            Unary and Binary Expressions.
                                                             (line    6)
* float_extend:                          Conversions.        (line   33)
* FLOAT_LIB_COMPARE_RETURNS_BOOL:        Library Calls.      (line   32)
* FLOAT_STORE_FLAG_VALUE:                Misc.               (line  286)
* float_truncate:                        Conversions.        (line   53)
* FLOAT_TYPE_SIZE:                       Type Layout.        (line   48)
* FLOAT_WORDS_BIG_ENDIAN:                Storage Layout.     (line   41)
* FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory.
                                                             (line  224)
* floorM2 instruction pattern:           Standard Names.     (line  800)
* FLOOR_DIV_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* FLOOR_MOD_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* flow-insensitive alias analysis:       Alias analysis.     (line    6)
* flow-sensitive alias analysis:         Alias analysis.     (line    6)
* fma:                                   Arithmetic.         (line  112)
* fmaM4 instruction pattern:             Standard Names.     (line  338)
* fmaxM3 instruction pattern:            Standard Names.     (line  369)
* fminM3 instruction pattern:            Standard Names.     (line  369)
* fmodM3 instruction pattern:            Standard Names.     (line  632)
* fmsM4 instruction pattern:             Standard Names.     (line  345)
* fnmaM4 instruction pattern:            Standard Names.     (line  351)
* fnmsM4 instruction pattern:            Standard Names.     (line  357)
* FORCE_CODE_SECTION_ALIGN:              Sections.           (line  144)
* force_reg:                             Standard Names.     (line   36)
* FOR_BODY:                              Statements for C++. (line    6)
* FOR_COND:                              Statements for C++. (line    6)
* FOR_EXPR:                              Statements for C++. (line    6)
* FOR_INIT_STMT:                         Statements for C++. (line    6)
* FOR_STMT:                              Statements for C++. (line    6)
* for_user:                              GTY Options.        (line   82)
* fractional types:                      Fixed-point fractional library routines.
                                                             (line    6)
* fractMN2 instruction pattern:          Standard Names.     (line 1133)
* fractunsMN2 instruction pattern:       Standard Names.     (line 1148)
* fract_convert:                         Conversions.        (line   82)
* FRACT_TYPE_SIZE:                       Type Layout.        (line   67)
* frame layout:                          Frame Layout.       (line    6)
* FRAME_ADDR_RTX:                        Frame Layout.       (line  110)
* FRAME_GROWS_DOWNWARD:                  Frame Layout.       (line   26)
* FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory.
                                                             (line   69)
* FRAME_POINTER_CFA_OFFSET:              Frame Layout.       (line  208)
* frame_pointer_needed:                  Function Entry.     (line   34)
* FRAME_POINTER_REGNUM:                  Frame Registers.    (line   13)
* FRAME_POINTER_REGNUM and virtual registers: Regs and Memory.
                                                             (line   74)
* frame_pointer_rtx:                     Frame Registers.    (line  104)
* frame_related:                         Flags.              (line  229)
* frame_related, in insn, call_insn, jump_insn, barrier, and set: Flags.
                                                             (line  107)
* frame_related, in mem:                 Flags.              (line   85)
* frame_related, in reg:                 Flags.              (line   94)
* frame_related, in symbol_ref:          Flags.              (line  165)
* frequency, count, BB_FREQ_BASE:        Profile information.
                                                             (line   30)
* ftruncM2 instruction pattern:          Standard Names.     (line 1106)
* function:                              Functions.          (line    6)
* function <1>:                          Functions for C++.  (line    6)
* function call conventions:             Interface.          (line    6)
* function entry and exit:               Function Entry.     (line    6)
* function entry point, alternate function entry point: Edges.
                                                             (line  180)
* function properties:                   Function Properties.
                                                             (line    6)
* function-call insns:                   Calls.              (line    6)
* functions, leaf:                       Leaf Functions.     (line    6)
* FUNCTION_ARG_OFFSET:                   Register Arguments. (line  210)
* FUNCTION_ARG_PADDING:                  Register Arguments. (line  217)
* FUNCTION_ARG_REGNO_P:                  Register Arguments. (line  265)
* FUNCTION_BOUNDARY:                     Storage Layout.     (line  159)
* FUNCTION_DECL:                         Functions.          (line    6)
* FUNCTION_DECL <1>:                     Functions for C++.  (line    6)
* FUNCTION_MODE:                         Misc.               (line  341)
* FUNCTION_PROFILER:                     Profiling.          (line    8)
* FUNCTION_TYPE:                         Types.              (line    6)
* FUNCTION_VALUE:                        Scalar Return.      (line   52)
* FUNCTION_VALUE_REGNO_P:                Scalar Return.      (line   78)
* fundamental type:                      Types.              (line    6)
* G in constraint:                       Simple Constraints. (line   96)
* g in constraint:                       Simple Constraints. (line  118)
* garbage collector, invocation:         Invoking the garbage collector.
                                                             (line    6)
* garbage collector, troubleshooting:    Troubleshooting.    (line    6)
* GCC and portability:                   Portability.        (line    6)
* GCC_DRIVER_HOST_INITIALIZATION:        Host Misc.          (line   36)
* gcov_type:                             Profile information.
                                                             (line   41)
* ge:                                    Comparisons.        (line   72)
* ge and attributes:                     Expressions.        (line   83)
* gencodes:                              RTL passes.         (line   18)
* general_operand:                       Machine-Independent Predicates.
                                                             (line  104)
* GENERAL_REGS:                          Register Classes.   (line   22)
* generated files:                       Files.              (line    6)
* generating assembler output:           Output Statement.   (line    6)
* generating insns:                      RTL Template.       (line    6)
* GENERIC:                               Parsing pass.       (line    6)
* GENERIC <1>:                           GENERIC.            (line    6)
* generic predicates:                    Machine-Independent Predicates.
                                                             (line    6)
* genflags:                              RTL passes.         (line   18)
* GEN_ERRNO_RTX:                         Library Calls.      (line   71)
* get_attr:                              Expressions.        (line   99)
* get_attr_length:                       Insn Lengths.       (line   52)
* GET_CLASS_NARROWEST_MODE:              Machine Modes.      (line  344)
* GET_CODE:                              RTL Objects.        (line   47)
* get_frame_size:                        Elimination.        (line   34)
* get_insns:                             Insns.              (line   34)
* get_last_insn:                         Insns.              (line   34)
* GET_MODE:                              Machine Modes.      (line  291)
* GET_MODE_ALIGNMENT:                    Machine Modes.      (line  331)
* GET_MODE_BITSIZE:                      Machine Modes.      (line  315)
* GET_MODE_CLASS:                        Machine Modes.      (line  305)
* GET_MODE_FBIT:                         Machine Modes.      (line  322)
* GET_MODE_IBIT:                         Machine Modes.      (line  318)
* GET_MODE_MASK:                         Machine Modes.      (line  326)
* GET_MODE_NAME:                         Machine Modes.      (line  302)
* GET_MODE_NUNITS:                       Machine Modes.      (line  340)
* GET_MODE_SIZE:                         Machine Modes.      (line  312)
* GET_MODE_UNIT_SIZE:                    Machine Modes.      (line  334)
* GET_MODE_WIDER_MODE:                   Machine Modes.      (line  308)
* GET_RTX_CLASS:                         RTL Classes.        (line    6)
* GET_RTX_FORMAT:                        RTL Classes.        (line  131)
* GET_RTX_LENGTH:                        RTL Classes.        (line  128)
* get_thread_pointerMODE instruction pattern: Standard Names.
                                                             (line 2073)
* geu:                                   Comparisons.        (line   72)
* geu and attributes:                    Expressions.        (line   83)
* GE_EXPR:                               Unary and Binary Expressions.
                                                             (line    6)
* GGC:                                   Type Information.   (line    6)
* ggc_collect:                           Invoking the garbage collector.
                                                             (line    6)
* GIMPLE:                                Parsing pass.       (line   13)
* GIMPLE <1>:                            Gimplification pass.
                                                             (line    6)
* GIMPLE <2>:                            GIMPLE.             (line    6)
* gimple:                                Tuple representation.
                                                             (line   14)
* GIMPLE API:                            GIMPLE API.         (line    6)
* GIMPLE class hierarchy:                Class hierarchy of GIMPLE statements.
                                                             (line    6)
* GIMPLE Exception Handling:             GIMPLE Exception Handling.
                                                             (line    6)
* GIMPLE instruction set:                GIMPLE instruction set.
                                                             (line    6)
* GIMPLE sequences:                      GIMPLE sequences.   (line    6)
* GIMPLE statement iterators:            Basic Blocks.       (line   78)
* GIMPLE statement iterators <1>:        Maintaining the CFG.
                                                             (line   33)
* gimple_addresses_taken:                Manipulating GIMPLE statements.
                                                             (line   89)
* GIMPLE_ASM:                            GIMPLE_ASM.         (line    6)
* gimple_asm_clobber_op:                 GIMPLE_ASM.         (line   39)
* gimple_asm_input_op:                   GIMPLE_ASM.         (line   23)
* gimple_asm_nclobbers:                  GIMPLE_ASM.         (line   20)
* gimple_asm_ninputs:                    GIMPLE_ASM.         (line   14)
* gimple_asm_noutputs:                   GIMPLE_ASM.         (line   17)
* gimple_asm_output_op:                  GIMPLE_ASM.         (line   31)
* gimple_asm_set_clobber_op:             GIMPLE_ASM.         (line   43)
* gimple_asm_set_input_op:               GIMPLE_ASM.         (line   27)
* gimple_asm_set_output_op:              GIMPLE_ASM.         (line   35)
* gimple_asm_set_volatile:               GIMPLE_ASM.         (line   54)
* gimple_asm_string:                     GIMPLE_ASM.         (line   47)
* gimple_asm_volatile_p:                 GIMPLE_ASM.         (line   51)
* GIMPLE_ASSIGN:                         GIMPLE_ASSIGN.      (line    6)
* gimple_assign_cast_p:                  Logical Operators.  (line  158)
* gimple_assign_cast_p <1>:              GIMPLE_ASSIGN.      (line  104)
* gimple_assign_lhs:                     GIMPLE_ASSIGN.      (line   62)
* gimple_assign_lhs_ptr:                 GIMPLE_ASSIGN.      (line   65)
* gimple_assign_rhs1:                    GIMPLE_ASSIGN.      (line   68)
* gimple_assign_rhs1_ptr:                GIMPLE_ASSIGN.      (line   71)
* gimple_assign_rhs2:                    GIMPLE_ASSIGN.      (line   75)
* gimple_assign_rhs2_ptr:                GIMPLE_ASSIGN.      (line   78)
* gimple_assign_rhs3:                    GIMPLE_ASSIGN.      (line   82)
* gimple_assign_rhs3_ptr:                GIMPLE_ASSIGN.      (line   85)
* gimple_assign_rhs_class:               GIMPLE_ASSIGN.      (line   56)
* gimple_assign_rhs_code:                GIMPLE_ASSIGN.      (line   52)
* gimple_assign_set_lhs:                 GIMPLE_ASSIGN.      (line   89)
* gimple_assign_set_rhs1:                GIMPLE_ASSIGN.      (line   92)
* gimple_assign_set_rhs2:                GIMPLE_ASSIGN.      (line   96)
* gimple_assign_set_rhs3:                GIMPLE_ASSIGN.      (line  100)
* gimple_bb:                             Manipulating GIMPLE statements.
                                                             (line   17)
* GIMPLE_BIND:                           GIMPLE_BIND.        (line    6)
* gimple_bind_add_seq:                   GIMPLE_BIND.        (line   34)
* gimple_bind_add_stmt:                  GIMPLE_BIND.        (line   31)
* gimple_bind_append_vars:               GIMPLE_BIND.        (line   18)
* gimple_bind_block:                     GIMPLE_BIND.        (line   39)
* gimple_bind_body:                      GIMPLE_BIND.        (line   22)
* gimple_bind_set_block:                 GIMPLE_BIND.        (line   44)
* gimple_bind_set_body:                  GIMPLE_BIND.        (line   26)
* gimple_bind_set_vars:                  GIMPLE_BIND.        (line   14)
* gimple_bind_vars:                      GIMPLE_BIND.        (line   11)
* gimple_block:                          Manipulating GIMPLE statements.
                                                             (line   20)
* gimple_build:                          GIMPLE API.         (line   34)
* gimple_build <1>:                      GIMPLE API.         (line   36)
* gimple_build <2>:                      GIMPLE API.         (line   38)
* gimple_build <3>:                      GIMPLE API.         (line   41)
* gimple_build <4>:                      GIMPLE API.         (line   44)
* gimple_build <5>:                      GIMPLE API.         (line   47)
* gimple_build_nop:                      GIMPLE_NOP.         (line    6)
* gimple_build_omp_master:               GIMPLE_OMP_MASTER.  (line    6)
* gimple_build_omp_ordered:              GIMPLE_OMP_ORDERED. (line    6)
* gimple_build_omp_return:               GIMPLE_OMP_RETURN.  (line    6)
* gimple_build_omp_section:              GIMPLE_OMP_SECTION. (line    6)
* gimple_build_omp_sections_switch:      GIMPLE_OMP_SECTIONS.
                                                             (line   13)
* gimple_build_wce:                      GIMPLE_WITH_CLEANUP_EXPR.
                                                             (line    6)
* GIMPLE_CALL:                           GIMPLE_CALL.        (line    6)
* gimple_call_arg:                       GIMPLE_CALL.        (line   65)
* gimple_call_arg_ptr:                   GIMPLE_CALL.        (line   69)
* gimple_call_chain:                     GIMPLE_CALL.        (line   56)
* gimple_call_copy_skip_args:            GIMPLE_CALL.        (line   90)
* gimple_call_fn:                        GIMPLE_CALL.        (line   37)
* gimple_call_fndecl:                    GIMPLE_CALL.        (line   45)
* gimple_call_lhs:                       GIMPLE_CALL.        (line   28)
* gimple_call_lhs_ptr:                   GIMPLE_CALL.        (line   31)
* gimple_call_noreturn_p:                GIMPLE_CALL.        (line   87)
* gimple_call_num_args:                  GIMPLE_CALL.        (line   62)
* gimple_call_return_type:               GIMPLE_CALL.        (line   53)
* gimple_call_set_arg:                   GIMPLE_CALL.        (line   74)
* gimple_call_set_chain:                 GIMPLE_CALL.        (line   59)
* gimple_call_set_fn:                    GIMPLE_CALL.        (line   41)
* gimple_call_set_fndecl:                GIMPLE_CALL.        (line   50)
* gimple_call_set_lhs:                   GIMPLE_CALL.        (line   34)
* gimple_call_set_tail:                  GIMPLE_CALL.        (line   79)
* gimple_call_tail_p:                    GIMPLE_CALL.        (line   84)
* GIMPLE_CATCH:                          GIMPLE_CATCH.       (line    6)
* gimple_catch_handler:                  GIMPLE_CATCH.       (line   19)
* gimple_catch_set_handler:              GIMPLE_CATCH.       (line   26)
* gimple_catch_set_types:                GIMPLE_CATCH.       (line   23)
* gimple_catch_types:                    GIMPLE_CATCH.       (line   12)
* gimple_catch_types_ptr:                GIMPLE_CATCH.       (line   15)
* gimple_code:                           Manipulating GIMPLE statements.
                                                             (line   14)
* GIMPLE_COND:                           GIMPLE_COND.        (line    6)
* gimple_cond_code:                      GIMPLE_COND.        (line   20)
* gimple_cond_false_label:               GIMPLE_COND.        (line   59)
* gimple_cond_lhs:                       GIMPLE_COND.        (line   29)
* gimple_cond_make_false:                GIMPLE_COND.        (line   63)
* gimple_cond_make_true:                 GIMPLE_COND.        (line   66)
* gimple_cond_rhs:                       GIMPLE_COND.        (line   37)
* gimple_cond_set_code:                  GIMPLE_COND.        (line   24)
* gimple_cond_set_false_label:           GIMPLE_COND.        (line   54)
* gimple_cond_set_lhs:                   GIMPLE_COND.        (line   33)
* gimple_cond_set_rhs:                   GIMPLE_COND.        (line   41)
* gimple_cond_set_true_label:            GIMPLE_COND.        (line   49)
* gimple_cond_true_label:                GIMPLE_COND.        (line   45)
* gimple_convert:                        GIMPLE API.         (line   50)
* gimple_copy:                           Manipulating GIMPLE statements.
                                                             (line  146)
* GIMPLE_DEBUG:                          GIMPLE_DEBUG.       (line    6)
* GIMPLE_DEBUG_BIND:                     GIMPLE_DEBUG.       (line    6)
* gimple_debug_bind_get_value:           GIMPLE_DEBUG.       (line   46)
* gimple_debug_bind_get_value_ptr:       GIMPLE_DEBUG.       (line   50)
* gimple_debug_bind_get_var:             GIMPLE_DEBUG.       (line   43)
* gimple_debug_bind_has_value_p:         GIMPLE_DEBUG.       (line   68)
* gimple_debug_bind_p:                   Logical Operators.  (line  162)
* gimple_debug_bind_reset_value:         GIMPLE_DEBUG.       (line   64)
* gimple_debug_bind_set_value:           GIMPLE_DEBUG.       (line   59)
* gimple_debug_bind_set_var:             GIMPLE_DEBUG.       (line   55)
* gimple_def_ops:                        Manipulating GIMPLE statements.
                                                             (line   93)
* GIMPLE_EH_FILTER:                      GIMPLE_EH_FILTER.   (line    6)
* gimple_eh_filter_failure:              GIMPLE_EH_FILTER.   (line   18)
* gimple_eh_filter_set_failure:          GIMPLE_EH_FILTER.   (line   27)
* gimple_eh_filter_set_types:            GIMPLE_EH_FILTER.   (line   22)
* gimple_eh_filter_types:                GIMPLE_EH_FILTER.   (line   11)
* gimple_eh_filter_types_ptr:            GIMPLE_EH_FILTER.   (line   14)
* gimple_eh_must_not_throw_fndecl:       GIMPLE_EH_FILTER.   (line   32)
* gimple_eh_must_not_throw_set_fndecl:   GIMPLE_EH_FILTER.   (line   36)
* gimple_expr_code:                      Manipulating GIMPLE statements.
                                                             (line   30)
* gimple_expr_type:                      Manipulating GIMPLE statements.
                                                             (line   23)
* GIMPLE_GOTO:                           GIMPLE_GOTO.        (line    6)
* gimple_goto_dest:                      GIMPLE_GOTO.        (line    9)
* gimple_goto_set_dest:                  GIMPLE_GOTO.        (line   12)
* gimple_has_mem_ops:                    Manipulating GIMPLE statements.
                                                             (line   71)
* gimple_has_ops:                        Manipulating GIMPLE statements.
                                                             (line   68)
* gimple_has_volatile_ops:               Manipulating GIMPLE statements.
                                                             (line  133)
* GIMPLE_LABEL:                          GIMPLE_LABEL.       (line    6)
* gimple_label_label:                    GIMPLE_LABEL.       (line   10)
* gimple_label_set_label:                GIMPLE_LABEL.       (line   13)
* gimple_loaded_syms:                    Manipulating GIMPLE statements.
                                                             (line  121)
* gimple_locus:                          Manipulating GIMPLE statements.
                                                             (line   41)
* gimple_locus_empty_p:                  Manipulating GIMPLE statements.
                                                             (line   47)
* gimple_modified_p:                     Manipulating GIMPLE statements.
                                                             (line  129)
* GIMPLE_NOP:                            GIMPLE_NOP.         (line    6)
* gimple_nop_p:                          GIMPLE_NOP.         (line    9)
* gimple_no_warning_p:                   Manipulating GIMPLE statements.
                                                             (line   50)
* gimple_num_ops:                        Logical Operators.  (line   76)
* gimple_num_ops <1>:                    Manipulating GIMPLE statements.
                                                             (line   74)
* GIMPLE_OMP_ATOMIC_LOAD:                GIMPLE_OMP_ATOMIC_LOAD.
                                                             (line    6)
* gimple_omp_atomic_load_lhs:            GIMPLE_OMP_ATOMIC_LOAD.
                                                             (line   16)
* gimple_omp_atomic_load_rhs:            GIMPLE_OMP_ATOMIC_LOAD.
                                                             (line   24)
* gimple_omp_atomic_load_set_lhs:        GIMPLE_OMP_ATOMIC_LOAD.
                                                             (line   12)
* gimple_omp_atomic_load_set_rhs:        GIMPLE_OMP_ATOMIC_LOAD.
                                                             (line   20)
* GIMPLE_OMP_ATOMIC_STORE:               GIMPLE_OMP_ATOMIC_STORE.
                                                             (line    6)
* gimple_omp_atomic_store_set_val:       GIMPLE_OMP_ATOMIC_STORE.
                                                             (line   11)
* gimple_omp_atomic_store_val:           GIMPLE_OMP_ATOMIC_STORE.
                                                             (line   15)
* gimple_omp_body:                       GIMPLE_OMP_PARALLEL.
                                                             (line   23)
* GIMPLE_OMP_CONTINUE:                   GIMPLE_OMP_CONTINUE.
                                                             (line    6)
* gimple_omp_continue_control_def:       GIMPLE_OMP_CONTINUE.
                                                             (line   12)
* gimple_omp_continue_control_def_ptr:   GIMPLE_OMP_CONTINUE.
                                                             (line   17)
* gimple_omp_continue_control_use:       GIMPLE_OMP_CONTINUE.
                                                             (line   26)
* gimple_omp_continue_control_use_ptr:   GIMPLE_OMP_CONTINUE.
                                                             (line   31)
* gimple_omp_continue_set_control_def:   GIMPLE_OMP_CONTINUE.
                                                             (line   21)
* gimple_omp_continue_set_control_use:   GIMPLE_OMP_CONTINUE.
                                                             (line   35)
* GIMPLE_OMP_CRITICAL:                   GIMPLE_OMP_CRITICAL.
                                                             (line    6)
* gimple_omp_critical_name:              GIMPLE_OMP_CRITICAL.
                                                             (line   12)
* gimple_omp_critical_name_ptr:          GIMPLE_OMP_CRITICAL.
                                                             (line   16)
* gimple_omp_critical_set_name:          GIMPLE_OMP_CRITICAL.
                                                             (line   21)
* GIMPLE_OMP_FOR:                        GIMPLE_OMP_FOR.     (line    6)
* gimple_omp_for_clauses:                GIMPLE_OMP_FOR.     (line   17)
* gimple_omp_for_clauses_ptr:            GIMPLE_OMP_FOR.     (line   20)
* gimple_omp_for_cond:                   GIMPLE_OMP_FOR.     (line   80)
* gimple_omp_for_final:                  GIMPLE_OMP_FOR.     (line   48)
* gimple_omp_for_final_ptr:              GIMPLE_OMP_FOR.     (line   51)
* gimple_omp_for_incr:                   GIMPLE_OMP_FOR.     (line   58)
* gimple_omp_for_incr_ptr:               GIMPLE_OMP_FOR.     (line   61)
* gimple_omp_for_index:                  GIMPLE_OMP_FOR.     (line   28)
* gimple_omp_for_index_ptr:              GIMPLE_OMP_FOR.     (line   31)
* gimple_omp_for_initial:                GIMPLE_OMP_FOR.     (line   38)
* gimple_omp_for_initial_ptr:            GIMPLE_OMP_FOR.     (line   41)
* gimple_omp_for_pre_body:               GIMPLE_OMP_FOR.     (line   67)
* gimple_omp_for_set_clauses:            GIMPLE_OMP_FOR.     (line   23)
* gimple_omp_for_set_cond:               GIMPLE_OMP_FOR.     (line   76)
* gimple_omp_for_set_final:              GIMPLE_OMP_FOR.     (line   54)
* gimple_omp_for_set_incr:               GIMPLE_OMP_FOR.     (line   64)
* gimple_omp_for_set_index:              GIMPLE_OMP_FOR.     (line   34)
* gimple_omp_for_set_initial:            GIMPLE_OMP_FOR.     (line   44)
* gimple_omp_for_set_pre_body:           GIMPLE_OMP_FOR.     (line   71)
* GIMPLE_OMP_MASTER:                     GIMPLE_OMP_MASTER.  (line    6)
* GIMPLE_OMP_ORDERED:                    GIMPLE_OMP_ORDERED. (line    6)
* GIMPLE_OMP_PARALLEL:                   GIMPLE_OMP_PARALLEL.
                                                             (line    6)
* gimple_omp_parallel_child_fn:          GIMPLE_OMP_PARALLEL.
                                                             (line   42)
* gimple_omp_parallel_child_fn_ptr:      GIMPLE_OMP_PARALLEL.
                                                             (line   47)
* gimple_omp_parallel_clauses:           GIMPLE_OMP_PARALLEL.
                                                             (line   30)
* gimple_omp_parallel_clauses_ptr:       GIMPLE_OMP_PARALLEL.
                                                             (line   33)
* gimple_omp_parallel_combined_p:        GIMPLE_OMP_PARALLEL.
                                                             (line   15)
* gimple_omp_parallel_data_arg:          GIMPLE_OMP_PARALLEL.
                                                             (line   56)
* gimple_omp_parallel_data_arg_ptr:      GIMPLE_OMP_PARALLEL.
                                                             (line   61)
* gimple_omp_parallel_set_child_fn:      GIMPLE_OMP_PARALLEL.
                                                             (line   52)
* gimple_omp_parallel_set_clauses:       GIMPLE_OMP_PARALLEL.
                                                             (line   37)
* gimple_omp_parallel_set_combined_p:    GIMPLE_OMP_PARALLEL.
                                                             (line   19)
* gimple_omp_parallel_set_data_arg:      GIMPLE_OMP_PARALLEL.
                                                             (line   65)
* GIMPLE_OMP_RETURN:                     GIMPLE_OMP_RETURN.  (line    6)
* gimple_omp_return_nowait_p:            GIMPLE_OMP_RETURN.  (line   13)
* gimple_omp_return_set_nowait:          GIMPLE_OMP_RETURN.  (line   10)
* GIMPLE_OMP_SECTION:                    GIMPLE_OMP_SECTION. (line    6)
* GIMPLE_OMP_SECTIONS:                   GIMPLE_OMP_SECTIONS.
                                                             (line    6)
* gimple_omp_sections_clauses:           GIMPLE_OMP_SECTIONS.
                                                             (line   29)
* gimple_omp_sections_clauses_ptr:       GIMPLE_OMP_SECTIONS.
                                                             (line   32)
* gimple_omp_sections_control:           GIMPLE_OMP_SECTIONS.
                                                             (line   16)
* gimple_omp_sections_control_ptr:       GIMPLE_OMP_SECTIONS.
                                                             (line   20)
* gimple_omp_sections_set_clauses:       GIMPLE_OMP_SECTIONS.
                                                             (line   35)
* gimple_omp_sections_set_control:       GIMPLE_OMP_SECTIONS.
                                                             (line   24)
* gimple_omp_section_last_p:             GIMPLE_OMP_SECTION. (line   11)
* gimple_omp_section_set_last:           GIMPLE_OMP_SECTION. (line   15)
* gimple_omp_set_body:                   GIMPLE_OMP_PARALLEL.
                                                             (line   26)
* GIMPLE_OMP_SINGLE:                     GIMPLE_OMP_SINGLE.  (line    6)
* gimple_omp_single_clauses:             GIMPLE_OMP_SINGLE.  (line   13)
* gimple_omp_single_clauses_ptr:         GIMPLE_OMP_SINGLE.  (line   16)
* gimple_omp_single_set_clauses:         GIMPLE_OMP_SINGLE.  (line   19)
* gimple_op:                             Logical Operators.  (line   79)
* gimple_op <1>:                         Manipulating GIMPLE statements.
                                                             (line   80)
* gimple_ops:                            Logical Operators.  (line   82)
* gimple_ops <1>:                        Manipulating GIMPLE statements.
                                                             (line   77)
* gimple_op_ptr:                         Manipulating GIMPLE statements.
                                                             (line   83)
* GIMPLE_PHI:                            GIMPLE_PHI.         (line    6)
* gimple_phi_arg:                        GIMPLE_PHI.         (line   24)
* gimple_phi_arg <1>:                    SSA.                (line   62)
* gimple_phi_arg_def:                    SSA.                (line   68)
* gimple_phi_arg_edge:                   SSA.                (line   65)
* gimple_phi_capacity:                   GIMPLE_PHI.         (line    6)
* gimple_phi_num_args:                   GIMPLE_PHI.         (line   10)
* gimple_phi_num_args <1>:               SSA.                (line   58)
* gimple_phi_result:                     GIMPLE_PHI.         (line   15)
* gimple_phi_result <1>:                 SSA.                (line   55)
* gimple_phi_result_ptr:                 GIMPLE_PHI.         (line   18)
* gimple_phi_set_arg:                    GIMPLE_PHI.         (line   28)
* gimple_phi_set_result:                 GIMPLE_PHI.         (line   21)
* gimple_plf:                            Manipulating GIMPLE statements.
                                                             (line   64)
* GIMPLE_RESX:                           GIMPLE_RESX.        (line    6)
* gimple_resx_region:                    GIMPLE_RESX.        (line   12)
* gimple_resx_set_region:                GIMPLE_RESX.        (line   15)
* GIMPLE_RETURN:                         GIMPLE_RETURN.      (line    6)
* gimple_return_retval:                  GIMPLE_RETURN.      (line    9)
* gimple_return_set_retval:              GIMPLE_RETURN.      (line   12)
* gimple_seq_add_seq:                    GIMPLE sequences.   (line   30)
* gimple_seq_add_stmt:                   GIMPLE sequences.   (line   24)
* gimple_seq_alloc:                      GIMPLE sequences.   (line   61)
* gimple_seq_copy:                       GIMPLE sequences.   (line   65)
* gimple_seq_deep_copy:                  GIMPLE sequences.   (line   36)
* gimple_seq_empty_p:                    GIMPLE sequences.   (line   69)
* gimple_seq_first:                      GIMPLE sequences.   (line   43)
* gimple_seq_init:                       GIMPLE sequences.   (line   58)
* gimple_seq_last:                       GIMPLE sequences.   (line   46)
* gimple_seq_reverse:                    GIMPLE sequences.   (line   39)
* gimple_seq_set_first:                  GIMPLE sequences.   (line   53)
* gimple_seq_set_last:                   GIMPLE sequences.   (line   49)
* gimple_seq_singleton_p:                GIMPLE sequences.   (line   78)
* gimple_set_block:                      Manipulating GIMPLE statements.
                                                             (line   38)
* gimple_set_def_ops:                    Manipulating GIMPLE statements.
                                                             (line   96)
* gimple_set_has_volatile_ops:           Manipulating GIMPLE statements.
                                                             (line  136)
* gimple_set_locus:                      Manipulating GIMPLE statements.
                                                             (line   44)
* gimple_set_op:                         Manipulating GIMPLE statements.
                                                             (line   86)
* gimple_set_plf:                        Manipulating GIMPLE statements.
                                                             (line   60)
* gimple_set_use_ops:                    Manipulating GIMPLE statements.
                                                             (line  103)
* gimple_set_vdef_ops:                   Manipulating GIMPLE statements.
                                                             (line  117)
* gimple_set_visited:                    Manipulating GIMPLE statements.
                                                             (line   53)
* gimple_set_vuse_ops:                   Manipulating GIMPLE statements.
                                                             (line  110)
* gimple_simplify:                       GIMPLE API.         (line    6)
* gimple_simplify <1>:                   GIMPLE API.         (line    8)
* gimple_simplify <2>:                   GIMPLE API.         (line   10)
* gimple_simplify <3>:                   GIMPLE API.         (line   12)
* gimple_simplify <4>:                   GIMPLE API.         (line   14)
* gimple_simplify <5>:                   GIMPLE API.         (line   16)
* gimple_statement_with_ops:             Tuple representation.
                                                             (line   96)
* gimple_stored_syms:                    Manipulating GIMPLE statements.
                                                             (line  125)
* GIMPLE_SWITCH:                         GIMPLE_SWITCH.      (line    6)
* gimple_switch_default_label:           GIMPLE_SWITCH.      (line   41)
* gimple_switch_index:                   GIMPLE_SWITCH.      (line   24)
* gimple_switch_label:                   GIMPLE_SWITCH.      (line   31)
* gimple_switch_num_labels:              GIMPLE_SWITCH.      (line   14)
* gimple_switch_set_default_label:       GIMPLE_SWITCH.      (line   45)
* gimple_switch_set_index:               GIMPLE_SWITCH.      (line   27)
* gimple_switch_set_label:               GIMPLE_SWITCH.      (line   36)
* gimple_switch_set_num_labels:          GIMPLE_SWITCH.      (line   19)
* GIMPLE_TRY:                            GIMPLE_TRY.         (line    6)
* gimple_try_catch_is_cleanup:           GIMPLE_TRY.         (line   19)
* gimple_try_cleanup:                    GIMPLE_TRY.         (line   26)
* gimple_try_eval:                       GIMPLE_TRY.         (line   22)
* gimple_try_kind:                       GIMPLE_TRY.         (line   15)
* gimple_try_set_catch_is_cleanup:       GIMPLE_TRY.         (line   30)
* gimple_try_set_cleanup:                GIMPLE_TRY.         (line   38)
* gimple_try_set_eval:                   GIMPLE_TRY.         (line   34)
* gimple_use_ops:                        Manipulating GIMPLE statements.
                                                             (line  100)
* gimple_vdef_ops:                       Manipulating GIMPLE statements.
                                                             (line  114)
* gimple_visited_p:                      Manipulating GIMPLE statements.
                                                             (line   57)
* gimple_vuse_ops:                       Manipulating GIMPLE statements.
                                                             (line  107)
* gimple_wce_cleanup:                    GIMPLE_WITH_CLEANUP_EXPR.
                                                             (line   10)
* gimple_wce_cleanup_eh_only:            GIMPLE_WITH_CLEANUP_EXPR.
                                                             (line   17)
* gimple_wce_set_cleanup:                GIMPLE_WITH_CLEANUP_EXPR.
                                                             (line   13)
* gimple_wce_set_cleanup_eh_only:        GIMPLE_WITH_CLEANUP_EXPR.
                                                             (line   20)
* GIMPLE_WITH_CLEANUP_EXPR:              GIMPLE_WITH_CLEANUP_EXPR.
                                                             (line    6)
* gimplification:                        Parsing pass.       (line   13)
* gimplification <1>:                    Gimplification pass.
                                                             (line    6)
* gimplifier:                            Parsing pass.       (line   13)
* gimplify_assign:                       GIMPLE_ASSIGN.      (line   41)
* gimplify_expr:                         Gimplification pass.
                                                             (line   18)
* gimplify_function_tree:                Gimplification pass.
                                                             (line   18)
* GLOBAL_INIT_PRIORITY:                  Functions for C++.  (line  141)
* global_regs:                           Register Basics.    (line   59)
* GO_IF_LEGITIMATE_ADDRESS:              Addressing Modes.   (line   90)
* greater than:                          Comparisons.        (line   60)
* greater than <1>:                      Comparisons.        (line   64)
* greater than <2>:                      Comparisons.        (line   72)
* gsi_after_labels:                      Sequence iterators. (line   74)
* gsi_bb:                                Sequence iterators. (line   82)
* gsi_commit_edge_inserts:               Sequence iterators. (line  193)
* gsi_commit_edge_inserts <1>:           Maintaining the CFG.
                                                             (line  105)
* gsi_commit_one_edge_insert:            Sequence iterators. (line  188)
* gsi_end_p:                             Sequence iterators. (line   59)
* gsi_end_p <1>:                         Maintaining the CFG.
                                                             (line   48)
* gsi_for_stmt:                          Sequence iterators. (line  156)
* gsi_insert_after:                      Sequence iterators. (line  145)
* gsi_insert_after <1>:                  Maintaining the CFG.
                                                             (line   60)
* gsi_insert_before:                     Sequence iterators. (line  134)
* gsi_insert_before <1>:                 Maintaining the CFG.
                                                             (line   66)
* gsi_insert_on_edge:                    Sequence iterators. (line  173)
* gsi_insert_on_edge <1>:                Maintaining the CFG.
                                                             (line  105)
* gsi_insert_on_edge_immediate:          Sequence iterators. (line  183)
* gsi_insert_seq_after:                  Sequence iterators. (line  152)
* gsi_insert_seq_before:                 Sequence iterators. (line  141)
* gsi_insert_seq_on_edge:                Sequence iterators. (line  177)
* gsi_last:                              Sequence iterators. (line   49)
* gsi_last <1>:                          Maintaining the CFG.
                                                             (line   44)
* gsi_last_bb:                           Sequence iterators. (line   55)
* gsi_link_after:                        Sequence iterators. (line  113)
* gsi_link_before:                       Sequence iterators. (line  103)
* gsi_link_seq_after:                    Sequence iterators. (line  108)
* gsi_link_seq_before:                   Sequence iterators. (line   97)
* gsi_move_after:                        Sequence iterators. (line  159)
* gsi_move_before:                       Sequence iterators. (line  164)
* gsi_move_to_bb_end:                    Sequence iterators. (line  169)
* gsi_next:                              Sequence iterators. (line   65)
* gsi_next <1>:                          Maintaining the CFG.
                                                             (line   52)
* gsi_one_before_end_p:                  Sequence iterators. (line   62)
* gsi_prev:                              Sequence iterators. (line   68)
* gsi_prev <1>:                          Maintaining the CFG.
                                                             (line   56)
* gsi_remove:                            Sequence iterators. (line   88)
* gsi_remove <1>:                        Maintaining the CFG.
                                                             (line   72)
* gsi_replace:                           Sequence iterators. (line  128)
* gsi_seq:                               Sequence iterators. (line   85)
* gsi_split_seq_after:                   Sequence iterators. (line  118)
* gsi_split_seq_before:                  Sequence iterators. (line  123)
* gsi_start:                             Sequence iterators. (line   39)
* gsi_start <1>:                         Maintaining the CFG.
                                                             (line   40)
* gsi_start_bb:                          Sequence iterators. (line   45)
* gsi_stmt:                              Sequence iterators. (line   71)
* gsi_stmt_ptr:                          Sequence iterators. (line   79)
* gt:                                    Comparisons.        (line   60)
* gt and attributes:                     Expressions.        (line   83)
* gtu:                                   Comparisons.        (line   64)
* gtu and attributes:                    Expressions.        (line   83)
* GTY:                                   Type Information.   (line    6)
* GT_EXPR:                               Unary and Binary Expressions.
                                                             (line    6)
* H in constraint:                       Simple Constraints. (line   96)
* HAmode:                                Machine Modes.      (line  146)
* HANDLER:                               Statements for C++. (line    6)
* HANDLER_BODY:                          Statements for C++. (line    6)
* HANDLER_PARMS:                         Statements for C++. (line    6)
* HANDLE_PRAGMA_PACK_WITH_EXPANSION:     Misc.               (line  442)
* hard registers:                        Regs and Memory.    (line    9)
* HARD_FRAME_POINTER_IS_ARG_POINTER:     Frame Registers.    (line   57)
* HARD_FRAME_POINTER_IS_FRAME_POINTER:   Frame Registers.    (line   50)
* HARD_FRAME_POINTER_REGNUM:             Frame Registers.    (line   19)
* HARD_REGNO_CALLER_SAVE_MODE:           Caller Saves.       (line   10)
* HARD_REGNO_CALL_PART_CLOBBERED:        Register Basics.    (line   52)
* HARD_REGNO_MODE_OK:                    Values in Registers.
                                                             (line   57)
* HARD_REGNO_NREGS:                      Values in Registers.
                                                             (line   10)
* HARD_REGNO_NREGS_HAS_PADDING:          Values in Registers.
                                                             (line   24)
* HARD_REGNO_NREGS_WITH_PADDING:         Values in Registers.
                                                             (line   42)
* HARD_REGNO_RENAME_OK:                  Values in Registers.
                                                             (line  117)
* HAS_INIT_SECTION:                      Macros for Initialization.
                                                             (line   18)
* HAS_LONG_COND_BRANCH:                  Misc.               (line    8)
* HAS_LONG_UNCOND_BRANCH:                Misc.               (line   17)
* HAVE_DOS_BASED_FILE_SYSTEM:            Filesystem.         (line   11)
* HAVE_POST_DECREMENT:                   Addressing Modes.   (line   11)
* HAVE_POST_INCREMENT:                   Addressing Modes.   (line   10)
* HAVE_POST_MODIFY_DISP:                 Addressing Modes.   (line   17)
* HAVE_POST_MODIFY_REG:                  Addressing Modes.   (line   23)
* HAVE_PRE_DECREMENT:                    Addressing Modes.   (line    9)
* HAVE_PRE_INCREMENT:                    Addressing Modes.   (line    8)
* HAVE_PRE_MODIFY_DISP:                  Addressing Modes.   (line   16)
* HAVE_PRE_MODIFY_REG:                   Addressing Modes.   (line   22)
* HCmode:                                Machine Modes.      (line  199)
* HFmode:                                Machine Modes.      (line   61)
* high:                                  Constants.          (line  150)
* HImode:                                Machine Modes.      (line   29)
* HImode, in insn:                       Insns.              (line  268)
* HONOR_REG_ALLOC_ORDER:                 Allocation Order.   (line   36)
* host configuration:                    Host Config.        (line    6)
* host functions:                        Host Common.        (line    6)
* host hooks:                            Host Common.        (line    6)
* host makefile fragment:                Host Fragment.      (line    6)
* HOST_BIT_BUCKET:                       Filesystem.         (line   51)
* HOST_EXECUTABLE_SUFFIX:                Filesystem.         (line   45)
* HOST_HOOKS_EXTRA_SIGNALS:              Host Common.        (line   11)
* HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY:   Host Common.        (line   43)
* HOST_HOOKS_GT_PCH_GET_ADDRESS:         Host Common.        (line   15)
* HOST_HOOKS_GT_PCH_USE_ADDRESS:         Host Common.        (line   24)
* HOST_LACKS_INODE_NUMBERS:              Filesystem.         (line   89)
* HOST_LONG_FORMAT:                      Host Misc.          (line   45)
* HOST_LONG_LONG_FORMAT:                 Host Misc.          (line   41)
* HOST_OBJECT_SUFFIX:                    Filesystem.         (line   40)
* HOST_PTR_PRINTF:                       Host Misc.          (line   49)
* HOT_TEXT_SECTION_NAME:                 Sections.           (line   42)
* HQmode:                                Machine Modes.      (line  110)
* i in constraint:                       Simple Constraints. (line   68)
* I in constraint:                       Simple Constraints. (line   79)
* identifier:                            Identifiers.        (line    6)
* IDENTIFIER_LENGTH:                     Identifiers.        (line   22)
* IDENTIFIER_NODE:                       Identifiers.        (line    6)
* IDENTIFIER_OPNAME_P:                   Identifiers.        (line   27)
* IDENTIFIER_POINTER:                    Identifiers.        (line   17)
* IDENTIFIER_TYPENAME_P:                 Identifiers.        (line   33)
* IEEE 754-2008:                         Decimal float library routines.
                                                             (line    6)
* IFCVT_MACHDEP_INIT:                    Misc.               (line  568)
* IFCVT_MODIFY_CANCEL:                   Misc.               (line  562)
* IFCVT_MODIFY_FINAL:                    Misc.               (line  556)
* IFCVT_MODIFY_INSN:                     Misc.               (line  550)
* IFCVT_MODIFY_MULTIPLE_TESTS:           Misc.               (line  542)
* IFCVT_MODIFY_TESTS:                    Misc.               (line  532)
* IF_COND:                               Statements for C++. (line    6)
* IF_STMT:                               Statements for C++. (line    6)
* if_then_else:                          Comparisons.        (line   80)
* if_then_else and attributes:           Expressions.        (line   32)
* if_then_else usage:                    Side Effects.       (line   56)
* IMAGPART_EXPR:                         Unary and Binary Expressions.
                                                             (line    6)
* Immediate Uses:                        SSA Operands.       (line  258)
* immediate_operand:                     Machine-Independent Predicates.
                                                             (line   10)
* IMMEDIATE_PREFIX:                      Instruction Output. (line  153)
* include:                               Including Patterns. (line    6)
* INCLUDE_DEFAULTS:                      Driver.             (line  331)
* inclusive-or, bitwise:                 Arithmetic.         (line  163)
* INCOMING_FRAME_SP_OFFSET:              Frame Layout.       (line  179)
* INCOMING_REGNO:                        Register Basics.    (line   86)
* INCOMING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   73)
* INCOMING_RETURN_ADDR_RTX:              Frame Layout.       (line  135)
* INCOMING_STACK_BOUNDARY:               Storage Layout.     (line  154)
* INDEX_REG_CLASS:                       Register Classes.   (line  140)
* indirect_jump instruction pattern:     Standard Names.     (line 1454)
* indirect_operand:                      Machine-Independent Predicates.
                                                             (line   70)
* INDIRECT_REF:                          Storage References. (line    6)
* initialization routines:               Initialization.     (line    6)
* INITIAL_ELIMINATION_OFFSET:            Elimination.        (line   84)
* INITIAL_FRAME_ADDRESS_RTX:             Frame Layout.       (line   77)
* INITIAL_FRAME_POINTER_OFFSET:          Elimination.        (line   34)
* INIT_ARRAY_SECTION_ASM_OP:             Sections.           (line  106)
* INIT_CUMULATIVE_ARGS:                  Register Arguments. (line  161)
* INIT_CUMULATIVE_INCOMING_ARGS:         Register Arguments. (line  189)
* INIT_CUMULATIVE_LIBCALL_ARGS:          Register Arguments. (line  183)
* INIT_ENVIRONMENT:                      Driver.             (line  309)
* INIT_EXPANDERS:                        Per-Function Data.  (line   36)
* INIT_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* init_machine_status:                   Per-Function Data.  (line   42)
* init_one_libfunc:                      Library Calls.      (line   15)
* INIT_SECTION_ASM_OP:                   Sections.           (line   90)
* INIT_SECTION_ASM_OP <1>:               Macros for Initialization.
                                                             (line    9)
* inlining:                              Target Attributes.  (line   95)
* insert_insn_on_edge:                   Maintaining the CFG.
                                                             (line  105)
* insn:                                  Insns.              (line   63)
* insn and /f:                           Flags.              (line  107)
* insn and /j:                           Flags.              (line  157)
* insn and /s:                           Flags.              (line   49)
* insn and /s <1>:                       Flags.              (line  148)
* insn and /u:                           Flags.              (line   39)
* insn and /v:                           Flags.              (line   44)
* insn attributes:                       Insn Attributes.    (line    6)
* insn canonicalization:                 Insn Canonicalizations.
                                                             (line    6)
* insn includes:                         Including Patterns. (line    6)
* insn lengths, computing:               Insn Lengths.       (line    6)
* insn notes, notes:                     Basic Blocks.       (line   52)
* insn splitting:                        Insn Splitting.     (line    6)
* insn-attr.h:                           Defining Attributes.
                                                             (line   34)
* insns:                                 Insns.              (line    6)
* insns, generating:                     RTL Template.       (line    6)
* insns, recognizing:                    RTL Template.       (line    6)
* INSN_ANNULLED_BRANCH_P:                Flags.              (line   39)
* INSN_CODE:                             Insns.              (line  295)
* INSN_DELETED_P:                        Flags.              (line   44)
* INSN_FROM_TARGET_P:                    Flags.              (line   49)
* insn_list:                             Insns.              (line  540)
* INSN_REFERENCES_ARE_DELAYED:           Misc.               (line  469)
* INSN_SETS_ARE_DELAYED:                 Misc.               (line  458)
* INSN_UID:                              Insns.              (line   23)
* INSN_VAR_LOCATION:                     Insns.              (line  236)
* instruction attributes:                Insn Attributes.    (line    6)
* instruction latency time:              Processor pipeline description.
                                                             (line    6)
* instruction latency time <1>:          Processor pipeline description.
                                                             (line  105)
* instruction latency time <2>:          Processor pipeline description.
                                                             (line  196)
* instruction patterns:                  Patterns.           (line    6)
* instruction splitting:                 Insn Splitting.     (line    6)
* insv instruction pattern:              Standard Names.     (line 1239)
* insvM instruction pattern:             Standard Names.     (line 1191)
* insvmisalignM instruction pattern:     Standard Names.     (line 1201)
* int iterators in .md files:            Int Iterators.      (line    6)
* INT16_TYPE:                            Type Layout.        (line  216)
* INT32_TYPE:                            Type Layout.        (line  217)
* INT64_TYPE:                            Type Layout.        (line  218)
* INT8_TYPE:                             Type Layout.        (line  215)
* INTEGER_CST:                           Constant expressions.
                                                             (line    6)
* INTEGER_TYPE:                          Types.              (line    6)
* Interdependence of Patterns:           Dependent Patterns. (line    6)
* interfacing to GCC output:             Interface.          (line    6)
* interlock delays:                      Processor pipeline description.
                                                             (line    6)
* intermediate representation lowering:  Parsing pass.       (line   13)
* INTMAX_TYPE:                           Type Layout.        (line  192)
* INTPTR_TYPE:                           Type Layout.        (line  239)
* introduction:                          Top.                (line    6)
* INT_FAST16_TYPE:                       Type Layout.        (line  232)
* INT_FAST32_TYPE:                       Type Layout.        (line  233)
* INT_FAST64_TYPE:                       Type Layout.        (line  234)
* INT_FAST8_TYPE:                        Type Layout.        (line  231)
* INT_LEAST16_TYPE:                      Type Layout.        (line  224)
* INT_LEAST32_TYPE:                      Type Layout.        (line  225)
* INT_LEAST64_TYPE:                      Type Layout.        (line  226)
* INT_LEAST8_TYPE:                       Type Layout.        (line  223)
* INT_TYPE_SIZE:                         Type Layout.        (line   11)
* INVOKE__main:                          Macros for Initialization.
                                                             (line   50)
* in_struct:                             Flags.              (line  245)
* in_struct, in code_label and note:     Flags.              (line   59)
* in_struct, in insn and jump_insn and call_insn: Flags.     (line   49)
* in_struct, in insn, call_insn, jump_insn and jump_table_data: Flags.
                                                             (line  148)
* in_struct, in subreg:                  Flags.              (line  187)
* ior:                                   Arithmetic.         (line  163)
* ior and attributes:                    Expressions.        (line   50)
* ior, canonicalization of:              Insn Canonicalizations.
                                                             (line   51)
* iorM3 instruction pattern:             Standard Names.     (line  301)
* IRA_HARD_REGNO_ADD_COST_MULTIPLIER:    Allocation Order.   (line   44)
* IS_ASM_LOGICAL_LINE_SEPARATOR:         Data Output.        (line  123)
* is_gimple_addressable:                 Logical Operators.  (line  113)
* is_gimple_asm_val:                     Logical Operators.  (line  117)
* is_gimple_assign:                      Logical Operators.  (line  149)
* is_gimple_call:                        Logical Operators.  (line  152)
* is_gimple_call_addr:                   Logical Operators.  (line  120)
* is_gimple_constant:                    Logical Operators.  (line  128)
* is_gimple_debug:                       Logical Operators.  (line  155)
* is_gimple_ip_invariant:                Logical Operators.  (line  137)
* is_gimple_ip_invariant_address:        Logical Operators.  (line  142)
* is_gimple_mem_ref_addr:                Logical Operators.  (line  124)
* is_gimple_min_invariant:               Logical Operators.  (line  131)
* is_gimple_omp:                         Logical Operators.  (line  166)
* is_gimple_val:                         Logical Operators.  (line  107)
* iterators in .md files:                Iterators.          (line    6)
* IV analysis on GIMPLE:                 Scalar evolutions.  (line    6)
* IV analysis on RTL:                    loop-iv.            (line    6)
* JMP_BUF_SIZE:                          Exception Region Output.
                                                             (line   83)
* jump:                                  Flags.              (line  286)
* jump instruction pattern:              Standard Names.     (line 1332)
* jump instruction patterns:             Jump Patterns.      (line    6)
* jump instructions and set:             Side Effects.       (line   56)
* jump, in call_insn:                    Flags.              (line  161)
* jump, in insn:                         Flags.              (line  157)
* jump, in mem:                          Flags.              (line   70)
* Jumps:                                 Jumps.              (line    6)
* JUMP_ALIGN:                            Alignment Output.   (line    8)
* jump_insn:                             Insns.              (line   73)
* jump_insn and /f:                      Flags.              (line  107)
* jump_insn and /s:                      Flags.              (line   49)
* jump_insn and /s <1>:                  Flags.              (line  148)
* jump_insn and /u:                      Flags.              (line   39)
* jump_insn and /v:                      Flags.              (line   44)
* JUMP_LABEL:                            Insns.              (line   80)
* JUMP_TABLES_IN_TEXT_SECTION:           Sections.           (line  150)
* jump_table_data:                       Insns.              (line  166)
* jump_table_data and /s:                Flags.              (line  148)
* jump_table_data and /v:                Flags.              (line   44)
* LABEL_ALIGN:                           Alignment Output.   (line   57)
* LABEL_ALIGN_AFTER_BARRIER:             Alignment Output.   (line   26)
* LABEL_ALTERNATE_NAME:                  Edges.              (line  180)
* LABEL_ALT_ENTRY_P:                     Insns.              (line  146)
* LABEL_DECL:                            Declarations.       (line    6)
* LABEL_KIND:                            Insns.              (line  146)
* LABEL_NUSES:                           Insns.              (line  142)
* LABEL_PRESERVE_P:                      Flags.              (line   59)
* label_ref:                             Constants.          (line  127)
* label_ref and /v:                      Flags.              (line   65)
* label_ref, RTL sharing:                Sharing.            (line   35)
* LABEL_REF_NONLOCAL_P:                  Flags.              (line   65)
* language-dependent trees:              Language-dependent trees.
                                                             (line    6)
* language-independent intermediate representation: Parsing pass.
                                                             (line   13)
* lang_hooks.gimplify_expr:              Gimplification pass.
                                                             (line   18)
* lang_hooks.parse_file:                 Parsing pass.       (line    6)
* large return values:                   Aggregate Return.   (line    6)
* LAST_STACK_REG:                        Stack Registers.    (line   30)
* LAST_VIRTUAL_REGISTER:                 Regs and Memory.    (line   51)
* lceilMN2:                              Standard Names.     (line  860)
* LCSSA:                                 LCSSA.              (line    6)
* LDD_SUFFIX:                            Macros for Initialization.
                                                             (line  121)
* ldexpM3 instruction pattern:           Standard Names.     (line  653)
* LD_FINI_SWITCH:                        Macros for Initialization.
                                                             (line   28)
* LD_INIT_SWITCH:                        Macros for Initialization.
                                                             (line   24)
* le:                                    Comparisons.        (line   76)
* le and attributes:                     Expressions.        (line   83)
* leaf functions:                        Leaf Functions.     (line    6)
* leaf_function_p:                       Standard Names.     (line 1416)
* LEAF_REGISTERS:                        Leaf Functions.     (line   23)
* LEAF_REG_REMAP:                        Leaf Functions.     (line   37)
* left rotate:                           Arithmetic.         (line  195)
* left shift:                            Arithmetic.         (line  173)
* LEGITIMATE_PIC_OPERAND_P:              PIC.                (line   31)
* LEGITIMIZE_RELOAD_ADDRESS:             Addressing Modes.   (line  150)
* length:                                GTY Options.        (line   47)
* less than:                             Comparisons.        (line   68)
* less than or equal:                    Comparisons.        (line   76)
* leu:                                   Comparisons.        (line   76)
* leu and attributes:                    Expressions.        (line   83)
* LE_EXPR:                               Unary and Binary Expressions.
                                                             (line    6)
* lfloorMN2:                             Standard Names.     (line  855)
* LIB2FUNCS_EXTRA:                       Target Fragment.    (line   11)
* LIBCALL_VALUE:                         Scalar Return.      (line   56)
* libgcc.a:                              Library Calls.      (line    6)
* LIBGCC2_CFLAGS:                        Target Fragment.    (line    8)
* LIBGCC2_GNU_PREFIX:                    Type Layout.        (line  102)
* LIBGCC2_UNWIND_ATTRIBUTE:              Misc.               (line 1090)
* LIBGCC_SPEC:                           Driver.             (line  115)
* library subroutine names:              Library Calls.      (line    6)
* LIBRARY_PATH_ENV:                      Misc.               (line  510)
* LIB_SPEC:                              Driver.             (line  107)
* LIMIT_RELOAD_CLASS:                    Register Classes.   (line  296)
* LINK_COMMAND_SPEC:                     Driver.             (line  240)
* LINK_EH_SPEC:                          Driver.             (line  142)
* LINK_GCC_C_SEQUENCE_SPEC:              Driver.             (line  232)
* LINK_LIBGCC_SPECIAL_1:                 Driver.             (line  227)
* LINK_SPEC:                             Driver.             (line  100)
* list:                                  Containers.         (line    6)
* Liveness representation:               Liveness information.
                                                             (line    6)
* load address instruction:              Simple Constraints. (line  162)
* LOAD_EXTEND_OP:                        Misc.               (line   59)
* load_multiple instruction pattern:     Standard Names.     (line  136)
* Local Register Allocator (LRA):        RTL passes.         (line  187)
* LOCAL_ALIGNMENT:                       Storage Layout.     (line  254)
* LOCAL_CLASS_P:                         Classes.            (line   73)
* LOCAL_DECL_ALIGNMENT:                  Storage Layout.     (line  291)
* LOCAL_INCLUDE_DIR:                     Driver.             (line  316)
* LOCAL_LABEL_PREFIX:                    Instruction Output. (line  151)
* LOCAL_REGNO:                           Register Basics.    (line  100)
* log10M2 instruction pattern:           Standard Names.     (line  757)
* log1pM2 instruction pattern:           Standard Names.     (line  747)
* log2M2 instruction pattern:            Standard Names.     (line  764)
* logbM2 instruction pattern:            Standard Names.     (line  771)
* Logical Operators:                     Logical Operators.  (line    6)
* logical-and, bitwise:                  Arithmetic.         (line  158)
* LOGICAL_OP_NON_SHORT_CIRCUIT:          Costs.              (line  273)
* logM2 instruction pattern:             Standard Names.     (line  740)
* LOG_LINKS:                             Insns.              (line  314)
* longjmp and automatic variables:       Interface.          (line   52)
* LONG_ACCUM_TYPE_SIZE:                  Type Layout.        (line   92)
* LONG_DOUBLE_TYPE_SIZE:                 Type Layout.        (line   57)
* LONG_FRACT_TYPE_SIZE:                  Type Layout.        (line   72)
* LONG_LONG_ACCUM_TYPE_SIZE:             Type Layout.        (line   97)
* LONG_LONG_FRACT_TYPE_SIZE:             Type Layout.        (line   77)
* LONG_LONG_TYPE_SIZE:                   Type Layout.        (line   32)
* LONG_TYPE_SIZE:                        Type Layout.        (line   21)
* Loop analysis:                         Loop representation.
                                                             (line    6)
* Loop manipulation:                     Loop manipulation.  (line    6)
* Loop querying:                         Loop querying.      (line    6)
* Loop representation:                   Loop representation.
                                                             (line    6)
* Loop-closed SSA form:                  LCSSA.              (line    6)
* looping instruction patterns:          Looping Patterns.   (line    6)
* LOOP_ALIGN:                            Alignment Output.   (line   40)
* LOOP_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* lowering, language-dependent intermediate representation: Parsing pass.
                                                             (line   13)
* lo_sum:                                Arithmetic.         (line   25)
* lrintMN2:                              Standard Names.     (line  845)
* lroundMN2:                             Standard Names.     (line  850)
* lshiftrt:                              Arithmetic.         (line  190)
* lshiftrt and attributes:               Expressions.        (line   83)
* LSHIFT_EXPR:                           Unary and Binary Expressions.
                                                             (line    6)
* lshrM3 instruction pattern:            Standard Names.     (line  591)
* lt:                                    Comparisons.        (line   68)
* lt and attributes:                     Expressions.        (line   83)
* LTGT_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* lto:                                   LTO.                (line    6)
* ltrans:                                LTO.                (line    6)
* ltu:                                   Comparisons.        (line   68)
* LT_EXPR:                               Unary and Binary Expressions.
                                                             (line    6)
* m in constraint:                       Simple Constraints. (line   17)
* machine attributes:                    Target Attributes.  (line    6)
* machine description macros:            Target Macros.      (line    6)
* machine descriptions:                  Machine Desc.       (line    6)
* machine mode conversions:              Conversions.        (line    6)
* machine modes:                         Machine Modes.      (line    6)
* machine specific constraints:          Machine Constraints.
                                                             (line    6)
* machine-independent predicates:        Machine-Independent Predicates.
                                                             (line    6)
* machine_mode:                          Machine Modes.      (line    6)
* macros, target description:            Target Macros.      (line    6)
* maddMN4 instruction pattern:           Standard Names.     (line  512)
* makefile fragment:                     Fragments.          (line    6)
* makefile targets:                      Makefile.           (line    6)
* MAKE_DECL_ONE_ONLY:                    Label Output.       (line  281)
* make_safe_from:                        Expander Definitions.
                                                             (line  151)
* MALLOC_ABI_ALIGNMENT:                  Storage Layout.     (line  173)
* Manipulating GIMPLE statements:        Manipulating GIMPLE statements.
                                                             (line    6)
* marking roots:                         GGC Roots.          (line    6)
* maskloadMN instruction pattern:        Standard Names.     (line  244)
* maskstoreMN instruction pattern:       Standard Names.     (line  251)
* MASK_RETURN_ADDR:                      Exception Region Output.
                                                             (line   35)
* Match and Simplify:                    Match and Simplify. (line    6)
* matching constraint:                   Simple Constraints. (line  140)
* matching operands:                     Output Template.    (line   49)
* match_dup:                             RTL Template.       (line   73)
* match_dup <1>:                         define_peephole2.   (line   28)
* match_dup and attributes:              Insn Lengths.       (line   16)
* match_operand:                         RTL Template.       (line   16)
* match_operand and attributes:          Expressions.        (line   55)
* match_operator:                        RTL Template.       (line   95)
* match_op_dup:                          RTL Template.       (line  163)
* match_parallel:                        RTL Template.       (line  172)
* match_par_dup:                         RTL Template.       (line  219)
* match_scratch:                         RTL Template.       (line   58)
* match_scratch <1>:                     define_peephole2.   (line   28)
* match_test and attributes:             Expressions.        (line   64)
* math library:                          Soft float library routines.
                                                             (line    6)
* math, in RTL:                          Arithmetic.         (line    6)
* matherr:                               Library Calls.      (line   59)
* MATH_LIBRARY:                          Misc.               (line  503)
* maxM3 instruction pattern:             Standard Names.     (line  363)
* MAX_BITSIZE_MODE_ANY_INT:              Machine Modes.      (line  358)
* MAX_BITSIZE_MODE_ANY_MODE:             Machine Modes.      (line  364)
* MAX_BITS_PER_WORD:                     Storage Layout.     (line   54)
* MAX_CONDITIONAL_EXECUTE:               Misc.               (line  525)
* MAX_FIXED_MODE_SIZE:                   Storage Layout.     (line  436)
* MAX_MOVE_MAX:                          Misc.               (line  105)
* MAX_OFILE_ALIGNMENT:                   Storage Layout.     (line  208)
* MAX_REGS_PER_ADDRESS:                  Addressing Modes.   (line   42)
* MAX_STACK_ALIGNMENT:                   Storage Layout.     (line  202)
* maybe_undef:                           GTY Options.        (line  139)
* may_trap_p, tree_could_trap_p:         Edges.              (line  114)
* mcount:                                Profiling.          (line   12)
* MD_EXEC_PREFIX:                        Driver.             (line  271)
* MD_FALLBACK_FRAME_STATE_FOR:           Exception Handling. (line   93)
* MD_HANDLE_UNWABI:                      Exception Handling. (line  112)
* MD_STARTFILE_PREFIX:                   Driver.             (line  299)
* MD_STARTFILE_PREFIX_1:                 Driver.             (line  304)
* mem:                                   Regs and Memory.    (line  370)
* mem and /c:                            Flags.              (line   81)
* mem and /f:                            Flags.              (line   85)
* mem and /j:                            Flags.              (line   70)
* mem and /u:                            Flags.              (line  134)
* mem and /v:                            Flags.              (line   76)
* mem, RTL sharing:                      Sharing.            (line   40)
* memory model:                          Memory model.       (line    6)
* memory reference, nonoffsettable:      Simple Constraints. (line  254)
* memory references in constraints:      Simple Constraints. (line   17)
* memory_barrier instruction pattern:    Standard Names.     (line 1802)
* MEMORY_MOVE_COST:                      Costs.              (line   53)
* memory_operand:                        Machine-Independent Predicates.
                                                             (line   57)
* MEM_ADDR_SPACE:                        Special Accessors.  (line   48)
* MEM_ALIAS_SET:                         Special Accessors.  (line    9)
* MEM_ALIGN:                             Special Accessors.  (line   45)
* MEM_EXPR:                              Special Accessors.  (line   19)
* MEM_KEEP_ALIAS_SET_P:                  Flags.              (line   70)
* MEM_NOTRAP_P:                          Flags.              (line   81)
* MEM_OFFSET:                            Special Accessors.  (line   31)
* MEM_OFFSET_KNOWN_P:                    Special Accessors.  (line   27)
* MEM_POINTER:                           Flags.              (line   85)
* MEM_READONLY_P:                        Flags.              (line  134)
* MEM_REF:                               Storage References. (line    6)
* mem_signal_fenceMODE instruction pattern: Standard Names.  (line 2061)
* MEM_SIZE:                              Special Accessors.  (line   39)
* MEM_SIZE_KNOWN_P:                      Special Accessors.  (line   35)
* mem_thread_fenceMODE instruction pattern: Standard Names.  (line 2053)
* MEM_VOLATILE_P:                        Flags.              (line   76)
* METHOD_TYPE:                           Types.              (line    6)
* MINIMUM_ALIGNMENT:                     Storage Layout.     (line  304)
* MINIMUM_ATOMIC_ALIGNMENT:              Storage Layout.     (line  181)
* minM3 instruction pattern:             Standard Names.     (line  363)
* minus:                                 Arithmetic.         (line   38)
* minus and attributes:                  Expressions.        (line   83)
* minus, canonicalization of:            Insn Canonicalizations.
                                                             (line   27)
* MINUS_EXPR:                            Unary and Binary Expressions.
                                                             (line    6)
* MIN_UNITS_PER_WORD:                    Storage Layout.     (line   64)
* MIPS coprocessor-definition macros:    MIPS Coprocessors.  (line    6)
* miscellaneous register hooks:          Miscellaneous Register Hooks.
                                                             (line    6)
* mnemonic attribute:                    Mnemonic Attribute. (line    6)
* mod:                                   Arithmetic.         (line  136)
* mod and attributes:                    Expressions.        (line   83)
* mode classes:                          Machine Modes.      (line  225)
* mode iterators in .md files:           Mode Iterators.     (line    6)
* mode switching:                        Mode Switching.     (line    6)
* MODES_TIEABLE_P:                       Values in Registers.
                                                             (line  127)
* MODE_ACCUM:                            Machine Modes.      (line  255)
* MODE_BASE_REG_CLASS:                   Register Classes.   (line  116)
* MODE_BASE_REG_REG_CLASS:               Register Classes.   (line  122)
* MODE_CC:                               Machine Modes.      (line  274)
* MODE_CC <1>:                           MODE_CC Condition Codes.
                                                             (line    6)
* MODE_CODE_BASE_REG_CLASS:              Register Classes.   (line  129)
* MODE_COMPLEX_FLOAT:                    Machine Modes.      (line  266)
* MODE_COMPLEX_INT:                      Machine Modes.      (line  263)
* MODE_DECIMAL_FLOAT:                    Machine Modes.      (line  243)
* MODE_FLOAT:                            Machine Modes.      (line  239)
* MODE_FRACT:                            Machine Modes.      (line  247)
* MODE_FUNCTION:                         Machine Modes.      (line  270)
* MODE_INT:                              Machine Modes.      (line  231)
* MODE_PARTIAL_INT:                      Machine Modes.      (line  235)
* MODE_POINTER_BOUNDS:                   Machine Modes.      (line  279)
* MODE_RANDOM:                           Machine Modes.      (line  284)
* MODE_UACCUM:                           Machine Modes.      (line  259)
* MODE_UFRACT:                           Machine Modes.      (line  251)
* modifiers in constraints:              Modifiers.          (line    6)
* MODIFY_EXPR:                           Unary and Binary Expressions.
                                                             (line    6)
* MODIFY_JNI_METHOD_CALL:                Misc.               (line  874)
* modM3 instruction pattern:             Standard Names.     (line  301)
* modulo scheduling:                     RTL passes.         (line  123)
* MOVE_MAX:                              Misc.               (line  100)
* MOVE_MAX_PIECES:                       Costs.              (line  199)
* MOVE_RATIO:                            Costs.              (line  148)
* movM instruction pattern:              Standard Names.     (line   11)
* movmemM instruction pattern:           Standard Names.     (line  959)
* movmisalignM instruction pattern:      Standard Names.     (line  125)
* movMODEcc instruction pattern:         Standard Names.     (line 1253)
* movstr instruction pattern:            Standard Names.     (line  994)
* movstrictM instruction pattern:        Standard Names.     (line  119)
* msubMN4 instruction pattern:           Standard Names.     (line  535)
* mulhisi3 instruction pattern:          Standard Names.     (line  488)
* mulM3 instruction pattern:             Standard Names.     (line  301)
* mulqihi3 instruction pattern:          Standard Names.     (line  492)
* mulsidi3 instruction pattern:          Standard Names.     (line  492)
* mult:                                  Arithmetic.         (line   93)
* mult and attributes:                   Expressions.        (line   83)
* mult, canonicalization of:             Insn Canonicalizations.
                                                             (line   27)
* mult, canonicalization of <1>:         Insn Canonicalizations.
                                                             (line   91)
* MULTIARCH_DIRNAME:                     Target Fragment.    (line  170)
* MULTILIB_DEFAULTS:                     Driver.             (line  256)
* MULTILIB_DIRNAMES:                     Target Fragment.    (line   44)
* MULTILIB_EXCEPTIONS:                   Target Fragment.    (line   70)
* MULTILIB_EXTRA_OPTS:                   Target Fragment.    (line  132)
* MULTILIB_MATCHES:                      Target Fragment.    (line   63)
* MULTILIB_OPTIONS:                      Target Fragment.    (line   24)
* MULTILIB_OSDIRNAMES:                   Target Fragment.    (line  139)
* MULTILIB_REQUIRED:                     Target Fragment.    (line   82)
* MULTILIB_REUSE:                        Target Fragment.    (line  103)
* multiple alternative constraints:      Multi-Alternative.  (line    6)
* MULTIPLE_SYMBOL_SPACES:                Misc.               (line  482)
* multiplication:                        Arithmetic.         (line   93)
* multiplication with signed saturation: Arithmetic.         (line   93)
* multiplication with unsigned saturation: Arithmetic.       (line   93)
* MULT_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* MULT_HIGHPART_EXPR:                    Unary and Binary Expressions.
                                                             (line    6)
* mulvM4 instruction pattern:            Standard Names.     (line  317)
* n in constraint:                       Simple Constraints. (line   73)
* name:                                  Identifiers.        (line    6)
* named address spaces:                  Named Address Spaces.
                                                             (line    6)
* named patterns and conditions:         Patterns.           (line   49)
* names, pattern:                        Standard Names.     (line    6)
* namespace, scope:                      Namespaces.         (line    6)
* NAMESPACE_DECL:                        Declarations.       (line    6)
* NAMESPACE_DECL <1>:                    Namespaces.         (line    6)
* NATIVE_SYSTEM_HEADER_COMPONENT:        Driver.             (line  326)
* ne:                                    Comparisons.        (line   56)
* ne and attributes:                     Expressions.        (line   83)
* nearbyintM2 instruction pattern:       Standard Names.     (line  829)
* neg:                                   Arithmetic.         (line   82)
* neg and attributes:                    Expressions.        (line   83)
* neg, canonicalization of:              Insn Canonicalizations.
                                                             (line   27)
* NEGATE_EXPR:                           Unary and Binary Expressions.
                                                             (line    6)
* negation:                              Arithmetic.         (line   82)
* negation with signed saturation:       Arithmetic.         (line   82)
* negation with unsigned saturation:     Arithmetic.         (line   82)
* negM2 instruction pattern:             Standard Names.     (line  603)
* negMODEcc instruction pattern:         Standard Names.     (line 1273)
* negvM3 instruction pattern:            Standard Names.     (line  606)
* nested functions, trampolines for:     Trampolines.        (line    6)
* nested_ptr:                            GTY Options.        (line  147)
* next_bb, prev_bb, FOR_EACH_BB, FOR_ALL_BB: Basic Blocks.   (line   25)
* NEXT_INSN:                             Insns.              (line   30)
* NEXT_OBJC_RUNTIME:                     Library Calls.      (line   82)
* NE_EXPR:                               Unary and Binary Expressions.
                                                             (line    6)
* nil:                                   RTL Objects.        (line   73)
* NM_FLAGS:                              Macros for Initialization.
                                                             (line  110)
* nondeterministic finite state automaton: Processor pipeline description.
                                                             (line  304)
* nonimmediate_operand:                  Machine-Independent Predicates.
                                                             (line  100)
* nonlocal goto handler:                 Edges.              (line  171)
* nonlocal_goto instruction pattern:     Standard Names.     (line 1636)
* nonlocal_goto_receiver instruction pattern: Standard Names.
                                                             (line 1653)
* nonmemory_operand:                     Machine-Independent Predicates.
                                                             (line   96)
* nonoffsettable memory reference:       Simple Constraints. (line  254)
* NON_LVALUE_EXPR:                       Unary and Binary Expressions.
                                                             (line    6)
* nop instruction pattern:               Standard Names.     (line 1449)
* NOP_EXPR:                              Unary and Binary Expressions.
                                                             (line    6)
* normal predicates:                     Predicates.         (line   31)
* not:                                   Arithmetic.         (line  154)
* not and attributes:                    Expressions.        (line   50)
* not equal:                             Comparisons.        (line   56)
* not, canonicalization of:              Insn Canonicalizations.
                                                             (line   27)
* note:                                  Insns.              (line  183)
* note and /i:                           Flags.              (line   59)
* note and /v:                           Flags.              (line   44)
* NOTE_INSN_BASIC_BLOCK:                 Basic Blocks.       (line   50)
* NOTE_INSN_BASIC_BLOCK <1>:             Basic Blocks.       (line   52)
* NOTE_INSN_BLOCK_BEG:                   Insns.              (line  208)
* NOTE_INSN_BLOCK_END:                   Insns.              (line  208)
* NOTE_INSN_DELETED:                     Insns.              (line  198)
* NOTE_INSN_DELETED_LABEL:               Insns.              (line  203)
* NOTE_INSN_EH_REGION_BEG:               Insns.              (line  214)
* NOTE_INSN_EH_REGION_END:               Insns.              (line  214)
* NOTE_INSN_FUNCTION_BEG:                Insns.              (line  221)
* NOTE_INSN_VAR_LOCATION:                Insns.              (line  225)
* NOTE_LINE_NUMBER:                      Insns.              (line  183)
* NOTE_SOURCE_FILE:                      Insns.              (line  183)
* NOTE_VAR_LOCATION:                     Insns.              (line  225)
* NOTICE_UPDATE_CC:                      CC0 Condition Codes.
                                                             (line   30)
* notMODEcc instruction pattern:         Standard Names.     (line 1280)
* NO_DBX_BNSYM_ENSYM:                    DBX Hooks.          (line   25)
* NO_DBX_FUNCTION_END:                   DBX Hooks.          (line   19)
* NO_DBX_GCC_MARKER:                     File Names and DBX. (line   27)
* NO_DBX_MAIN_SOURCE_DIRECTORY:          File Names and DBX. (line   22)
* NO_DOLLAR_IN_LABEL:                    Label Output.       (line   64)
* NO_DOT_IN_LABEL:                       Label Output.       (line   70)
* NO_FUNCTION_CSE:                       Costs.              (line  268)
* NO_IMPLICIT_EXTERN_C:                  Misc.               (line  381)
* NO_PROFILE_COUNTERS:                   Profiling.          (line   27)
* NO_REGS:                               Register Classes.   (line   17)
* Number of iterations analysis:         Number of iterations.
                                                             (line    6)
* NUM_MACHINE_MODES:                     Machine Modes.      (line  297)
* NUM_MODES_FOR_MODE_SWITCHING:          Mode Switching.     (line   30)
* N_REG_CLASSES:                         Register Classes.   (line   81)
* o in constraint:                       Simple Constraints. (line   23)
* OACC_CACHE:                            OpenACC.            (line    6)
* OACC_DATA:                             OpenACC.            (line    6)
* OACC_DECLARE:                          OpenACC.            (line    6)
* OACC_ENTER_DATA:                       OpenACC.            (line    6)
* OACC_EXIT_DATA:                        OpenACC.            (line    6)
* OACC_HOST_DATA:                        OpenACC.            (line    6)
* OACC_KERNELS:                          OpenACC.            (line    6)
* OACC_LOOP:                             OpenACC.            (line    6)
* OACC_PARALLEL:                         OpenACC.            (line    6)
* OACC_UPDATE:                           OpenACC.            (line    6)
* OBJC_GEN_METHOD_LABEL:                 Label Output.       (line  482)
* OBJC_JBLEN:                            Misc.               (line 1085)
* OBJECT_FORMAT_COFF:                    Macros for Initialization.
                                                             (line   96)
* offsettable address:                   Simple Constraints. (line   23)
* OFFSET_TYPE:                           Types.              (line    6)
* OImode:                                Machine Modes.      (line   51)
* OMP_ATOMIC:                            OpenMP.             (line    6)
* OMP_CLAUSE:                            OpenMP.             (line    6)
* OMP_CONTINUE:                          OpenMP.             (line    6)
* OMP_CRITICAL:                          OpenMP.             (line    6)
* OMP_FOR:                               OpenMP.             (line    6)
* OMP_MASTER:                            OpenMP.             (line    6)
* OMP_ORDERED:                           OpenMP.             (line    6)
* OMP_PARALLEL:                          OpenMP.             (line    6)
* OMP_RETURN:                            OpenMP.             (line    6)
* OMP_SECTION:                           OpenMP.             (line    6)
* OMP_SECTIONS:                          OpenMP.             (line    6)
* OMP_SINGLE:                            OpenMP.             (line    6)
* one_cmplM2 instruction pattern:        Standard Names.     (line  956)
* operand access:                        Accessors.          (line    6)
* Operand Access Routines:               SSA Operands.       (line  116)
* operand constraints:                   Constraints.        (line    6)
* Operand Iterators:                     SSA Operands.       (line  116)
* operand predicates:                    Predicates.         (line    6)
* operand substitution:                  Output Template.    (line    6)
* Operands:                              Operands.           (line    6)
* operands:                              SSA Operands.       (line    6)
* operands <1>:                          Patterns.           (line   55)
* operator predicates:                   Predicates.         (line    6)
* optc-gen.awk:                          Options.            (line    6)
* OPTGROUP_ALL:                          Optimization groups.
                                                             (line   25)
* OPTGROUP_INLINE:                       Optimization groups.
                                                             (line   15)
* OPTGROUP_IPA:                          Optimization groups.
                                                             (line    9)
* OPTGROUP_LOOP:                         Optimization groups.
                                                             (line   12)
* OPTGROUP_OTHER:                        Optimization groups.
                                                             (line   21)
* OPTGROUP_VEC:                          Optimization groups.
                                                             (line   18)
* optimization dumps:                    Optimization info.  (line    6)
* optimization groups:                   Optimization groups.
                                                             (line    6)
* optimization info file names:          Dump files and streams.
                                                             (line    6)
* Optimization infrastructure for GIMPLE: Tree SSA.          (line    6)
* OPTIMIZE_MODE_SWITCHING:               Mode Switching.     (line    8)
* option specification files:            Options.            (line    6)
* optional hardware or system features:  Run-time Target.    (line   59)
* options, directory search:             Including Patterns. (line   47)
* OPTION_DEFAULT_SPECS:                  Driver.             (line   25)
* order of register allocation:          Allocation Order.   (line    6)
* ordered_comparison_operator:           Machine-Independent Predicates.
                                                             (line  115)
* ORDERED_EXPR:                          Unary and Binary Expressions.
                                                             (line    6)
* Ordering of Patterns:                  Pattern Ordering.   (line    6)
* ORIGINAL_REGNO:                        Special Accessors.  (line   53)
* other register constraints:            Simple Constraints. (line  171)
* outgoing_args_size:                    Stack Arguments.    (line   48)
* OUTGOING_REGNO:                        Register Basics.    (line   93)
* OUTGOING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   79)
* output of assembler code:              File Framework.     (line    6)
* output statements:                     Output Statement.   (line    6)
* output templates:                      Output Template.    (line    6)
* output_asm_insn:                       Output Statement.   (line   52)
* OUTPUT_QUOTED_STRING:                  File Framework.     (line  106)
* OVERLAPPING_REGISTER_NAMES:            Instruction Output. (line   20)
* OVERLOAD:                              Functions for C++.  (line    6)
* OVERRIDE_ABI_FORMAT:                   Register Arguments. (line  153)
* OVL_CURRENT:                           Functions for C++.  (line    6)
* OVL_NEXT:                              Functions for C++.  (line    6)
* p in constraint:                       Simple Constraints. (line  162)
* PAD_VARARGS_DOWN:                      Register Arguments. (line  234)
* parallel:                              Side Effects.       (line  210)
* parameters, c++ abi:                   C++ ABI.            (line    6)
* parameters, miscellaneous:             Misc.               (line    6)
* parameters, precompiled headers:       PCH Target.         (line    6)
* parity:                                Arithmetic.         (line  242)
* parityM2 instruction pattern:          Standard Names.     (line  943)
* PARM_BOUNDARY:                         Storage Layout.     (line  133)
* PARM_DECL:                             Declarations.       (line    6)
* PARSE_LDD_OUTPUT:                      Macros for Initialization.
                                                             (line  125)
* pass dumps:                            Passes.             (line    6)
* passes and files of the compiler:      Passes.             (line    6)
* passing arguments:                     Interface.          (line   36)
* pass_duplicate_computed_gotos:         Edges.              (line  161)
* PATH_SEPARATOR:                        Filesystem.         (line   31)
* PATTERN:                               Insns.              (line  284)
* pattern conditions:                    Patterns.           (line   43)
* pattern names:                         Standard Names.     (line    6)
* Pattern Ordering:                      Pattern Ordering.   (line    6)
* patterns:                              Patterns.           (line    6)
* pc:                                    Regs and Memory.    (line  357)
* pc and attributes:                     Insn Lengths.       (line   20)
* pc, RTL sharing:                       Sharing.            (line   25)
* PCC_BITFIELD_TYPE_MATTERS:             Storage Layout.     (line  330)
* PCC_STATIC_STRUCT_RETURN:              Aggregate Return.   (line   64)
* PC_REGNUM:                             Register Basics.    (line  107)
* pc_rtx:                                Regs and Memory.    (line  362)
* PDImode:                               Machine Modes.      (line   40)
* peephole optimization, RTL representation: Side Effects.   (line  244)
* peephole optimizer definitions:        Peephole Definitions.
                                                             (line    6)
* per-function data:                     Per-Function Data.  (line    6)
* percent sign:                          Output Template.    (line    6)
* PHI nodes:                             SSA.                (line   31)
* PIC:                                   PIC.                (line    6)
* PIC_OFFSET_TABLE_REGNUM:               PIC.                (line   15)
* PIC_OFFSET_TABLE_REG_CALL_CLOBBERED:   PIC.                (line   25)
* pipeline hazard recognizer:            Processor pipeline description.
                                                             (line    6)
* pipeline hazard recognizer <1>:        Processor pipeline description.
                                                             (line   53)
* Plugins:                               Plugins.            (line    6)
* plus:                                  Arithmetic.         (line   14)
* plus and attributes:                   Expressions.        (line   83)
* plus, canonicalization of:             Insn Canonicalizations.
                                                             (line   27)
* PLUS_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* Pmode:                                 Misc.               (line  329)
* pmode_register_operand:                Machine-Independent Predicates.
                                                             (line   34)
* pointer:                               Types.              (line    6)
* POINTERS_EXTEND_UNSIGNED:              Storage Layout.     (line   76)
* POINTER_PLUS_EXPR:                     Unary and Binary Expressions.
                                                             (line    6)
* POINTER_SIZE:                          Storage Layout.     (line   70)
* POINTER_TYPE:                          Types.              (line    6)
* popcount:                              Arithmetic.         (line  238)
* popcountM2 instruction pattern:        Standard Names.     (line  931)
* pops_args:                             Function Entry.     (line  104)
* pop_operand:                           Machine-Independent Predicates.
                                                             (line   87)
* portability:                           Portability.        (line    6)
* position independent code:             PIC.                (line    6)
* POSTDECREMENT_EXPR:                    Unary and Binary Expressions.
                                                             (line    6)
* POSTINCREMENT_EXPR:                    Unary and Binary Expressions.
                                                             (line    6)
* post_dec:                              Incdec.             (line   25)
* post_inc:                              Incdec.             (line   30)
* POST_LINK_SPEC:                        Driver.             (line  236)
* post_modify:                           Incdec.             (line   33)
* post_order_compute, inverted_post_order_compute, walk_dominator_tree: Basic Blocks.
                                                             (line   34)
* POWI_MAX_MULTS:                        Misc.               (line  963)
* powM3 instruction pattern:             Standard Names.     (line  785)
* pragma:                                Misc.               (line  387)
* PREDECREMENT_EXPR:                     Unary and Binary Expressions.
                                                             (line    6)
* predefined macros:                     Run-time Target.    (line    6)
* predicates:                            Predicates.         (line    6)
* predicates and machine modes:          Predicates.         (line   31)
* predication:                           Conditional Execution.
                                                             (line    6)
* predict.def:                           Profile information.
                                                             (line   24)
* PREFERRED_DEBUGGING_TYPE:              All Debuggers.      (line   41)
* PREFERRED_RELOAD_CLASS:                Register Classes.   (line  249)
* PREFERRED_STACK_BOUNDARY:              Storage Layout.     (line  147)
* prefetch:                              Side Effects.       (line  324)
* prefetch and /v:                       Flags.              (line  214)
* prefetch instruction pattern:          Standard Names.     (line 1779)
* PREFETCH_SCHEDULE_BARRIER_P:           Flags.              (line  214)
* PREINCREMENT_EXPR:                     Unary and Binary Expressions.
                                                             (line    6)
* presence_set:                          Processor pipeline description.
                                                             (line  223)
* preserving SSA form:                   SSA.                (line   74)
* pretend_args_size:                     Function Entry.     (line  110)
* prev_active_insn:                      define_peephole.    (line   60)
* PREV_INSN:                             Insns.              (line   26)
* pre_dec:                               Incdec.             (line    8)
* PRE_GCC3_DWARF_FRAME_REGISTERS:        Frame Registers.    (line  126)
* pre_inc:                               Incdec.             (line   22)
* pre_modify:                            Incdec.             (line   52)
* PRINT_OPERAND:                         Instruction Output. (line   95)
* PRINT_OPERAND_ADDRESS:                 Instruction Output. (line  122)
* PRINT_OPERAND_PUNCT_VALID_P:           Instruction Output. (line  115)
* probe_stack instruction pattern:       Standard Names.     (line 1628)
* probe_stack_address instruction pattern: Standard Names.   (line 1621)
* processor functional units:            Processor pipeline description.
                                                             (line    6)
* processor functional units <1>:        Processor pipeline description.
                                                             (line   68)
* processor pipeline description:        Processor pipeline description.
                                                             (line    6)
* product:                               Arithmetic.         (line   93)
* profile feedback:                      Profile information.
                                                             (line   14)
* profile representation:                Profile information.
                                                             (line    6)
* PROFILE_BEFORE_PROLOGUE:               Profiling.          (line   34)
* PROFILE_HOOK:                          Profiling.          (line   22)
* profiling, code generation:            Profiling.          (line    6)
* program counter:                       Regs and Memory.    (line  358)
* prologue:                              Function Entry.     (line    6)
* prologue instruction pattern:          Standard Names.     (line 1717)
* PROMOTE_MODE:                          Storage Layout.     (line   87)
* pseudo registers:                      Regs and Memory.    (line    9)
* PSImode:                               Machine Modes.      (line   32)
* PTRDIFF_TYPE:                          Type Layout.        (line  163)
* purge_dead_edges:                      Edges.              (line  103)
* purge_dead_edges <1>:                  Maintaining the CFG.
                                                             (line   81)
* push address instruction:              Simple Constraints. (line  162)
* pushM1 instruction pattern:            Standard Names.     (line  288)
* PUSH_ARGS:                             Stack Arguments.    (line   17)
* PUSH_ARGS_REVERSED:                    Stack Arguments.    (line   25)
* push_operand:                          Machine-Independent Predicates.
                                                             (line   80)
* push_reload:                           Addressing Modes.   (line  176)
* PUSH_ROUNDING:                         Stack Arguments.    (line   31)
* PUT_CODE:                              RTL Objects.        (line   47)
* PUT_MODE:                              Machine Modes.      (line  294)
* PUT_REG_NOTE_KIND:                     Insns.              (line  346)
* PUT_SDB_...:                           SDB and DWARF.      (line  114)
* QCmode:                                Machine Modes.      (line  199)
* QFmode:                                Machine Modes.      (line   57)
* QImode:                                Machine Modes.      (line   25)
* QImode, in insn:                       Insns.              (line  268)
* QQmode:                                Machine Modes.      (line  106)
* qualified type:                        Types.              (line    6)
* qualified type <1>:                    Types for C++.      (line    6)
* querying function unit reservations:   Processor pipeline description.
                                                             (line   90)
* question mark:                         Multi-Alternative.  (line   42)
* quotient:                              Arithmetic.         (line  116)
* r in constraint:                       Simple Constraints. (line   64)
* RDIV_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* READONLY_DATA_SECTION_ASM_OP:          Sections.           (line   62)
* real operands:                         SSA Operands.       (line    6)
* REALPART_EXPR:                         Unary and Binary Expressions.
                                                             (line    6)
* REAL_CST:                              Constant expressions.
                                                             (line    6)
* REAL_LIBGCC_SPEC:                      Driver.             (line  124)
* REAL_NM_FILE_NAME:                     Macros for Initialization.
                                                             (line  105)
* REAL_TYPE:                             Types.              (line    6)
* REAL_VALUE_ABS:                        Floating Point.     (line   58)
* REAL_VALUE_ATOF:                       Floating Point.     (line   39)
* REAL_VALUE_FIX:                        Floating Point.     (line   31)
* REAL_VALUE_ISINF:                      Floating Point.     (line   49)
* REAL_VALUE_ISNAN:                      Floating Point.     (line   52)
* REAL_VALUE_NEGATE:                     Floating Point.     (line   55)
* REAL_VALUE_NEGATIVE:                   Floating Point.     (line   46)
* REAL_VALUE_TO_TARGET_DECIMAL128:       Data Output.        (line  147)
* REAL_VALUE_TO_TARGET_DECIMAL32:        Data Output.        (line  145)
* REAL_VALUE_TO_TARGET_DECIMAL64:        Data Output.        (line  146)
* REAL_VALUE_TO_TARGET_DOUBLE:           Data Output.        (line  143)
* REAL_VALUE_TO_TARGET_LONG_DOUBLE:      Data Output.        (line  144)
* REAL_VALUE_TO_TARGET_SINGLE:           Data Output.        (line  142)
* REAL_VALUE_TYPE:                       Floating Point.     (line   25)
* REAL_VALUE_UNSIGNED_FIX:               Floating Point.     (line   34)
* recognizing insns:                     RTL Template.       (line    6)
* recog_data.operand:                    Instruction Output. (line   54)
* RECORD_TYPE:                           Types.              (line    6)
* RECORD_TYPE <1>:                       Classes.            (line    6)
* redirect_edge_and_branch:              Profile information.
                                                             (line   71)
* redirect_edge_and_branch, redirect_jump: Maintaining the CFG.
                                                             (line   90)
* reduc_plus_scal_M instruction pattern: Standard Names.     (line  390)
* reduc_smax_scal_M instruction pattern: Standard Names.     (line  380)
* reduc_smin_scal_M instruction pattern: Standard Names.     (line  380)
* reduc_umax_scal_M instruction pattern: Standard Names.     (line  385)
* reduc_umin_scal_M instruction pattern: Standard Names.     (line  385)
* reference:                             Types.              (line    6)
* REFERENCE_TYPE:                        Types.              (line    6)
* reg:                                   Regs and Memory.    (line    9)
* reg and /f:                            Flags.              (line   94)
* reg and /i:                            Flags.              (line   89)
* reg and /v:                            Flags.              (line   98)
* reg, RTL sharing:                      Sharing.            (line   17)
* register allocation order:             Allocation Order.   (line    6)
* register class definitions:            Register Classes.   (line    6)
* register class preference constraints: Class Preferences.  (line    6)
* register pairs:                        Values in Registers.
                                                             (line   69)
* Register Transfer Language (RTL):      RTL.                (line    6)
* register usage:                        Registers.          (line    6)
* registers arguments:                   Register Arguments. (line    6)
* registers in constraints:              Simple Constraints. (line   64)
* REGISTER_MOVE_COST:                    Costs.              (line    9)
* REGISTER_NAMES:                        Instruction Output. (line    8)
* register_operand:                      Machine-Independent Predicates.
                                                             (line   29)
* REGISTER_PREFIX:                       Instruction Output. (line  150)
* REGISTER_TARGET_PRAGMAS:               Misc.               (line  387)
* REGMODE_NATURAL_SIZE:                  Values in Registers.
                                                             (line   49)
* REGNO_MODE_CODE_OK_FOR_BASE_P:         Register Classes.   (line  172)
* REGNO_MODE_OK_FOR_BASE_P:              Register Classes.   (line  150)
* REGNO_MODE_OK_FOR_REG_BASE_P:          Register Classes.   (line  160)
* REGNO_OK_FOR_BASE_P:                   Register Classes.   (line  146)
* REGNO_OK_FOR_INDEX_P:                  Register Classes.   (line  186)
* REGNO_REG_CLASS:                       Register Classes.   (line  105)
* regs_ever_live:                        Function Entry.     (line   21)
* regular expressions:                   Processor pipeline description.
                                                             (line    6)
* regular expressions <1>:               Processor pipeline description.
                                                             (line  105)
* REG_ALLOC_ORDER:                       Allocation Order.   (line    8)
* REG_BR_PRED:                           Insns.              (line  526)
* REG_BR_PROB:                           Insns.              (line  519)
* REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information.
                                                             (line   82)
* REG_BR_PROB_BASE, EDGE_FREQUENCY:      Profile information.
                                                             (line   52)
* REG_CC_SETTER:                         Insns.              (line  491)
* REG_CC_USER:                           Insns.              (line  491)
* reg_class_contents:                    Register Basics.    (line   59)
* REG_CLASS_CONTENTS:                    Register Classes.   (line   91)
* reg_class_for_constraint:              C Constraint Interface.
                                                             (line   48)
* REG_CLASS_NAMES:                       Register Classes.   (line   86)
* REG_CROSSING_JUMP:                     Insns.              (line  405)
* REG_DEAD:                              Insns.              (line  357)
* REG_DEAD, REG_UNUSED:                  Liveness information.
                                                             (line   32)
* REG_DEP_ANTI:                          Insns.              (line  513)
* REG_DEP_OUTPUT:                        Insns.              (line  509)
* REG_DEP_TRUE:                          Insns.              (line  506)
* REG_EH_REGION, EDGE_ABNORMAL_CALL:     Edges.              (line  109)
* REG_EQUAL:                             Insns.              (line  420)
* REG_EQUIV:                             Insns.              (line  420)
* REG_EXPR:                              Special Accessors.  (line   58)
* REG_FRAME_RELATED_EXPR:                Insns.              (line  532)
* REG_FUNCTION_VALUE_P:                  Flags.              (line   89)
* REG_INC:                               Insns.              (line  373)
* reg_label and /v:                      Flags.              (line   65)
* REG_LABEL_OPERAND:                     Insns.              (line  387)
* REG_LABEL_TARGET:                      Insns.              (line  396)
* reg_names:                             Register Basics.    (line   59)
* reg_names <1>:                         Instruction Output. (line  107)
* REG_NONNEG:                            Insns.              (line  379)
* REG_NOTES:                             Insns.              (line  321)
* REG_NOTE_KIND:                         Insns.              (line  346)
* REG_OFFSET:                            Special Accessors.  (line   62)
* REG_OK_STRICT:                         Addressing Modes.   (line   99)
* REG_PARM_STACK_SPACE:                  Stack Arguments.    (line   58)
* REG_PARM_STACK_SPACE, and TARGET_FUNCTION_ARG: Register Arguments.
                                                             (line   56)
* REG_POINTER:                           Flags.              (line   94)
* REG_SETJMP:                            Insns.              (line  414)
* REG_UNUSED:                            Insns.              (line  366)
* REG_USERVAR_P:                         Flags.              (line   98)
* REG_VALUE_IN_UNWIND_CONTEXT:           Frame Registers.    (line  158)
* REG_WORDS_BIG_ENDIAN:                  Storage Layout.     (line   35)
* relative costs:                        Costs.              (line    6)
* RELATIVE_PREFIX_NOT_LINKDIR:           Driver.             (line  266)
* reloading:                             RTL passes.         (line  170)
* reload_completed:                      Standard Names.     (line 1416)
* reload_in instruction pattern:         Standard Names.     (line   98)
* reload_in_progress:                    Standard Names.     (line   57)
* reload_out instruction pattern:        Standard Names.     (line   98)
* remainder:                             Arithmetic.         (line  136)
* remainderM3 instruction pattern:       Standard Names.     (line  639)
* reorder:                               GTY Options.        (line  173)
* representation of RTL:                 RTL.                (line    6)
* reservation delays:                    Processor pipeline description.
                                                             (line    6)
* restore_stack_block instruction pattern: Standard Names.   (line 1542)
* restore_stack_function instruction pattern: Standard Names.
                                                             (line 1542)
* restore_stack_nonlocal instruction pattern: Standard Names.
                                                             (line 1542)
* rest_of_decl_compilation:              Parsing pass.       (line   51)
* rest_of_type_compilation:              Parsing pass.       (line   51)
* RESULT_DECL:                           Declarations.       (line    6)
* return:                                Side Effects.       (line   72)
* return instruction pattern:            Standard Names.     (line 1390)
* return values in registers:            Scalar Return.      (line    6)
* returning aggregate values:            Aggregate Return.   (line    6)
* returning structures and unions:       Interface.          (line   10)
* RETURN_ADDRESS_POINTER_REGNUM:         Frame Registers.    (line   64)
* RETURN_ADDR_IN_PREVIOUS_FRAME:         Frame Layout.       (line  129)
* RETURN_ADDR_OFFSET:                    Exception Handling. (line   59)
* RETURN_ADDR_RTX:                       Frame Layout.       (line  118)
* RETURN_EXPR:                           Statements for C++. (line    6)
* RETURN_STMT:                           Statements for C++. (line    6)
* return_val:                            Flags.              (line  274)
* return_val, in call_insn:              Flags.              (line   24)
* return_val, in reg:                    Flags.              (line   89)
* return_val, in symbol_ref:             Flags.              (line  202)
* reverse probability:                   Profile information.
                                                             (line   66)
* REVERSE_CONDITION:                     MODE_CC Condition Codes.
                                                             (line   92)
* REVERSIBLE_CC_MODE:                    MODE_CC Condition Codes.
                                                             (line   77)
* right rotate:                          Arithmetic.         (line  195)
* right shift:                           Arithmetic.         (line  190)
* rintM2 instruction pattern:            Standard Names.     (line  837)
* RISC:                                  Processor pipeline description.
                                                             (line    6)
* RISC <1>:                              Processor pipeline description.
                                                             (line  223)
* roots, marking:                        GGC Roots.          (line    6)
* rotate:                                Arithmetic.         (line  195)
* rotate <1>:                            Arithmetic.         (line  195)
* rotatert:                              Arithmetic.         (line  195)
* rotlM3 instruction pattern:            Standard Names.     (line  591)
* rotrM3 instruction pattern:            Standard Names.     (line  591)
* roundM2 instruction pattern:           Standard Names.     (line  814)
* ROUND_DIV_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* ROUND_MOD_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* ROUND_TYPE_ALIGN:                      Storage Layout.     (line  427)
* RSHIFT_EXPR:                           Unary and Binary Expressions.
                                                             (line    6)
* rsqrtM2 instruction pattern:           Standard Names.     (line  619)
* RTL addition:                          Arithmetic.         (line   14)
* RTL addition with signed saturation:   Arithmetic.         (line   14)
* RTL addition with unsigned saturation: Arithmetic.         (line   14)
* RTL classes:                           RTL Classes.        (line    6)
* RTL comparison:                        Arithmetic.         (line   46)
* RTL comparison operations:             Comparisons.        (line    6)
* RTL constant expression types:         Constants.          (line    6)
* RTL constants:                         Constants.          (line    6)
* RTL declarations:                      RTL Declarations.   (line    6)
* RTL difference:                        Arithmetic.         (line   38)
* RTL expression:                        RTL Objects.        (line    6)
* RTL expressions for arithmetic:        Arithmetic.         (line    6)
* RTL format:                            RTL Classes.        (line   72)
* RTL format characters:                 RTL Classes.        (line   77)
* RTL function-call insns:               Calls.              (line    6)
* RTL insn template:                     RTL Template.       (line    6)
* RTL integers:                          RTL Objects.        (line    6)
* RTL memory expressions:                Regs and Memory.    (line    6)
* RTL object types:                      RTL Objects.        (line    6)
* RTL postdecrement:                     Incdec.             (line    6)
* RTL postincrement:                     Incdec.             (line    6)
* RTL predecrement:                      Incdec.             (line    6)
* RTL preincrement:                      Incdec.             (line    6)
* RTL register expressions:              Regs and Memory.    (line    6)
* RTL representation:                    RTL.                (line    6)
* RTL side effect expressions:           Side Effects.       (line    6)
* RTL strings:                           RTL Objects.        (line    6)
* RTL structure sharing assumptions:     Sharing.            (line    6)
* RTL subtraction:                       Arithmetic.         (line   38)
* RTL subtraction with signed saturation: Arithmetic.        (line   38)
* RTL subtraction with unsigned saturation: Arithmetic.      (line   38)
* RTL sum:                               Arithmetic.         (line   14)
* RTL vectors:                           RTL Objects.        (line    6)
* RTL_CONST_CALL_P:                      Flags.              (line   19)
* RTL_CONST_OR_PURE_CALL_P:              Flags.              (line   29)
* RTL_LOOPING_CONST_OR_PURE_CALL_P:      Flags.              (line   33)
* RTL_PURE_CALL_P:                       Flags.              (line   24)
* RTX (See RTL):                         RTL Objects.        (line    6)
* RTX codes, classes of:                 RTL Classes.        (line    6)
* RTX_FRAME_RELATED_P:                   Flags.              (line  107)
* run-time conventions:                  Interface.          (line    6)
* run-time target specification:         Run-time Target.    (line    6)
* s in constraint:                       Simple Constraints. (line  100)
* SAD_EXPR:                              Vectors.            (line    6)
* same_type_p:                           Types.              (line   86)
* SAmode:                                Machine Modes.      (line  150)
* satfractMN2 instruction pattern:       Standard Names.     (line 1141)
* satfractunsMN2 instruction pattern:    Standard Names.     (line 1154)
* satisfies_constraint_M:                C Constraint Interface.
                                                             (line   36)
* sat_fract:                             Conversions.        (line   90)
* SAVE_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* save_stack_block instruction pattern:  Standard Names.     (line 1542)
* save_stack_function instruction pattern: Standard Names.   (line 1542)
* save_stack_nonlocal instruction pattern: Standard Names.   (line 1542)
* SBSS_SECTION_ASM_OP:                   Sections.           (line   75)
* Scalar evolutions:                     Scalar evolutions.  (line    6)
* scalars, returned as values:           Scalar Return.      (line    6)
* scalbM3 instruction pattern:           Standard Names.     (line  646)
* SCHED_GROUP_P:                         Flags.              (line  148)
* SCmode:                                Machine Modes.      (line  199)
* scratch:                               Regs and Memory.    (line  294)
* scratch operands:                      Regs and Memory.    (line  294)
* scratch, RTL sharing:                  Sharing.            (line   35)
* scratch_operand:                       Machine-Independent Predicates.
                                                             (line   49)
* SDATA_SECTION_ASM_OP:                  Sections.           (line   57)
* SDB_ALLOW_FORWARD_REFERENCES:          SDB and DWARF.      (line  132)
* SDB_ALLOW_UNKNOWN_REFERENCES:          SDB and DWARF.      (line  127)
* SDB_DEBUGGING_INFO:                    SDB and DWARF.      (line    8)
* SDB_DELIM:                             SDB and DWARF.      (line  120)
* SDB_OUTPUT_SOURCE_LINE:                SDB and DWARF.      (line  137)
* SDmode:                                Machine Modes.      (line   88)
* sdot_prodM instruction pattern:        Standard Names.     (line  395)
* search options:                        Including Patterns. (line   47)
* SECONDARY_INPUT_RELOAD_CLASS:          Register Classes.   (line  391)
* SECONDARY_MEMORY_NEEDED:               Register Classes.   (line  447)
* SECONDARY_MEMORY_NEEDED_MODE:          Register Classes.   (line  466)
* SECONDARY_MEMORY_NEEDED_RTX:           Register Classes.   (line  457)
* SECONDARY_OUTPUT_RELOAD_CLASS:         Register Classes.   (line  392)
* SECONDARY_RELOAD_CLASS:                Register Classes.   (line  390)
* SELECT_CC_MODE:                        MODE_CC Condition Codes.
                                                             (line    6)
* sequence:                              Side Effects.       (line  259)
* Sequence iterators:                    Sequence iterators. (line    6)
* set:                                   Side Effects.       (line   15)
* set and /f:                            Flags.              (line  107)
* setmemM instruction pattern:           Standard Names.     (line 1005)
* SETUP_FRAME_ADDRESSES:                 Frame Layout.       (line   96)
* SET_ASM_OP:                            Label Output.       (line  451)
* SET_ASM_OP <1>:                        Label Output.       (line  462)
* set_attr:                              Tagging Insns.      (line   31)
* set_attr_alternative:                  Tagging Insns.      (line   49)
* set_bb_seq:                            GIMPLE sequences.   (line   75)
* SET_DEST:                              Side Effects.       (line   69)
* SET_IS_RETURN_P:                       Flags.              (line  157)
* SET_LABEL_KIND:                        Insns.              (line  146)
* set_optab_libfunc:                     Library Calls.      (line   15)
* SET_RATIO:                             Costs.              (line  216)
* SET_SRC:                               Side Effects.       (line   69)
* set_thread_pointerMODE instruction pattern: Standard Names.
                                                             (line 2073)
* SET_TYPE_STRUCTURAL_EQUALITY:          Types.              (line    6)
* SET_TYPE_STRUCTURAL_EQUALITY <1>:      Types.              (line   81)
* SFmode:                                Machine Modes.      (line   69)
* sharing of RTL components:             Sharing.            (line    6)
* shift:                                 Arithmetic.         (line  173)
* SHIFT_COUNT_TRUNCATED:                 Misc.               (line  112)
* SHLIB_SUFFIX:                          Macros for Initialization.
                                                             (line  133)
* SHORT_ACCUM_TYPE_SIZE:                 Type Layout.        (line   82)
* SHORT_FRACT_TYPE_SIZE:                 Type Layout.        (line   62)
* SHORT_IMMEDIATES_SIGN_EXTEND:          Misc.               (line   86)
* SHORT_TYPE_SIZE:                       Type Layout.        (line   15)
* sibcall_epilogue instruction pattern:  Standard Names.     (line 1749)
* sibling call:                          Edges.              (line  121)
* SIBLING_CALL_P:                        Flags.              (line  161)
* signed division:                       Arithmetic.         (line  116)
* signed division with signed saturation: Arithmetic.        (line  116)
* signed maximum:                        Arithmetic.         (line  141)
* signed minimum:                        Arithmetic.         (line  141)
* significandM2 instruction pattern:     Standard Names.     (line  778)
* sign_extend:                           Conversions.        (line   23)
* sign_extract:                          Bit-Fields.         (line    8)
* sign_extract, canonicalization of:     Insn Canonicalizations.
                                                             (line   87)
* SIG_ATOMIC_TYPE:                       Type Layout.        (line  214)
* SImode:                                Machine Modes.      (line   37)
* simple constraints:                    Simple Constraints. (line    6)
* simple_return:                         Side Effects.       (line   86)
* simple_return instruction pattern:     Standard Names.     (line 1405)
* sincosM3 instruction pattern:          Standard Names.     (line  674)
* sinM2 instruction pattern:             Standard Names.     (line  668)
* SIZETYPE:                              Type Layout.        (line  153)
* SIZE_ASM_OP:                           Label Output.       (line   33)
* SIZE_TYPE:                             Type Layout.        (line  137)
* skip:                                  GTY Options.        (line   76)
* SLOW_BYTE_ACCESS:                      Costs.              (line  117)
* SLOW_UNALIGNED_ACCESS:                 Costs.              (line  132)
* smax:                                  Arithmetic.         (line  141)
* smin:                                  Arithmetic.         (line  141)
* sms, swing, software pipelining:       RTL passes.         (line  123)
* smulM3_highpart instruction pattern:   Standard Names.     (line  504)
* soft float library:                    Soft float library routines.
                                                             (line    6)
* special:                               GTY Options.        (line  236)
* special predicates:                    Predicates.         (line   31)
* SPECS:                                 Target Fragment.    (line  191)
* speed of instructions:                 Costs.              (line    6)
* splitting instructions:                Insn Splitting.     (line    6)
* split_block:                           Maintaining the CFG.
                                                             (line   97)
* SQmode:                                Machine Modes.      (line  114)
* sqrt:                                  Arithmetic.         (line  206)
* sqrtM2 instruction pattern:            Standard Names.     (line  613)
* square root:                           Arithmetic.         (line  206)
* SSA:                                   SSA.                (line    6)
* ssaddM3 instruction pattern:           Standard Names.     (line  301)
* ssadM instruction pattern:             Standard Names.     (line  404)
* ssashlM3 instruction pattern:          Standard Names.     (line  579)
* SSA_NAME_DEF_STMT:                     SSA.                (line  184)
* SSA_NAME_VERSION:                      SSA.                (line  189)
* ssdivM3 instruction pattern:           Standard Names.     (line  301)
* ssmaddMN4 instruction pattern:         Standard Names.     (line  527)
* ssmsubMN4 instruction pattern:         Standard Names.     (line  551)
* ssmulM3 instruction pattern:           Standard Names.     (line  301)
* ssnegM2 instruction pattern:           Standard Names.     (line  603)
* sssubM3 instruction pattern:           Standard Names.     (line  301)
* ss_abs:                                Arithmetic.         (line  200)
* ss_ashift:                             Arithmetic.         (line  173)
* ss_div:                                Arithmetic.         (line  116)
* ss_minus:                              Arithmetic.         (line   38)
* ss_mult:                               Arithmetic.         (line   93)
* ss_neg:                                Arithmetic.         (line   82)
* ss_plus:                               Arithmetic.         (line   14)
* ss_truncate:                           Conversions.        (line   43)
* stack arguments:                       Stack Arguments.    (line    6)
* stack frame layout:                    Frame Layout.       (line    6)
* stack smashing protection:             Stack Smashing Protection.
                                                             (line    6)
* STACK_ALIGNMENT_NEEDED:                Frame Layout.       (line   43)
* STACK_BOUNDARY:                        Storage Layout.     (line  139)
* STACK_CHECK_BUILTIN:                   Stack Checking.     (line   31)
* STACK_CHECK_FIXED_FRAME_SIZE:          Stack Checking.     (line   83)
* STACK_CHECK_MAX_FRAME_SIZE:            Stack Checking.     (line   74)
* STACK_CHECK_MAX_VAR_SIZE:              Stack Checking.     (line   90)
* STACK_CHECK_MOVING_SP:                 Stack Checking.     (line   53)
* STACK_CHECK_PROBE_INTERVAL_EXP:        Stack Checking.     (line   45)
* STACK_CHECK_PROTECT:                   Stack Checking.     (line   62)
* STACK_CHECK_STATIC_BUILTIN:            Stack Checking.     (line   38)
* STACK_DYNAMIC_OFFSET:                  Frame Layout.       (line   69)
* STACK_DYNAMIC_OFFSET and virtual registers: Regs and Memory.
                                                             (line   83)
* STACK_GROWS_DOWNWARD:                  Frame Layout.       (line    8)
* STACK_PARMS_IN_REG_PARM_AREA:          Stack Arguments.    (line   89)
* STACK_POINTER_OFFSET:                  Frame Layout.       (line   53)
* STACK_POINTER_OFFSET and virtual registers: Regs and Memory.
                                                             (line   93)
* STACK_POINTER_REGNUM:                  Frame Registers.    (line    8)
* STACK_POINTER_REGNUM and virtual registers: Regs and Memory.
                                                             (line   83)
* stack_pointer_rtx:                     Frame Registers.    (line  104)
* stack_protect_set instruction pattern: Standard Names.     (line 2083)
* stack_protect_test instruction pattern: Standard Names.    (line 2093)
* STACK_PUSH_CODE:                       Frame Layout.       (line   12)
* STACK_REGS:                            Stack Registers.    (line   19)
* STACK_REG_COVER_CLASS:                 Stack Registers.    (line   22)
* STACK_SAVEAREA_MODE:                   Storage Layout.     (line  443)
* STACK_SIZE_MODE:                       Storage Layout.     (line  454)
* STACK_SLOT_ALIGNMENT:                  Storage Layout.     (line  275)
* standard pattern names:                Standard Names.     (line    6)
* STANDARD_STARTFILE_PREFIX:             Driver.             (line  278)
* STANDARD_STARTFILE_PREFIX_1:           Driver.             (line  285)
* STANDARD_STARTFILE_PREFIX_2:           Driver.             (line  292)
* STARTFILE_SPEC:                        Driver.             (line  147)
* STARTING_FRAME_OFFSET:                 Frame Layout.       (line   34)
* STARTING_FRAME_OFFSET and virtual registers: Regs and Memory.
                                                             (line   74)
* Statement and operand traversals:      Statement and operand traversals.
                                                             (line    6)
* Statement Sequences:                   Statement Sequences.
                                                             (line    6)
* Statements:                            Statements.         (line    6)
* statements:                            Function Properties.
                                                             (line    6)
* statements <1>:                        Statements for C++. (line    6)
* Static profile estimation:             Profile information.
                                                             (line   24)
* static single assignment:              SSA.                (line    6)
* STATIC_CHAIN_INCOMING_REGNUM:          Frame Registers.    (line   77)
* STATIC_CHAIN_REGNUM:                   Frame Registers.    (line   76)
* stdarg.h and register arguments:       Register Arguments. (line   51)
* STDC_0_IN_SYSTEM_HEADERS:              Misc.               (line  350)
* STMT_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* STMT_IS_FULL_EXPR_P:                   Statements for C++. (line   22)
* storage layout:                        Storage Layout.     (line    6)
* STORE_FLAG_VALUE:                      Misc.               (line  201)
* store_multiple instruction pattern:    Standard Names.     (line  159)
* strcpy:                                Storage Layout.     (line  228)
* STRICT_ALIGNMENT:                      Storage Layout.     (line  325)
* strict_low_part:                       RTL Declarations.   (line    9)
* strict_memory_address_p:               Addressing Modes.   (line  186)
* STRING_CST:                            Constant expressions.
                                                             (line    6)
* STRING_POOL_ADDRESS_P:                 Flags.              (line  165)
* strlenM instruction pattern:           Standard Names.     (line 1076)
* structure value address:               Aggregate Return.   (line    6)
* structures, returning:                 Interface.          (line   10)
* STRUCTURE_SIZE_BOUNDARY:               Storage Layout.     (line  317)
* subM3 instruction pattern:             Standard Names.     (line  301)
* SUBOBJECT:                             Statements for C++. (line    6)
* SUBOBJECT_CLEANUP:                     Statements for C++. (line    6)
* subreg:                                Regs and Memory.    (line   97)
* subreg and /s:                         Flags.              (line  187)
* subreg and /u:                         Flags.              (line  180)
* subreg and /u and /v:                  Flags.              (line  170)
* subreg, in strict_low_part:            RTL Declarations.   (line    9)
* SUBREG_BYTE:                           Regs and Memory.    (line  285)
* SUBREG_PROMOTED_UNSIGNED_P:            Flags.              (line  170)
* SUBREG_PROMOTED_UNSIGNED_SET:          Flags.              (line  180)
* SUBREG_PROMOTED_VAR_P:                 Flags.              (line  187)
* SUBREG_REG:                            Regs and Memory.    (line  285)
* subst iterators in .md files:          Subst Iterators.    (line    6)
* subvM4 instruction pattern:            Standard Names.     (line  317)
* SUCCESS_EXIT_CODE:                     Host Misc.          (line   12)
* SUPPORTS_INIT_PRIORITY:                Macros for Initialization.
                                                             (line   57)
* SUPPORTS_ONE_ONLY:                     Label Output.       (line  290)
* SUPPORTS_WEAK:                         Label Output.       (line  264)
* SWITCHABLE_TARGET:                     Run-time Target.    (line  164)
* SWITCH_BODY:                           Statements for C++. (line    6)
* SWITCH_COND:                           Statements for C++. (line    6)
* SWITCH_STMT:                           Statements for C++. (line    6)
* symbolic label:                        Sharing.            (line   20)
* SYMBOL_FLAG_ANCHOR:                    Special Accessors.  (line  117)
* SYMBOL_FLAG_EXTERNAL:                  Special Accessors.  (line   99)
* SYMBOL_FLAG_FUNCTION:                  Special Accessors.  (line   92)
* SYMBOL_FLAG_HAS_BLOCK_INFO:            Special Accessors.  (line  113)
* SYMBOL_FLAG_LOCAL:                     Special Accessors.  (line   95)
* SYMBOL_FLAG_SMALL:                     Special Accessors.  (line  104)
* SYMBOL_FLAG_TLS_SHIFT:                 Special Accessors.  (line  108)
* symbol_ref:                            Constants.          (line  117)
* symbol_ref and /f:                     Flags.              (line  165)
* symbol_ref and /i:                     Flags.              (line  202)
* symbol_ref and /u:                     Flags.              (line   10)
* symbol_ref and /v:                     Flags.              (line  206)
* symbol_ref, RTL sharing:               Sharing.            (line   20)
* SYMBOL_REF_ANCHOR_P:                   Special Accessors.  (line  117)
* SYMBOL_REF_BLOCK:                      Special Accessors.  (line  130)
* SYMBOL_REF_BLOCK_OFFSET:               Special Accessors.  (line  135)
* SYMBOL_REF_CONSTANT:                   Special Accessors.  (line   78)
* SYMBOL_REF_DATA:                       Special Accessors.  (line   82)
* SYMBOL_REF_DECL:                       Special Accessors.  (line   67)
* SYMBOL_REF_EXTERNAL_P:                 Special Accessors.  (line   99)
* SYMBOL_REF_FLAG:                       Flags.              (line  206)
* SYMBOL_REF_FLAG, in TARGET_ENCODE_SECTION_INFO: Sections.  (line  277)
* SYMBOL_REF_FLAGS:                      Special Accessors.  (line   86)
* SYMBOL_REF_FUNCTION_P:                 Special Accessors.  (line   92)
* SYMBOL_REF_HAS_BLOCK_INFO_P:           Special Accessors.  (line  113)
* SYMBOL_REF_LOCAL_P:                    Special Accessors.  (line   95)
* SYMBOL_REF_SMALL_P:                    Special Accessors.  (line  104)
* SYMBOL_REF_TLS_MODEL:                  Special Accessors.  (line  108)
* SYMBOL_REF_USED:                       Flags.              (line  197)
* SYMBOL_REF_WEAK:                       Flags.              (line  202)
* sync_addMODE instruction pattern:      Standard Names.     (line 1848)
* sync_andMODE instruction pattern:      Standard Names.     (line 1848)
* sync_compare_and_swapMODE instruction pattern: Standard Names.
                                                             (line 1808)
* sync_iorMODE instruction pattern:      Standard Names.     (line 1848)
* sync_lock_releaseMODE instruction pattern: Standard Names. (line 1913)
* sync_lock_test_and_setMODE instruction pattern: Standard Names.
                                                             (line 1887)
* sync_nandMODE instruction pattern:     Standard Names.     (line 1848)
* sync_new_addMODE instruction pattern:  Standard Names.     (line 1880)
* sync_new_andMODE instruction pattern:  Standard Names.     (line 1880)
* sync_new_iorMODE instruction pattern:  Standard Names.     (line 1880)
* sync_new_nandMODE instruction pattern: Standard Names.     (line 1880)
* sync_new_subMODE instruction pattern:  Standard Names.     (line 1880)
* sync_new_xorMODE instruction pattern:  Standard Names.     (line 1880)
* sync_old_addMODE instruction pattern:  Standard Names.     (line 1863)
* sync_old_andMODE instruction pattern:  Standard Names.     (line 1863)
* sync_old_iorMODE instruction pattern:  Standard Names.     (line 1863)
* sync_old_nandMODE instruction pattern: Standard Names.     (line 1863)
* sync_old_subMODE instruction pattern:  Standard Names.     (line 1863)
* sync_old_xorMODE instruction pattern:  Standard Names.     (line 1863)
* sync_subMODE instruction pattern:      Standard Names.     (line 1848)
* sync_xorMODE instruction pattern:      Standard Names.     (line 1848)
* SYSROOT_HEADERS_SUFFIX_SPEC:           Driver.             (line  176)
* SYSROOT_SUFFIX_SPEC:                   Driver.             (line  171)
* t-TARGET:                              Target Fragment.    (line    6)
* table jump:                            Basic Blocks.       (line   67)
* tablejump instruction pattern:         Standard Names.     (line 1478)
* tag:                                   GTY Options.        (line   88)
* tagging insns:                         Tagging Insns.      (line    6)
* tail calls:                            Tail Calls.         (line    6)
* TAmode:                                Machine Modes.      (line  158)
* tanM2 instruction pattern:             Standard Names.     (line  685)
* target attributes:                     Target Attributes.  (line    6)
* target description macros:             Target Macros.      (line    6)
* target functions:                      Target Structure.   (line    6)
* target hooks:                          Target Structure.   (line    6)
* target makefile fragment:              Target Fragment.    (line    6)
* target specifications:                 Run-time Target.    (line    6)
* targetm:                               Target Structure.   (line    6)
* targets, makefile:                     Makefile.           (line    6)
* TARGET_ABSOLUTE_BIGGEST_ALIGNMENT:     Storage Layout.     (line  168)
* TARGET_ADDRESS_COST:                   Costs.              (line  323)
* TARGET_ADDR_SPACE_ADDRESS_MODE:        Named Address Spaces.
                                                             (line   42)
* TARGET_ADDR_SPACE_CONVERT:             Named Address Spaces.
                                                             (line   89)
* TARGET_ADDR_SPACE_DEBUG:               Named Address Spaces.
                                                             (line   99)
* TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces.
                                                             (line   59)
* TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS:  Named Address Spaces.
                                                             (line   67)
* TARGET_ADDR_SPACE_POINTER_MODE:        Named Address Spaces.
                                                             (line   36)
* TARGET_ADDR_SPACE_SUBSET_P:            Named Address Spaces.
                                                             (line   74)
* TARGET_ADDR_SPACE_VALID_POINTER_MODE:  Named Address Spaces.
                                                             (line   48)
* TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID:  Named Address Spaces.
                                                             (line   83)
* TARGET_ALIGN_ANON_BITFIELD:            Storage Layout.     (line  402)
* TARGET_ALLOCATE_INITIAL_VALUE:         Misc.               (line  810)
* TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS:  Misc.               (line 1107)
* TARGET_ALWAYS_STRIP_DOTDOT:            Driver.             (line  250)
* TARGET_ARG_PARTIAL_BYTES:              Register Arguments. (line   95)
* TARGET_ARM_EABI_UNWINDER:              Exception Region Output.
                                                             (line  134)
* TARGET_ARRAY_MODE_SUPPORTED_P:         Register Arguments. (line  345)
* TARGET_ASAN_SHADOW_OFFSET:             Misc.               (line 1135)
* TARGET_ASM_ALIGNED_DI_OP:              Data Output.        (line    9)
* TARGET_ASM_ALIGNED_HI_OP:              Data Output.        (line    7)
* TARGET_ASM_ALIGNED_SI_OP:              Data Output.        (line    8)
* TARGET_ASM_ALIGNED_TI_OP:              Data Output.        (line   10)
* TARGET_ASM_ASSEMBLE_UNDEFINED_DECL:    Label Output.       (line  231)
* TARGET_ASM_ASSEMBLE_VISIBILITY:        Label Output.       (line  301)
* TARGET_ASM_BYTE_OP:                    Data Output.        (line    6)
* TARGET_ASM_CAN_OUTPUT_MI_THUNK:        Function Entry.     (line  202)
* TARGET_ASM_CLOSE_PAREN:                Data Output.        (line  133)
* TARGET_ASM_CODE_END:                   File Framework.     (line   57)
* TARGET_ASM_CONSTRUCTOR:                Macros for Initialization.
                                                             (line   68)
* TARGET_ASM_DECLARE_CONSTANT_NAME:      Label Output.       (line  177)
* TARGET_ASM_DECL_END:                   Data Output.        (line   38)
* TARGET_ASM_DESTRUCTOR:                 Macros for Initialization.
                                                             (line   82)
* TARGET_ASM_EMIT_EXCEPT_PERSONALITY:    Dispatch Tables.    (line   80)
* TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL:    Dispatch Tables.    (line   73)
* TARGET_ASM_EMIT_UNWIND_LABEL:          Dispatch Tables.    (line   61)
* TARGET_ASM_EXTERNAL_LIBCALL:           Label Output.       (line  337)
* TARGET_ASM_FILE_END:                   File Framework.     (line   35)
* TARGET_ASM_FILE_START:                 File Framework.     (line    8)
* TARGET_ASM_FILE_START_APP_OFF:         File Framework.     (line   16)
* TARGET_ASM_FILE_START_FILE_DIRECTIVE:  File Framework.     (line   29)
* TARGET_ASM_FINAL_POSTSCAN_INSN:        Instruction Output. (line   82)
* TARGET_ASM_FUNCTION_BEGIN_EPILOGUE:    Function Entry.     (line   59)
* TARGET_ASM_FUNCTION_END_PROLOGUE:      Function Entry.     (line   53)
* TARGET_ASM_FUNCTION_EPILOGUE:          Function Entry.     (line   65)
* TARGET_ASM_FUNCTION_PROLOGUE:          Function Entry.     (line    9)
* TARGET_ASM_FUNCTION_RODATA_SECTION:    Sections.           (line  213)
* TARGET_ASM_FUNCTION_SECTION:           File Framework.     (line  121)
* TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS: File Framework.
                                                             (line  131)
* TARGET_ASM_GLOBALIZE_DECL_NAME:        Label Output.       (line  222)
* TARGET_ASM_GLOBALIZE_LABEL:            Label Output.       (line  213)
* TARGET_ASM_INIT_SECTIONS:              Sections.           (line  159)
* TARGET_ASM_INTEGER:                    Data Output.        (line   25)
* TARGET_ASM_INTERNAL_LABEL:             Label Output.       (line  380)
* TARGET_ASM_JUMP_ALIGN_MAX_SKIP:        Alignment Output.   (line   21)
* TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP: Alignment Output.
                                                             (line   34)
* TARGET_ASM_LABEL_ALIGN_MAX_SKIP:       Alignment Output.   (line   68)
* TARGET_ASM_LOOP_ALIGN_MAX_SKIP:        Alignment Output.   (line   53)
* TARGET_ASM_LTO_END:                    File Framework.     (line   52)
* TARGET_ASM_LTO_START:                  File Framework.     (line   47)
* TARGET_ASM_MARK_DECL_PRESERVED:        Label Output.       (line  343)
* TARGET_ASM_MERGEABLE_RODATA_PREFIX:    Sections.           (line  221)
* TARGET_ASM_NAMED_SECTION:              File Framework.     (line  113)
* TARGET_ASM_OPEN_PAREN:                 Data Output.        (line  132)
* TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA:    Data Output.        (line   42)
* TARGET_ASM_OUTPUT_ANCHOR:              Anchored Addresses. (line   42)
* TARGET_ASM_OUTPUT_DWARF_DTPREL:        SDB and DWARF.      (line  108)
* TARGET_ASM_OUTPUT_IDENT:               File Framework.     (line  100)
* TARGET_ASM_OUTPUT_MI_THUNK:            Function Entry.     (line  160)
* TARGET_ASM_OUTPUT_SOURCE_FILENAME:     File Framework.     (line   91)
* TARGET_ASM_RECORD_GCC_SWITCHES:        File Framework.     (line  162)
* TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework.    (line  207)
* TARGET_ASM_RELOC_RW_MASK:              Sections.           (line  168)
* TARGET_ASM_SELECT_RTX_SECTION:         Sections.           (line  230)
* TARGET_ASM_SELECT_SECTION:             Sections.           (line  179)
* TARGET_ASM_TM_CLONE_TABLE_SECTION:     Sections.           (line  226)
* TARGET_ASM_TRAMPOLINE_TEMPLATE:        Trampolines.        (line   28)
* TARGET_ASM_TTYPE:                      Exception Region Output.
                                                             (line  128)
* TARGET_ASM_UNALIGNED_DI_OP:            Data Output.        (line   13)
* TARGET_ASM_UNALIGNED_HI_OP:            Data Output.        (line   11)
* TARGET_ASM_UNALIGNED_SI_OP:            Data Output.        (line   12)
* TARGET_ASM_UNALIGNED_TI_OP:            Data Output.        (line   14)
* TARGET_ASM_UNIQUE_SECTION:             Sections.           (line  201)
* TARGET_ASM_UNWIND_EMIT:                Dispatch Tables.    (line   87)
* TARGET_ASM_UNWIND_EMIT_BEFORE_INSN:    Dispatch Tables.    (line   93)
* TARGET_ATOMIC_ALIGN_FOR_MODE:          Misc.               (line 1154)
* TARGET_ATOMIC_ASSIGN_EXPAND_FENV:      Misc.               (line 1160)
* TARGET_ATOMIC_TEST_AND_SET_TRUEVAL:    Misc.               (line 1145)
* TARGET_ATTRIBUTE_TABLE:                Target Attributes.  (line   10)
* TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P:   Target Attributes.  (line   17)
* TARGET_BINDS_LOCAL_P:                  Sections.           (line  308)
* TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc.          (line  907)
* TARGET_BRANCH_TARGET_REGISTER_CLASS:   Misc.               (line  900)
* TARGET_BUILD_BUILTIN_VA_LIST:          Register Arguments. (line  285)
* TARGET_BUILTIN_CHKP_FUNCTION:          Misc.               (line  625)
* TARGET_BUILTIN_DECL:                   Misc.               (line  604)
* TARGET_BUILTIN_RECIPROCAL:             Addressing Modes.   (line  261)
* TARGET_BUILTIN_SETJMP_FRAME_VALUE:     Frame Layout.       (line  103)
* TARGET_CALLEE_COPIES:                  Register Arguments. (line  127)
* TARGET_CALL_ARGS:                      Varargs.            (line  123)
* TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS: Miscellaneous Register Hooks.
                                                             (line    6)
* TARGET_CANNOT_FORCE_CONST_MEM:         Addressing Modes.   (line  234)
* TARGET_CANNOT_MODIFY_JUMPS_P:          Misc.               (line  887)
* TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P:  Register Classes.   (line  597)
* TARGET_CANONICALIZE_COMPARISON:        MODE_CC Condition Codes.
                                                             (line   55)
* TARGET_CANONICAL_VA_LIST_TYPE:         Register Arguments. (line  306)
* TARGET_CAN_ELIMINATE:                  Elimination.        (line   73)
* TARGET_CAN_FOLLOW_JUMP:                Misc.               (line  796)
* TARGET_CAN_INLINE_P:                   Target Attributes.  (line  165)
* TARGET_CAN_USE_DOLOOP_P:               Misc.               (line  760)
* TARGET_CASE_VALUES_THRESHOLD:          Misc.               (line   46)
* TARGET_CC_MODES_COMPATIBLE:            MODE_CC Condition Codes.
                                                             (line  120)
* TARGET_CHECK_PCH_TARGET_FLAGS:         PCH Target.         (line   26)
* TARGET_CHECK_STRING_OBJECT_FORMAT_ARG: Run-time Target.    (line  119)
* TARGET_CHKP_BOUND_MODE:                Misc.               (line  697)
* TARGET_CHKP_BOUND_TYPE:                Misc.               (line  695)
* TARGET_CHKP_FUNCTION_VALUE_BOUNDS:     Varargs.            (line  182)
* TARGET_CHKP_INITIALIZE_BOUNDS:         Misc.               (line  703)
* TARGET_CHKP_MAKE_BOUNDS_CONSTANT:      Misc.               (line  699)
* TARGET_CLASS_LIKELY_SPILLED_P:         Register Classes.   (line  489)
* TARGET_CLASS_MAX_NREGS:                Register Classes.   (line  505)
* TARGET_COMMUTATIVE_P:                  Misc.               (line  803)
* TARGET_COMPARE_VERSION_PRIORITY:       Misc.               (line  737)
* TARGET_COMP_TYPE_ATTRIBUTES:           Target Attributes.  (line   25)
* TARGET_CONDITIONAL_REGISTER_USAGE:     Register Basics.    (line   59)
* TARGET_CONST_ANCHOR:                   Misc.               (line 1118)
* TARGET_CONST_NOT_OK_FOR_DEBUG_P:       Addressing Modes.   (line  230)
* TARGET_CONVERT_TO_TYPE:                Misc.               (line 1072)
* TARGET_CPU_CPP_BUILTINS:               Run-time Target.    (line    8)
* TARGET_CSTORE_MODE:                    Register Classes.   (line  620)
* TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI.            (line   86)
* TARGET_CXX_CDTOR_RETURNS_THIS:         C++ ABI.            (line   37)
* TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT:   C++ ABI.            (line   61)
* TARGET_CXX_COOKIE_HAS_SIZE:            C++ ABI.            (line   24)
* TARGET_CXX_DECL_MANGLING_CONTEXT:      C++ ABI.            (line   92)
* TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI.       (line   52)
* TARGET_CXX_GET_COOKIE_SIZE:            C++ ABI.            (line   17)
* TARGET_CXX_GUARD_MASK_BIT:             C++ ABI.            (line   11)
* TARGET_CXX_GUARD_TYPE:                 C++ ABI.            (line    6)
* TARGET_CXX_IMPLICIT_EXTERN_C:          Misc.               (line  373)
* TARGET_CXX_IMPORT_EXPORT_CLASS:        C++ ABI.            (line   28)
* TARGET_CXX_KEY_METHOD_MAY_BE_INLINE:   C++ ABI.            (line   42)
* TARGET_CXX_LIBRARY_RTTI_COMDAT:        C++ ABI.            (line   68)
* TARGET_CXX_USE_AEABI_ATEXIT:           C++ ABI.            (line   73)
* TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT:  C++ ABI.            (line   79)
* TARGET_C_PREINCLUDE:                   Misc.               (line  361)
* TARGET_DEBUG_UNWIND_INFO:              SDB and DWARF.      (line   36)
* TARGET_DECIMAL_FLOAT_SUPPORTED_P:      Storage Layout.     (line  507)
* TARGET_DECLSPEC:                       Target Attributes.  (line   72)
* TARGET_DEFAULT_PACK_STRUCT:            Misc.               (line  446)
* TARGET_DEFAULT_SHORT_ENUMS:            Type Layout.        (line  129)
* TARGET_DEFAULT_TARGET_FLAGS:           Run-time Target.    (line   55)
* TARGET_DEFERRED_OUTPUT_DEFS:           Label Output.       (line  465)
* TARGET_DELAY_SCHED2:                   SDB and DWARF.      (line   65)
* TARGET_DELAY_VARTRACK:                 SDB and DWARF.      (line   69)
* TARGET_DELEGITIMIZE_ADDRESS:           Addressing Modes.   (line  221)
* TARGET_DIFFERENT_ADDR_DISPLACEMENT_P:  Register Classes.   (line  590)
* TARGET_DLLIMPORT_DECL_ATTRIBUTES:      Target Attributes.  (line   55)
* TARGET_DWARF_CALLING_CONVENTION:       SDB and DWARF.      (line   16)
* TARGET_DWARF_FRAME_REG_MODE:           Exception Region Output.
                                                             (line  114)
* TARGET_DWARF_HANDLE_FRAME_UNSPEC:      Frame Layout.       (line  167)
* TARGET_DWARF_REGISTER_SPAN:            Exception Region Output.
                                                             (line  105)
* TARGET_EDOM:                           Library Calls.      (line   59)
* TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS:  Emulated TLS.       (line   67)
* TARGET_EMUTLS_GET_ADDRESS:             Emulated TLS.       (line   18)
* TARGET_EMUTLS_REGISTER_COMMON:         Emulated TLS.       (line   23)
* TARGET_EMUTLS_TMPL_PREFIX:             Emulated TLS.       (line   44)
* TARGET_EMUTLS_TMPL_SECTION:            Emulated TLS.       (line   35)
* TARGET_EMUTLS_VAR_ALIGN_FIXED:         Emulated TLS.       (line   62)
* TARGET_EMUTLS_VAR_FIELDS:              Emulated TLS.       (line   48)
* TARGET_EMUTLS_VAR_INIT:                Emulated TLS.       (line   55)
* TARGET_EMUTLS_VAR_PREFIX:              Emulated TLS.       (line   40)
* TARGET_EMUTLS_VAR_SECTION:             Emulated TLS.       (line   30)
* TARGET_ENCODE_SECTION_INFO:            Sections.           (line  251)
* TARGET_ENCODE_SECTION_INFO and address validation: Addressing Modes.
                                                             (line   82)
* TARGET_ENCODE_SECTION_INFO usage:      Instruction Output. (line  127)
* TARGET_END_CALL_ARGS:                  Varargs.            (line  137)
* TARGET_ENUM_VA_LIST_P:                 Register Arguments. (line  289)
* TARGET_EXCEPT_UNWIND_INFO:             Exception Region Output.
                                                             (line   46)
* TARGET_EXECUTABLE_SUFFIX:              Misc.               (line  861)
* TARGET_EXPAND_BUILTIN:                 Misc.               (line  614)
* TARGET_EXPAND_BUILTIN_SAVEREGS:        Varargs.            (line   64)
* TARGET_EXPAND_TO_RTL_HOOK:             Storage Layout.     (line  513)
* TARGET_EXPR:                           Unary and Binary Expressions.
                                                             (line    6)
* TARGET_EXTRA_INCLUDES:                 Misc.               (line  973)
* TARGET_EXTRA_LIVE_ON_ENTRY:            Tail Calls.         (line   20)
* TARGET_EXTRA_PRE_INCLUDES:             Misc.               (line  980)
* TARGET_FIXED_CONDITION_CODE_REGS:      MODE_CC Condition Codes.
                                                             (line  105)
* TARGET_FIXED_POINT_SUPPORTED_P:        Storage Layout.     (line  510)
* target_flags:                          Run-time Target.    (line   51)
* TARGET_FLAGS_REGNUM:                   MODE_CC Condition Codes.
                                                             (line  133)
* TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P: Run-time Target.
                                                             (line  183)
* TARGET_FLT_EVAL_METHOD:                Type Layout.        (line  110)
* TARGET_FN_ABI_VA_LIST:                 Register Arguments. (line  301)
* TARGET_FOLD_BUILTIN:                   Misc.               (line  720)
* TARGET_FORCE_AT_COMP_DIR:              SDB and DWARF.      (line   60)
* TARGET_FORMAT_TYPES:                   Misc.               (line 1001)
* TARGET_FRAME_POINTER_REQUIRED:         Elimination.        (line    8)
* TARGET_FUNCTION_ARG:                   Register Arguments. (line   10)
* TARGET_FUNCTION_ARG_ADVANCE:           Register Arguments. (line  198)
* TARGET_FUNCTION_ARG_BOUNDARY:          Register Arguments. (line  252)
* TARGET_FUNCTION_ARG_ROUND_BOUNDARY:    Register Arguments. (line  258)
* TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes.  (line   93)
* TARGET_FUNCTION_INCOMING_ARG:          Register Arguments. (line   71)
* TARGET_FUNCTION_OK_FOR_SIBCALL:        Tail Calls.         (line    6)
* TARGET_FUNCTION_VALUE:                 Scalar Return.      (line    9)
* TARGET_FUNCTION_VALUE_REGNO_P:         Scalar Return.      (line   96)
* TARGET_GENERATE_VERSION_DISPATCHER_BODY: Misc.             (line  753)
* TARGET_GEN_CCMP_FIRST:                 Misc.               (line  927)
* TARGET_GEN_CCMP_NEXT:                  Misc.               (line  938)
* TARGET_GET_DRAP_RTX:                   Misc.               (line 1101)
* TARGET_GET_FUNCTION_VERSIONS_DISPATCHER: Misc.             (line  746)
* TARGET_GET_PCH_VALIDITY:               PCH Target.         (line    6)
* TARGET_GET_RAW_ARG_MODE:               Aggregate Return.   (line   81)
* TARGET_GET_RAW_RESULT_MODE:            Aggregate Return.   (line   76)
* TARGET_GIMPLE_FOLD_BUILTIN:            Misc.               (line  730)
* TARGET_GIMPLIFY_VA_ARG_EXPR:           Register Arguments. (line  311)
* TARGET_GOACC_DIM_LIMIT:                Addressing Modes.   (line  442)
* TARGET_GOACC_FORK_JOIN:                Addressing Modes.   (line  446)
* TARGET_GOACC_REDUCTION:                Addressing Modes.   (line  457)
* TARGET_GOACC_VALIDATE_DIMS:            Addressing Modes.   (line  429)
* TARGET_HANDLE_C_OPTION:                Run-time Target.    (line   73)
* TARGET_HANDLE_OPTION:                  Run-time Target.    (line   59)
* TARGET_HARD_REGNO_SCRATCH_OK:          Values in Registers.
                                                             (line  141)
* TARGET_HAS_IFUNC_P:                    Misc.               (line 1149)
* TARGET_HAS_NO_HW_DIVIDE:               Library Calls.      (line   52)
* TARGET_HAVE_CONDITIONAL_EXECUTION:     Misc.               (line  921)
* TARGET_HAVE_CTORS_DTORS:               Macros for Initialization.
                                                             (line   63)
* TARGET_HAVE_NAMED_SECTIONS:            File Framework.     (line  139)
* TARGET_HAVE_SRODATA_SECTION:           Sections.           (line  297)
* TARGET_HAVE_SWITCHABLE_BSS_SECTIONS:   File Framework.     (line  144)
* TARGET_HAVE_TLS:                       Sections.           (line  317)
* TARGET_INIT_BUILTINS:                  Misc.               (line  588)
* TARGET_INIT_DWARF_REG_SIZES_EXTRA:     Exception Region Output.
                                                             (line  120)
* TARGET_INIT_LIBFUNCS:                  Library Calls.      (line   15)
* TARGET_INIT_PIC_REG:                   Register Arguments. (line   91)
* TARGET_INSERT_ATTRIBUTES:              Target Attributes.  (line   80)
* TARGET_INSTANTIATE_DECLS:              Storage Layout.     (line  521)
* TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc.              (line 1025)
* TARGET_INVALID_BINARY_OP:              Misc.               (line 1044)
* TARGET_INVALID_CONVERSION:             Misc.               (line 1031)
* TARGET_INVALID_PARAMETER_TYPE:         Misc.               (line 1050)
* TARGET_INVALID_RETURN_TYPE:            Misc.               (line 1057)
* TARGET_INVALID_UNARY_OP:               Misc.               (line 1037)
* TARGET_INVALID_WITHIN_DOLOOP:          Misc.               (line  777)
* TARGET_IN_SMALL_DATA_P:                Sections.           (line  293)
* TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS: Register Classes.  (line  557)
* TARGET_KEEP_LEAF_WHEN_PROFILED:        Profiling.          (line   39)
* TARGET_LEGITIMATE_ADDRESS_P:           Addressing Modes.   (line   48)
* TARGET_LEGITIMATE_COMBINED_INSN:       Misc.               (line  791)
* TARGET_LEGITIMATE_CONSTANT_P:          Addressing Modes.   (line  213)
* TARGET_LEGITIMIZE_ADDRESS:             Addressing Modes.   (line  129)
* TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT: Register Classes.  (line  605)
* TARGET_LIBCALL_VALUE:                  Scalar Return.      (line   65)
* TARGET_LIBC_HAS_FUNCTION:              Library Calls.      (line   77)
* TARGET_LIBFUNC_GNU_PREFIX:             Library Calls.      (line   24)
* TARGET_LIBGCC_CMP_RETURN_MODE:         Storage Layout.     (line  463)
* TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P: Register Arguments.
                                                             (line  369)
* TARGET_LIBGCC_SDATA_SECTION:           Sections.           (line  131)
* TARGET_LIBGCC_SHIFT_COUNT_MODE:        Storage Layout.     (line  469)
* TARGET_LIB_INT_CMP_BIASED:             Library Calls.      (line   42)
* TARGET_LOAD_BOUNDS_FOR_ARG:            Varargs.            (line  153)
* TARGET_LOAD_RETURNED_BOUNDS:           Varargs.            (line  172)
* TARGET_LOOP_UNROLL_ADJUST:             Misc.               (line  954)
* TARGET_LRA_P:                          Register Classes.   (line  564)
* TARGET_MACHINE_DEPENDENT_REORG:        Misc.               (line  573)
* TARGET_MANGLE_ASSEMBLER_NAME:          Label Output.       (line  356)
* TARGET_MANGLE_DECL_ASSEMBLER_NAME:     Sections.           (line  241)
* TARGET_MANGLE_TYPE:                    Storage Layout.     (line  525)
* TARGET_MAX_ANCHOR_OFFSET:              Anchored Addresses. (line   38)
* TARGET_MD_ASM_ADJUST:                  Misc.               (line  491)
* TARGET_MEMBER_TYPE_FORCES_BLK:         Storage Layout.     (line  415)
* TARGET_MEMMODEL_CHECK:                 Misc.               (line 1140)
* TARGET_MEMORY_MOVE_COST:               Costs.              (line   79)
* TARGET_MEM_CONSTRAINT:                 Addressing Modes.   (line  107)
* TARGET_MEM_REF:                        Storage References. (line    6)
* TARGET_MERGE_DECL_ATTRIBUTES:          Target Attributes.  (line   45)
* TARGET_MERGE_TYPE_ATTRIBUTES:          Target Attributes.  (line   37)
* TARGET_MIN_ANCHOR_OFFSET:              Anchored Addresses. (line   32)
* TARGET_MIN_DIVISIONS_FOR_RECIP_MUL:    Misc.               (line   90)
* TARGET_MODE_AFTER:                     Mode Switching.     (line   57)
* TARGET_MODE_DEPENDENT_ADDRESS_P:       Addressing Modes.   (line  196)
* TARGET_MODE_EMIT:                      Mode Switching.     (line   42)
* TARGET_MODE_ENTRY:                     Mode Switching.     (line   64)
* TARGET_MODE_EXIT:                      Mode Switching.     (line   71)
* TARGET_MODE_NEEDED:                    Mode Switching.     (line   50)
* TARGET_MODE_PRIORITY:                  Mode Switching.     (line   78)
* TARGET_MODE_REP_EXTENDED:              Misc.               (line  175)
* TARGET_MS_BITFIELD_LAYOUT_P:           Storage Layout.     (line  479)
* TARGET_MUST_PASS_IN_STACK:             Register Arguments. (line   64)
* TARGET_MUST_PASS_IN_STACK, and TARGET_FUNCTION_ARG: Register Arguments.
                                                             (line   56)
* TARGET_NARROW_VOLATILE_BITFIELD:       Storage Layout.     (line  408)
* TARGET_NO_REGISTER_ALLOCATION:         SDB and DWARF.      (line   73)
* TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P: Costs.             (line  359)
* TARGET_N_FORMAT_TYPES:                 Misc.               (line 1006)
* TARGET_OBJC_CONSTRUCT_STRING_OBJECT:   Run-time Target.    (line   88)
* TARGET_OBJC_DECLARE_CLASS_DEFINITION:  Run-time Target.    (line  109)
* TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE: Run-time Target.
                                                             (line  104)
* TARGET_OBJECT_SUFFIX:                  Misc.               (line  856)
* TARGET_OBJFMT_CPP_BUILTINS:            Run-time Target.    (line   45)
* TARGET_OFFLOAD_OPTIONS:                Misc.               (line 1183)
* TARGET_OMIT_STRUCT_RETURN_REG:         Scalar Return.      (line  117)
* TARGET_OPTAB_SUPPORTED_P:              Costs.              (line  278)
* TARGET_OPTF:                           Misc.               (line  988)
* TARGET_OPTION_DEFAULT_PARAMS:          Run-time Target.    (line  160)
* TARGET_OPTION_FUNCTION_VERSIONS:       Target Attributes.  (line  157)
* TARGET_OPTION_INIT_STRUCT:             Run-time Target.    (line  156)
* TARGET_OPTION_OPTIMIZATION_TABLE:      Run-time Target.    (line  142)
* TARGET_OPTION_OVERRIDE:                Target Attributes.  (line  144)
* TARGET_OPTION_POST_STREAM_IN:          Target Attributes.  (line  125)
* TARGET_OPTION_PRAGMA_PARSE:            Target Attributes.  (line  137)
* TARGET_OPTION_PRINT:                   Target Attributes.  (line  131)
* TARGET_OPTION_RESTORE:                 Target Attributes.  (line  119)
* TARGET_OPTION_SAVE:                    Target Attributes.  (line  112)
* TARGET_OPTION_VALID_ATTRIBUTE_P:       Target Attributes.  (line  100)
* TARGET_OS_CPP_BUILTINS:                Run-time Target.    (line   41)
* TARGET_OVERRIDES_FORMAT_ATTRIBUTES:    Misc.               (line 1010)
* TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc.            (line 1016)
* TARGET_OVERRIDES_FORMAT_INIT:          Misc.               (line 1020)
* TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE:  Run-time Target.    (line  126)
* TARGET_PASS_BY_REFERENCE:              Register Arguments. (line  115)
* TARGET_PCH_VALID_P:                    PCH Target.         (line   11)
* TARGET_POSIX_IO:                       Misc.               (line  517)
* TARGET_PREFERRED_OUTPUT_RELOAD_CLASS:  Register Classes.   (line  284)
* TARGET_PREFERRED_RELOAD_CLASS:         Register Classes.   (line  213)
* TARGET_PREFERRED_RENAME_CLASS:         Register Classes.   (line  201)
* TARGET_PREPARE_PCH_SAVE:               PCH Target.         (line   34)
* TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs.            (line  144)
* TARGET_PROFILE_BEFORE_PROLOGUE:        Sections.           (line  301)
* TARGET_PROMOTED_TYPE:                  Misc.               (line 1064)
* TARGET_PROMOTE_FUNCTION_MODE:          Storage Layout.     (line  109)
* TARGET_PROMOTE_PROTOTYPES:             Stack Arguments.    (line   10)
* TARGET_PTRMEMFUNC_VBIT_LOCATION:       Type Layout.        (line  256)
* TARGET_RECORD_OFFLOAD_SYMBOL:          Misc.               (line 1178)
* TARGET_REF_MAY_ALIAS_ERRNO:            Register Arguments. (line  322)
* TARGET_REGISTER_MOVE_COST:             Costs.              (line   31)
* TARGET_REGISTER_PRIORITY:              Register Classes.   (line  569)
* TARGET_REGISTER_USAGE_LEVELING_P:      Register Classes.   (line  580)
* TARGET_RELAYOUT_FUNCTION:              Target Attributes.  (line  172)
* TARGET_RESOLVE_OVERLOADED_BUILTIN:     Misc.               (line  709)
* TARGET_RETURN_IN_MEMORY:               Aggregate Return.   (line   15)
* TARGET_RETURN_IN_MSB:                  Scalar Return.      (line  124)
* TARGET_RETURN_POPS_ARGS:               Stack Arguments.    (line   98)
* TARGET_RTX_COSTS:                      Costs.              (line  292)
* TARGET_SCALAR_MODE_SUPPORTED_P:        Register Arguments. (line  329)
* TARGET_SCHED_ADJUST_COST:              Scheduling.         (line   35)
* TARGET_SCHED_ADJUST_PRIORITY:          Scheduling.         (line   50)
* TARGET_SCHED_ALLOC_SCHED_CONTEXT:      Scheduling.         (line  294)
* TARGET_SCHED_CLEAR_SCHED_CONTEXT:      Scheduling.         (line  309)
* TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling.     (line  101)
* TARGET_SCHED_DFA_NEW_CYCLE:            Scheduling.         (line  255)
* TARGET_SCHED_DFA_POST_ADVANCE_CYCLE:   Scheduling.         (line  172)
* TARGET_SCHED_DFA_POST_CYCLE_INSN:      Scheduling.         (line  156)
* TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE:    Scheduling.         (line  165)
* TARGET_SCHED_DFA_PRE_CYCLE_INSN:       Scheduling.         (line  144)
* TARGET_SCHED_DISPATCH:                 Scheduling.         (line  363)
* TARGET_SCHED_DISPATCH_DO:              Scheduling.         (line  368)
* TARGET_SCHED_EXPOSED_PIPELINE:         Scheduling.         (line  372)
* TARGET_SCHED_FINISH:                   Scheduling.         (line  122)
* TARGET_SCHED_FINISH_GLOBAL:            Scheduling.         (line  137)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK: Scheduling.  (line  235)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN: Scheduling.      (line  223)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling.
                                                             (line  179)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling.
                                                             (line  207)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END: Scheduling.        (line  240)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI: Scheduling.       (line  250)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT: Scheduling.       (line  245)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE: Scheduling.      (line  229)
* TARGET_SCHED_FREE_SCHED_CONTEXT:       Scheduling.         (line  313)
* TARGET_SCHED_FUSION_PRIORITY:          Scheduling.         (line  382)
* TARGET_SCHED_GEN_SPEC_CHECK:           Scheduling.         (line  335)
* TARGET_SCHED_H_I_D_EXTENDED:           Scheduling.         (line  289)
* TARGET_SCHED_INIT:                     Scheduling.         (line  111)
* TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling.         (line  161)
* TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN:  Scheduling.         (line  153)
* TARGET_SCHED_INIT_GLOBAL:              Scheduling.         (line  129)
* TARGET_SCHED_INIT_SCHED_CONTEXT:       Scheduling.         (line  298)
* TARGET_SCHED_ISSUE_RATE:               Scheduling.         (line   11)
* TARGET_SCHED_IS_COSTLY_DEPENDENCE:     Scheduling.         (line  267)
* TARGET_SCHED_MACRO_FUSION_P:           Scheduling.         (line   87)
* TARGET_SCHED_MACRO_FUSION_PAIR_P:      Scheduling.         (line   91)
* TARGET_SCHED_NEEDS_BLOCK_P:            Scheduling.         (line  328)
* TARGET_SCHED_REASSOCIATION_WIDTH:      Scheduling.         (line  377)
* TARGET_SCHED_REORDER:                  Scheduling.         (line   58)
* TARGET_SCHED_REORDER2:                 Scheduling.         (line   75)
* TARGET_SCHED_SET_SCHED_CONTEXT:        Scheduling.         (line  305)
* TARGET_SCHED_SET_SCHED_FLAGS:          Scheduling.         (line  347)
* TARGET_SCHED_SMS_RES_MII:              Scheduling.         (line  354)
* TARGET_SCHED_SPECULATE_INSN:           Scheduling.         (line  316)
* TARGET_SCHED_VARIABLE_ISSUE:           Scheduling.         (line   22)
* TARGET_SECONDARY_RELOAD:               Register Classes.   (line  312)
* TARGET_SECTION_TYPE_FLAGS:             File Framework.     (line  149)
* TARGET_SETUP_INCOMING_VARARGS:         Varargs.            (line   71)
* TARGET_SETUP_INCOMING_VARARG_BOUNDS:   Varargs.            (line  188)
* TARGET_SET_CURRENT_FUNCTION:           Misc.               (line  838)
* TARGET_SET_DEFAULT_TYPE_ATTRIBUTES:    Target Attributes.  (line   33)
* TARGET_SET_UP_BY_PROLOGUE:             Tail Calls.         (line   29)
* TARGET_SHIFT_TRUNCATION_MASK:          Misc.               (line  138)
* TARGET_SIMD_CLONE_ADJUST:              Addressing Modes.   (line  419)
* TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN: Addressing Modes.
                                                             (line  411)
* TARGET_SIMD_CLONE_USABLE:              Addressing Modes.   (line  423)
* TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P: Register Arguments.
                                                             (line  377)
* TARGET_SPILL_CLASS:                    Register Classes.   (line  613)
* TARGET_SPLIT_COMPLEX_ARG:              Register Arguments. (line  273)
* TARGET_STACK_PROTECT_FAIL:             Stack Smashing Protection.
                                                             (line   16)
* TARGET_STACK_PROTECT_GUARD:            Stack Smashing Protection.
                                                             (line    6)
* TARGET_STATIC_CHAIN:                   Frame Registers.    (line   90)
* TARGET_STORE_BOUNDS_FOR_ARG:           Varargs.            (line  163)
* TARGET_STORE_RETURNED_BOUNDS:          Varargs.            (line  177)
* TARGET_STRICT_ARGUMENT_NAMING:         Varargs.            (line  107)
* TARGET_STRING_OBJECT_REF_TYPE_P:       Run-time Target.    (line  114)
* TARGET_STRIP_NAME_ENCODING:            Sections.           (line  288)
* TARGET_STRUCT_VALUE_RTX:               Aggregate Return.   (line   44)
* TARGET_SUPPORTS_SPLIT_STACK:           Stack Smashing Protection.
                                                             (line   25)
* TARGET_SUPPORTS_WEAK:                  Label Output.       (line  272)
* TARGET_SUPPORTS_WIDE_INT:              Misc.               (line 1191)
* TARGET_TERMINATE_DW2_EH_FRAME_INFO:    Exception Region Output.
                                                             (line   99)
* TARGET_TRAMPOLINE_ADJUST_ADDRESS:      Trampolines.        (line   74)
* TARGET_TRAMPOLINE_INIT:                Trampolines.        (line   54)
* TARGET_UNSPEC_MAY_TRAP_P:              Misc.               (line  829)
* TARGET_UNWIND_TABLES_DEFAULT:          Exception Region Output.
                                                             (line   73)
* TARGET_UNWIND_WORD_MODE:               Storage Layout.     (line  475)
* TARGET_UPDATE_STACK_BOUNDARY:          Misc.               (line 1097)
* TARGET_USES_WEAK_UNWIND_INFO:          Exception Handling. (line  123)
* TARGET_USE_ANCHORS_FOR_SYMBOL_P:       Anchored Addresses. (line   53)
* TARGET_USE_BLOCKS_FOR_CONSTANT_P:      Addressing Modes.   (line  248)
* TARGET_USE_BLOCKS_FOR_DECL_P:          Addressing Modes.   (line  255)
* TARGET_USE_BY_PIECES_INFRASTRUCTURE_P: Costs.              (line  164)
* TARGET_USE_JCR_SECTION:                Misc.               (line 1079)
* TARGET_USE_PSEUDO_PIC_REG:             Register Arguments. (line   87)
* TARGET_VALID_DLLIMPORT_ATTRIBUTE_P:    Target Attributes.  (line   66)
* TARGET_VALID_POINTER_MODE:             Register Arguments. (line  317)
* TARGET_VECTORIZE_ADD_STMT_COST:        Addressing Modes.   (line  374)
* TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES: Addressing Modes.
                                                             (line  351)
* TARGET_VECTORIZE_BUILTIN_CONVERSION:   Addressing Modes.   (line  307)
* TARGET_VECTORIZE_BUILTIN_GATHER:       Addressing Modes.   (line  397)
* TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes.  (line  266)
* TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION: Addressing Modes.
                                                             (line  327)
* TARGET_VECTORIZE_BUILTIN_SCATTER:      Addressing Modes.   (line  404)
* TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes.
                                                             (line  292)
* TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes.
                                                             (line  319)
* TARGET_VECTORIZE_DESTROY_COST_DATA:    Addressing Modes.   (line  392)
* TARGET_VECTORIZE_FINISH_COST:          Addressing Modes.   (line  385)
* TARGET_VECTORIZE_GET_MASK_MODE:        Addressing Modes.   (line  359)
* TARGET_VECTORIZE_INIT_COST:            Addressing Modes.   (line  365)
* TARGET_VECTORIZE_PREFERRED_SIMD_MODE:  Addressing Modes.   (line  344)
* TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes.
                                                             (line  334)
* TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes.
                                                             (line  298)
* TARGET_VECTORIZE_VEC_PERM_CONST_OK:    Addressing Modes.   (line  303)
* TARGET_VECTOR_ALIGNMENT:               Storage Layout.     (line  268)
* TARGET_VECTOR_MODE_SUPPORTED_P:        Register Arguments. (line  340)
* TARGET_VTABLE_DATA_ENTRY_DISTANCE:     Type Layout.        (line  309)
* TARGET_VTABLE_ENTRY_ALIGN:             Type Layout.        (line  303)
* TARGET_VTABLE_USES_DESCRIPTORS:        Type Layout.        (line  292)
* TARGET_WANT_DEBUG_PUB_SECTIONS:        SDB and DWARF.      (line   55)
* TARGET_WARN_FUNC_RETURN:               Tail Calls.         (line   35)
* TARGET_WEAK_NOT_IN_ARCHIVE_TOC:        Label Output.       (line  308)
* TCmode:                                Machine Modes.      (line  199)
* TDmode:                                Machine Modes.      (line   97)
* TEMPLATE_DECL:                         Declarations.       (line    6)
* Temporaries:                           Temporaries.        (line    6)
* termination routines:                  Initialization.     (line    6)
* testing constraints:                   C Constraint Interface.
                                                             (line    6)
* TEXT_SECTION_ASM_OP:                   Sections.           (line   37)
* TFmode:                                Machine Modes.      (line  101)
* The Language:                          The Language.       (line    6)
* THEN_CLAUSE:                           Statements for C++. (line    6)
* THREAD_MODEL_SPEC:                     Driver.             (line  162)
* THROW_EXPR:                            Unary and Binary Expressions.
                                                             (line    6)
* THUNK_DECL:                            Declarations.       (line    6)
* THUNK_DELTA:                           Declarations.       (line    6)
* TImode:                                Machine Modes.      (line   48)
* TImode, in insn:                       Insns.              (line  268)
* TLS_COMMON_ASM_OP:                     Sections.           (line   80)
* TLS_SECTION_ASM_FLAG:                  Sections.           (line   85)
* tm.h macros:                           Target Macros.      (line    6)
* TQFmode:                               Machine Modes.      (line   65)
* TQmode:                                Machine Modes.      (line  122)
* trampolines for nested functions:      Trampolines.        (line    6)
* TRAMPOLINE_ALIGNMENT:                  Trampolines.        (line   48)
* TRAMPOLINE_SECTION:                    Trampolines.        (line   39)
* TRAMPOLINE_SIZE:                       Trampolines.        (line   44)
* TRANSFER_FROM_TRAMPOLINE:              Trampolines.        (line  110)
* trap instruction pattern:              Standard Names.     (line 1759)
* tree:                                  Tree overview.      (line    6)
* tree <1>:                              Macros and Functions.
                                                             (line    6)
* Tree SSA:                              Tree SSA.           (line    6)
* TREE_CHAIN:                            Macros and Functions.
                                                             (line    6)
* TREE_CODE:                             Tree overview.      (line    6)
* tree_fits_shwi_p:                      Constant expressions.
                                                             (line    6)
* tree_fits_uhwi_p:                      Constant expressions.
                                                             (line    6)
* TREE_INT_CST_ELT:                      Constant expressions.
                                                             (line    6)
* tree_int_cst_equal:                    Constant expressions.
                                                             (line    6)
* TREE_INT_CST_LOW:                      Constant expressions.
                                                             (line    6)
* tree_int_cst_lt:                       Constant expressions.
                                                             (line    6)
* TREE_INT_CST_NUNITS:                   Constant expressions.
                                                             (line    6)
* TREE_LIST:                             Containers.         (line    6)
* TREE_OPERAND:                          Expression trees.   (line    6)
* TREE_PUBLIC:                           Function Basics.    (line    6)
* TREE_PUBLIC <1>:                       Function Properties.
                                                             (line   28)
* TREE_PURPOSE:                          Containers.         (line    6)
* TREE_READONLY:                         Function Properties.
                                                             (line   37)
* tree_size:                             Macros and Functions.
                                                             (line   13)
* TREE_STATIC:                           Function Properties.
                                                             (line   31)
* TREE_STRING_LENGTH:                    Constant expressions.
                                                             (line    6)
* TREE_STRING_POINTER:                   Constant expressions.
                                                             (line    6)
* TREE_THIS_VOLATILE:                    Function Properties.
                                                             (line   34)
* tree_to_shwi:                          Constant expressions.
                                                             (line    6)
* tree_to_uhwi:                          Constant expressions.
                                                             (line    6)
* TREE_TYPE:                             Macros and Functions.
                                                             (line    6)
* TREE_TYPE <1>:                         Types.              (line    6)
* TREE_TYPE <2>:                         Working with declarations.
                                                             (line   11)
* TREE_TYPE <3>:                         Expression trees.   (line    6)
* TREE_TYPE <4>:                         Expression trees.   (line   17)
* TREE_TYPE <5>:                         Function Basics.    (line   47)
* TREE_TYPE <6>:                         Types for C++.      (line    6)
* TREE_VALUE:                            Containers.         (line    6)
* TREE_VEC:                              Containers.         (line    6)
* TREE_VEC_ELT:                          Containers.         (line    6)
* TREE_VEC_LENGTH:                       Containers.         (line    6)
* TRULY_NOOP_TRUNCATION:                 Misc.               (line  162)
* truncate:                              Conversions.        (line   38)
* truncMN2 instruction pattern:          Standard Names.     (line 1119)
* TRUNC_DIV_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* TRUNC_MOD_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* TRUTH_ANDIF_EXPR:                      Unary and Binary Expressions.
                                                             (line    6)
* TRUTH_AND_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* TRUTH_NOT_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* TRUTH_ORIF_EXPR:                       Unary and Binary Expressions.
                                                             (line    6)
* TRUTH_OR_EXPR:                         Unary and Binary Expressions.
                                                             (line    6)
* TRUTH_XOR_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* TRY_BLOCK:                             Statements for C++. (line    6)
* TRY_HANDLERS:                          Statements for C++. (line    6)
* TRY_STMTS:                             Statements for C++. (line    6)
* Tuple specific accessors:              Tuple specific accessors.
                                                             (line    6)
* tuples:                                Tuple representation.
                                                             (line    6)
* type:                                  Types.              (line    6)
* type declaration:                      Declarations.       (line    6)
* TYPENAME_TYPE:                         Types for C++.      (line    6)
* TYPENAME_TYPE_FULLNAME:                Types.              (line    6)
* TYPENAME_TYPE_FULLNAME <1>:            Types for C++.      (line    6)
* TYPEOF_TYPE:                           Types for C++.      (line    6)
* TYPE_ALIGN:                            Types.              (line    6)
* TYPE_ALIGN <1>:                        Types.              (line   30)
* TYPE_ALIGN <2>:                        Types for C++.      (line    6)
* TYPE_ALIGN <3>:                        Types for C++.      (line   44)
* TYPE_ARG_TYPES:                        Types.              (line    6)
* TYPE_ARG_TYPES <1>:                    Types for C++.      (line    6)
* TYPE_ASM_OP:                           Label Output.       (line   76)
* TYPE_ATTRIBUTES:                       Attributes.         (line   24)
* TYPE_BINFO:                            Classes.            (line    6)
* TYPE_BUILT_IN:                         Types for C++.      (line   66)
* TYPE_CANONICAL:                        Types.              (line    6)
* TYPE_CANONICAL <1>:                    Types.              (line   41)
* TYPE_CONTEXT:                          Types.              (line    6)
* TYPE_CONTEXT <1>:                      Types for C++.      (line    6)
* TYPE_DECL:                             Declarations.       (line    6)
* TYPE_FIELDS:                           Types.              (line    6)
* TYPE_FIELDS <1>:                       Types for C++.      (line    6)
* TYPE_FIELDS <2>:                       Classes.            (line    6)
* TYPE_HAS_ARRAY_NEW_OPERATOR:           Classes.            (line   96)
* TYPE_HAS_DEFAULT_CONSTRUCTOR:          Classes.            (line   81)
* TYPE_HAS_MUTABLE_P:                    Classes.            (line   86)
* TYPE_HAS_NEW_OPERATOR:                 Classes.            (line   93)
* TYPE_MAIN_VARIANT:                     Types.              (line    6)
* TYPE_MAIN_VARIANT <1>:                 Types.              (line   19)
* TYPE_MAIN_VARIANT <2>:                 Types for C++.      (line    6)
* TYPE_MAX_VALUE:                        Types.              (line    6)
* TYPE_METHODS:                          Classes.            (line    6)
* TYPE_METHOD_BASETYPE:                  Types.              (line    6)
* TYPE_METHOD_BASETYPE <1>:              Types for C++.      (line    6)
* TYPE_MIN_VALUE:                        Types.              (line    6)
* TYPE_NAME:                             Types.              (line    6)
* TYPE_NAME <1>:                         Types.              (line   33)
* TYPE_NAME <2>:                         Types for C++.      (line    6)
* TYPE_NAME <3>:                         Types for C++.      (line   47)
* TYPE_NOTHROW_P:                        Functions for C++.  (line  154)
* TYPE_OFFSET_BASETYPE:                  Types.              (line    6)
* TYPE_OFFSET_BASETYPE <1>:              Types for C++.      (line    6)
* TYPE_OPERAND_FMT:                      Label Output.       (line   87)
* TYPE_OVERLOADS_ARRAY_REF:              Classes.            (line  104)
* TYPE_OVERLOADS_ARROW:                  Classes.            (line  107)
* TYPE_OVERLOADS_CALL_EXPR:              Classes.            (line  100)
* TYPE_POLYMORPHIC_P:                    Classes.            (line   77)
* TYPE_PRECISION:                        Types.              (line    6)
* TYPE_PRECISION <1>:                    Types for C++.      (line    6)
* TYPE_PTRDATAMEM_P:                     Types for C++.      (line    6)
* TYPE_PTRDATAMEM_P <1>:                 Types for C++.      (line   69)
* TYPE_PTRFN_P:                          Types for C++.      (line   76)
* TYPE_PTROBV_P:                         Types for C++.      (line    6)
* TYPE_PTROB_P:                          Types for C++.      (line   79)
* TYPE_PTR_P:                            Types for C++.      (line   72)
* TYPE_QUAL_CONST:                       Types.              (line    6)
* TYPE_QUAL_CONST <1>:                   Types for C++.      (line    6)
* TYPE_QUAL_RESTRICT:                    Types.              (line    6)
* TYPE_QUAL_RESTRICT <1>:                Types for C++.      (line    6)
* TYPE_QUAL_VOLATILE:                    Types.              (line    6)
* TYPE_QUAL_VOLATILE <1>:                Types for C++.      (line    6)
* TYPE_RAISES_EXCEPTIONS:                Functions for C++.  (line  149)
* TYPE_SIZE:                             Types.              (line    6)
* TYPE_SIZE <1>:                         Types.              (line   25)
* TYPE_SIZE <2>:                         Types for C++.      (line    6)
* TYPE_SIZE <3>:                         Types for C++.      (line   39)
* TYPE_STRUCTURAL_EQUALITY_P:            Types.              (line    6)
* TYPE_STRUCTURAL_EQUALITY_P <1>:        Types.              (line   77)
* TYPE_UNQUALIFIED:                      Types.              (line    6)
* TYPE_UNQUALIFIED <1>:                  Types for C++.      (line    6)
* TYPE_VFIELD:                           Classes.            (line    6)
* uaddvM4 instruction pattern:           Standard Names.     (line  320)
* UDAmode:                               Machine Modes.      (line  170)
* udiv:                                  Arithmetic.         (line  130)
* udivM3 instruction pattern:            Standard Names.     (line  301)
* udivmodM4 instruction pattern:         Standard Names.     (line  576)
* udot_prodM instruction pattern:        Standard Names.     (line  396)
* UDQmode:                               Machine Modes.      (line  138)
* UHAmode:                               Machine Modes.      (line  162)
* UHQmode:                               Machine Modes.      (line  130)
* UINT16_TYPE:                           Type Layout.        (line  220)
* UINT32_TYPE:                           Type Layout.        (line  221)
* UINT64_TYPE:                           Type Layout.        (line  222)
* UINT8_TYPE:                            Type Layout.        (line  219)
* UINTMAX_TYPE:                          Type Layout.        (line  203)
* UINTPTR_TYPE:                          Type Layout.        (line  240)
* UINT_FAST16_TYPE:                      Type Layout.        (line  236)
* UINT_FAST32_TYPE:                      Type Layout.        (line  237)
* UINT_FAST64_TYPE:                      Type Layout.        (line  238)
* UINT_FAST8_TYPE:                       Type Layout.        (line  235)
* UINT_LEAST16_TYPE:                     Type Layout.        (line  228)
* UINT_LEAST32_TYPE:                     Type Layout.        (line  229)
* UINT_LEAST64_TYPE:                     Type Layout.        (line  230)
* UINT_LEAST8_TYPE:                      Type Layout.        (line  227)
* umaddMN4 instruction pattern:          Standard Names.     (line  523)
* umax:                                  Arithmetic.         (line  149)
* umaxM3 instruction pattern:            Standard Names.     (line  301)
* umin:                                  Arithmetic.         (line  149)
* uminM3 instruction pattern:            Standard Names.     (line  301)
* umod:                                  Arithmetic.         (line  136)
* umodM3 instruction pattern:            Standard Names.     (line  301)
* umsubMN4 instruction pattern:          Standard Names.     (line  547)
* umulhisi3 instruction pattern:         Standard Names.     (line  495)
* umulM3_highpart instruction pattern:   Standard Names.     (line  509)
* umulqihi3 instruction pattern:         Standard Names.     (line  495)
* umulsidi3 instruction pattern:         Standard Names.     (line  495)
* umulvM4 instruction pattern:           Standard Names.     (line  325)
* unchanging:                            Flags.              (line  296)
* unchanging, in call_insn:              Flags.              (line   19)
* unchanging, in jump_insn, call_insn and insn: Flags.       (line   39)
* unchanging, in mem:                    Flags.              (line  134)
* unchanging, in subreg:                 Flags.              (line  170)
* unchanging, in subreg <1>:             Flags.              (line  180)
* unchanging, in symbol_ref:             Flags.              (line   10)
* UNEQ_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* UNGE_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* UNGT_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* unions, returning:                     Interface.          (line   10)
* UNION_TYPE:                            Types.              (line    6)
* UNION_TYPE <1>:                        Classes.            (line    6)
* UNITS_PER_WORD:                        Storage Layout.     (line   60)
* UNKNOWN_TYPE:                          Types.              (line    6)
* UNKNOWN_TYPE <1>:                      Types for C++.      (line    6)
* UNLE_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* UNLIKELY_EXECUTED_TEXT_SECTION_NAME:   Sections.           (line   48)
* UNLT_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* UNORDERED_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* unshare_all_rtl:                       Sharing.            (line   58)
* unsigned division:                     Arithmetic.         (line  130)
* unsigned division with unsigned saturation: Arithmetic.    (line  130)
* unsigned greater than:                 Comparisons.        (line   64)
* unsigned greater than <1>:             Comparisons.        (line   72)
* unsigned less than:                    Comparisons.        (line   68)
* unsigned less than <1>:                Comparisons.        (line   76)
* unsigned minimum and maximum:          Arithmetic.         (line  149)
* unsigned_fix:                          Conversions.        (line   77)
* unsigned_float:                        Conversions.        (line   62)
* unsigned_fract_convert:                Conversions.        (line   97)
* unsigned_sat_fract:                    Conversions.        (line  103)
* unspec:                                Side Effects.       (line  299)
* unspec <1>:                            Constant Definitions.
                                                             (line  111)
* unspec_volatile:                       Side Effects.       (line  299)
* unspec_volatile <1>:                   Constant Definitions.
                                                             (line   99)
* untyped_call instruction pattern:      Standard Names.     (line 1375)
* untyped_return instruction pattern:    Standard Names.     (line 1438)
* UPDATE_PATH_HOST_CANONICALIZE (PATH):  Filesystem.         (line   59)
* update_ssa:                            SSA.                (line   74)
* update_stmt:                           Manipulating GIMPLE statements.
                                                             (line  140)
* update_stmt <1>:                       SSA Operands.       (line    6)
* update_stmt_if_modified:               Manipulating GIMPLE statements.
                                                             (line  143)
* UQQmode:                               Machine Modes.      (line  126)
* usaddM3 instruction pattern:           Standard Names.     (line  301)
* usadM instruction pattern:             Standard Names.     (line  405)
* USAmode:                               Machine Modes.      (line  166)
* usashlM3 instruction pattern:          Standard Names.     (line  579)
* usdivM3 instruction pattern:           Standard Names.     (line  301)
* use:                                   Side Effects.       (line  168)
* used:                                  Flags.              (line  314)
* used, in symbol_ref:                   Flags.              (line  197)
* user:                                  GTY Options.        (line  243)
* user gc:                               User GC.            (line    6)
* USER_LABEL_PREFIX:                     Instruction Output. (line  152)
* USE_C_ALLOCA:                          Host Misc.          (line   19)
* USE_LD_AS_NEEDED:                      Driver.             (line  135)
* USE_LOAD_POST_DECREMENT:               Costs.              (line  233)
* USE_LOAD_POST_INCREMENT:               Costs.              (line  228)
* USE_LOAD_PRE_DECREMENT:                Costs.              (line  243)
* USE_LOAD_PRE_INCREMENT:                Costs.              (line  238)
* USE_SELECT_SECTION_FOR_FUNCTIONS:      Sections.           (line  193)
* USE_STORE_POST_DECREMENT:              Costs.              (line  253)
* USE_STORE_POST_INCREMENT:              Costs.              (line  248)
* USE_STORE_PRE_DECREMENT:               Costs.              (line  263)
* USE_STORE_PRE_INCREMENT:               Costs.              (line  258)
* USING_STMT:                            Statements for C++. (line    6)
* usmaddMN4 instruction pattern:         Standard Names.     (line  531)
* usmsubMN4 instruction pattern:         Standard Names.     (line  555)
* usmulhisi3 instruction pattern:        Standard Names.     (line  499)
* usmulM3 instruction pattern:           Standard Names.     (line  301)
* usmulqihi3 instruction pattern:        Standard Names.     (line  499)
* usmulsidi3 instruction pattern:        Standard Names.     (line  499)
* usnegM2 instruction pattern:           Standard Names.     (line  603)
* USQmode:                               Machine Modes.      (line  134)
* ussubM3 instruction pattern:           Standard Names.     (line  301)
* usubvM4 instruction pattern:           Standard Names.     (line  325)
* us_ashift:                             Arithmetic.         (line  173)
* us_minus:                              Arithmetic.         (line   38)
* us_mult:                               Arithmetic.         (line   93)
* us_neg:                                Arithmetic.         (line   82)
* us_plus:                               Arithmetic.         (line   14)
* us_truncate:                           Conversions.        (line   48)
* UTAmode:                               Machine Modes.      (line  174)
* UTQmode:                               Machine Modes.      (line  142)
* V in constraint:                       Simple Constraints. (line   43)
* values, returned by functions:         Scalar Return.      (line    6)
* varargs implementation:                Varargs.            (line    6)
* variable:                              Declarations.       (line    6)
* Variable Location Debug Information in RTL: Debug Information.
                                                             (line    6)
* VAR_DECL:                              Declarations.       (line    6)
* var_location:                          Debug Information.  (line   14)
* vashlM3 instruction pattern:           Standard Names.     (line  595)
* vashrM3 instruction pattern:           Standard Names.     (line  595)
* VA_ARG_EXPR:                           Unary and Binary Expressions.
                                                             (line    6)
* vcondMN instruction pattern:           Standard Names.     (line  227)
* vconduMN instruction pattern:          Standard Names.     (line  237)
* vcond_mask_MN instruction pattern:     Standard Names.     (line  240)
* vector:                                Containers.         (line    6)
* vector operations:                     Vector Operations.  (line    6)
* VECTOR_CST:                            Constant expressions.
                                                             (line    6)
* VECTOR_STORE_FLAG_VALUE:               Misc.               (line  293)
* vec_cmpMN instruction pattern:         Standard Names.     (line  217)
* vec_cmpuMN instruction pattern:        Standard Names.     (line  224)
* vec_concat:                            Vector Operations.  (line   28)
* vec_duplicate:                         Vector Operations.  (line   33)
* vec_extractM instruction pattern:      Standard Names.     (line  207)
* vec_initM instruction pattern:         Standard Names.     (line  212)
* vec_load_lanesMN instruction pattern:  Standard Names.     (line  165)
* VEC_LSHIFT_EXPR:                       Vectors.            (line    6)
* vec_merge:                             Vector Operations.  (line   11)
* VEC_PACK_FIX_TRUNC_EXPR:               Vectors.            (line    6)
* VEC_PACK_SAT_EXPR:                     Vectors.            (line    6)
* vec_pack_sfix_trunc_M instruction pattern: Standard Names. (line  440)
* vec_pack_ssat_M instruction pattern:   Standard Names.     (line  433)
* VEC_PACK_TRUNC_EXPR:                   Vectors.            (line    6)
* vec_pack_trunc_M instruction pattern:  Standard Names.     (line  426)
* vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line  440)
* vec_pack_usat_M instruction pattern:   Standard Names.     (line  433)
* vec_permM instruction pattern:         Standard Names.     (line  258)
* vec_perm_constM instruction pattern:   Standard Names.     (line  274)
* VEC_RSHIFT_EXPR:                       Vectors.            (line    6)
* vec_select:                            Vector Operations.  (line   19)
* vec_setM instruction pattern:          Standard Names.     (line  202)
* vec_shr_M instruction pattern:         Standard Names.     (line  420)
* vec_store_lanesMN instruction pattern: Standard Names.     (line  189)
* vec_unpacks_float_hi_M instruction pattern: Standard Names.
                                                             (line  461)
* vec_unpacks_float_lo_M instruction pattern: Standard Names.
                                                             (line  461)
* vec_unpacks_hi_M instruction pattern:  Standard Names.     (line  447)
* vec_unpacks_lo_M instruction pattern:  Standard Names.     (line  447)
* vec_unpacku_float_hi_M instruction pattern: Standard Names.
                                                             (line  461)
* vec_unpacku_float_lo_M instruction pattern: Standard Names.
                                                             (line  461)
* vec_unpacku_hi_M instruction pattern:  Standard Names.     (line  454)
* vec_unpacku_lo_M instruction pattern:  Standard Names.     (line  454)
* VEC_UNPACK_FLOAT_HI_EXPR:              Vectors.            (line    6)
* VEC_UNPACK_FLOAT_LO_EXPR:              Vectors.            (line    6)
* VEC_UNPACK_HI_EXPR:                    Vectors.            (line    6)
* VEC_UNPACK_LO_EXPR:                    Vectors.            (line    6)
* VEC_WIDEN_MULT_HI_EXPR:                Vectors.            (line    6)
* VEC_WIDEN_MULT_LO_EXPR:                Vectors.            (line    6)
* vec_widen_smult_even_M instruction pattern: Standard Names.
                                                             (line  470)
* vec_widen_smult_hi_M instruction pattern: Standard Names.  (line  470)
* vec_widen_smult_lo_M instruction pattern: Standard Names.  (line  470)
* vec_widen_smult_odd_M instruction pattern: Standard Names. (line  470)
* vec_widen_sshiftl_hi_M instruction pattern: Standard Names.
                                                             (line  481)
* vec_widen_sshiftl_lo_M instruction pattern: Standard Names.
                                                             (line  481)
* vec_widen_umult_even_M instruction pattern: Standard Names.
                                                             (line  470)
* vec_widen_umult_hi_M instruction pattern: Standard Names.  (line  470)
* vec_widen_umult_lo_M instruction pattern: Standard Names.  (line  470)
* vec_widen_umult_odd_M instruction pattern: Standard Names. (line  470)
* vec_widen_ushiftl_hi_M instruction pattern: Standard Names.
                                                             (line  481)
* vec_widen_ushiftl_lo_M instruction pattern: Standard Names.
                                                             (line  481)
* verify_flow_info:                      Maintaining the CFG.
                                                             (line  117)
* virtual operands:                      SSA Operands.       (line    6)
* VIRTUAL_INCOMING_ARGS_REGNUM:          Regs and Memory.    (line   59)
* VIRTUAL_OUTGOING_ARGS_REGNUM:          Regs and Memory.    (line   87)
* VIRTUAL_STACK_DYNAMIC_REGNUM:          Regs and Memory.    (line   78)
* VIRTUAL_STACK_VARS_REGNUM:             Regs and Memory.    (line   69)
* VLIW:                                  Processor pipeline description.
                                                             (line    6)
* VLIW <1>:                              Processor pipeline description.
                                                             (line  223)
* vlshrM3 instruction pattern:           Standard Names.     (line  595)
* VMS:                                   Filesystem.         (line   37)
* VMS_DEBUGGING_INFO:                    VMS Debug.          (line    8)
* void:                                  Misc.               (line  686)
* void <1>:                              Misc.               (line  691)
* VOIDmode:                              Machine Modes.      (line  192)
* VOID_TYPE:                             Types.              (line    6)
* volatil:                               Flags.              (line  328)
* volatil, in insn, call_insn, jump_insn, code_label, jump_table_data, barrier, and note: Flags.
                                                             (line   44)
* volatil, in label_ref and reg_label:   Flags.              (line   65)
* volatil, in mem, asm_operands, and asm_input: Flags.       (line   76)
* volatil, in reg:                       Flags.              (line   98)
* volatil, in subreg:                    Flags.              (line  170)
* volatil, in subreg <1>:                Flags.              (line  180)
* volatil, in symbol_ref:                Flags.              (line  206)
* volatile memory references:            Flags.              (line  329)
* volatile, in prefetch:                 Flags.              (line  214)
* voting between constraint alternatives: Class Preferences. (line    6)
* vrotlM3 instruction pattern:           Standard Names.     (line  595)
* vrotrM3 instruction pattern:           Standard Names.     (line  595)
* walk_dominator_tree:                   SSA.                (line  195)
* walk_gimple_op:                        Statement and operand traversals.
                                                             (line   30)
* walk_gimple_seq:                       Statement and operand traversals.
                                                             (line   47)
* walk_gimple_stmt:                      Statement and operand traversals.
                                                             (line   10)
* WCHAR_TYPE:                            Type Layout.        (line  171)
* WCHAR_TYPE_SIZE:                       Type Layout.        (line  179)
* which_alternative:                     Output Statement.   (line   58)
* WHILE_BODY:                            Statements for C++. (line    6)
* WHILE_COND:                            Statements for C++. (line    6)
* WHILE_STMT:                            Statements for C++. (line    6)
* whopr:                                 LTO.                (line    6)
* widen_ssumM3 instruction pattern:      Standard Names.     (line  413)
* widen_usumM3 instruction pattern:      Standard Names.     (line  414)
* WIDEST_HARDWARE_FP_SIZE:               Type Layout.        (line  116)
* window_save instruction pattern:       Standard Names.     (line 1730)
* WINT_TYPE:                             Type Layout.        (line  184)
* WORDS_BIG_ENDIAN:                      Storage Layout.     (line   28)
* WORDS_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  215)
* word_mode:                             Machine Modes.      (line  367)
* WORD_REGISTER_OPERATIONS:              Misc.               (line   53)
* wpa:                                   LTO.                (line    6)
* X in constraint:                       Simple Constraints. (line  122)
* x-HOST:                                Host Fragment.      (line    6)
* XCmode:                                Machine Modes.      (line  199)
* XCOFF_DEBUGGING_INFO:                  DBX Options.        (line   12)
* XEXP:                                  Accessors.          (line    6)
* XFmode:                                Machine Modes.      (line   82)
* XImode:                                Machine Modes.      (line   54)
* XINT:                                  Accessors.          (line    6)
* xm-MACHINE.h:                          Filesystem.         (line    6)
* xm-MACHINE.h <1>:                      Host Misc.          (line    6)
* xor:                                   Arithmetic.         (line  168)
* xor, canonicalization of:              Insn Canonicalizations.
                                                             (line   78)
* xorM3 instruction pattern:             Standard Names.     (line  301)
* XSTR:                                  Accessors.          (line    6)
* XVEC:                                  Accessors.          (line   41)
* XVECEXP:                               Accessors.          (line   48)
* XVECLEN:                               Accessors.          (line   44)
* XWINT:                                 Accessors.          (line    6)
* zero_extend:                           Conversions.        (line   28)
* zero_extendMN2 instruction pattern:    Standard Names.     (line 1129)
* zero_extract:                          Bit-Fields.         (line   30)
* zero_extract, canonicalization of:     Insn Canonicalizations.
                                                             (line   87)



Tag Table:
Node: Top1789
Node: Contributing5004
Node: Portability5733
Node: Interface7521
Node: Libgcc10562
Node: Integer library routines12389
Node: Soft float library routines19357
Node: Decimal float library routines31295
Node: Fixed-point fractional library routines47053
Node: Exception handling routines147449
Node: Miscellaneous routines148556
Node: Languages150676
Node: Source Tree152223
Node: Configure Terms152805
Node: Top Level155761
Node: gcc Directory159248
Node: Subdirectories160200
Node: Configuration162368
Node: Config Fragments163088
Node: System Config164313
Node: Configuration Files165249
Node: Build168066
Node: Makefile168478
Ref: Makefile-Footnote-1175282
Ref: Makefile-Footnote-2175429
Node: Library Files175503
Node: Headers176065
Node: Documentation178148
Node: Texinfo Manuals179007
Node: Man Page Generation181336
Node: Miscellaneous Docs183249
Node: Front End184636
Node: Front End Directory188310
Node: Front End Config189626
Node: Front End Makefile192442
Node: Back End196210
Node: Testsuites199991
Node: Test Idioms200922
Node: Test Directives204320
Node: Directives204847
Node: Selectors215144
Node: Effective-Target Keywords216500
Ref: arm_fp_ok223676
Ref: arm_neon_ok224605
Ref: arm_neonv2_ok224763
Ref: arm_neon_fp16_ok224935
Ref: arm_vfp3_ok225575
Node: Add Options237408
Node: Require Support238911
Node: Final Actions241418
Node: Ada Tests247077
Node: C Tests248408
Node: libgcj Tests252803
Node: LTO Testing253930
Node: gcov Testing255578
Node: profopt Testing258568
Node: compat Testing260283
Node: Torture Tests264523
Node: Options266138
Node: Option file format266579
Node: Option properties273568
Node: Passes287214
Node: Parsing pass288104
Node: Cilk Plus Transformation291637
Node: Gimplification pass295019
Node: Pass manager296864
Node: Tree SSA passes298710
Node: RTL passes319895
Node: Optimization info332199
Node: Dump setup333018
Node: Optimization groups334147
Node: Dump files and streams335036
Node: Dump output verbosity336234
Node: Dump types337290
Node: Dump examples338780
Node: GENERIC340126
Node: Deficiencies342002
Node: Tree overview342243
Node: Macros and Functions346367
Node: Identifiers347192
Node: Containers348801
Node: Types349958
Node: Declarations362032
Node: Working with declarations362527
Node: Internal structure368131
Node: Current structure hierarchy368515
Node: Adding new DECL node types370608
Node: Attributes374892
Node: Expression trees376136
Node: Constant expressions377890
Node: Storage References381186
Node: Unary and Binary Expressions384705
Node: Vectors404853
Node: Statements410048
Node: Basic Statements410580
Node: Blocks415087
Node: Statement Sequences416788
Node: Empty Statements417121
Node: Jumps417695
Node: Cleanups418348
Node: OpenMP420115
Node: OpenACC425960
Node: Functions427001
Node: Function Basics427472
Node: Function Properties431156
Node: Language-dependent trees433937
Node: C and C++ Trees434824
Node: Types for C++437728
Node: Namespaces442698
Node: Classes445804
Node: Functions for C++450861
Node: Statements for C++457112
Node: C++ Expressions465885
Node: Java Trees467390
Node: GIMPLE467503
Node: Tuple representation471168
Node: Class hierarchy of GIMPLE statements478128
Node: GIMPLE instruction set483116
Node: GIMPLE Exception Handling484748
Node: Temporaries486660
Ref: Temporaries-Footnote-1487978
Node: Operands488043
Node: Compound Expressions488804
Node: Compound Lvalues489038
Node: Conditional Expressions489800
Node: Logical Operators490459
Node: Manipulating GIMPLE statements497323
Node: Tuple specific accessors503259
Node: GIMPLE_ASM504038
Node: GIMPLE_ASSIGN506421
Node: GIMPLE_BIND511125
Node: GIMPLE_CALL512939
Node: GIMPLE_CATCH516967
Node: GIMPLE_COND518117
Node: GIMPLE_DEBUG520912
Node: GIMPLE_EH_FILTER524285
Node: GIMPLE_LABEL525848
Node: GIMPLE_GOTO526461
Node: GIMPLE_NOP526984
Node: GIMPLE_OMP_ATOMIC_LOAD527346
Node: GIMPLE_OMP_ATOMIC_STORE528342
Node: GIMPLE_OMP_CONTINUE529041
Node: GIMPLE_OMP_CRITICAL530520
Node: GIMPLE_OMP_FOR531514
Node: GIMPLE_OMP_MASTER534930
Node: GIMPLE_OMP_ORDERED535308
Node: GIMPLE_OMP_PARALLEL535702
Node: GIMPLE_OMP_RETURN538471
Node: GIMPLE_OMP_SECTION539116
Node: GIMPLE_OMP_SECTIONS539776
Node: GIMPLE_OMP_SINGLE541386
Node: GIMPLE_PHI542332
Node: GIMPLE_RESX543611
Node: GIMPLE_RETURN544330
Node: GIMPLE_SWITCH544904
Node: GIMPLE_TRY546779
Node: GIMPLE_WITH_CLEANUP_EXPR548551
Node: GIMPLE sequences549430
Node: Sequence iterators552636
Node: Adding a new GIMPLE statement code561093
Node: Statement and operand traversals562438
Node: Tree SSA565030
Node: Annotations566818
Node: SSA Operands567223
Node: SSA581298
Node: Alias analysis591004
Node: Memory model594778
Node: RTL596137
Node: RTL Objects598325
Node: RTL Classes602199
Node: Accessors607245
Node: Special Accessors609639
Node: Flags615426
Node: Machine Modes630190
Node: Constants643838
Node: Regs and Memory651925
Node: Arithmetic669813
Node: Comparisons679858
Node: Bit-Fields684150
Node: Vector Operations685702
Node: Conversions687583
Node: RTL Declarations692081
Node: Side Effects692902
Node: Incdec709913
Node: Assembler713249
Node: Debug Information714794
Node: Insns715991
Node: Calls742406
Node: Sharing744999
Node: Reading RTL748110
Node: Control Flow749101
Node: Basic Blocks750870
Node: Edges756324
Node: Profile information764953
Node: Maintaining the CFG769637
Node: Liveness information775499
Node: Loop Analysis and Representation777625
Node: Loop representation778661
Node: Loop querying786224
Node: Loop manipulation789045
Node: LCSSA791406
Node: Scalar evolutions793475
Node: loop-iv796719
Node: Number of iterations798641
Node: Dependency analysis801447
Node: Machine Desc807797
Node: Overview810360
Node: Patterns812400
Node: Example815908
Node: RTL Template817369
Node: Output Template828025
Node: Output Statement831988
Node: Predicates836327
Node: Machine-Independent Predicates839245
Node: Defining Predicates844189
Node: Constraints850152
Node: Simple Constraints851621
Node: Multi-Alternative864461
Node: Class Preferences867670
Node: Modifiers868562
Node: Machine Constraints873295
Node: Disable Insn Alternatives934038
Node: Define Constraints937530
Node: C Constraint Interface944925
Node: Standard Names948074
Ref: shift patterns973500
Ref: prologue instruction pattern1023797
Ref: window_save instruction pattern1024290
Ref: epilogue instruction pattern1024567
Node: Pattern Ordering1042137
Node: Dependent Patterns1043373
Node: Jump Patterns1044993
Ref: Jump Patterns-Footnote-11047140
Node: Looping Patterns1047188
Node: Insn Canonicalizations1051917
Node: Expander Definitions1056502
Node: Insn Splitting1064716
Node: Including Patterns1074319
Node: Peephole Definitions1076103
Node: define_peephole1077356
Node: define_peephole21083686
Node: Insn Attributes1086752
Node: Defining Attributes1087934
Ref: define_enum_attr1091427
Node: Expressions1092463
Node: Tagging Insns1099213
Node: Attr Example1103566
Node: Insn Lengths1105939
Node: Constant Attributes1109347
Node: Mnemonic Attribute1110523
Node: Delay Slots1112042
Node: Processor pipeline description1115265
Ref: Processor pipeline description-Footnote-11134082
Node: Conditional Execution1134406
Node: Define Subst1137889
Node: Define Subst Example1139925
Node: Define Subst Pattern Matching1142919
Node: Define Subst Output Template1144145
Node: Constant Definitions1146215
Ref: define_enum1149997
Node: Iterators1150485
Node: Mode Iterators1151063
Node: Defining Mode Iterators1152041
Node: Substitutions1153535
Node: Examples1155777
Node: Code Iterators1157225
Node: Int Iterators1159504
Node: Subst Iterators1161950
Node: Target Macros1163642
Node: Target Structure1166654
Node: Driver1168770
Node: Run-time Target1187740
Node: Per-Function Data1197451
Node: Storage Layout1200215
Node: Type Layout1225965
Node: Registers1239591
Node: Register Basics1240565
Node: Allocation Order1246003
Node: Values in Registers1248487
Node: Leaf Functions1255965
Node: Stack Registers1258824
Node: Register Classes1260096
Node: Stack and Calling1292738
Node: Frame Layout1293304
Node: Exception Handling1304151
Node: Stack Checking1310361
Node: Frame Registers1315202
Node: Elimination1323467
Node: Stack Arguments1327695
Node: Register Arguments1334877
Node: Scalar Return1355922
Node: Aggregate Return1362378
Node: Caller Saves1366567
Node: Function Entry1367309
Node: Profiling1378401
Node: Tail Calls1380511
Node: Stack Smashing Protection1382412
Node: Miscellaneous Register Hooks1384075
Node: Varargs1384941
Node: Trampolines1395050
Node: Library Calls1401093
Node: Addressing Modes1405777
Node: Anchored Addresses1429067
Node: Condition Code1431710
Node: CC0 Condition Codes1434037
Node: MODE_CC Condition Codes1437283
Node: Costs1444091
Node: Scheduling1462267
Node: Sections1485445
Node: PIC1501138
Node: Assembler Format1503197
Node: File Framework1504335
Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1511267
Node: Data Output1514537
Node: Uninitialized Data1522483
Node: Label Output1527494
Node: Initialization1552105
Node: Macros for Initialization1558066
Node: Instruction Output1564785
Node: Dispatch Tables1575414
Node: Exception Region Output1579814
Node: Alignment Output1586908
Node: Debugging Info1591511
Node: All Debuggers1592181
Node: DBX Options1595036
Node: DBX Hooks1600474
Node: File Names and DBX1601783
Node: SDB and DWARF1603895
Node: VMS Debug1610378
Node: Floating Point1610965
Node: Mode Switching1613720
Node: Target Attributes1618156
Node: Emulated TLS1627122
Node: MIPS Coprocessors1630512
Node: PCH Target1631671
Node: C++ ABI1633513
Node: Named Address Spaces1638307
Node: Misc1643576
Ref: TARGET_SHIFT_TRUNCATION_MASK1650323
Node: Host Config1706498
Node: Host Common1707566
Node: Filesystem1709940
Node: Host Misc1714055
Node: Fragments1716504
Node: Target Fragment1717699
Node: Host Fragment1728328
Node: Collect21728568
Node: Header Dirs1731204
Node: Type Information1732627
Node: GTY Options1735903
Node: Inheritance and GTY1747150
Ref: Inheritance and GTY-Footnote-11748715
Node: User GC1748985
Node: GGC Roots1752724
Node: Files1753437
Node: Invoking the garbage collector1756144
Node: Troubleshooting1757649
Node: Plugins1758724
Node: Plugins loading1759853
Node: Plugin API1760723
Node: Plugins pass1768449
Node: Plugins GC1770420
Node: Plugins description1772138
Node: Plugins attr1772674
Node: Plugins recording1774948
Node: Plugins gate1775798
Node: Plugins tracking1776389
Node: Plugins building1776977
Node: LTO1778767
Node: LTO Overview1779639
Node: LTO object file layout1785471
Node: IPA1790101
Node: WHOPR1799066
Node: Internal flags1803626
Node: Match and Simplify1805037
Node: GIMPLE API1805991
Node: The Language1808786
Node: Funding1819891
Node: GNU Project1822390
Node: Copying1823039
Node: GNU Free Documentation License1860551
Node: Contributors1885672
Node: Option Index1924481
Node: Concept Index1925358

End Tag Table
