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

Copyright (C) 1988-2015 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-2015 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
(ARCompact ISA Linux uClibc toolchain built on 20161123) version 4.8.5.
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.

* 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 (int A)
 -- Runtime Function: int __clzdi2 (long A)
 -- Runtime Function: int __clzti2 (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 (int A)
 -- Runtime Function: int __ctzdi2 (long A)
 -- Runtime Function: int __ctzti2 (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 (long A)
 -- Runtime Function: int __ffsti2 (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 (int A)
 -- Runtime Function: int __paritydi2 (long A)
 -- Runtime Function: int __parityti2 (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 (int A)
 -- Runtime Function: int __popcountdi2 (long A)
 -- Runtime Function: int __popcountti2 (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 OpenMP 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.

'libmudflap'
     The 'libmudflap' library, used for instrumenting pointer and array
     dereferencing operations.

'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 'gold' 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_max'
     Target does not support a vector 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_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'.

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_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_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.  Some multilibs may be incompatible with these
     options.

'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_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_prefer_ldrd_strd'
     ARM target prefers 'LDRD' and 'STRD' instructions over 'LDM' and
     'STM' instructions.

7.2.3.7 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.8 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.9 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.

'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.

7.2.3.10 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.

'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).

'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.

'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.11 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.

'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.

'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'.

7.2.3.12 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.13 Local to tests in 'gcc.target/spu/ea'
..............................................

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

7.2.3.14 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_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_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
.....................................

'cleanup-coverage-files'
     Removes coverage data files generated for this test.

'cleanup-ipa-dump SUFFIX'
     Removes IPA dump 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

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

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

'cleanup-rtl-dump SUFFIX'
     Removes RTL dump files generated for this test.

'cleanup-saved-temps'
     Removes files for the current test which were kept for
     '-save-temps'.

'cleanup-tree-dump SUFFIX'
     Removes tree dump files matching SUFFIX which were generated for
     this test.


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)'
     If not explicitly set, the option is set to the value of '-OPT'.
     The second form specifies that the option is only set if both OPT
     and OPT2 are set.

'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.  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'.


File: gccint.info,  Node: Passes,  Next: RTL,  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.
* 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.


File: gccint.info,  Node: Parsing pass,  Next: Gimplification pass,  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: Gimplification pass,  Next: Pass manager,  Prev: Parsing pass,  Up: Passes

9.2 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.3 Pass manager
================

The pass manager is located in 'passes.c', 'tree-optimize.c' and
'tree-pass.h'.  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.4 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'.

   * Mudflap declaration registration

     If mudflap (*note -fmudflap -fmudflapth -fmudflapir: (gcc)Optimize
     Options.) is enabled, we generate code to register some variable
     declarations with the mudflap runtime.  Specifically, the runtime
     tracks the lifetimes of those variable declarations that have their
     addresses taken, or whose bounds are unknown at compile time
     ('extern').  This pass generates new exception handling constructs
     ('try'/'finally'), and so must run before those are lowered.  In
     addition, the pass enqueues declarations of static variables whose
     lifetimes extend to the entire program.  The pass is located in
     'tree-mudflap.c' and is described by 'pass_mudflap_1'.

   * 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 rewrites 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 'predict.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'.  This pass
     should eventually replace the RTL level loop unswitching in
     'loop-unswitch.c', but currently the RTL level pass is not
     completely redundant yet due to deficiencies in tree level alias
     analysis.

     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'.

   * Mudflap statement annotation

     If mudflap is enabled, we rewrite some memory accesses with code to
     validate that the memory access is correct.  In particular,
     expressions involving pointer dereferences ('INDIRECT_REF',
     'ARRAY_REF', etc.)  are replaced by code that checks the selected
     address range against the mudflap runtime's database of valid
     regions.  This check includes an inline lookup into a direct-mapped
     cache, based on shift/mask operations of the pointer value, with a
     fallback function call into the runtime.  The pass is located in
     'tree-mudflap.c' and is described by 'pass_mudflap_2'.

   * 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,  Prev: Tree SSA passes,  Up: Passes

9.5 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, peeling and unswitching loops-- are
     implemented in 'loop-unswitch.c' and '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'.

   * Register movement

     This pass looks for cases where matching constraints would force an
     instruction to need a reload, and this reload would be a
     register-to-register move.  It then attempts to change the
     registers used by the instruction to avoid the move instruction.
     The code is located in 'regmove.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:

        * Register move optimizations.  This pass makes some simple RTL
          code transformations which improve the subsequent register
          allocation.  The source file is 'regmove.c'.

        * 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-equivs.c',
          'lra-lives.c', 'lra-saves.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.  If mudflap is enabled, the queue of deferred
     declarations and any addressed constants (e.g., string literals) is
     processed by 'mudflap_finish_file' into a synthetic constructor
     function containing calls into the mudflap runtime.

   * 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: RTL,  Next: GENERIC,  Prev: Passes,  Up: Top

10 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

10.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

10.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'.

'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

10.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

10.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

10.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', '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' or
     'jump_insn', 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

10.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, 'enum 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.

'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.

 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_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 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

10.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 ...)'
     Represents either a floating-point constant of mode M or 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 (GCC does not
     provide a mechanism to represent even larger constants).  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.

     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_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

10.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

10.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 that do
     a combined multiply of X and Y and then adding toZ 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

10.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

10.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

10.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

10.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

10.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

10.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.  Each of the INSNS that appears in
     the vector is suitable for appearing in the chain of insns, so it
     must be an 'insn', 'jump_insn', 'call_insn', 'code_label',
     'barrier' or 'note'.

     A 'sequence' RTX is never placed in an actual insn during RTL
     generation.  It represents the sequence of insns that result from a
     'define_expand' _before_ those insns are passed to 'emit_insn' to
     insert them in the chain of insns.  When actually inserted, the
     individual sub-insns are separated out and the 'sequence' is
     forgotten.

     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::.

 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

10.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

10.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

10.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

10.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.

'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_BLOCK_NUMBER' identifies which 'CODE_LABEL' or 'note' of
          type 'NOTE_INSN_DELETED_LABEL' is associated with the given
          region.

     'NOTE_INSN_LOOP_BEG'
     'NOTE_INSN_LOOP_END'
          These types of notes indicate the position of the beginning
          and end of a 'while' or 'for' loop.  They enable the loop
          optimizer to find loops quickly.

     'NOTE_INSN_LOOP_CONT'
          Appears at the place in a loop that 'continue' statements jump
          to.

     'NOTE_INSN_LOOP_VTOP'
          This note indicates the place in a loop where the exit test
          begins for those loops in which the exit test has been
          duplicated.  This position becomes another virtual start of
          the loop when considering loop invariants.

     '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' and 'insn_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' 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' expression, the
     note refers to the register that is contained in 'SUBREG_REG' of
     the 'subreg' expression.

     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 as an 'expr_list'.

'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 value is stored as
     a value 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

10.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

10.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

10.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: GENERIC,  Next: GIMPLE,  Prev: RTL,  Up: Top

11 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 most
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

11.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

11.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

11.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

11.2.2 Identifiers
------------------

An 'IDENTIFIER_NODE' represents a slightly more general concept that 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

11.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

11.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

11.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

11.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

11.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

11.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

11.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


File: gccint.info,  Node: Attributes,  Next: Expression trees,  Prev: Declarations,  Up: GENERIC

11.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

11.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

11.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
     given by
          ((TREE_INT_CST_HIGH (e) << HOST_BITS_PER_WIDE_INT)
          + TREE_INST_CST_LOW (e))
     HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms.
     Both 'TREE_INT_CST_HIGH' and 'TREE_INT_CST_LOW' return a
     'HOST_WIDE_INT'.  The value of an 'INTEGER_CST' is interpreted as a
     signed or unsigned quantity depending on the type of the constant.
     In general, the expression given above will overflow, so it should
     not be used to calculate the value of the constant.

     The variable 'integer_zero_node' is an integer constant with value
     zero.  Similarly, 'integer_one_node' is an integer constant with
     value one.  The 'size_zero_node' and 'size_one_node' variables are
     analogous, but have type 'size_t' rather than 'int'.

     The function 'tree_int_cst_lt' is a predicate which holds if its
     first argument is less than its second.  Both constants are assumed
     to have the same signedness (i.e., either both should be signed or
     both should be unsigned.)  The full width of the constant is used
     when doing the comparison; the usual rules about promotions and
     conversions are ignored.  Similarly, 'tree_int_cst_equal' holds if
     the two constants are equal.  The 'tree_int_cst_sgn' function
     returns the sign of a constant.  The value is '1', '0', or '-1'
     according on whether the constant is greater than, equal to, or
     less than zero.  Again, the signedness of the constant's type is
     taken into account; an unsigned constant is never less than zero,
     no matter what its bit-pattern.

'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

11.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

11.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 array.  The first operand is reserved for use by the
     back end.  The second operand is a 'TREE_LIST'.  If the 'TREE_TYPE'
     of the 'CONSTRUCTOR' is a 'RECORD_TYPE' or 'UNION_TYPE', then the
     'TREE_PURPOSE' of each node in the 'TREE_LIST' will be a
     'FIELD_DECL' and the 'TREE_VALUE' of each node will be the
     expression used to initialize that field.

     If the 'TREE_TYPE' of the 'CONSTRUCTOR' is an 'ARRAY_TYPE', then
     the 'TREE_PURPOSE' of each element in the 'TREE_LIST' will be an
     'INTEGER_CST' or a 'RANGE_EXPR' of two 'INTEGER_CST's.  A single
     'INTEGER_CST' indicates which element of the array (indexed from
     zero) is being assigned to.  A 'RANGE_EXPR' indicates an inclusive
     range of elements to initialize.  In both cases the 'TREE_VALUE' is
     the corresponding initializer.  It is re-evaluated for each element
     of a 'RANGE_EXPR'.  If the 'TREE_PURPOSE' 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 set to zero.

'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'.


File: gccint.info,  Node: Vectors,  Prev: Unary and Binary Expressions,  Up: Expression trees

11.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.


File: gccint.info,  Node: Statements,  Next: Functions,  Prev: Expression trees,  Up: GENERIC

11.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::


File: gccint.info,  Node: Basic Statements,  Next: Blocks,  Up: Statements

11.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

11.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.  To handle
this, we currently split the block at that point, and move the VLA into
a new, inner 'BIND_EXPR'.  This strategy may change in the future.

 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

11.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

11.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

11.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

11.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,  Prev: Cleanups,  Up: Statements

11.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 5
     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 'OMP_SECTIONS' to mark the place where
     the code needs to loop to the next iteration (in the case of
     'OMP_FOR') or the next section (in the case of 'OMP_SECTIONS').

     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 sub-codes 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: Functions,  Next: Language-dependent trees,  Prev: Statements,  Up: GENERIC

11.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

11.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

11.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

11.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

11.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

11.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

11.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

11.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_MARKED_P' and 'BINFO_FLAG_1'
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

11.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

11.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.

11.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.

'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

11.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

11.11 Java Trees
================


File: gccint.info,  Node: GIMPLE,  Next: Tree SSA,  Prev: GENERIC,  Up: Top

12 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::
* 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: GIMPLE instruction set,  Up: GIMPLE

12.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.

12.1.1 'gimple_statement_base' (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.

12.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_statement_base'.

   * '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.

12.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.  The main gimple type is defined to be
the union of all these structures ('GTY' markers elided for clarity):

     union gimple_statement_d
     {
       struct gimple_statement_base gsbase;
       struct gimple_statement_with_ops gsops;
       struct gimple_statement_with_memory_ops gsmem;
       struct gimple_statement_omp omp;
       struct gimple_statement_bind gimple_bind;
       struct gimple_statement_catch gimple_catch;
       struct gimple_statement_eh_filter gimple_eh_filter;
       struct gimple_statement_phi gimple_phi;
       struct gimple_statement_resx gimple_resx;
       struct gimple_statement_try gimple_try;
       struct gimple_statement_wce gimple_wce;
       struct gimple_statement_asm gimple_asm;
       struct gimple_statement_omp_critical gimple_omp_critical;
       struct gimple_statement_omp_for gimple_omp_for;
       struct gimple_statement_omp_parallel gimple_omp_parallel;
       struct gimple_statement_omp_task gimple_omp_task;
       struct gimple_statement_omp_sections gimple_omp_sections;
       struct gimple_statement_omp_single gimple_omp_single;
       struct gimple_statement_omp_continue gimple_omp_continue;
       struct gimple_statement_omp_atomic_load gimple_omp_atomic_load;
       struct gimple_statement_omp_atomic_store gimple_omp_atomic_store;
     };


File: gccint.info,  Node: GIMPLE instruction set,  Next: GIMPLE Exception Handling,  Prev: Tuple representation,  Up: GIMPLE

12.2 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

12.3 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

12.4 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

12.5 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

12.5.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

12.5.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

12.5.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

12.5.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.

12.5.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>>

12.5.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.

12.5.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).

12.5.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 (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.


File: gccint.info,  Node: Manipulating GIMPLE statements,  Next: Tuple specific accessors,  Prev: Operands,  Up: GIMPLE

12.6 Manipulating GIMPLE statements
===================================

This section documents all the functions available to handle each of the
GIMPLE instructions.

12.6.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

12.7 Tuple specific accessors
=============================

* Menu:

* GIMPLE_ASM::
* GIMPLE_ASSIGN::
* GIMPLE_BIND::
* GIMPLE_CALL::
* GIMPLE_CATCH::
* GIMPLE_COND::
* GIMPLE_DEBUG::
* GIMPLE_EH_FILTER::
* GIMPLE_LABEL::
* 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

12.7.1 'GIMPLE_ASM'
-------------------

 -- GIMPLE function: gimple gimple_build_asm (const char *string,
          ninputs, noutputs, nclobbers, ...)
     Build a 'GIMPLE_ASM' statement.  This statement is used for
     building in-line assembly constructs.  'STRING' is the assembly
     code.  'NINPUT' is the number of register inputs.  'NOUTPUT' is the
     number of register outputs.  'NCLOBBERS' is the number of clobbered
     registers.  The rest of the arguments trees for each input, output,
     and clobbered registers.

 -- GIMPLE function: gimple gimple_build_asm_vec (const char *,
          VEC(tree,gc) *, VEC(tree,gc) *, VEC(tree,gc) *)
     Identical to gimple_build_asm, but the arguments are passed in
     VECs.

 -- GIMPLE function: unsigned gimple_asm_ninputs (gimple g)
     Return the number of input operands for 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: unsigned gimple_asm_noutputs (gimple g)
     Return the number of output operands for 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: unsigned gimple_asm_nclobbers (gimple g)
     Return the number of clobber operands for 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: tree gimple_asm_input_op (gimple g, unsigned index)
     Return input operand 'INDEX' of 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: void gimple_asm_set_input_op (gimple 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 (gimple g, unsigned
          index)
     Return output operand 'INDEX' of 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: void gimple_asm_set_output_op (gimple 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 (gimple g, unsigned
          index)
     Return clobber operand 'INDEX' of 'GIMPLE_ASM' 'G'.

 -- GIMPLE function: void gimple_asm_set_clobber_op (gimple 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 (gimple g)
     Return the string representing the assembly instruction in
     'GIMPLE_ASM' 'G'.

 -- GIMPLE function: bool gimple_asm_volatile_p (gimple g)
     Return true if 'G' is an asm statement marked volatile.

 -- GIMPLE function: void gimple_asm_set_volatile (gimple g)
     Mark asm statement 'G' as volatile.

 -- GIMPLE function: void gimple_asm_clear_volatile (gimple g)
     Remove volatile marker from asm statement 'G'.


File: gccint.info,  Node: GIMPLE_ASSIGN,  Next: GIMPLE_BIND,  Prev: GIMPLE_ASM,  Up: Tuple specific accessors

12.7.2 'GIMPLE_ASSIGN'
----------------------

 -- GIMPLE function: gimple 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_ops'.

 -- 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: gimple gimple_build_assign_with_ops (enum tree_code
          subcode, tree lhs, tree op1, tree op2)
     This function is similar to '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 and op2
     are the operands.  If op2 is null, subcode must be a 'tree_code'
     for a unary expression.

 -- 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 (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

12.7.3 'GIMPLE_BIND'
--------------------

 -- GIMPLE function: gimple 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 (gimple g)
     Return the variables declared in the 'GIMPLE_BIND' statement 'G'.

 -- GIMPLE function: void gimple_bind_set_vars (gimple 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 (gimple g, tree vars)
     Append 'VARS' to the set of variables declared in the 'GIMPLE_BIND'
     statement 'G'.

 -- GIMPLE function: gimple_seq gimple_bind_body (gimple g)
     Return the GIMPLE sequence contained in the 'GIMPLE_BIND' statement
     'G'.

 -- GIMPLE function: void gimple_bind_set_body (gimple g, gimple_seq
          seq)
     Set 'SEQ' to be sequence contained in the 'GIMPLE_BIND' statement
     'G'.

 -- GIMPLE function: void gimple_bind_add_stmt (gimple gs, gimple stmt)
     Append a statement to the end of a 'GIMPLE_BIND''s body.

 -- GIMPLE function: void gimple_bind_add_seq (gimple gs, gimple_seq
          seq)
     Append a sequence of statements to the end of a 'GIMPLE_BIND''s
     body.

 -- GIMPLE function: tree gimple_bind_block (gimple 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 (gimple 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

12.7.4 'GIMPLE_CALL'
--------------------

 -- GIMPLE function: gimple 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: gimple 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: gimple gimple_build_call_vec (tree fn, 'VEC'(tree,
          heap) *args)
     Identical to 'gimple_build_call' but the arguments are stored in a
     'VEC'().

 -- 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 (gimple 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 (gimple 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 (gimple 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 (gimple 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 (gimple s)
     Return true if 'GIMPLE_CALL' 'S' is marked as a tail call.

 -- GIMPLE function: void gimple_call_mark_uninlinable (gimple s)
     Mark 'GIMPLE_CALL' 'S' as being uninlinable.

 -- GIMPLE function: bool gimple_call_cannot_inline_p (gimple s)
     Return true if 'GIMPLE_CALL' 'S' cannot be inlined.

 -- 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 (gimple 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

12.7.5 'GIMPLE_CATCH'
---------------------

 -- GIMPLE function: gimple 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 (gimple g)
     Return the types handled by 'GIMPLE_CATCH' statement 'G'.

 -- GIMPLE function: tree * gimple_catch_types_ptr (gimple g)
     Return a pointer to the types handled by 'GIMPLE_CATCH' statement
     'G'.

 -- GIMPLE function: gimple_seq gimple_catch_handler (gimple g)
     Return the GIMPLE sequence representing the body of the handler of
     'GIMPLE_CATCH' statement 'G'.

 -- GIMPLE function: void gimple_catch_set_types (gimple g, tree t)
     Set 'T' to be the set of types handled by 'GIMPLE_CATCH' 'G'.

 -- GIMPLE function: void gimple_catch_set_handler (gimple 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

12.7.6 'GIMPLE_COND'
--------------------

 -- GIMPLE function: gimple 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: gimple 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 (gimple 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 (gimple 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 (gimple 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 (gimple g)
     Return the label used by conditional statement 'G' when its
     predicate evaluates to true.

 -- GIMPLE function: void gimple_cond_set_true_label (gimple 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 (gimple 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 (gimple g)
     Return the label used by conditional statement 'G' when its
     predicate evaluates to false.

 -- GIMPLE function: void gimple_cond_make_false (gimple g)
     Set the conditional 'COND_STMT' to be of the form 'if (1 == 0)'.

 -- GIMPLE function: void gimple_cond_make_true (gimple 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

12.7.7 'GIMPLE_DEBUG'
---------------------

 -- GIMPLE function: gimple 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

12.7.8 'GIMPLE_EH_FILTER'
-------------------------

 -- GIMPLE function: gimple 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 (gimple 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 (gimple g,
          gimple_seq failure)
     Set 'FAILURE' to be the sequence of statements to execute on
     failure for 'GIMPLE_EH_FILTER' 'G'.

 -- GIMPLE function: bool gimple_eh_filter_must_not_throw (gimple g)
     Return the 'EH_FILTER_MUST_NOT_THROW' flag.

 -- GIMPLE function: void gimple_eh_filter_set_must_not_throw (gimple g,
          bool mntp)
     Set the 'EH_FILTER_MUST_NOT_THROW' flag.


File: gccint.info,  Node: GIMPLE_LABEL,  Next: GIMPLE_NOP,  Prev: GIMPLE_EH_FILTER,  Up: Tuple specific accessors

12.7.9 'GIMPLE_LABEL'
---------------------

 -- GIMPLE function: gimple gimple_build_label (tree label)
     Build a 'GIMPLE_LABEL' statement with corresponding to the tree
     label, 'LABEL'.

 -- GIMPLE function: tree gimple_label_label (gimple g)
     Return the 'LABEL_DECL' node used by 'GIMPLE_LABEL' statement 'G'.

 -- GIMPLE function: void gimple_label_set_label (gimple g, tree label)
     Set 'LABEL' to be the 'LABEL_DECL' node used by 'GIMPLE_LABEL'
     statement 'G'.

 -- GIMPLE function: gimple 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 (gimple 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_LABEL,  Up: Tuple specific accessors

12.7.10 '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

12.7.11 'GIMPLE_OMP_ATOMIC_LOAD'
--------------------------------

 -- GIMPLE function: gimple 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 (gimple g, tree
          lhs)
     Set the 'LHS' of an atomic load.

 -- GIMPLE function: tree gimple_omp_atomic_load_lhs (gimple g)
     Get the 'LHS' of an atomic load.

 -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (gimple g, tree
          rhs)
     Set the 'RHS' of an atomic set.

 -- GIMPLE function: tree gimple_omp_atomic_load_rhs (gimple 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

12.7.12 'GIMPLE_OMP_ATOMIC_STORE'
---------------------------------

 -- GIMPLE function: gimple 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 (gimple g,
          tree val)
     Set the value being stored in an atomic store.

 -- GIMPLE function: tree gimple_omp_atomic_store_val (gimple 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

12.7.13 'GIMPLE_OMP_CONTINUE'
-----------------------------

 -- GIMPLE function: gimple 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 (gimple s)
     Return the definition of the control variable on a
     'GIMPLE_OMP_CONTINUE' in 'S'.

 -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (gimple s)
     Same as above, but return the pointer.

 -- GIMPLE function: tree gimple_omp_continue_set_control_def (gimple s)
     Set the control variable definition for a 'GIMPLE_OMP_CONTINUE'
     statement in 'S'.

 -- GIMPLE function: tree gimple_omp_continue_control_use (gimple s)
     Return the use of the control variable on a 'GIMPLE_OMP_CONTINUE'
     in 'S'.

 -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (gimple s)
     Same as above, but return the pointer.

 -- GIMPLE function: tree gimple_omp_continue_set_control_use (gimple 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

12.7.14 'GIMPLE_OMP_CRITICAL'
-----------------------------

 -- GIMPLE function: gimple 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 (gimple g)
     Return the name associated with 'OMP_CRITICAL' statement 'G'.

 -- GIMPLE function: tree * gimple_omp_critical_name_ptr (gimple g)
     Return a pointer to the name associated with 'OMP' critical
     statement 'G'.

 -- GIMPLE function: void gimple_omp_critical_set_name (gimple 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

12.7.15 'GIMPLE_OMP_FOR'
------------------------

 -- GIMPLE function: gimple 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 'OMP'
     loop construct's clauses: private, firstprivate, lastprivate,
     reductions, ordered, schedule, and nowait.  '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

12.7.16 '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

12.7.17 '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

12.7.18 'GIMPLE_OMP_PARALLEL'
-----------------------------

 -- GIMPLE function: gimple 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 (gimple g)
     Return a pointer to the clauses associated with 'OMP_PARALLEL' 'G'.

 -- GIMPLE function: void gimple_omp_parallel_set_clauses (gimple g,
          tree clauses)
     Set 'CLAUSES' to be the list of clauses associated with
     'OMP_PARALLEL' 'G'.

 -- GIMPLE function: tree gimple_omp_parallel_child_fn (gimple g)
     Return the child function used to hold the body of 'OMP_PARALLEL'
     'G'.

 -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr (gimple 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 (gimple g,
          tree child_fn)
     Set 'CHILD_FN' to be the child function for 'OMP_PARALLEL' 'G'.

 -- GIMPLE function: tree gimple_omp_parallel_data_arg (gimple 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 (gimple g)
     Return a pointer to the data argument for 'OMP_PARALLEL' 'G'.

 -- GIMPLE function: void gimple_omp_parallel_set_data_arg (gimple g,
          tree data_arg)
     Set 'DATA_ARG' to be the data argument for 'OMP_PARALLEL' 'G'.

 -- GIMPLE function: bool is_gimple_omp (gimple stmt)
     Returns true when the gimple statement 'STMT' is any of the OpenMP
     types.


File: gccint.info,  Node: GIMPLE_OMP_RETURN,  Next: GIMPLE_OMP_SECTION,  Prev: GIMPLE_OMP_PARALLEL,  Up: Tuple specific accessors

12.7.19 '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

12.7.20 '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

12.7.21 'GIMPLE_OMP_SECTIONS'
-----------------------------

 -- GIMPLE function: gimple 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

12.7.22 'GIMPLE_OMP_SINGLE'
---------------------------

 -- GIMPLE function: gimple 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 (gimple 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

12.7.23 '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 (gimple 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 (gimple 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

12.7.24 'GIMPLE_RESX'
---------------------

 -- GIMPLE function: gimple 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 (gimple g)
     Return the region number for 'GIMPLE_RESX' 'G'.

 -- GIMPLE function: void gimple_resx_set_region (gimple 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

12.7.25 'GIMPLE_RETURN'
-----------------------

 -- GIMPLE function: gimple gimple_build_return (tree retval)
     Build a 'GIMPLE_RETURN' statement whose return value is retval.

 -- GIMPLE function: tree gimple_return_retval (gimple g)
     Return the return value for 'GIMPLE_RETURN' 'G'.

 -- GIMPLE function: void gimple_return_set_retval (gimple 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

12.7.26 'GIMPLE_SWITCH'
-----------------------

 -- GIMPLE function: gimple gimple_build_switch (tree index, tree
          default_label, 'VEC'(tree,heap) *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 (gimple g)
     Return the number of labels associated with the switch statement
     'G'.

 -- GIMPLE function: void gimple_switch_set_num_labels (gimple g,
          unsigned nlabels)
     Set 'NLABELS' to be the number of labels for the switch statement
     'G'.

 -- GIMPLE function: tree gimple_switch_index (gimple g)
     Return the index variable used by the switch statement 'G'.

 -- GIMPLE function: void gimple_switch_set_index (gimple g, tree index)
     Set 'INDEX' to be the index variable for switch statement 'G'.

 -- GIMPLE function: tree gimple_switch_label (gimple 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 (gimple 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 (gimple g)
     Return the default label for a switch statement.

 -- GIMPLE function: void gimple_switch_set_default_label (gimple 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

12.7.27 'GIMPLE_TRY'
--------------------

 -- GIMPLE function: gimple 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 (gimple 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 (gimple 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

12.7.28 '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

12.8 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

12.9 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

12.10 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 structure, and an entry in 'union
gimple_statement_d', both of which are 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 of type
gimple.

 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'.


File: gccint.info,  Node: Statement and operand traversals,  Prev: Adding a new GIMPLE statement code,  Up: GIMPLE

12.11 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: Loop Analysis and Representation,  Prev: GIMPLE,  Up: Top

13 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

13.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'.

 Presently, we define annotations for variables ('var_ann_t').
Annotations are defined and documented in 'tree-flow.h'.


File: gccint.info,  Node: SSA Operands,  Next: SSA,  Prev: Annotations,  Up: Tree SSA

13.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'.

13.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_VMAYUSE          0x08    /* USE portion of VDEFS.  */
          #define SSA_OP_VDEF             0x10    /* DEF portion of VDEFS.  */

          /* These are commonly grouped operand flags.  */
          #define SSA_OP_VIRTUAL_USES     (SSA_OP_VUSE | SSA_OP_VMAYUSE)
          #define SSA_OP_VIRTUAL_DEFS     (SSA_OP_VDEF)
          #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_VMAYUSE').  If all
you want to look at are the 'VDEF's together, there is a fourth iterator
macro for this, which returns both a def_operand_p and a use_operand_p
for each 'VDEF' in the statement.  Note that you don't need any flags
for this one.

       use_operand_p use_p;
       def_operand_p def_p;
       ssa_op_iter iter;

       FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
         {
           my_code;
         }

 There are many examples in the code as well, as well as the
documentation in 'tree-ssa-operands.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;
       }

13.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 'mark_stmt_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

13.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 macros can be used to examine PHI nodes

 -- Macro: PHI_RESULT (PHI)
     Returns the 'SSA_NAME' created by PHI node PHI (i.e., PHI's LHS).

 -- Macro: 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.

 -- Macro: PHI_ARG_ELT (PHI, I)
     Returns a tuple representing the Ith argument of PHI.  Each element
     of this tuple contains an 'SSA_NAME' VAR and the incoming edge
     through which VAR flows.

 -- Macro: PHI_ARG_EDGE (PHI, I)
     Returns the incoming edge for the Ith argument of PHI.

 -- Macro: PHI_ARG_DEF (PHI, I)
     Returns the 'SSA_NAME' for the Ith argument of PHI.

13.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.

13.3.2 Preserving the virtual SSA form
--------------------------------------

The virtual SSA form is harder to preserve than the non-virtual SSA form
mainly because the set of virtual operands for a statement may change at
what some would consider unexpected times.  In general, statement
modifications should be bracketed between calls to 'push_stmt_changes'
and 'pop_stmt_changes'.  For example,

         munge_stmt (tree stmt)
         {
            push_stmt_changes (&stmt);
            ... rewrite STMT ...
            pop_stmt_changes (&stmt);
         }

 The call to 'push_stmt_changes' saves the current state of the
statement operands and the call to 'pop_stmt_changes' compares the saved
state with the current one and does the appropriate symbol marking for
the SSA renamer.

 It is possible to modify several statements at a time, provided that
'push_stmt_changes' and 'pop_stmt_changes' are called in LIFO order, as
when processing a stack of statements.

 Additionally, if the pass discovers that it did not need to make
changes to the statement after calling 'push_stmt_changes', it can
simply discard the topmost change buffer by calling
'discard_stmt_changes'.  This will avoid the expensive operand re-scan
operation and the buffer comparison that determines if symbols need to
be marked for renaming.

13.3.3 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.

13.3.4 Walking use-def chains
-----------------------------

 -- Tree SSA function: void walk_use_def_chains (VAR, FN, DATA)

     Walks use-def chains starting at the 'SSA_NAME' node VAR.  Calls
     function FN at each reaching definition found.  Function FN takes
     three arguments: VAR, its defining statement (DEF_STMT) and a
     generic pointer to whatever state information that FN may want to
     maintain (DATA).  Function FN is able to stop the walk by returning
     'true', otherwise in order to continue the walk, FN should return
     'false'.

     Note, that if DEF_STMT is a 'PHI' node, the semantics are slightly
     different.  For each argument ARG of the PHI node, this function
     will:

       1. Walk the use-def chains for ARG.
       2. Call 'FN (ARG, PHI, DATA)'.

     Note how the first argument to FN is no longer the original
     variable VAR, but the PHI argument currently being examined.  If FN
     wants to get at VAR, it should call 'PHI_RESULT' (PHI).

13.3.5 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

13.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

13.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: Loop Analysis and Representation,  Next: Control Flow,  Prev: Tree SSA,  Up: Top

14 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.
* Lambda::                      Linear loop transformations framework.
* Omega::                       A solver for linear programming problems.


File: gccint.info,  Node: Loop representation,  Next: Loop querying,  Up: Loop Analysis and Representation

14.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'.  At
the moment, loop structures are analyzed and this information is updated
only by the optimization passes that deal with loops, but some efforts
are being made to make it available throughout most of the optimization
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 memory occupied by the loops structures should be freed with
'loop_optimizer_finalize' function.

 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.


File: gccint.info,  Node: Loop querying,  Next: Loop manipulation,  Prev: Loop representation,  Up: Loop Analysis and Representation

14.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).
   * 'depth': The depth of the loop in the loops tree, i.e., the number
     of super-loops of the loop.
   * '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:

   * '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

14.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

14.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

14.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

14.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

14.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,  Next: Lambda,  Prev: Number of iterations,  Up: Loop Analysis and Representation

14.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: Lambda,  Next: Omega,  Prev: Dependency analysis,  Up: Loop Analysis and Representation

14.9 Linear loop transformations framework
==========================================

Lambda is a framework that allows transformations of loops using
non-singular matrix based transformations of the iteration space and
loop bounds.  This allows compositions of skewing, scaling, interchange,
and reversal transformations.  These transformations are often used to
improve cache behavior or remove inner loop dependencies to allow
parallelization and vectorization to take place.

 To perform these transformations, Lambda requires that the loopnest be
converted into an internal form that can be matrix transformed easily.
To do this conversion, the function 'gcc_loopnest_to_lambda_loopnest' is
provided.  If the loop cannot be transformed using lambda, this function
will return NULL.

 Once a 'lambda_loopnest' is obtained from the conversion function, it
can be transformed by using 'lambda_loopnest_transform', which takes a
transformation matrix to apply.  Note that it is up to the caller to
verify that the transformation matrix is legal to apply to the loop
(dependence respecting, etc).  Lambda simply applies whatever matrix it
is told to provide.  It can be extended to make legal matrices out of
any non-singular matrix, but this is not currently implemented.
Legality of a matrix for a given loopnest can be verified using
'lambda_transform_legal_p'.

 Given a transformed loopnest, conversion back into gcc IR is done by
'lambda_loopnest_to_gcc_loopnest'.  This function will modify the loops
so that they match the transformed loopnest.


File: gccint.info,  Node: Omega,  Prev: Lambda,  Up: Loop Analysis and Representation

14.10 Omega a solver for linear programming problems
====================================================

The data dependence analysis contains several solvers triggered
sequentially from the less complex ones to the more sophisticated.  For
ensuring the consistency of the results of these solvers, a data
dependence check pass has been implemented based on two different
solvers.  The second method that has been integrated to GCC is based on
the Omega dependence solver, written in the 1990's by William Pugh and
David Wonnacott.  Data dependence tests can be formulated using a subset
of the Presburger arithmetics that can be translated to linear
constraint systems.  These linear constraint systems can then be solved
using the Omega solver.

 The Omega solver is using Fourier-Motzkin's algorithm for variable
elimination: a linear constraint system containing 'n' variables is
reduced to a linear constraint system with 'n-1' variables.  The Omega
solver can also be used for solving other problems that can be expressed
under the form of a system of linear equalities and inequalities.  The
Omega solver is known to have an exponential worst case, also known
under the name of "omega nightmare" in the literature, but in practice,
the omega test is known to be efficient for the common data dependence
tests.

 The interface used by the Omega solver for describing the linear
programming problems is described in 'omega.h', and the solver is
'omega_solve_problem'.


File: gccint.info,  Node: Control Flow,  Next: Machine Desc,  Prev: Loop Analysis and Representation,  Up: Top

15 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.c').  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

15.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.  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)
       {
        gimple_stmt_iterator si;

        for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
          {
            gimple phi = gsi_stmt (si);
            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

15.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

15.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

15.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 modifier 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

15.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: Machine Desc,  Next: Target Macros,  Prev: Control Flow,  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
==========================================

Each instruction pattern 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 pattern or C code to generate the
assembler output, all wrapped up in a 'define_insn' expression.

 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 entirely
     equivalent to having a nameless pattern for all other purposes.

  2. The "RTL template" (*note RTL Template::) is a vector of incomplete
     RTL expressions which show what the instruction should look like.
     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 only one element, that element is the template
     for the instruction pattern.  If the vector has multiple elements,
     then the instruction pattern is a 'parallel' expression containing
     the elements described.

  3. A condition.  This is a string which contains a C expression that
     is the final test to decide whether an insn body matches this
     pattern.

     For a named pattern, 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.

     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 can't be used to control register allocation, for
     example by excluding certain hard registers or hard register
     combinations.

  4. The "output template": a string that says how to output matching
     insns as assembler code.  '%' in this string specifies where to
     substitute the value of an operand.  *Note Output Template::.

     When simple substitution isn't general enough, you can specify a
     piece of C code to compute the output.  *Note Output Statement::.

  5. Optionally, a 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 actual example of an instruction pattern, 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 is an instruction that sets the condition codes based on the value
of a general operand.  It has no condition, so any insn whose RTL
description has the form shown may be handled according 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" PRED)

     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;
               enum 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 the 'enabled' attribute.
* 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.  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.

 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 write-only for this instruction: the
     previous value is discarded and replaced by output 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 inputs to the instruction and
     which are outputs from it.  '=' identifies an output; '+'
     identifies an operand that is both input and output; all other
     operands are assumed to be input only.

     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 modified before the instruction is
     finished using the input operands.  Therefore, this operand may not
     lie in a register that is used as an input operand 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.

     An input operand 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 inputs can be affected by the earlyclobber.
     See, for example, the 'mulsi3' insn of the ARM.

     '&' does not obviate the need to write '='.

'%'
     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.  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

     'Usa'
          An absolute symbolic address

     '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'_
     'w'
          VFP floating-point register

     '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.

_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'.

_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

_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

_picoChip family--'picochip.h'_
     'k'
          Stack register.

     'f'
          Pointer register.  A register which can be used to access
          memory without supplying an offset.  Any other register can be
          used to access memory, but will need a constant offset.  In
          the case of the offset being zero, it is more efficient to use
          a pointer register, since this reduces code size.

     't'
          A twin register.  A register which may be paired with an
          adjacent register to create a 32-bit register.

     'a'
          Any absolute memory address (e.g., symbolic constant, symbolic
          constant + offset).

     'I'
          4-bit signed integer.

     'J'
          4-bit unsigned integer.

     'K'
          8-bit signed integer.

     'M'
          Any constant whose absolute value is no greater than 4-bits.

     'N'
          10-bit signed integer

     'O'
          16-bit signed integer.

_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', '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.

     'wd'
          VSX vector register to hold vector double data 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).

     '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.

     'wQ'
          A memory address that will work with the 'lq' and 'stq'
          instructions.

     'h'
          'MQ', 'CTR', or 'LINK' register

     'q'
          'MQ' 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)

     'S'
          Constant suitable as a 64-bit mask operand

     'T'
          Constant suitable as a 32-bit mask operand

     'U'
          System V Release 4 small data area reference

     't'
          AND masks that can be performed by two rldic{l, r}
          instructions

     'W'
          Vector constant that does not require memory

     'j'
          Vector constant that is all zeros.

_Intel 386--'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'
          Standard SSE floating point constant.

     '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).

_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 '>'.

_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.

_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.

_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.

_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.

_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.

_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.

_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.

_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.

_Score family--'config/score/score.h'_
     'd'
          Registers from r0 to r32.

     'e'
          Registers from r0 to r16.

     't'
          r8--r11 or r22--r27 registers.

     'h'
          hi register.

     'l'
          lo register.

     'x'
          hi + lo register.

     'q'
          cnt register.

     'y'
          lcb register.

     'z'
          scb register.

     'a'
          cnt + lcb + scb register.

     'c'
          cr0--cr15 register.

     'b'
          cp1 registers.

     'f'
          cp2 registers.

     'i'
          cp3 registers.

     'j'
          cp1 + cp2 + cp3 registers.

     'I'
          High 16-bit constant (32-bit constant with 16 LSBs zero).

     'J'
          Unsigned 5 bit integer (in the range 0 to 31).

     'K'
          Unsigned 16 bit integer (in the range 0 to 65535).

     'L'
          Signed 16 bit integer (in the range -32768 to 32767).

     'M'
          Unsigned 14 bit integer (in the range 0 to 16383).

     'N'
          Signed 14 bit integer (in the range -8192 to 8191).

     'Z'
          Any SYMBOL_REF.

_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.

_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.

_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
--------------------------------------------------------------

The 'enabled' insn attribute may be used to disable certain insn
alternatives for machine-specific reasons.  This is useful when adding
new instructions to an existing pattern which are only available for
certain cpu architecture levels as specified with the '-march=' option.

 If an insn alternative is disabled, then it will never be used.  The
compiler treats the constraints for the disabled alternative as
unsatisfiable.

 In order to make use of the 'enabled' attribute a back end has to add
in the machine description files:

  1. A definition of the 'enabled' insn attribute.  The attribute is
     defined as usual using the 'define_attr' command.  This definition
     should be based on other insn attributes and/or target flags.  The
     'enabled' attribute is a numeric attribute and should evaluate to
     '(const_int 1)' for an enabled alternative and to '(const_int 0)'
     otherwise.
  2. A definition of another insn attribute used to describe for what
     reason an insn alternative might be available or not.  E.g.
     'cpu_facility' as in the example below.
  3. An assignment for the second attribute to each insn definition
     combining instructions which are not all available under the same
     circumstances.  (Note: It obviously only makes sense for
     definitions with more than one alternative.  Otherwise the insn
     pattern should be disabled or enabled using the insn condition.)

 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_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
machine-specific constraints.  None of these interfaces work with the
generic constraints described in *note Simple Constraints::.  This may
change in the future.

 *Warning:* 'tm_p.h' may declare other functions that operate on
constraints, besides the ones documented here.  Do not use those
functions from machine-dependent code.  They exist to implement the old
constraint interface that machine-independent components of the compiler
still expect.  They will change or disappear in the future.

 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 machine-specific constraint, 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.

     Machine-independent constraints do not have associated constants.
     This may change in the future.

 -- Function: inline bool satisfies_constraint_M (rtx EXP)
     For each machine-specific, non-register constraint M, 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 regclass_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.

'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.

'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.

'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 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.

'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.

'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.

'reduc_smin_M', 'reduc_smax_M'
     Find the signed minimum/maximum of the elements of a vector.  The
     vector is operand 1, and the scalar result is stored in the least
     significant bits of operand 0 (also a vector).  The output and
     input vector should have the same modes.

'reduc_umin_M', 'reduc_umax_M'
     Find the unsigned minimum/maximum of the elements of a vector.  The
     vector is operand 1, and the scalar result is stored in the least
     significant bits of operand 0 (also a vector).  The output and
     input vector should have the same modes.

'reduc_splus_M'
     Compute the sum of the signed elements of a vector.  The vector is
     operand 1, and the scalar result is stored in the least significant
     bits of operand 0 (also a vector).  The output and input vector
     should have the same modes.

'reduc_uplus_M'
     Compute the sum of the unsigned elements of a vector.  The vector
     is operand 1, and the scalar result is stored in the least
     significant bits of operand 0 (also a vector).  The output and
     input vector should have the same modes.

'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.

'ssum_widenM3'
'usum_widenM3'
     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_shl_M', 'vec_shr_M'
     Whole vector left/right shift in bits.  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).

'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 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.

'absM2'
     Store the absolute value of operand 1 into operand 0.

'sqrtM2'
     Store the square root of operand 1 into operand 0.

     The 'sqrt' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'sqrtf' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'fmodM3'
     Store the remainder of dividing operand 1 by operand 2 into operand
     0, rounded towards zero to an integer.

     The 'fmod' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'fmodf' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'remainderM3'
     Store the remainder of dividing operand 1 by operand 2 into operand
     0, rounded to the nearest integer.

     The 'remainder' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'remainderf'
     built-in function uses the mode which corresponds to the C data
     type 'float'.

'cosM2'
     Store the cosine of operand 1 into operand 0.

     The 'cos' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'cosf' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'sinM2'
     Store the sine of operand 1 into operand 0.

     The 'sin' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'sinf' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'sincosM3'
     Store the cosine of operand 2 into operand 0 and the sine of
     operand 2 into operand 1.

     The 'sin' and 'cos' built-in functions of C always use the mode
     which corresponds to the C data type 'double' and the 'sinf' and
     'cosf' built-in function use the mode which corresponds to the C
     data type 'float'.  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.

'expM2'
     Store the exponential of operand 1 into operand 0.

     The 'exp' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'expf' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'logM2'
     Store the natural logarithm of operand 1 into operand 0.

     The 'log' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'logf' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'powM3'
     Store the value of operand 1 raised to the exponent operand 2 into
     operand 0.

     The 'pow' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'powf' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'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.

     The 'atan2' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'atan2f' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'floorM2'
     Store the largest integral value not greater than argument.

     The 'floor' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'floorf' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'btruncM2'
     Store the argument rounded to integer towards zero.

     The 'trunc' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'truncf' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'roundM2'
     Store the argument rounded to integer away from zero.

     The 'round' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'roundf' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'ceilM2'
     Store the argument rounded to integer away from zero.

     The 'ceil' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'ceilf' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'nearbyintM2'
     Store the argument rounded according to the default rounding mode

     The 'nearbyint' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'nearbyintf'
     built-in function uses the mode which corresponds to the C data
     type 'float'.

'rintM2'
     Store the argument rounded according to the default rounding mode
     and raise the inexact exception when the result differs in value
     from the argument

     The 'rint' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'rintf' built-in
     function uses the mode which corresponds to the C data type
     'float'.

'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.

     The 'copysign' built-in function of C always uses the mode which
     corresponds to the C data type 'double' and the 'copysignf'
     built-in function uses the mode which corresponds to the C data
     type 'float'.

'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 the
     mode of operand 0; operand 1's mode is specified by the instruction
     pattern, and the compiler will convert the operand to that mode
     before generating the instruction.

     The 'ffs' built-in function of C always uses the mode which
     corresponds to the C data type 'int'.

'clzM2'
     Store into operand 0 the number of leading 0-bits in X, starting at
     the most significant bit position.  If X is 0, the
     'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
     result is undefined or has a useful value.  M is the mode of
     operand 0; operand 1's mode is specified by the instruction
     pattern, and the compiler will convert the operand to that mode
     before generating the instruction.

'ctzM2'
     Store into operand 0 the number of trailing 0-bits in X, starting
     at the least significant bit position.  If X is 0, the
     'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
     result is undefined or has a useful value.  M is the mode of
     operand 0; operand 1's mode is specified by the instruction
     pattern, and the compiler will convert the operand to that mode
     before generating the instruction.

'popcountM2'
     Store into operand 0 the number of 1-bits in X.  M is the mode of
     operand 0; operand 1's mode is specified by the instruction
     pattern, and the compiler will convert the operand to that mode
     before generating the instruction.

'parityM2'
     Store into operand 0 the parity of X, i.e. the number of 1-bits in
     X modulo 2.  M is the mode of operand 0; operand 1's mode is
     specified by the instruction pattern, and the compiler will convert
     the operand to that mode before generating the instruction.

'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 'word_mode' for M.  However, if you can
     generate better code knowing the range of valid lengths is smaller
     than those representable in a full word, 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
     'word_mode'.

     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.

'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)'.

     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.

'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 a 'label_ref' that refers to the label to jump to.

'jump'
     A jump inside a function; an unconditional branch.  Operand 0 is
     the 'label_ref' of the 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_insn'.  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.  This instruction takes five operands:
     Operand 0 is the register to decrement and test; operand 1 is the
     number of loop iterations as a 'const_int' or 'const0_rtx' if this
     cannot be determined until run-time; operand 2 is the actual or
     estimated maximum number of iterations as a 'const_int'; operand 3
     is the number of enclosed loops as a 'const_int' (an innermost loop
     has a value of 1); operand 4 is the label to jump to if the
     register is nonzero; operand 5 is const1_rtx if the loop in entered
     at its top, const0_rtx otherwise.  *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.  If nested low-overhead
     looping is not supported, use a 'define_expand' (*note Expander
     Definitions::) and make the pattern fail if operand 3 is not
     'const1_rtx'.  Similarly, if the actual or estimated maximum number
     of iterations is too large for this instruction, make it fail.

'doloop_begin'
     Companion instruction to 'doloop_end' required for machines that
     need to perform some initialization, such as loading special
     registers used by a low-overhead looping instruction.  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.
* 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 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::.

 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).

 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: Delay Slots,  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: Delay Slots,  Next: Processor pipeline description,  Prev: Constant Attributes,  Up: Insn Attributes

16.19.7 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.8 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 behaviour 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")

 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'.

 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 "neon_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 "neon_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 "neon_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.
* Old Constraints::     The old way to define machine-specific constraints.
* 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 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: 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.in'.

 -- 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.


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_UNIT
     Define this macro to be the number of bits in an addressable
     storage unit (byte).  If you do not define this macro the default
     is 8.

 -- 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: enum machine_mode TARGET_PROMOTE_FUNCTION_MODE
          (const_tree TYPE, enum 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.

 -- 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.  '(((unsigned HOST_WIDEST_INT) 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: 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.

     If this macro is not defined, then BASIC-ALIGN is used.

     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 '!TARGET_STRICT_ALIGN'.

 -- Target Hook: bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree FIELD,
          enum 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 'enum 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 'enum 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: enum 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: enum 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: enum machine_mode TARGET_UNWIND_WORD_MODE (void)
     Return machine mode to be used for '_Unwind_Word' type.  The
     default is to use 'word_mode'.

 -- Macro: ROUND_TOWARDS_ZERO
     If defined, this macro should be true if the prevailing rounding
     mode is towards zero.

     Defining this macro only affects the way 'libgcc.a' emulates
     floating-point arithmetic.

     Not defining this macro is equivalent to returning zero.

 -- Macro: LARGEST_EXPONENT_IS_NORMAL (SIZE)
     This macro should return true if floats with SIZE bits do not have
     a NaN or infinity representation, but use the largest exponent for
     normal numbers instead.

     Defining this macro only affects the way 'libgcc.a' emulates
     floating-point arithmetic.

     The default definition of this macro returns false for all sizes.

 -- 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_LONG_DOUBLE_TYPE_SIZE
     Define this macro if 'LONG_DOUBLE_TYPE_SIZE' is not constant or if
     you want routines in 'libgcc2.a' for a size other than
     'LONG_DOUBLE_TYPE_SIZE'.  If you don't define this, the default is
     'LONG_DOUBLE_TYPE_SIZE'.

 -- Macro: LIBGCC2_HAS_DF_MODE
     Define this macro if neither 'DOUBLE_TYPE_SIZE' nor
     'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 'DFmode' but you want 'DFmode'
     routines in 'libgcc2.a' anyway.  If you don't define this and
     either 'DOUBLE_TYPE_SIZE' or 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64
     then the default is 1, otherwise it is 0.

 -- Macro: LIBGCC2_HAS_XF_MODE
     Define this macro if 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
     'XFmode' but you want 'XFmode' routines in 'libgcc2.a' anyway.  If
     you don't define this and 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 80
     then the default is 1, otherwise it is 0.

 -- Macro: LIBGCC2_HAS_TF_MODE
     Define this macro if 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
     'TFmode' but you want 'TFmode' routines in 'libgcc2.a' anyway.  If
     you don't define this and 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 128
     then the default is 1, otherwise it is 0.

 -- 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: SF_SIZE
 -- Macro: DF_SIZE
 -- Macro: XF_SIZE
 -- Macro: TF_SIZE
     Define these macros to be the size in bits of the mantissa of
     'SFmode', 'DFmode', 'XFmode' and 'TFmode' values, if the defaults
     in 'libgcc2.h' are inappropriate.  By default, 'FLT_MANT_DIG' is
     used for 'SF_SIZE', 'LDBL_MANT_DIG' for 'XF_SIZE' and 'TF_SIZE',
     and 'DBL_MANT_DIG' or 'LDBL_MANT_DIG' for 'DF_SIZE' according to
     whether 'DOUBLE_TYPE_SIZE' or 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is
     64.

 -- 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 define the macro
     'REG_CLASS_FROM_LETTER' / 'REG_CLASS_FROM_CONSTRAINT' to return
     'NO_REGS' if it is called with a letter for a class 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,
     this macro should be defined.

 -- 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: Old Constraints,  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, enum 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, enum 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 the example, loading 32-bit integer or floating-point objects
     into floating-point registers on the 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)

 -- Target Hook: bool TARGET_LRA_P (void)
     A target hook which returns true if we use LRA instead of reload
     pass.  It means that LRA was ported to the target.  The default
     version of this target hook returns always false.

 -- 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_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: reg_class_t TARGET_SPILL_CLASS (reg_class_t, enum
          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.


File: gccint.info,  Node: Old Constraints,  Next: Stack and Calling,  Prev: Register Classes,  Up: Target Macros

17.9 Obsolete Macros for Defining Constraints
=============================================

Machine-specific constraints can be defined with these macros instead of
the machine description constructs described in *note Define
Constraints::.  This mechanism is obsolete.  New ports should not use
it; old ports should convert to the new mechanism.

 -- Macro: CONSTRAINT_LEN (CHAR, STR)
     For the constraint at the start of STR, which starts with the
     letter C, return the length.  This allows you to have register
     class / constant / extra constraints that are longer than a single
     letter; you don't need to define this macro if you can do with
     single-letter constraints only.  The definition of this macro
     should use DEFAULT_CONSTRAINT_LEN for all the characters that you
     don't want to handle specially.  There are some sanity checks in
     genoutput.c that check the constraint lengths for the md file, so
     you can also use this macro to help you while you are transitioning
     from a byzantine single-letter-constraint scheme: when you return a
     negative length for a constraint you want to re-use, genoutput will
     complain about every instance where it is used in the md file.

 -- Macro: REG_CLASS_FROM_LETTER (CHAR)
     A C expression which defines the machine-dependent operand
     constraint letters for register classes.  If CHAR is such a letter,
     the value should be the register class corresponding to it.
     Otherwise, the value should be 'NO_REGS'.  The register letter 'r',
     corresponding to class 'GENERAL_REGS', will not be passed to this
     macro; you do not need to handle it.

 -- Macro: REG_CLASS_FROM_CONSTRAINT (CHAR, STR)
     Like 'REG_CLASS_FROM_LETTER', but you also get the constraint
     string passed in STR, so that you can use suffixes to distinguish
     between different variants.

 -- Macro: CONST_OK_FOR_LETTER_P (VALUE, C)
     A C expression that defines the machine-dependent operand
     constraint letters ('I', 'J', 'K', ... 'P') that specify particular
     ranges of integer values.  If C is one of those letters, the
     expression should check that VALUE, an integer, is in the
     appropriate range and return 1 if so, 0 otherwise.  If C is not one
     of those letters, the value should be 0 regardless of VALUE.

 -- Macro: CONST_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
     Like 'CONST_OK_FOR_LETTER_P', but you also get the constraint
     string passed in STR, so that you can use suffixes to distinguish
     between different variants.

 -- Macro: CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)
     A C expression that defines the machine-dependent operand
     constraint letters that specify particular ranges of 'const_double'
     values ('G' or 'H').

     If C is one of those letters, the expression should check that
     VALUE, an RTX of code 'const_double', is in the appropriate range
     and return 1 if so, 0 otherwise.  If C is not one of those letters,
     the value should be 0 regardless of VALUE.

     'const_double' is used for all floating-point constants and for
     'DImode' fixed-point constants.  A given letter can accept either
     or both kinds of values.  It can use 'GET_MODE' to distinguish
     between these kinds.

 -- Macro: CONST_DOUBLE_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
     Like 'CONST_DOUBLE_OK_FOR_LETTER_P', but you also get the
     constraint string passed in STR, so that you can use suffixes to
     distinguish between different variants.

 -- Macro: EXTRA_CONSTRAINT (VALUE, C)
     A C expression that defines the optional machine-dependent
     constraint letters that can be used to segregate specific types of
     operands, usually memory references, for the target machine.  Any
     letter that is not elsewhere defined and not matched by
     'REG_CLASS_FROM_LETTER' / 'REG_CLASS_FROM_CONSTRAINT' may be used.
     Normally this macro will not be defined.

     If it is required for a particular target machine, it should return
     1 if VALUE corresponds to the operand type represented by the
     constraint letter C.  If C is not defined as an extra constraint,
     the value returned should be 0 regardless of VALUE.

     For example, on the ROMP, load instructions cannot have their
     output in r0 if the memory reference contains a symbolic address.
     Constraint letter 'Q' is defined as representing a memory address
     that does _not_ contain a symbolic address.  An alternative is
     specified with a 'Q' constraint on the input and 'r' on the output.
     The next alternative specifies 'm' on the input and a register
     class that does not include r0 on the output.

 -- Macro: EXTRA_CONSTRAINT_STR (VALUE, C, STR)
     Like 'EXTRA_CONSTRAINT', but you also get the constraint string
     passed in STR, so that you can use suffixes to distinguish between
     different variants.

 -- Macro: EXTRA_MEMORY_CONSTRAINT (C, STR)
     A C expression that defines the optional machine-dependent
     constraint letters, amongst those accepted by 'EXTRA_CONSTRAINT',
     that should be treated like memory constraints by the reload pass.

     It should return 1 if the operand type represented by the
     constraint at the start of STR, the first letter of which is the
     letter C, comprises a subset of all memory references including all
     those whose address is simply a base register.  This allows the
     reload pass to reload an operand, if it does not directly
     correspond to the operand type of C, by copying its address into a
     base register.

     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 via
     'EXTRA_CONSTRAINT' as representing a memory address of this type.
     If the letter 'Q' is marked as 'EXTRA_MEMORY_CONSTRAINT', a 'Q'
     constraint can handle any memory operand, because the reload pass
     knows it can be reloaded by copying the memory address into a base
     register if required.  This is analogous to the way an 'o'
     constraint can handle any memory operand.

 -- Macro: EXTRA_ADDRESS_CONSTRAINT (C, STR)
     A C expression that defines the optional machine-dependent
     constraint letters, amongst those accepted by 'EXTRA_CONSTRAINT' /
     'EXTRA_CONSTRAINT_STR', that should be treated like address
     constraints by the reload pass.

     It should return 1 if the operand type represented by the
     constraint at the start of STR, which starts with the letter C,
     comprises a subset of all memory addresses including all those that
     consist of just a base register.  This allows the reload pass to
     reload an operand, if it does not directly correspond to the
     operand type of STR, by copying it into a base register.

     Any constraint marked as 'EXTRA_ADDRESS_CONSTRAINT' can only be
     used with the 'address_operand' predicate.  It is treated
     analogously to the 'p' constraint.


File: gccint.info,  Node: Stack and Calling,  Next: Varargs,  Prev: Old Constraints,  Up: Target Macros

17.10 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::


File: gccint.info,  Node: Frame Layout,  Next: Exception Handling,  Up: Stack and Calling

17.10.1 Basic Stack Layout
--------------------------

Here is the basic stack layout.

 -- Macro: STACK_GROWS_DOWNWARD
     Define this macro if pushing a word onto the stack moves the stack
     pointer to a smaller address.

     When we say, "define this macro if ...", it means that the compiler
     checks this macro only with '#ifdef' so the precise definition used
     does not matter.

 -- 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 defined,
     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
     If defined, 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.

 -- 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 defined.

     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 if the return address of a particular stack frame is
     accessed from the frame pointer of the previous stack frame.

 -- 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.10.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.10.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 75 words with the 'setjmp'/'longjmp'-based
     exception handling mechanism and 8192 bytes with other exception
     handling mechanisms should be adequate for most machines.

 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.10.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, 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.10.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.10.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.10.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, enum
          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 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 (enum 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,
          enum 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: int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t CUM,
          enum 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,
          enum 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, enum
          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,
          enum 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 (enum
          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 (enum
          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 (enum 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_s *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 (enum 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 (enum 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 (enum 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_SMALL_REGISTER_CLASSES_FOR_MODE_P (enum
          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.10.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 (enum 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_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.10.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: enum 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: enum 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.10.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: CALLER_SAVE_PROFITABLE (REFS, CALLS)
     A C expression to determine whether it is worthwhile to consider
     placing a pseudo-register in a call-clobbered hard register and
     saving and restoring it around each function call.  The expression
     should be 1 when this is worth doing, and 0 otherwise.

     If you don't define this macro, a default is used which is good on
     most machines: '4 * CALLS < REFS'.

 -- 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.10.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.10.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.


File: gccint.info,  Node: Tail Calls,  Next: Stack Smashing Protection,  Prev: Profiling,  Up: Stack and Calling

17.10.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,  Prev: Tail Calls,  Up: Stack and Calling

17.10.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: Varargs,  Next: Trampolines,  Prev: Stack and Calling,  Up: Target Macros

17.11 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, enum 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: 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.


File: gccint.info,  Node: Trampolines,  Next: Library Calls,  Prev: Varargs,  Up: Target Macros

17.12 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.13 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_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.

 -- Macro: TARGET_C99_FUNCTIONS
     When this macro is nonzero, GCC will implicitly optimize 'sin'
     calls into 'sinf' and similarly for other functions defined by C99
     standard.  The default is zero because a number of existing systems
     lack support for these functions in their runtime so this macro
     needs to be redefined to one on systems that do support the C99
     runtime.

 -- Macro: TARGET_HAS_SINCOS
     When this macro is nonzero, GCC will implicitly optimize calls to
     'sin' and 'cos' with the same argument to a call to 'sincos'.  The
     default is zero.  The target has to provide the following
     functions:
          void sincos(double x, double *sin, double *cos);
          void sincosf(float x, float *sin, float *cos);
          void sincosl(long double x, long double *sin, long double *cos);

 -- 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.14 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 (enum 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, enum
          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 (enum 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 (enum 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 (enum
          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 (unsigned FN, bool
          MD_FN, bool SQRT)
     This hook should return the DECL of a function that implements
     reciprocal of the builtin function with builtin function code FN,
     or 'NULL_TREE' if such a function is not available.  MD_FN is true
     when FN is a code of a machine-dependent builtin function.  When
     SQRT is true, additional optimizations that apply only to the
     reciprocal of a square root function are performed, and only
     reciprocals of 'sqrt' function are valid.

 -- 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 (enum
          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 (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 the builtin function with builtin function
     code CODE or 'NULL_TREE' if such a function is not available.  The
     value of FNDECL is the builtin function declaration.  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 (enum
          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: enum machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE
          (enum 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: 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_TM_LOAD (tree)
     This hook should return the built-in decl needed to load a vector
     of the given type within a transaction.

 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_TM_STORE (tree)
     This hook should return the built-in decl needed to store a vector
     of the given type within a transaction.

 -- 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.


File: gccint.info,  Node: Anchored Addresses,  Next: Condition Code,  Prev: Addressing Modes,  Up: Target Macros

17.15 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.16 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, which need to be in
adjacent insns for machines using '(cc0)'.  This 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.16.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.16.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) (CODE, OP0, OP1,
          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: enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum
          machine_mode M1, enum 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.17 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 (enum 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 (enum 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.

 -- Macro: MOVE_BY_PIECES_P (SIZE, ALIGNMENT)
     A C expression used to determine whether 'move_by_pieces' will be
     used to copy a chunk of memory, or whether some other block move
     mechanism will be used.  Defaults to 1 if 'move_by_pieces_ninsns'
     returns less than 'MOVE_RATIO'.

 -- 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: CLEAR_BY_PIECES_P (SIZE, ALIGNMENT)
     A C expression used to determine whether 'clear_by_pieces' will be
     used to clear a chunk of memory, or whether some other block clear
     mechanism will be used.  Defaults to 1 if 'move_by_pieces_ninsns'
     returns less than 'CLEAR_RATIO'.

 -- 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: SET_BY_PIECES_P (SIZE, ALIGNMENT)
     A C expression used to determine whether 'store_by_pieces' will be
     used to set a chunk of memory to a constant value, or whether some
     other mechanism will be used.  Used by '__builtin_memset' when
     storing values other than constant zero.  Defaults to 1 if
     'move_by_pieces_ninsns' returns less than 'SET_RATIO'.

 -- Macro: STORE_BY_PIECES_P (SIZE, ALIGNMENT)
     A C expression used to determine whether 'store_by_pieces' will be
     used to set a chunk of memory to a constant string value, or
     whether some other mechanism will be used.  Used by
     '__builtin_strcpy' when called with a constant source string.
     Defaults to 1 if 'move_by_pieces_ninsns' returns less than
     '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 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_RTX_COSTS (rtx X, int CODE, 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.

     CODE is X's expression code--redundant, since it can be obtained
     with 'GET_CODE (X)'.

     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, enum 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.


File: gccint.info,  Node: Scheduling,  Next: Sections,  Prev: Costs,  Up: Target Macros

17.18 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, 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, rtx LINK, rtx
          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, 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
          *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
          *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: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx
          HEAD, rtx 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 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)

     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 not chosen to be issued.

     The default is that any ready insns can be chosen to be issued.

 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN (void
          *DATA, 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, char *READY_TRY, int N_READY, rtx 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, 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, 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, int REQUEST,
          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 (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, rtx LABEL,
          int MUTATE_P)
     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: bool
          TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC
          (const_rtx INSN)
     This hook is used as a workaround for
     'TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD' not being
     called on the first instruction of the ready list.  The hook is
     used to discard speculative instructions that stand first in the
     ready list from being scheduled on the current cycle.  If the hook
     returns 'false', INSN will not be chosen to be issued.  For
     non-speculative instructions, the hook should always return 'true'.
     For example, in the ia64 backend the hook is used to cancel data
     speculative insns when the ALAT table is nearly full.

 -- 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, 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, 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,
          enum machine_mode MODE)
     This hook is called by tree reassociator to determine a level of
     parallelism required in output calculations chain.


File: gccint.info,  Node: Sections,  Next: PIC,  Prev: Scheduling,  Up: Target Macros

17.19 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 (enum
          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.20 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.21 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.21.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.21.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: 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.21.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.21.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_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.

 -- 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.21.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.21.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.21.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, 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 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.21.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_insn' 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)
     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.21.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_IN_DATA_SECTION
     If defined, DWARF 2 frame unwind information will be placed in the
     data section even though the target supports named sections.  This
     might be necessary, for instance, if the system linker does garbage
     collection and sections cannot be marked as not to be collected.

     Do not define this macro unless 'TARGET_ASM_NAMED_SECTION' is also
     defined.

 -- 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 defined,
     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: 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.21.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 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
          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, which follows
     a 'NOTE_INSN_LOOP_BEG' note.

     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 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 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.22 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.22.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.22.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.22.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.22.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.22.5 Macros for SDB and DWARF Output
---------------------------------------

Here are macros for SDB and DWARF output.

 -- Macro: SDB_DEBUGGING_INFO
     Define this macro 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.

 -- 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_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.22.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.23 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: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
     Compares for equality the two values, X and Y.  If the target
     floating point format supports negative zeroes and/or NaNs,
     'REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and 'REAL_VALUES_EQUAL
     (NaN, NaN)' is false.

 -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
     Tests whether X is less than Y.

 -- 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, enum
          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: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code
          CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
     Calculates an arithmetic operation on the two floating point values
     X and Y, storing the result in OUTPUT (which must be a variable).

     The operation to be performed is specified by CODE.  Only the
     following codes are supported: 'PLUS_EXPR', 'MINUS_EXPR',
     'MULT_EXPR', 'RDIV_EXPR', 'MAX_EXPR', 'MIN_EXPR'.

     If 'REAL_ARITHMETIC' is asked to evaluate division by zero and the
     target's floating point format cannot represent infinity, it will
     call 'abort'.  Callers should check for this situation first, using
     'MODE_HAS_INFINITIES'.  *Note Storage Layout::.

 -- 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.

 -- Macro: void REAL_VALUE_TO_INT (HOST_WIDE_INT LOW, HOST_WIDE_INT
          HIGH, REAL_VALUE_TYPE X)
     Converts a floating point value X into a double-precision integer
     which is then stored into LOW and HIGH.  If the value is not
     integral, it is truncated.

 -- Macro: void REAL_VALUE_FROM_INT (REAL_VALUE_TYPE X, HOST_WIDE_INT
          LOW, HOST_WIDE_INT HIGH, enum machine_mode MODE)
     Converts a double-precision integer found in LOW and HIGH, into a
     floating point value which is then stored into X.  The value is
     truncated to fit in mode MODE.


File: gccint.info,  Node: Mode Switching,  Next: Target Attributes,  Prev: Floating Point,  Up: Target Macros

17.24 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', 'MODE_NEEDED',
     'MODE_PRIORITY_TO_MODE' and 'EMIT_MODE_SET'.  'MODE_AFTER',
     'MODE_ENTRY', and '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.

 -- Macro: MODE_NEEDED (ENTITY, 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.

 -- Macro: MODE_AFTER (ENTITY, MODE, 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).

 -- Macro: MODE_ENTRY (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 'MODE_ENTRY' is defined then 'MODE_EXIT' must be defined.

 -- Macro: MODE_EXIT (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
     'MODE_EXIT' is defined then 'MODE_ENTRY' must be defined.

 -- Macro: MODE_PRIORITY_TO_MODE (ENTITY, 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_to_mode' (ENTITY, N) shall be
     a bijection in 0 ... 'num_modes_for_mode_switching[ENTITY] - 1'.

 -- Macro: EMIT_MODE_SET (ENTITY, MODE, HARD_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.


File: gccint.info,  Node: Target Attributes,  Next: Emulated TLS,  Prev: Mode Switching,  Up: Target Macros

17.25 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.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)
     This hook is called to save any additional target-specific
     information in the 'struct cl_target_option' structure for
     function-specific options.  *Note Option file format::.

 -- Target Hook: void TARGET_OPTION_RESTORE (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.

 -- 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.


File: gccint.info,  Node: Emulated TLS,  Next: MIPS Coprocessors,  Prev: Target Attributes,  Up: Target Macros

17.26 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.27 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.

 There is one macro used in defining the MIPS coprocessor interface
which you may want to override in subtargets; it is described below.


File: gccint.info,  Node: PCH Target,  Next: C++ ABI,  Prev: MIPS Coprocessors,  Up: Target Macros

17.28 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.29 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.30 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: enum 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' for the generic
     address space only.

 -- Target Hook: enum 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' for the generic
     address space only.

 -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (enum
          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 (enum
          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, enum 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: 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.


File: gccint.info,  Node: Misc,  Prev: Named Address Spaces,  Up: Target Macros

17.31 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 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 if loading short immediate values into registers
     sign extends.

 -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (enum
          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
          (enum 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 (enum machine_mode MODE,
          enum 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.

 -- 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: tree TARGET_MD_ASM_CLOBBERS (tree OUTPUTS, tree INPUTS,
          tree CLOBBERS)
     This target hook should add to CLOBBERS 'STRING_CST' trees for any
     hard regs the port wishes to automatically clobber for an asm.  It
     should return the result of the last 'tree_cons' used to add a
     clobber.  The OUTPUTS, INPUTS and CLOBBER lists are the
     corresponding parameters to the asm and may be inspected to avoid
     clobbering a register that is an input or output of the asm.  You
     can use 'tree_overlaps_hard_reg_set', declared in 'tree.h', to test
     for overlap with regards to asm-declared registers.

 -- 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, enum 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_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 containing a simplified expression for the
     call's result.  If IGNORE is true the value will be ignored.

 -- 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: const char * TARGET_INVALID_WITHIN_DOLOOP (const_rtx
          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)
     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.

 -- Macro: MD_CAN_REDIRECT_BRANCH (BRANCH1, BRANCH2)

     Take a branch insn in BRANCH1 and another in BRANCH2.  Return true
     if redirecting BRANCH1 to the destination of BRANCH2 is possible.

     On some targets, branches may have a limited range.  Optimizing the
     filling of delay slots can result in branches being redirected, and
     this may in turn cause a branch offset to overflow.

 -- Target Hook: bool TARGET_CAN_FOLLOW_JUMP (const_rtx FOLLOWER,
          const_rtx 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: 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: bool TARGET_RELAXED_ORDERING
     If set to 'true', means that the target's memory model does not
     guarantee that loads which do not depend on one another will access
     main memory in the order of the instruction stream; if ordering is
     important, an explicit memory barrier must be used.  This is true
     of many recent processors which implement a policy of "relaxed,"
     "weak," or "release" memory consistency, such as Alpha, PowerPC,
     and ia64.  The default is 'false'.

 -- 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: int TARGET_ADJUST_INSN_LENGTH (rtx INSN, int LENGTH,
          bool IN_DELAY_SEQUENCE)
     Return an adjusted length for INSN.  LENGTH is the value that has
     been calculated using the 'length' instruction attribute.
     IN_DELAY_SEQUENCE if INSN forms part of a delay sequence.  The
     default implementation uses 'ADJUST_INSN_LENGTH', if defined.

 -- Target Hook: void TARGET_INSN_LENGTH_PARAMETERS
          (insn_length_parameters_t *INSN_LENGTH_PARAMETERS)
     Fill in values used for branch shortening.  The type
     'insn_length_parameters_t' is defined in 'target-def.h'.  The main
     feature is the 'get_variants' function.
          int (*get_variants) (rtx insn, int length, bool sequence_p, bool target_p,
          		     insn_length_variant_t *variants)
     For instructions where the ordinary monotonic branch shortening is
     insufficeint to describe the alternatives, e.g.  because there is
     alignemnt involved, get_variants can provide two or more variants
     for the instruction.  The return value is the number of variants
     filled in, which must never exceed the number filled in by
     'insn_length_parameters' in the MAX_VARIANTS field.  The set of
     variants for any given instruction filled in should not vary during
     branch shortening, but rather unavailable variants should be
     flagged with a 'false' ENABLED field.  This allows
     'shorten_branches' to keep track of varaints that have been ever
     disabled in a previous iteration and keep them disabled, so as to
     avoid infinite looping inside 'shorten_branches'.  The LENGTH
     parameter provides the length calculated previously from
     attributes.  SEQUENCE_P indicates if the instruction presented is
     inside a 'SEQUENCE'.  Note, if you make 'get_variants' provide
     variants for an entire 'SEQUENCE', the 'SEQUENCE' will henceforth
     be handled as a single entity for branch shortening.  TARGET_P
     indicates if the instruction is considered the target of a branch,
     function call, or function return.


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
     <http://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(())'.
* 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: User GC,  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.

'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.

'param_is (TYPE)'
'use_param'

     Sometimes it's convenient to define some data structure to work on
     generic pointers (that is, 'PTR') and then use it with a specific
     type.  'param_is' specifies the real type pointed to, and
     'use_param' says where in the generic data structure that type
     should be put.

     For instance, to have a 'htab_t' that points to trees, one would
     write the definition of 'htab_t' like this:
          typedef struct GTY(()) {
            ...
            void ** GTY ((use_param, ...)) entries;
            ...
          } htab_t;
     and then declare variables like this:
            static htab_t GTY ((param_is (union tree_node))) ict;

'paramN_is (TYPE)'
'use_paramN'

     In more complicated cases, the data structure might need to work on
     several different types, which might not necessarily all be
     pointers.  For this, 'param1_is' through 'param9_is' may be used to
     specify the real type of a field identified by 'use_param1' through
     'use_param9'.

'use_params'

     When a structure contains another structure that is parameterized,
     there's no need to do anything special, the inner structure
     inherits the parameters of the outer one.  When a structure
     contains a pointer to a parameterized structure, the type machinery
     won't automatically detect this (it could, it just doesn't yet), so
     it's necessary to tell it that the pointed-to structure should use
     the same parameters as the outer structure.  This is done by
     marking the pointer with the 'use_params' option.

'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.

'if_marked ("EXPRESSION")'

     Suppose you want some kinds of object to be unique, and so you put
     them in a hash table.  If garbage collection marks the hash table,
     these objects will never be freed, even if the last other reference
     to them goes away.  GGC has special handling to deal with this: if
     you use the 'if_marked' option on a global hash table, GGC will
     call the routine whose name is the parameter to the option on each
     hash table entry.  If the routine returns nonzero, the hash table
     entry will be marked as usual.  If the routine returns zero, the
     hash table entry will be deleted.

     The routine 'ggc_marked_p' can be used to determine if an element
     has been marked already; in fact, the usual case is to use
     'if_marked ("ggc_marked_p")'.

'mark_hook ("HOOK-ROUTINE-NAME")'

     If provided for a structure or union type, the given
     HOOK-ROUTINE-NAME (between double-quotes) is the name of a routine
     called when the garbage collector has just marked the data as
     reachable.  This routine should not change the data, or call any
     ggc routine.  Its only argument is a pointer to the just marked
     (const) structure or union.

'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.

'variable_size'

     The type machinery expects the types to be of constant size.  When
     this is not true, for example, with structs that have array fields
     or unions, the type machinery cannot tell how many bytes need to be
     allocated at each allocation.  The 'variable_size' is used to mark
     such types.  The type machinery then provides allocators that take
     a parameter indicating an exact size of object being allocated.
     Note that the size must be provided in bytes whereas the 'length'
     option works with array lengths in number of elements.

     For example,
          struct GTY((variable_size)) sorted_fields_type {
            int len;
            tree GTY((length ("%h.len"))) elts[1];
          };

     Then the objects of 'struct sorted_fields_type' are allocated in GC
     memory as follows:
            field_vec = ggc_alloc_sorted_fields_type (size);

     If FIELD_VEC->ELTS stores N elements, then SIZE could be calculated
     as follows:
            size_t size = sizeof (struct sorted_fields_type) + n * sizeof (tree);

'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: User GC,  Next: GGC Roots,  Prev: GTY Options,  Up: Type Information

22.2 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.2.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.3 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.4 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.5 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.6 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 plugin is a loadable module that provides extra features to the
compiler, which they can further pass around as a shareable module.

 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_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_REGISTER_GGC_CACHES,   /* Register an extra GGC cache 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,

       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,
PLUGIN_REGISTER_GGC_ROOTS and PLUGIN_REGISTER_GGC_CACHES 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 using functions like
'c_register_pragma' or 'c_register_pragma_with_expansion'.


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).

 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'.
Plugins that want to use the 'if_marked' hash table option can add the
extra GGC cache tables generated by 'gengtype' using the
'PLUGIN_REGISTER_GGC_CACHES' pseudo-event with a null callback and the
extra cache table (of type 'struct ggc_cache_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', 'PLUGIN_REGISTER_GGC_ROOTS' or
'PLUGIN_REGISTER_GGC_CACHES'.


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 during pragmas registration.
Use the 'c_register_pragma' or 'c_register_pragma_with_expansion'
functions to register custom pragmas.

     /* 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.


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:

     GCC=gcc
     PLUGIN_SOURCE_FILES= plugin1.c plugin2.c
     PLUGIN_OBJECT_FILES= $(patsubst %.c,%.o,$(PLUGIN_SOURCE_FILES))
     GCCPLUGINS_DIR:= $(shell $(GCC) -print-file-name=plugin)
     CFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -O2

     plugin.so: $(PLUGIN_OBJECT_FILES)
        $(GCC) -shared $^ -o $@

 A single source file plugin may be built with 'gcc -I`gcc
-print-file-name=plugin`/include -fPIC -shared -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: Funding,  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.

 Currently, the linker plugin works only in combination with the Gold
linker, but a GNU ld implementation is under development.

 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'.


File: gccint.info,  Node: Funding,  Next: GNU Project,  Prev: LTO,  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 DWARF2 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.

   * 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.

   * 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.

   * 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, 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, 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.

   * 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.

   * 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 Guenther 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 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.

   * Andreas Jaeger for testing and benchmarking of GCC and various bug
     fixes.

   * 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.

   * 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.

   * Philip Martin for lots of libstdc++ string and vector iterator
     fixes and improvements, and string clean up and testsuites.

   * 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.

   * 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.

   * 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.

   * Randy Smith finished the Sun FPA support.

   * 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.

   * 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.

   * 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)
* 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   47)
* # in constraint:                       Modifiers.          (line   67)
* # in template:                         Output Template.    (line   66)
* #pragma:                               Misc.               (line  379)
* % in constraint:                       Modifiers.          (line   45)
* % in GTY option:                       GTY Options.        (line   18)
* % in template:                         Output Template.    (line    6)
* & in constraint:                       Modifiers.          (line   25)
* (nil):                                 RTL Objects.        (line   73)
* * in constraint:                       Modifiers.          (line   72)
* * in template:                         Output Statement.   (line   29)
* + 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   41)
* \:                                     Output Template.    (line   46)
* __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)
* __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  201)
* abs and attributes:                    Expressions.        (line   83)
* absence_set:                           Processor pipeline description.
                                                             (line  223)
* absM2 instruction pattern:             Standard Names.     (line  529)
* absolute value:                        Arithmetic.         (line  201)
* 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)
* 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  260)
* addMODEcc instruction pattern:         Standard Names.     (line 1044)
* 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  307)
* addr_diff_vec, length of:              Insn Lengths.       (line   26)
* ADDR_EXPR:                             Storage References. (line    6)
* addr_vec:                              Side Effects.       (line  302)
* addr_vec, length of:                   Insn Lengths.       (line   26)
* ADJUST_FIELD_ALIGN:                    Storage Layout.     (line  195)
* ADJUST_INSN_LENGTH:                    Insn Lengths.       (line   35)
* 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 1364)
* ALL_REGS:                              Register Classes.   (line   17)
* alternate entry points:                Insns.              (line  146)
* anchored addresses:                    Anchored Addresses. (line    6)
* and:                                   Arithmetic.         (line  159)
* and and attributes:                    Expressions.        (line   50)
* and, canonicalization of:              Insn Canonicalizations.
                                                             (line   51)
* andM3 instruction pattern:             Standard Names.     (line  266)
* annotations:                           Annotations.        (line    6)
* APPLY_RESULT_SIZE:                     Scalar Return.      (line  112)
* ARGS_GROW_DOWNWARD:                    Frame Layout.       (line   34)
* 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  192)
* 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  174)
* arithmetic shift with signed saturation: Arithmetic.       (line  174)
* arithmetic shift with unsigned saturation: Arithmetic.     (line  174)
* 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  174)
* ashift and attributes:                 Expressions.        (line   83)
* ashiftrt:                              Arithmetic.         (line  191)
* ashiftrt and attributes:               Expressions.        (line   83)
* ashlM3 instruction pattern:            Standard Names.     (line  504)
* ashrM3 instruction pattern:            Standard Names.     (line  514)
* ASM_APP_OFF:                           File Framework.     (line   76)
* ASM_APP_ON:                            File Framework.     (line   69)
* ASM_COMMENT_START:                     File Framework.     (line   64)
* ASM_DECLARE_FUNCTION_NAME:             Label Output.       (line  108)
* ASM_DECLARE_FUNCTION_SIZE:             Label Output.       (line  123)
* ASM_DECLARE_OBJECT_NAME:               Label Output.       (line  136)
* ASM_DECLARE_REGISTER_GLOBAL:           Label Output.       (line  164)
* ASM_FINAL_SPEC:                        Driver.             (line   81)
* ASM_FINISH_DECLARE_OBJECT:             Label Output.       (line  172)
* ASM_FORMAT_PRIVATE_NAME:               Label Output.       (line  391)
* asm_fprintf:                           Instruction Output. (line  150)
* ASM_FPRINTF_EXTENSIONS:                Instruction Output. (line  160)
* ASM_GENERATE_INTERNAL_LABEL:           Label Output.       (line  375)
* asm_input:                             Side Effects.       (line  289)
* asm_input and /v:                      Flags.              (line   76)
* ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX:     Exception Handling. (line   80)
* asm_noperands:                         Insns.              (line  311)
* 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   50)
* 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  363)
* ASM_OUTPUT_DEF:                        Label Output.       (line  412)
* ASM_OUTPUT_DEF_FROM_DECLS:             Label Output.       (line  419)
* ASM_OUTPUT_DWARF_DELTA:                SDB and DWARF.      (line   73)
* ASM_OUTPUT_DWARF_OFFSET:               SDB and DWARF.      (line   82)
* ASM_OUTPUT_DWARF_PCREL:                SDB and DWARF.      (line   88)
* ASM_OUTPUT_DWARF_TABLE_REF:            SDB and DWARF.      (line   93)
* ASM_OUTPUT_DWARF_VMS_DELTA:            SDB and DWARF.      (line   77)
* ASM_OUTPUT_EXTERNAL:                   Label Output.       (line  292)
* ASM_OUTPUT_FDESC:                      Data Output.        (line   59)
* 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  314)
* ASM_OUTPUT_LABEL_REF:                  Label Output.       (line  336)
* 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  108)
* ASM_OUTPUT_POOL_PROLOGUE:              Data Output.        (line   72)
* ASM_OUTPUT_REG_POP:                    Instruction Output. (line  204)
* ASM_OUTPUT_REG_PUSH:                   Instruction Output. (line  199)
* 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   83)
* ASM_OUTPUT_SYMBOL_REF:                 Label Output.       (line  329)
* ASM_OUTPUT_TYPE_DIRECTIVE:             Label Output.       (line   98)
* ASM_OUTPUT_WEAKREF:                    Label Output.       (line  224)
* ASM_OUTPUT_WEAK_ALIAS:                 Label Output.       (line  438)
* 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  216)
* ASM_WEAKEN_LABEL:                      Label Output.       (line  203)
* 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  612)
* atomic:                                GTY Options.        (line  267)
* atomic_addMODE instruction pattern:    Standard Names.     (line 1775)
* atomic_add_fetchMODE instruction pattern: Standard Names.  (line 1806)
* atomic_andMODE instruction pattern:    Standard Names.     (line 1775)
* atomic_and_fetchMODE instruction pattern: Standard Names.  (line 1806)
* atomic_compare_and_swapMODE instruction pattern: Standard Names.
                                                             (line 1711)
* atomic_exchangeMODE instruction pattern: Standard Names.   (line 1763)
* atomic_fetch_addMODE instruction pattern: Standard Names.  (line 1790)
* atomic_fetch_andMODE instruction pattern: Standard Names.  (line 1790)
* atomic_fetch_nandMODE instruction pattern: Standard Names. (line 1790)
* atomic_fetch_orMODE instruction pattern: Standard Names.   (line 1790)
* atomic_fetch_subMODE instruction pattern: Standard Names.  (line 1790)
* atomic_fetch_xorMODE instruction pattern: Standard Names.  (line 1790)
* atomic_loadMODE instruction pattern:   Standard Names.     (line 1742)
* atomic_nandMODE instruction pattern:   Standard Names.     (line 1775)
* atomic_nand_fetchMODE instruction pattern: Standard Names. (line 1806)
* atomic_orMODE instruction pattern:     Standard Names.     (line 1775)
* atomic_or_fetchMODE instruction pattern: Standard Names.   (line 1806)
* atomic_storeMODE instruction pattern:  Standard Names.     (line 1752)
* atomic_subMODE instruction pattern:    Standard Names.     (line 1775)
* atomic_sub_fetchMODE instruction pattern: Standard Names.  (line 1806)
* atomic_test_and_set instruction pattern: Standard Names.   (line 1824)
* atomic_xorMODE instruction pattern:    Standard Names.     (line 1775)
* atomic_xor_fetchMODE instruction pattern: Standard Names.  (line 1806)
* 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  166)
* 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  167)
* 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  390)
* BITS_BIG_ENDIAN:                       Storage Layout.     (line   11)
* BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields.       (line    8)
* BITS_PER_UNIT:                         Storage Layout.     (line   50)
* BITS_PER_WORD:                         Storage Layout.     (line   55)
* bitwise complement:                    Arithmetic.         (line  155)
* bitwise exclusive-or:                  Arithmetic.         (line  169)
* bitwise inclusive-or:                  Arithmetic.         (line  164)
* bitwise logical-and:                   Arithmetic.         (line  159)
* 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  182)
* BLKmode, and function return values:   Calls.              (line   23)
* blockage instruction pattern:          Standard Names.     (line 1566)
* Blocks:                                Blocks.             (line    6)
* BLOCK_FOR_INSN, gimple_bb:             Maintaining the CFG.
                                                             (line   28)
* BLOCK_REG_PADDING:                     Register Arguments. (line  228)
* bool:                                  Misc.               (line  858)
* 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  247)
* bswapM2 instruction pattern:           Standard Names.     (line  522)
* btruncM2 instruction pattern:          Standard Names.     (line  630)
* 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 1462)
* builtin_setjmp_receiver instruction pattern: Standard Names.
                                                             (line 1452)
* builtin_setjmp_setup instruction pattern: Standard Names.  (line 1441)
* BYTES_BIG_ENDIAN:                      Storage Layout.     (line   23)
* BYTES_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  219)
* byte_mode:                             Machine Modes.      (line  335)
* C statements for assembler output:     Output Statement.   (line    6)
* C99 math functions, implicit usage:    Library Calls.      (line   70)
* call:                                  Flags.              (line  221)
* call <1>:                              Side Effects.       (line   92)
* call instruction pattern:              Standard Names.     (line 1101)
* 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)
* CALLER_SAVE_PROFITABLE:                Caller Saves.       (line   10)
* 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 1129)
* 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 1121)
* call_value_pop instruction pattern:    Standard Names.     (line 1129)
* 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 1296)
* can_create_pseudo_p:                   Standard Names.     (line   75)
* can_fallthru:                          Basic Blocks.       (line   67)
* casesi instruction pattern:            Standard Names.     (line 1222)
* 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 1090)
* 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  175)
* 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  201)
* ceilM2 instruction pattern:            Standard Names.     (line  646)
* 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  224)
* 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  205)
* chain_next:                            GTY Options.        (line  205)
* chain_prev:                            GTY Options.        (line  205)
* change_address:                        Standard Names.     (line   47)
* CHAR_TYPE_SIZE:                        Type Layout.        (line   38)
* check_stack instruction pattern:       Standard Names.     (line 1382)
* CHImode:                               Machine Modes.      (line  201)
* 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_BY_PIECES_P:                     Costs.              (line  187)
* clear_cache instruction pattern:       Standard Names.     (line 1887)
* CLEAR_INSN_CACHE:                      Trampolines.        (line   98)
* CLEAR_RATIO:                           Costs.              (line  175)
* clobber:                               Side Effects.       (line  106)
* clrsb:                                 Arithmetic.         (line  216)
* clz:                                   Arithmetic.         (line  223)
* clzM2 instruction pattern:             Standard Names.     (line  711)
* CLZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  304)
* cmpmemM instruction pattern:           Standard Names.     (line  844)
* cmpstrM instruction pattern:           Standard Names.     (line  823)
* cmpstrnM instruction pattern:          Standard Names.     (line  810)
* 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  201)
* COLLECT2_HOST_INITIALIZATION:          Host Misc.          (line   32)
* COLLECT_EXPORT_LIST:                   Misc.               (line  758)
* 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  155)
* 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  373)
* COMPOUND_LITERAL_EXPR_DECL_EXPR:       Unary and Binary Expressions.
                                                             (line  373)
* 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  109)
* const0_rtx:                            Constants.          (line   21)
* CONST0_RTX:                            Constants.          (line  129)
* const1_rtx:                            Constants.          (line   21)
* CONST1_RTX:                            Constants.          (line  129)
* const2_rtx:                            Constants.          (line   21)
* CONST2_RTX:                            Constants.          (line  129)
* 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  233)
* CONSTANT_P:                            Addressing Modes.   (line   35)
* CONSTANT_POOL_ADDRESS_P:               Flags.              (line   10)
* CONSTANT_POOL_BEFORE_FUNCTION:         Data Output.        (line   64)
* 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, defining, obsolete method: Old Constraints.   (line    6)
* constraints, machine specific:         Machine Constraints.
                                                             (line    6)
* constraints, testing:                  C Constraint Interface.
                                                             (line    6)
* CONSTRAINT_LEN:                        Old Constraints.    (line   11)
* constraint_num:                        C Constraint Interface.
                                                             (line   37)
* constraint_satisfied_p:                C Constraint Interface.
                                                             (line   52)
* 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   49)
* CONST_DOUBLE_OK_FOR_CONSTRAINT_P:      Old Constraints.    (line   66)
* CONST_DOUBLE_OK_FOR_LETTER_P:          Old Constraints.    (line   51)
* const_double_operand:                  Machine-Independent Predicates.
                                                             (line   20)
* const_fixed:                           Constants.          (line   62)
* 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_OK_FOR_CONSTRAINT_P:             Old Constraints.    (line   46)
* CONST_OK_FOR_LETTER_P:                 Old Constraints.    (line   38)
* const_string:                          Constants.          (line   81)
* const_string and attributes:           Expressions.        (line   20)
* const_true_rtx:                        Constants.          (line   31)
* const_vector:                          Constants.          (line   69)
* const_vector, RTL sharing:             Sharing.            (line   32)
* 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  692)
* copy_rtx:                              Addressing Modes.   (line  189)
* copy_rtx_if_shared:                    Sharing.            (line   64)
* cosM2 instruction pattern:             Standard Names.     (line  558)
* 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  201)
* 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  201)
* cstoreMODE4 instruction pattern:       Standard Names.     (line 1051)
* CTImode:                               Machine Modes.      (line  201)
* ctrapMM4 instruction pattern:          Standard Names.     (line 1534)
* ctz:                                   Arithmetic.         (line  231)
* ctzM2 instruction pattern:             Standard Names.     (line  720)
* CTZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  305)
* CUMULATIVE_ARGS:                       Register Arguments. (line  126)
* current_function_is_leaf:              Leaf Functions.     (line   50)
* current_function_uses_only_leaf_regs:  Leaf Functions.     (line   50)
* current_insn_predicate:                Conditional Execution.
                                                             (line   26)
* C_COMMON_OVERRIDE_OPTIONS:             Run-time Target.    (line  136)
* c_register_pragma:                     Misc.               (line  399)
* c_register_pragma_with_expansion:      Misc.               (line  401)
* DAmode:                                Machine Modes.      (line  151)
* 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_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  196)
* DDmode:                                Machine Modes.      (line   90)
* 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  243)
* 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 1259)
* default:                               GTY Options.        (line   82)
* 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  160)
* define_address_constraint:             Define Constraints. (line   99)
* 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   76)
* 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_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 constraints, obsolete method: Old 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  154)
* DELETE_IF_ORDINARY:                    Filesystem.         (line   79)
* Dependent Patterns:                    Dependent Patterns. (line    6)
* desc:                                  GTY Options.        (line   82)
* 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   73)
* DF_SIZE:                               Type Layout.        (line  136)
* 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  117)
* div and attributes:                    Expressions.        (line   83)
* division:                              Arithmetic.         (line  117)
* division <1>:                          Arithmetic.         (line  131)
* division <2>:                          Arithmetic.         (line  137)
* divM3 instruction pattern:             Standard Names.     (line  266)
* divmodM4 instruction pattern:          Standard Names.     (line  484)
* DOLLARS_IN_IDENTIFIERS:                Misc.               (line  444)
* doloop_begin instruction pattern:      Standard Names.     (line 1289)
* doloop_end instruction pattern:        Standard Names.     (line 1269)
* DONE:                                  Expander Definitions.
                                                             (line   77)
* DONT_USE_BUILTIN_SETJMP:               Exception Region Output.
                                                             (line   77)
* 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  115)
* driver:                                Driver.             (line    6)
* DRIVER_SELF_SPECS:                     Driver.             (line    8)
* DUMPFILE_FORMAT:                       Filesystem.         (line   67)
* 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   38)
* DWARF_ALT_FRAME_RETURN_COLUMN:         Frame Layout.       (line  150)
* DWARF_CIE_DATA_ALIGNMENT:              Exception Region Output.
                                                             (line   89)
* 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  161)
* DYNAMIC_CHAIN_ADDRESS:                 Frame Layout.       (line   90)
* 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   52)
* EH_FRAME_IN_DATA_SECTION:              Exception Region Output.
                                                             (line   19)
* EH_FRAME_SECTION_NAME:                 Exception Region Output.
                                                             (line    9)
* eh_return instruction pattern:         Standard Names.     (line 1468)
* 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   28)
* 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)
* EMIT_MODE_SET:                         Mode Switching.     (line   74)
* Empty Statements:                      Empty Statements.   (line    6)
* EMPTY_CLASS_EXPR:                      Statements for C++. (line    6)
* EMPTY_FIELD_BOUNDARY:                  Storage Layout.     (line  303)
* 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 machine_mode:                     Machine Modes.      (line    6)
* 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 1506)
* 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   64)
* EXACT_DIV_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* examining SSA_NAMEs:                   SSA.                (line  216)
* exception handling:                    Edges.              (line   95)
* exception handling <1>:                Exception Handling. (line    6)
* exception_receiver instruction pattern: Standard Names.    (line 1433)
* exclamation point:                     Multi-Alternative.  (line   47)
* exclusion_set:                         Processor pipeline description.
                                                             (line  223)
* exclusive-or, bitwise:                 Arithmetic.         (line  169)
* EXIT_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* EXIT_IGNORE_STACK:                     Function Entry.     (line  137)
* expander definitions:                  Expander Definitions.
                                                             (line    6)
* expM2 instruction pattern:             Standard Names.     (line  587)
* 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  546)
* EXPR_STMT:                             Statements for C++. (line    6)
* EXPR_STMT_EXPR:                        Statements for C++. (line    6)
* extendMN2 instruction pattern:         Standard Names.     (line  902)
* extensible constraints:                Simple Constraints. (line  171)
* EXTRA_ADDRESS_CONSTRAINT:              Old Constraints.    (line  120)
* EXTRA_CONSTRAINT:                      Old Constraints.    (line   71)
* EXTRA_CONSTRAINT_STR:                  Old Constraints.    (line   92)
* EXTRA_MEMORY_CONSTRAINT:               Old Constraints.    (line   97)
* EXTRA_SPECS:                           Driver.             (line  182)
* extv instruction pattern:              Standard Names.     (line  993)
* extvM instruction pattern:             Standard Names.     (line  938)
* extvmisalignM instruction pattern:     Standard Names.     (line  948)
* extzv instruction pattern:             Standard Names.     (line 1011)
* extzvM instruction pattern:            Standard Names.     (line  962)
* extzvmisalignM instruction pattern:    Standard Names.     (line  965)
* 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  211)
* ffsM2 instruction pattern:             Standard Names.     (line  701)
* 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   65)
* 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  869)
* fixunsMN2 instruction pattern:         Standard Names.     (line  878)
* fixuns_truncMN2 instruction pattern:   Standard Names.     (line  893)
* fix_truncMN2 instruction pattern:      Standard Names.     (line  889)
* 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  861)
* floatunsMN2 instruction pattern:       Standard Names.     (line  865)
* 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  622)
* 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  276)
* fmodM3 instruction pattern:            Standard Names.     (line  540)
* fmsM4 instruction pattern:             Standard Names.     (line  283)
* fnmaM4 instruction pattern:            Standard Names.     (line  289)
* fnmsM4 instruction pattern:            Standard Names.     (line  295)
* 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)
* fractional types:                      Fixed-point fractional library routines.
                                                             (line    6)
* fractMN2 instruction pattern:          Standard Names.     (line  911)
* fractunsMN2 instruction pattern:       Standard Names.     (line  926)
* fract_convert:                         Conversions.        (line   82)
* FRACT_TYPE_SIZE:                       Type Layout.        (line   67)
* frame layout:                          Frame Layout.       (line    6)
* FRAME_ADDR_RTX:                        Frame Layout.       (line  114)
* FRAME_GROWS_DOWNWARD:                  Frame Layout.       (line   30)
* FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory.
                                                             (line   69)
* FRAME_POINTER_CFA_OFFSET:              Frame Layout.       (line  210)
* 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  884)
* 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  196)
* FUNCTION_ARG_PADDING:                  Register Arguments. (line  203)
* FUNCTION_ARG_REGNO_P:                  Register Arguments. (line  251)
* FUNCTION_BOUNDARY:                     Storage Layout.     (line  164)
* 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   64)
* get_attr:                              Expressions.        (line   99)
* get_attr_length:                       Insn Lengths.       (line   46)
* GET_CLASS_NARROWEST_MODE:              Machine Modes.      (line  332)
* 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  279)
* GET_MODE_ALIGNMENT:                    Machine Modes.      (line  319)
* GET_MODE_BITSIZE:                      Machine Modes.      (line  303)
* GET_MODE_CLASS:                        Machine Modes.      (line  293)
* GET_MODE_FBIT:                         Machine Modes.      (line  310)
* GET_MODE_IBIT:                         Machine Modes.      (line  306)
* GET_MODE_MASK:                         Machine Modes.      (line  314)
* GET_MODE_NAME:                         Machine Modes.      (line  290)
* GET_MODE_NUNITS:                       Machine Modes.      (line  328)
* GET_MODE_SIZE:                         Machine Modes.      (line  300)
* GET_MODE_UNIT_SIZE:                    Machine Modes.      (line  322)
* GET_MODE_WIDER_MODE:                   Machine Modes.      (line  296)
* 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 1856)
* 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 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_clear_volatile:             GIMPLE_ASM.         (line   62)
* gimple_asm_clobber_op:                 GIMPLE_ASM.         (line   44)
* gimple_asm_input_op:                   GIMPLE_ASM.         (line   29)
* gimple_asm_nclobbers:                  GIMPLE_ASM.         (line   26)
* gimple_asm_ninputs:                    GIMPLE_ASM.         (line   20)
* gimple_asm_noutputs:                   GIMPLE_ASM.         (line   23)
* gimple_asm_output_op:                  GIMPLE_ASM.         (line   36)
* gimple_asm_set_clobber_op:             GIMPLE_ASM.         (line   48)
* gimple_asm_set_input_op:               GIMPLE_ASM.         (line   32)
* gimple_asm_set_output_op:              GIMPLE_ASM.         (line   40)
* gimple_asm_set_volatile:               GIMPLE_ASM.         (line   59)
* gimple_asm_string:                     GIMPLE_ASM.         (line   52)
* gimple_asm_volatile_p:                 GIMPLE_ASM.         (line   56)
* GIMPLE_ASSIGN:                         GIMPLE_ASSIGN.      (line    6)
* gimple_assign_cast_p:                  Logical Operators.  (line  158)
* gimple_assign_cast_p <1>:              GIMPLE_ASSIGN.      (line   92)
* gimple_assign_lhs:                     GIMPLE_ASSIGN.      (line   50)
* gimple_assign_lhs_ptr:                 GIMPLE_ASSIGN.      (line   53)
* gimple_assign_rhs1:                    GIMPLE_ASSIGN.      (line   56)
* gimple_assign_rhs1_ptr:                GIMPLE_ASSIGN.      (line   59)
* gimple_assign_rhs2:                    GIMPLE_ASSIGN.      (line   63)
* gimple_assign_rhs2_ptr:                GIMPLE_ASSIGN.      (line   66)
* gimple_assign_rhs3:                    GIMPLE_ASSIGN.      (line   70)
* gimple_assign_rhs3_ptr:                GIMPLE_ASSIGN.      (line   73)
* gimple_assign_rhs_class:               GIMPLE_ASSIGN.      (line   44)
* gimple_assign_rhs_code:                GIMPLE_ASSIGN.      (line   40)
* gimple_assign_set_lhs:                 GIMPLE_ASSIGN.      (line   77)
* gimple_assign_set_rhs1:                GIMPLE_ASSIGN.      (line   80)
* gimple_assign_set_rhs2:                GIMPLE_ASSIGN.      (line   84)
* gimple_assign_set_rhs3:                GIMPLE_ASSIGN.      (line   88)
* 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_asm:                      GIMPLE_ASM.         (line    6)
* gimple_build_asm_vec:                  GIMPLE_ASM.         (line   15)
* gimple_build_assign:                   GIMPLE_ASSIGN.      (line    6)
* gimple_build_assign_with_ops:          GIMPLE_ASSIGN.      (line   28)
* 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_LABEL.       (line   17)
* gimple_build_label:                    GIMPLE_LABEL.       (line    6)
* gimple_build_nop:                      GIMPLE_NOP.         (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_master:               GIMPLE_OMP_MASTER.  (line    6)
* gimple_build_omp_ordered:              GIMPLE_OMP_ORDERED. (line    6)
* gimple_build_omp_parallel:             GIMPLE_OMP_PARALLEL.
                                                             (line    6)
* gimple_build_omp_return:               GIMPLE_OMP_RETURN.  (line    6)
* gimple_build_omp_section:              GIMPLE_OMP_SECTION. (line    6)
* gimple_build_omp_sections:             GIMPLE_OMP_SECTIONS.
                                                             (line    6)
* gimple_build_omp_sections_switch:      GIMPLE_OMP_SECTIONS.
                                                             (line   13)
* 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)
* 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_cannot_inline_p:           GIMPLE_CALL.        (line   90)
* gimple_call_chain:                     GIMPLE_CALL.        (line   56)
* gimple_call_copy_skip_args:            GIMPLE_CALL.        (line   96)
* 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_mark_uninlinable:          GIMPLE_CALL.        (line   87)
* gimple_call_noreturn_p:                GIMPLE_CALL.        (line   93)
* 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_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_must_not_throw:       GIMPLE_EH_FILTER.   (line   32)
* gimple_eh_filter_set_failure:          GIMPLE_EH_FILTER.   (line   27)
* gimple_eh_filter_set_must_not_throw:   GIMPLE_EH_FILTER.   (line   35)
* 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_expr_code:                      Manipulating GIMPLE statements.
                                                             (line   30)
* gimple_expr_type:                      Manipulating GIMPLE statements.
                                                             (line   23)
* gimple_goto_dest:                      GIMPLE_LABEL.       (line   20)
* gimple_goto_set_dest:                  GIMPLE_LABEL.       (line   23)
* 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   23)
* gimple_omp_atomic_load_set_lhs:        GIMPLE_OMP_ATOMIC_LOAD.
                                                             (line   12)
* gimple_omp_atomic_load_set_rhs:        GIMPLE_OMP_ATOMIC_LOAD.
                                                             (line   19)
* GIMPLE_OMP_ATOMIC_STORE:               GIMPLE_OMP_ATOMIC_STORE.
                                                             (line    6)
* gimple_omp_atomic_store_set_val:       GIMPLE_OMP_ATOMIC_STORE.
                                                             (line   10)
* gimple_omp_atomic_store_val:           GIMPLE_OMP_ATOMIC_STORE.
                                                             (line   14)
* 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   16)
* gimple_omp_continue_control_use:       GIMPLE_OMP_CONTINUE.
                                                             (line   23)
* gimple_omp_continue_control_use_ptr:   GIMPLE_OMP_CONTINUE.
                                                             (line   27)
* gimple_omp_continue_set_control_def:   GIMPLE_OMP_CONTINUE.
                                                             (line   19)
* gimple_omp_continue_set_control_use:   GIMPLE_OMP_CONTINUE.
                                                             (line   30)
* 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   15)
* gimple_omp_critical_set_name:          GIMPLE_OMP_CRITICAL.
                                                             (line   19)
* GIMPLE_OMP_FOR:                        GIMPLE_OMP_FOR.     (line    6)
* gimple_omp_for_clauses:                GIMPLE_OMP_FOR.     (line   19)
* gimple_omp_for_clauses_ptr:            GIMPLE_OMP_FOR.     (line   22)
* gimple_omp_for_cond:                   GIMPLE_OMP_FOR.     (line   82)
* gimple_omp_for_final:                  GIMPLE_OMP_FOR.     (line   50)
* gimple_omp_for_final_ptr:              GIMPLE_OMP_FOR.     (line   53)
* gimple_omp_for_incr:                   GIMPLE_OMP_FOR.     (line   60)
* gimple_omp_for_incr_ptr:               GIMPLE_OMP_FOR.     (line   63)
* gimple_omp_for_index:                  GIMPLE_OMP_FOR.     (line   30)
* gimple_omp_for_index_ptr:              GIMPLE_OMP_FOR.     (line   33)
* gimple_omp_for_initial:                GIMPLE_OMP_FOR.     (line   40)
* gimple_omp_for_initial_ptr:            GIMPLE_OMP_FOR.     (line   43)
* gimple_omp_for_pre_body:               GIMPLE_OMP_FOR.     (line   69)
* gimple_omp_for_set_clauses:            GIMPLE_OMP_FOR.     (line   25)
* gimple_omp_for_set_cond:               GIMPLE_OMP_FOR.     (line   78)
* gimple_omp_for_set_final:              GIMPLE_OMP_FOR.     (line   56)
* gimple_omp_for_set_incr:               GIMPLE_OMP_FOR.     (line   66)
* gimple_omp_for_set_index:              GIMPLE_OMP_FOR.     (line   36)
* gimple_omp_for_set_initial:            GIMPLE_OMP_FOR.     (line   46)
* gimple_omp_for_set_pre_body:           GIMPLE_OMP_FOR.     (line   73)
* 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   41)
* gimple_omp_parallel_child_fn_ptr:      GIMPLE_OMP_PARALLEL.
                                                             (line   45)
* 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   53)
* gimple_omp_parallel_data_arg_ptr:      GIMPLE_OMP_PARALLEL.
                                                             (line   57)
* gimple_omp_parallel_set_child_fn:      GIMPLE_OMP_PARALLEL.
                                                             (line   49)
* gimple_omp_parallel_set_clauses:       GIMPLE_OMP_PARALLEL.
                                                             (line   36)
* gimple_omp_parallel_set_combined_p:    GIMPLE_OMP_PARALLEL.
                                                             (line   19)
* gimple_omp_parallel_set_data_arg:      GIMPLE_OMP_PARALLEL.
                                                             (line   60)
* 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_capacity:                   GIMPLE_PHI.         (line    6)
* gimple_phi_num_args:                   GIMPLE_PHI.         (line   10)
* gimple_phi_result:                     GIMPLE_PHI.         (line   15)
* 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_statement_base:                 Tuple representation.
                                                             (line   14)
* 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   38)
* gimple_switch_index:                   GIMPLE_SWITCH.      (line   23)
* gimple_switch_label:                   GIMPLE_SWITCH.      (line   29)
* gimple_switch_num_labels:              GIMPLE_SWITCH.      (line   14)
* gimple_switch_set_default_label:       GIMPLE_SWITCH.      (line   41)
* gimple_switch_set_index:               GIMPLE_SWITCH.      (line   26)
* gimple_switch_set_label:               GIMPLE_SWITCH.      (line   33)
* gimple_switch_set_num_labels:          GIMPLE_SWITCH.      (line   18)
* 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   39)
* 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   17)
* 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  143)
* 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  434)
* 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   19)
* 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  196)
* HFmode:                                Machine Modes.      (line   58)
* high:                                  Constants.          (line  119)
* HImode:                                Machine Modes.      (line   29)
* HImode, in insn:                       Insns.              (line  275)
* 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  107)
* 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  559)
* IFCVT_MODIFY_CANCEL:                   Misc.               (line  553)
* IFCVT_MODIFY_FINAL:                    Misc.               (line  547)
* IFCVT_MODIFY_INSN:                     Misc.               (line  541)
* IFCVT_MODIFY_MULTIPLE_TESTS:           Misc.               (line  533)
* IFCVT_MODIFY_TESTS:                    Misc.               (line  523)
* IF_COND:                               Statements for C++. (line    6)
* if_marked:                             GTY Options.        (line  161)
* 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  271)
* immediate_operand:                     Machine-Independent Predicates.
                                                             (line   10)
* IMMEDIATE_PREFIX:                      Instruction Output. (line  153)
* include:                               Including Patterns. (line    6)
* INCLUDE_DEFAULTS:                      Driver.             (line  327)
* inclusive-or, bitwise:                 Arithmetic.         (line  164)
* INCOMING_FRAME_SP_OFFSET:              Frame Layout.       (line  181)
* INCOMING_REGNO:                        Register Basics.    (line   87)
* INCOMING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   73)
* INCOMING_RETURN_ADDR_RTX:              Frame Layout.       (line  137)
* INCOMING_STACK_BOUNDARY:               Storage Layout.     (line  159)
* INDEX_REG_CLASS:                       Register Classes.   (line  140)
* indirect_jump instruction pattern:     Standard Names.     (line 1218)
* 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   81)
* INITIAL_FRAME_POINTER_OFFSET:          Elimination.        (line   34)
* INIT_ARRAY_SECTION_ASM_OP:             Sections.           (line  106)
* INIT_CUMULATIVE_ARGS:                  Register Arguments. (line  147)
* INIT_CUMULATIVE_INCOMING_ARGS:         Register Arguments. (line  175)
* INIT_CUMULATIVE_LIBCALL_ARGS:          Register Arguments. (line  169)
* INIT_ENVIRONMENT:                      Driver.             (line  305)
* 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   32)
* 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  302)
* INSN_DELETED_P:                        Flags.              (line   44)
* INSN_FROM_TARGET_P:                    Flags.              (line   49)
* insn_list:                             Insns.              (line  546)
* INSN_REFERENCES_ARE_DELAYED:           Misc.               (line  461)
* INSN_SETS_ARE_DELAYED:                 Misc.               (line  450)
* INSN_UID:                              Insns.              (line   23)
* INSN_VAR_LOCATION:                     Insns.              (line  243)
* 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 1017)
* insvM instruction pattern:             Standard Names.     (line  969)
* insvmisalignM instruction pattern:     Standard Names.     (line  979)
* int iterators in .md files:            Int Iterators.      (line    6)
* INT16_TYPE:                            Type Layout.        (line  253)
* INT32_TYPE:                            Type Layout.        (line  254)
* INT64_TYPE:                            Type Layout.        (line  255)
* INT8_TYPE:                             Type Layout.        (line  252)
* 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  229)
* INTPTR_TYPE:                           Type Layout.        (line  276)
* introduction:                          Top.                (line    6)
* INT_FAST16_TYPE:                       Type Layout.        (line  269)
* INT_FAST32_TYPE:                       Type Layout.        (line  270)
* INT_FAST64_TYPE:                       Type Layout.        (line  271)
* INT_FAST8_TYPE:                        Type Layout.        (line  268)
* INT_LEAST16_TYPE:                      Type Layout.        (line  261)
* INT_LEAST32_TYPE:                      Type Layout.        (line  262)
* INT_LEAST64_TYPE:                      Type Layout.        (line  263)
* INT_LEAST8_TYPE:                       Type Layout.        (line  260)
* 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, jump_insn and call_insn: Flags.        (line  148)
* in_struct, in subreg:                  Flags.              (line  187)
* ior:                                   Arithmetic.         (line  164)
* ior and attributes:                    Expressions.        (line   50)
* ior, canonicalization of:              Insn Canonicalizations.
                                                             (line   51)
* iorM3 instruction pattern:             Standard Names.     (line  266)
* IRA_HARD_REGNO_ADD_COST_MULTIPLIER:    Allocation Order.   (line   44)
* IS_ASM_LOGICAL_LINE_SEPARATOR:         Data Output.        (line  119)
* 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:                         GIMPLE_OMP_PARALLEL.
                                                             (line   64)
* 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   82)
* jump:                                  Flags.              (line  286)
* jump instruction pattern:              Standard Names.     (line 1096)
* 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)
* 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   96)
* 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)
* LARGEST_EXPONENT_IS_NORMAL:            Storage Layout.     (line  480)
* LAST_STACK_REG:                        Stack Registers.    (line   30)
* LAST_VIRTUAL_REGISTER:                 Regs and Memory.    (line   51)
* lceilMN2:                              Standard Names.     (line  687)
* LCSSA:                                 LCSSA.              (line    6)
* LDD_SUFFIX:                            Macros for Initialization.
                                                             (line  121)
* 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 1180)
* LEAF_REGISTERS:                        Leaf Functions.     (line   23)
* LEAF_REG_REMAP:                        Leaf Functions.     (line   37)
* left rotate:                           Arithmetic.         (line  196)
* left shift:                            Arithmetic.         (line  174)
* 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  682)
* 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  127)
* LIBGCC2_HAS_DF_MODE:                   Type Layout.        (line  108)
* LIBGCC2_HAS_TF_MODE:                   Type Layout.        (line  121)
* LIBGCC2_HAS_XF_MODE:                   Type Layout.        (line  115)
* LIBGCC2_LONG_DOUBLE_TYPE_SIZE:         Type Layout.        (line  102)
* LIBGCC2_UNWIND_ATTRIBUTE:              Misc.               (line  963)
* LIBGCC_SPEC:                           Driver.             (line  115)
* library subroutine names:              Library Calls.      (line    6)
* LIBRARY_PATH_ENV:                      Misc.               (line  501)
* LIB_SPEC:                              Driver.             (line  107)
* LIMIT_RELOAD_CLASS:                    Register Classes.   (line  296)
* Linear loop transformations framework: Lambda.             (line    6)
* LINK_COMMAND_SPEC:                     Driver.             (line  236)
* 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  199)
* LOCAL_ALIGNMENT:                       Storage Layout.     (line  246)
* LOCAL_CLASS_P:                         Classes.            (line   73)
* LOCAL_DECL_ALIGNMENT:                  Storage Layout.     (line  283)
* LOCAL_INCLUDE_DIR:                     Driver.             (line  312)
* LOCAL_LABEL_PREFIX:                    Instruction Output. (line  151)
* LOCAL_REGNO:                           Register Basics.    (line  101)
* Logical Operators:                     Logical Operators.  (line    6)
* logical-and, bitwise:                  Arithmetic.         (line  159)
* LOGICAL_OP_NON_SHORT_CIRCUIT:          Costs.              (line  264)
* logM2 instruction pattern:             Standard Names.     (line  595)
* LOG_LINKS:                             Insns.              (line  321)
* 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  672)
* lroundMN2:                             Standard Names.     (line  677)
* lshiftrt:                              Arithmetic.         (line  191)
* lshiftrt and attributes:               Expressions.        (line   83)
* LSHIFT_EXPR:                           Unary and Binary Expressions.
                                                             (line    6)
* lshrM3 instruction pattern:            Standard Names.     (line  514)
* 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)
* macros, target description:            Target Macros.      (line    6)
* maddMN4 instruction pattern:           Standard Names.     (line  437)
* makefile fragment:                     Fragments.          (line    6)
* makefile targets:                      Makefile.           (line    6)
* MAKE_DECL_ONE_ONLY:                    Label Output.       (line  246)
* 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)
* mark_hook:                             GTY Options.        (line  177)
* MASK_RETURN_ADDR:                      Exception Region Output.
                                                             (line   34)
* 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   52)
* MATH_LIBRARY:                          Misc.               (line  494)
* maxM3 instruction pattern:             Standard Names.     (line  301)
* MAX_BITS_PER_WORD:                     Storage Layout.     (line   59)
* MAX_CONDITIONAL_EXECUTE:               Misc.               (line  516)
* MAX_FIXED_MODE_SIZE:                   Storage Layout.     (line  428)
* 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  186)
* may_trap_p, tree_could_trap_p:         Edges.              (line  114)
* mcount:                                Profiling.          (line   12)
* MD_CAN_REDIRECT_BRANCH:                Misc.               (line  678)
* MD_EXEC_PREFIX:                        Driver.             (line  267)
* MD_FALLBACK_FRAME_STATE_FOR:           Exception Handling. (line   93)
* MD_HANDLE_UNWABI:                      Exception Handling. (line  112)
* MD_STARTFILE_PREFIX:                   Driver.             (line  295)
* MD_STARTFILE_PREFIX_1:                 Driver.             (line  300)
* 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 1574)
* 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 1844)
* MEM_SIZE:                              Special Accessors.  (line   39)
* MEM_SIZE_KNOWN_P:                      Special Accessors.  (line   35)
* mem_thread_fenceMODE instruction pattern: Standard Names.  (line 1836)
* MEM_VOLATILE_P:                        Flags.              (line   76)
* METHOD_TYPE:                           Types.              (line    6)
* MINIMUM_ALIGNMENT:                     Storage Layout.     (line  296)
* MINIMUM_ATOMIC_ALIGNMENT:              Storage Layout.     (line  181)
* minM3 instruction pattern:             Standard Names.     (line  301)
* 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   69)
* MIPS coprocessor-definition macros:    MIPS Coprocessors.  (line    6)
* mod:                                   Arithmetic.         (line  137)
* mod and attributes:                    Expressions.        (line   83)
* mode classes:                          Machine Modes.      (line  218)
* 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  248)
* MODE_AFTER:                            Mode Switching.     (line   48)
* MODE_BASE_REG_CLASS:                   Register Classes.   (line  116)
* MODE_BASE_REG_REG_CLASS:               Register Classes.   (line  122)
* MODE_CC:                               Machine Modes.      (line  267)
* MODE_CC <1>:                           MODE_CC Condition Codes.
                                                             (line    6)
* MODE_CODE_BASE_REG_CLASS:              Register Classes.   (line  129)
* MODE_COMPLEX_FLOAT:                    Machine Modes.      (line  259)
* MODE_COMPLEX_INT:                      Machine Modes.      (line  256)
* MODE_DECIMAL_FLOAT:                    Machine Modes.      (line  236)
* MODE_ENTRY:                            Mode Switching.     (line   54)
* MODE_EXIT:                             Mode Switching.     (line   60)
* MODE_FLOAT:                            Machine Modes.      (line  232)
* MODE_FRACT:                            Machine Modes.      (line  240)
* MODE_FUNCTION:                         Machine Modes.      (line  263)
* MODE_INT:                              Machine Modes.      (line  224)
* MODE_NEEDED:                           Mode Switching.     (line   41)
* MODE_PARTIAL_INT:                      Machine Modes.      (line  228)
* MODE_PRIORITY_TO_MODE:                 Mode Switching.     (line   66)
* MODE_RANDOM:                           Machine Modes.      (line  272)
* MODE_UACCUM:                           Machine Modes.      (line  252)
* MODE_UFRACT:                           Machine Modes.      (line  244)
* modifiers in constraints:              Modifiers.          (line    6)
* MODIFY_EXPR:                           Unary and Binary Expressions.
                                                             (line    6)
* MODIFY_JNI_METHOD_CALL:                Misc.               (line  765)
* modM3 instruction pattern:             Standard Names.     (line  266)
* modulo scheduling:                     RTL passes.         (line  131)
* MOVE_BY_PIECES_P:                      Costs.              (line  164)
* MOVE_MAX:                              Misc.               (line  100)
* MOVE_MAX_PIECES:                       Costs.              (line  170)
* MOVE_RATIO:                            Costs.              (line  148)
* movM instruction pattern:              Standard Names.     (line   11)
* movmemM instruction pattern:           Standard Names.     (line  744)
* movmisalignM instruction pattern:      Standard Names.     (line  125)
* movMODEcc instruction pattern:         Standard Names.     (line 1031)
* movstr instruction pattern:            Standard Names.     (line  779)
* movstrictM instruction pattern:        Standard Names.     (line  119)
* msubMN4 instruction pattern:           Standard Names.     (line  460)
* mulhisi3 instruction pattern:          Standard Names.     (line  413)
* mulM3 instruction pattern:             Standard Names.     (line  266)
* mulqihi3 instruction pattern:          Standard Names.     (line  417)
* mulsidi3 instruction pattern:          Standard Names.     (line  417)
* 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  252)
* 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  474)
* 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)
* 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   47)
* 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  322)
* ne:                                    Comparisons.        (line   56)
* ne and attributes:                     Expressions.        (line   83)
* nearbyintM2 instruction pattern:       Standard Names.     (line  654)
* 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  526)
* nested functions, trampolines for:     Trampolines.        (line    6)
* nested_ptr:                            GTY Options.        (line  194)
* 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   87)
* 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 1406)
* nonlocal_goto_receiver instruction pattern: Standard Names.
                                                             (line 1423)
* 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 1213)
* NOP_EXPR:                              Unary and Binary Expressions.
                                                             (line    6)
* normal predicates:                     Predicates.         (line   31)
* not:                                   Arithmetic.         (line  155)
* not and attributes:                    Expressions.        (line   50)
* not equal:                             Comparisons.        (line   56)
* not, canonicalization of:              Insn Canonicalizations.
                                                             (line   27)
* note:                                  Insns.              (line  173)
* 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  198)
* NOTE_INSN_BLOCK_END:                   Insns.              (line  198)
* NOTE_INSN_DELETED:                     Insns.              (line  188)
* NOTE_INSN_DELETED_LABEL:               Insns.              (line  193)
* NOTE_INSN_EH_REGION_BEG:               Insns.              (line  204)
* NOTE_INSN_EH_REGION_END:               Insns.              (line  204)
* NOTE_INSN_FUNCTION_BEG:                Insns.              (line  228)
* NOTE_INSN_LOOP_BEG:                    Insns.              (line  212)
* NOTE_INSN_LOOP_CONT:                   Insns.              (line  218)
* NOTE_INSN_LOOP_END:                    Insns.              (line  212)
* NOTE_INSN_LOOP_VTOP:                   Insns.              (line  222)
* NOTE_INSN_VAR_LOCATION:                Insns.              (line  232)
* NOTE_LINE_NUMBER:                      Insns.              (line  173)
* NOTE_SOURCE_FILE:                      Insns.              (line  173)
* NOTE_VAR_LOCATION:                     Insns.              (line  232)
* NOTICE_UPDATE_CC:                      CC0 Condition Codes.
                                                             (line   30)
* 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  260)
* NO_IMPLICIT_EXTERN_C:                  Misc.               (line  373)
* 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  285)
* NUM_MODES_FOR_MODE_SWITCHING:          Mode Switching.     (line   29)
* N_REG_CLASSES:                         Register Classes.   (line   81)
* o in constraint:                       Simple Constraints. (line   23)
* OBJC_GEN_METHOD_LABEL:                 Label Output.       (line  447)
* OBJC_JBLEN:                            Misc.               (line  958)
* OBJECT_FORMAT_COFF:                    Macros for Initialization.
                                                             (line   96)
* offsettable address:                   Simple Constraints. (line   23)
* OFFSET_TYPE:                           Types.              (line    6)
* OImode:                                Machine Modes.      (line   51)
* Omega a solver for linear programming problems: Omega.     (line    6)
* 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  741)
* 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   53)
* operator predicates:                   Predicates.         (line    6)
* optc-gen.awk:                          Options.            (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   94)
* 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  139)
* 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  220)
* parallel:                              Side Effects.       (line  210)
* parameters, c++ abi:                   C++ ABI.            (line    6)
* parameters, miscellaneous:             Misc.               (line    6)
* parameters, precompiled headers:       PCH Target.         (line    6)
* paramN_is:                             GTY Options.        (line  134)
* param_is:                              GTY Options.        (line  115)
* parity:                                Arithmetic.         (line  243)
* parityM2 instruction pattern:          Standard Names.     (line  735)
* PARM_BOUNDARY:                         Storage Layout.     (line  138)
* PARM_DECL:                             Declarations.       (line    6)
* PARSE_LDD_OUTPUT:                      Macros for Initialization.
                                                             (line  125)
* 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  291)
* 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  322)
* PCC_STATIC_STRUCT_RETURN:              Aggregate Return.   (line   64)
* PC_REGNUM:                             Register Basics.    (line  108)
* 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)
* PHI_ARG_DEF:                           SSA.                (line   70)
* PHI_ARG_EDGE:                          SSA.                (line   67)
* PHI_ARG_ELT:                           SSA.                (line   62)
* PHI_NUM_ARGS:                          SSA.                (line   58)
* PHI_RESULT:                            SSA.                (line   55)
* 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   81)
* POINTER_PLUS_EXPR:                     Unary and Binary Expressions.
                                                             (line    6)
* POINTER_SIZE:                          Storage Layout.     (line   75)
* POINTER_TYPE:                          Types.              (line    6)
* popcount:                              Arithmetic.         (line  239)
* popcountM2 instruction pattern:        Standard Names.     (line  729)
* 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_modify:                           Incdec.             (line   33)
* post_order_compute, inverted_post_order_compute, walk_dominator_tree: Basic Blocks.
                                                             (line   34)
* POWI_MAX_MULTS:                        Misc.               (line  827)
* powM3 instruction pattern:             Standard Names.     (line  603)
* pragma:                                Misc.               (line  379)
* 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  152)
* prefetch:                              Side Effects.       (line  317)
* prefetch and /v:                       Flags.              (line  214)
* prefetch instruction pattern:          Standard Names.     (line 1549)
* 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   76)
* preserving virtual SSA form:           SSA.                (line  184)
* 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 1398)
* probe_stack_address instruction pattern: Standard Names.   (line 1391)
* 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 1487)
* PROMOTE_MODE:                          Storage Layout.     (line   92)
* pseudo registers:                      Regs and Memory.    (line    9)
* PSImode:                               Machine Modes.      (line   32)
* PTRDIFF_TYPE:                          Type Layout.        (line  200)
* 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  253)
* 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  282)
* PUT_REG_NOTE_KIND:                     Insns.              (line  353)
* PUT_SDB_...:                           SDB and DWARF.      (line  105)
* QCmode:                                Machine Modes.      (line  196)
* QFmode:                                Machine Modes.      (line   54)
* QImode:                                Machine Modes.      (line   25)
* QImode, in insn:                       Insns.              (line  275)
* QQmode:                                Machine Modes.      (line  103)
* 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   41)
* quotient:                              Arithmetic.         (line  117)
* 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_ARITHMETIC:                       Floating Point.     (line   64)
* 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_VALUES_EQUAL:                     Floating Point.     (line   31)
* REAL_VALUES_LESS:                      Floating Point.     (line   37)
* REAL_VALUE_ABS:                        Floating Point.     (line   81)
* REAL_VALUE_ATOF:                       Floating Point.     (line   48)
* REAL_VALUE_FIX:                        Floating Point.     (line   40)
* REAL_VALUE_FROM_INT:                   Floating Point.     (line   90)
* REAL_VALUE_ISINF:                      Floating Point.     (line   58)
* REAL_VALUE_ISNAN:                      Floating Point.     (line   61)
* REAL_VALUE_NEGATE:                     Floating Point.     (line   78)
* REAL_VALUE_NEGATIVE:                   Floating Point.     (line   55)
* REAL_VALUE_TO_INT:                     Floating Point.     (line   84)
* REAL_VALUE_TO_TARGET_DECIMAL128:       Data Output.        (line  143)
* REAL_VALUE_TO_TARGET_DECIMAL32:        Data Output.        (line  141)
* REAL_VALUE_TO_TARGET_DECIMAL64:        Data Output.        (line  142)
* REAL_VALUE_TO_TARGET_DOUBLE:           Data Output.        (line  139)
* REAL_VALUE_TO_TARGET_LONG_DOUBLE:      Data Output.        (line  140)
* REAL_VALUE_TO_TARGET_SINGLE:           Data Output.        (line  138)
* REAL_VALUE_TYPE:                       Floating Point.     (line   25)
* REAL_VALUE_UNSIGNED_FIX:               Floating Point.     (line   43)
* 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_smax_M instruction pattern:      Standard Names.     (line  307)
* reduc_smin_M instruction pattern:      Standard Names.     (line  307)
* reduc_splus_M instruction pattern:     Standard Names.     (line  319)
* reduc_umax_M instruction pattern:      Standard Names.     (line  313)
* reduc_umin_M instruction pattern:      Standard Names.     (line  313)
* reduc_uplus_M instruction pattern:     Standard Names.     (line  325)
* 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)
* regclass_for_constraint:               C Constraint Interface.
                                                             (line   58)
* 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  379)
* 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  532)
* REG_BR_PROB:                           Insns.              (line  526)
* 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  498)
* REG_CC_USER:                           Insns.              (line  498)
* reg_class_contents:                    Register Basics.    (line   59)
* REG_CLASS_CONTENTS:                    Register Classes.   (line   91)
* REG_CLASS_FROM_CONSTRAINT:             Old Constraints.    (line   33)
* REG_CLASS_FROM_LETTER:                 Old Constraints.    (line   25)
* REG_CLASS_NAMES:                       Register Classes.   (line   86)
* REG_CROSSING_JUMP:                     Insns.              (line  412)
* REG_DEAD:                              Insns.              (line  364)
* REG_DEAD, REG_UNUSED:                  Liveness information.
                                                             (line   32)
* REG_DEP_ANTI:                          Insns.              (line  520)
* REG_DEP_OUTPUT:                        Insns.              (line  516)
* REG_DEP_TRUE:                          Insns.              (line  513)
* REG_EH_REGION, EDGE_ABNORMAL_CALL:     Edges.              (line  109)
* REG_EQUAL:                             Insns.              (line  427)
* REG_EQUIV:                             Insns.              (line  427)
* REG_EXPR:                              Special Accessors.  (line   58)
* REG_FRAME_RELATED_EXPR:                Insns.              (line  538)
* REG_FUNCTION_VALUE_P:                  Flags.              (line   89)
* REG_INC:                               Insns.              (line  380)
* reg_label and /v:                      Flags.              (line   65)
* REG_LABEL_OPERAND:                     Insns.              (line  394)
* REG_LABEL_TARGET:                      Insns.              (line  403)
* reg_names:                             Register Basics.    (line   59)
* reg_names <1>:                         Instruction Output. (line  107)
* REG_NONNEG:                            Insns.              (line  386)
* REG_NOTES:                             Insns.              (line  328)
* REG_NOTE_KIND:                         Insns.              (line  353)
* 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   50)
* REG_POINTER:                           Flags.              (line   94)
* REG_SETJMP:                            Insns.              (line  421)
* REG_UNUSED:                            Insns.              (line  373)
* 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  262)
* reloading:                             RTL passes.         (line  182)
* reload_completed:                      Standard Names.     (line 1180)
* 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  137)
* remainderM3 instruction pattern:       Standard Names.     (line  549)
* reorder:                               GTY Options.        (line  220)
* representation of RTL:                 RTL.                (line    6)
* reservation delays:                    Processor pipeline description.
                                                             (line    6)
* restore_stack_block instruction pattern: Standard Names.   (line 1312)
* restore_stack_function instruction pattern: Standard Names.
                                                             (line 1312)
* restore_stack_nonlocal instruction pattern: Standard Names.
                                                             (line 1312)
* 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 1154)
* 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  133)
* RETURN_ADDR_OFFSET:                    Exception Handling. (line   59)
* RETURN_ADDR_RTX:                       Frame Layout.       (line  122)
* 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   93)
* REVERSIBLE_CC_MODE:                    MODE_CC Condition Codes.
                                                             (line   78)
* right rotate:                          Arithmetic.         (line  196)
* right shift:                           Arithmetic.         (line  191)
* rintM2 instruction pattern:            Standard Names.     (line  662)
* RISC:                                  Processor pipeline description.
                                                             (line    6)
* RISC <1>:                              Processor pipeline description.
                                                             (line  223)
* roots, marking:                        GGC Roots.          (line    6)
* rotate:                                Arithmetic.         (line  196)
* rotate <1>:                            Arithmetic.         (line  196)
* rotatert:                              Arithmetic.         (line  196)
* rotlM3 instruction pattern:            Standard Names.     (line  514)
* rotrM3 instruction pattern:            Standard Names.     (line  514)
* roundM2 instruction pattern:           Standard Names.     (line  638)
* ROUND_DIV_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* ROUND_MOD_EXPR:                        Unary and Binary Expressions.
                                                             (line    6)
* ROUND_TOWARDS_ZERO:                    Storage Layout.     (line  471)
* ROUND_TYPE_ALIGN:                      Storage Layout.     (line  419)
* RSHIFT_EXPR:                           Unary and Binary Expressions.
                                                             (line    6)
* 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)
* same_type_p:                           Types.              (line   86)
* SAmode:                                Machine Modes.      (line  147)
* satfractMN2 instruction pattern:       Standard Names.     (line  919)
* satfractunsMN2 instruction pattern:    Standard Names.     (line  932)
* satisfies_constraint_M:                C Constraint Interface.
                                                             (line   46)
* sat_fract:                             Conversions.        (line   90)
* SAVE_EXPR:                             Unary and Binary Expressions.
                                                             (line    6)
* save_stack_block instruction pattern:  Standard Names.     (line 1312)
* save_stack_function instruction pattern: Standard Names.   (line 1312)
* save_stack_nonlocal instruction pattern: Standard Names.   (line 1312)
* SBSS_SECTION_ASM_OP:                   Sections.           (line   75)
* Scalar evolutions:                     Scalar evolutions.  (line    6)
* scalars, returned as values:           Scalar Return.      (line    6)
* SCHED_GROUP_P:                         Flags.              (line  148)
* SCmode:                                Machine Modes.      (line  196)
* 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  123)
* SDB_ALLOW_UNKNOWN_REFERENCES:          SDB and DWARF.      (line  118)
* SDB_DEBUGGING_INFO:                    SDB and DWARF.      (line    8)
* SDB_DELIM:                             SDB and DWARF.      (line  111)
* SDB_OUTPUT_SOURCE_LINE:                SDB and DWARF.      (line  128)
* SDmode:                                Machine Modes.      (line   85)
* sdot_prodM instruction pattern:        Standard Names.     (line  331)
* 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  787)
* SETUP_FRAME_ADDRESSES:                 Frame Layout.       (line  100)
* SET_ASM_OP:                            Label Output.       (line  416)
* SET_ASM_OP <1>:                        Label Output.       (line  427)
* set_attr:                              Tagging Insns.      (line   31)
* set_attr_alternative:                  Tagging Insns.      (line   49)
* set_bb_seq:                            GIMPLE sequences.   (line   75)
* SET_BY_PIECES_P:                       Costs.              (line  205)
* 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  193)
* SET_SRC:                               Side Effects.       (line   69)
* set_thread_pointerMODE instruction pattern: Standard Names.
                                                             (line 1856)
* SET_TYPE_STRUCTURAL_EQUALITY:          Types.              (line    6)
* SET_TYPE_STRUCTURAL_EQUALITY <1>:      Types.              (line   81)
* SFmode:                                Machine Modes.      (line   66)
* SF_SIZE:                               Type Layout.        (line  135)
* sharing of RTL components:             Sharing.            (line    6)
* shift:                                 Arithmetic.         (line  174)
* 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 1519)
* sibling call:                          Edges.              (line  121)
* SIBLING_CALL_P:                        Flags.              (line  161)
* signed division:                       Arithmetic.         (line  117)
* signed division with signed saturation: Arithmetic.        (line  117)
* signed maximum:                        Arithmetic.         (line  142)
* signed minimum:                        Arithmetic.         (line  142)
* 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  251)
* SImode:                                Machine Modes.      (line   37)
* simple constraints:                    Simple Constraints. (line    6)
* simple_return:                         Side Effects.       (line   86)
* simple_return instruction pattern:     Standard Names.     (line 1169)
* sincos math function, implicit usage:  Library Calls.      (line   78)
* sincosM3 instruction pattern:          Standard Names.     (line  574)
* sinM2 instruction pattern:             Standard Names.     (line  566)
* SIZETYPE:                              Type Layout.        (line  190)
* SIZE_ASM_OP:                           Label Output.       (line   33)
* SIZE_TYPE:                             Type Layout.        (line  174)
* skip:                                  GTY Options.        (line   76)
* SLOW_BYTE_ACCESS:                      Costs.              (line  117)
* SLOW_UNALIGNED_ACCESS:                 Costs.              (line  132)
* smax:                                  Arithmetic.         (line  142)
* smin:                                  Arithmetic.         (line  142)
* sms, swing, software pipelining:       RTL passes.         (line  131)
* smulM3_highpart instruction pattern:   Standard Names.     (line  429)
* soft float library:                    Soft float library routines.
                                                             (line    6)
* special:                               GTY Options.        (line  308)
* 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  111)
* sqrt:                                  Arithmetic.         (line  207)
* sqrtM2 instruction pattern:            Standard Names.     (line  532)
* square root:                           Arithmetic.         (line  207)
* SSA:                                   SSA.                (line    6)
* ssaddM3 instruction pattern:           Standard Names.     (line  266)
* ssashlM3 instruction pattern:          Standard Names.     (line  504)
* SSA_NAME_DEF_STMT:                     SSA.                (line  218)
* SSA_NAME_VERSION:                      SSA.                (line  223)
* ssdivM3 instruction pattern:           Standard Names.     (line  266)
* ssmaddMN4 instruction pattern:         Standard Names.     (line  452)
* ssmsubMN4 instruction pattern:         Standard Names.     (line  476)
* ssmulM3 instruction pattern:           Standard Names.     (line  266)
* ssnegM2 instruction pattern:           Standard Names.     (line  526)
* sssubM3 instruction pattern:           Standard Names.     (line  266)
* ssum_widenM3 instruction pattern:      Standard Names.     (line  340)
* ss_abs:                                Arithmetic.         (line  201)
* ss_ashift:                             Arithmetic.         (line  174)
* ss_div:                                Arithmetic.         (line  117)
* 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   47)
* STACK_BOUNDARY:                        Storage Layout.     (line  144)
* STACK_CHECK_BUILTIN:                   Stack Checking.     (line   31)
* STACK_CHECK_FIXED_FRAME_SIZE:          Stack Checking.     (line   82)
* STACK_CHECK_MAX_FRAME_SIZE:            Stack Checking.     (line   73)
* STACK_CHECK_MAX_VAR_SIZE:              Stack Checking.     (line   89)
* 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   73)
* 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   57)
* 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 1866)
* stack_protect_test instruction pattern: Standard Names.    (line 1877)
* STACK_PUSH_CODE:                       Frame Layout.       (line   16)
* STACK_REGS:                            Stack Registers.    (line   19)
* STACK_REG_COVER_CLASS:                 Stack Registers.    (line   22)
* STACK_SAVEAREA_MODE:                   Storage Layout.     (line  435)
* STACK_SIZE_MODE:                       Storage Layout.     (line  446)
* STACK_SLOT_ALIGNMENT:                  Storage Layout.     (line  267)
* standard pattern names:                Standard Names.     (line    6)
* STANDARD_STARTFILE_PREFIX:             Driver.             (line  274)
* STANDARD_STARTFILE_PREFIX_1:           Driver.             (line  281)
* STANDARD_STARTFILE_PREFIX_2:           Driver.             (line  288)
* STARTFILE_SPEC:                        Driver.             (line  147)
* STARTING_FRAME_OFFSET:                 Frame Layout.       (line   38)
* 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   45)
* 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_BY_PIECES_P:                     Costs.              (line  212)
* STORE_FLAG_VALUE:                      Misc.               (line  201)
* store_multiple instruction pattern:    Standard Names.     (line  159)
* strcpy:                                Storage Layout.     (line  228)
* STRICT_ALIGNMENT:                      Storage Layout.     (line  317)
* 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  854)
* structure value address:               Aggregate Return.   (line    6)
* structures, returning:                 Interface.          (line   10)
* STRUCTURE_SIZE_BOUNDARY:               Storage Layout.     (line  309)
* subM3 instruction pattern:             Standard Names.     (line  266)
* 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)
* SUCCESS_EXIT_CODE:                     Host Misc.          (line   12)
* SUPPORTS_INIT_PRIORITY:                Macros for Initialization.
                                                             (line   57)
* SUPPORTS_ONE_ONLY:                     Label Output.       (line  255)
* SUPPORTS_WEAK:                         Label Output.       (line  229)
* 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   86)
* 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 1622)
* sync_andMODE instruction pattern:      Standard Names.     (line 1622)
* sync_compare_and_swapMODE instruction pattern: Standard Names.
                                                             (line 1581)
* sync_iorMODE instruction pattern:      Standard Names.     (line 1622)
* sync_lock_releaseMODE instruction pattern: Standard Names. (line 1691)
* sync_lock_test_and_setMODE instruction pattern: Standard Names.
                                                             (line 1664)
* sync_nandMODE instruction pattern:     Standard Names.     (line 1622)
* sync_new_addMODE instruction pattern:  Standard Names.     (line 1656)
* sync_new_andMODE instruction pattern:  Standard Names.     (line 1656)
* sync_new_iorMODE instruction pattern:  Standard Names.     (line 1656)
* sync_new_nandMODE instruction pattern: Standard Names.     (line 1656)
* sync_new_subMODE instruction pattern:  Standard Names.     (line 1656)
* sync_new_xorMODE instruction pattern:  Standard Names.     (line 1656)
* sync_old_addMODE instruction pattern:  Standard Names.     (line 1638)
* sync_old_andMODE instruction pattern:  Standard Names.     (line 1638)
* sync_old_iorMODE instruction pattern:  Standard Names.     (line 1638)
* sync_old_nandMODE instruction pattern: Standard Names.     (line 1638)
* sync_old_subMODE instruction pattern:  Standard Names.     (line 1638)
* sync_old_xorMODE instruction pattern:  Standard Names.     (line 1638)
* sync_subMODE instruction pattern:      Standard Names.     (line 1622)
* sync_xorMODE instruction pattern:      Standard Names.     (line 1622)
* 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 1242)
* tag:                                   GTY Options.        (line   82)
* tagging insns:                         Tagging Insns.      (line    6)
* tail calls:                            Tail Calls.         (line    6)
* TAmode:                                Machine Modes.      (line  155)
* 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_ADDRESS_COST:                   Costs.              (line  300)
* TARGET_ADDR_SPACE_ADDRESS_MODE:        Named Address Spaces.
                                                             (line   43)
* TARGET_ADDR_SPACE_CONVERT:             Named Address Spaces.
                                                             (line   85)
* TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces.
                                                             (line   61)
* TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS:  Named Address Spaces.
                                                             (line   69)
* TARGET_ADDR_SPACE_POINTER_MODE:        Named Address Spaces.
                                                             (line   36)
* TARGET_ADDR_SPACE_SUBSET_P:            Named Address Spaces.
                                                             (line   76)
* TARGET_ADDR_SPACE_VALID_POINTER_MODE:  Named Address Spaces.
                                                             (line   50)
* TARGET_ADJUST_INSN_LENGTH:             Misc.               (line 1022)
* TARGET_ALIGN_ANON_BITFIELD:            Storage Layout.     (line  394)
* TARGET_ALLOCATE_INITIAL_VALUE:         Misc.               (line  701)
* TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS:  Misc.               (line  980)
* TARGET_ALWAYS_STRIP_DOTDOT:            Driver.             (line  246)
* TARGET_ARG_PARTIAL_BYTES:              Register Arguments. (line   81)
* TARGET_ARM_EABI_UNWINDER:              Exception Region Output.
                                                             (line  127)
* TARGET_ARRAY_MODE_SUPPORTED_P:         Register Arguments. (line  333)
* TARGET_ASAN_SHADOW_OFFSET:             Misc.               (line 1008)
* 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_VISIBILITY:        Label Output.       (line  266)
* 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  129)
* TARGET_ASM_CODE_END:                   File Framework.     (line   57)
* TARGET_ASM_CONSTRUCTOR:                Macros for Initialization.
                                                             (line   68)
* TARGET_ASM_DECLARE_CONSTANT_NAME:      Label Output.       (line  149)
* 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  302)
* 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  194)
* TARGET_ASM_GLOBALIZE_LABEL:            Label Output.       (line  185)
* TARGET_ASM_INIT_SECTIONS:              Sections.           (line  159)
* TARGET_ASM_INTEGER:                    Data Output.        (line   25)
* TARGET_ASM_INTERNAL_LABEL:             Label Output.       (line  345)
* 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  308)
* TARGET_ASM_MERGEABLE_RODATA_PREFIX:    Sections.           (line  221)
* TARGET_ASM_NAMED_SECTION:              File Framework.     (line  113)
* TARGET_ASM_OPEN_PAREN:                 Data Output.        (line  128)
* TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA:    Data Output.        (line   38)
* TARGET_ASM_OUTPUT_ANCHOR:              Anchored Addresses. (line   42)
* TARGET_ASM_OUTPUT_DWARF_DTPREL:        SDB and DWARF.      (line   99)
* 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  121)
* 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   92)
* TARGET_ATOMIC_TEST_AND_SET_TRUEVAL:    Misc.               (line 1018)
* 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  798)
* TARGET_BRANCH_TARGET_REGISTER_CLASS:   Misc.               (line  791)
* TARGET_BUILD_BUILTIN_VA_LIST:          Register Arguments. (line  271)
* TARGET_BUILTIN_DECL:                   Misc.               (line  595)
* TARGET_BUILTIN_RECIPROCAL:             Addressing Modes.   (line  261)
* TARGET_BUILTIN_SETJMP_FRAME_VALUE:     Frame Layout.       (line  107)
* TARGET_C99_FUNCTIONS:                  Library Calls.      (line   70)
* TARGET_CALLEE_COPIES:                  Register Arguments. (line  113)
* TARGET_CANNOT_FORCE_CONST_MEM:         Addressing Modes.   (line  234)
* TARGET_CANNOT_MODIFY_JUMPS_P:          Misc.               (line  778)
* TARGET_CANONICALIZE_COMPARISON:        MODE_CC Condition Codes.
                                                             (line   55)
* TARGET_CANONICAL_VA_LIST_TYPE:         Register Arguments. (line  292)
* TARGET_CAN_ELIMINATE:                  Elimination.        (line   73)
* TARGET_CAN_FOLLOW_JUMP:                Misc.               (line  687)
* TARGET_CAN_INLINE_P:                   Target Attributes.  (line  157)
* TARGET_CASE_VALUES_THRESHOLD:          Misc.               (line   46)
* TARGET_CC_MODES_COMPATIBLE:            MODE_CC Condition Codes.
                                                             (line  121)
* TARGET_CHECK_PCH_TARGET_FLAGS:         PCH Target.         (line   26)
* TARGET_CHECK_STRING_OBJECT_FORMAT_ARG: Run-time Target.    (line  119)
* TARGET_CLASS_LIKELY_SPILLED_P:         Register Classes.   (line  489)
* TARGET_CLASS_MAX_NREGS:                Register Classes.   (line  505)
* TARGET_COMMUTATIVE_P:                  Misc.               (line  694)
* TARGET_COMPARE_VERSION_PRIORITY:       Misc.               (line  636)
* TARGET_COMP_TYPE_ATTRIBUTES:           Target Attributes.  (line   25)
* TARGET_CONDITIONAL_REGISTER_USAGE:     Register Basics.    (line   59)
* TARGET_CONST_ANCHOR:                   Misc.               (line  991)
* TARGET_CONST_NOT_OK_FOR_DEBUG_P:       Addressing Modes.   (line  230)
* TARGET_CONVERT_TO_TYPE:                Misc.               (line  945)
* TARGET_CPU_CPP_BUILTINS:               Run-time Target.    (line    8)
* 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_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  518)
* TARGET_DECLSPEC:                       Target Attributes.  (line   72)
* TARGET_DEFAULT_PACK_STRUCT:            Misc.               (line  438)
* TARGET_DEFAULT_SHORT_ENUMS:            Type Layout.        (line  166)
* TARGET_DEFAULT_TARGET_FLAGS:           Run-time Target.    (line   55)
* TARGET_DEFERRED_OUTPUT_DEFS:           Label Output.       (line  430)
* 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  564)
* TARGET_DLLIMPORT_DECL_ATTRIBUTES:      Target Attributes.  (line   55)
* TARGET_DWARF_CALLING_CONVENTION:       SDB and DWARF.      (line   16)
* TARGET_DWARF_HANDLE_FRAME_UNSPEC:      Frame Layout.       (line  169)
* TARGET_DWARF_REGISTER_SPAN:            Exception Region Output.
                                                             (line  104)
* TARGET_EDOM:                           Library Calls.      (line   52)
* 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_ENUM_VA_LIST_P:                 Register Arguments. (line  275)
* TARGET_EXCEPT_UNWIND_INFO:             Exception Region Output.
                                                             (line   45)
* TARGET_EXECUTABLE_SUFFIX:              Misc.               (line  752)
* TARGET_EXPAND_BUILTIN:                 Misc.               (line  605)
* TARGET_EXPAND_BUILTIN_SAVEREGS:        Varargs.            (line   64)
* TARGET_EXPAND_TO_RTL_HOOK:             Storage Layout.     (line  524)
* TARGET_EXPR:                           Unary and Binary Expressions.
                                                             (line    6)
* TARGET_EXTRA_INCLUDES:                 Misc.               (line  837)
* TARGET_EXTRA_LIVE_ON_ENTRY:            Tail Calls.         (line   20)
* TARGET_EXTRA_PRE_INCLUDES:             Misc.               (line  844)
* TARGET_FIXED_CONDITION_CODE_REGS:      MODE_CC Condition Codes.
                                                             (line  106)
* TARGET_FIXED_POINT_SUPPORTED_P:        Storage Layout.     (line  521)
* target_flags:                          Run-time Target.    (line   51)
* TARGET_FLAGS_REGNUM:                   MODE_CC Condition Codes.
                                                             (line  134)
* TARGET_FLT_EVAL_METHOD:                Type Layout.        (line  147)
* TARGET_FN_ABI_VA_LIST:                 Register Arguments. (line  287)
* TARGET_FOLD_BUILTIN:                   Misc.               (line  627)
* TARGET_FORCE_AT_COMP_DIR:              SDB and DWARF.      (line   60)
* TARGET_FORMAT_TYPES:                   Misc.               (line  865)
* TARGET_FRAME_POINTER_REQUIRED:         Elimination.        (line    8)
* TARGET_FUNCTION_ARG:                   Register Arguments. (line   10)
* TARGET_FUNCTION_ARG_ADVANCE:           Register Arguments. (line  184)
* TARGET_FUNCTION_ARG_BOUNDARY:          Register Arguments. (line  238)
* TARGET_FUNCTION_ARG_ROUND_BOUNDARY:    Register Arguments. (line  244)
* TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes.  (line   93)
* TARGET_FUNCTION_INCOMING_ARG:          Register Arguments. (line   65)
* 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  652)
* TARGET_GET_DRAP_RTX:                   Misc.               (line  974)
* TARGET_GET_FUNCTION_VERSIONS_DISPATCHER: Misc.             (line  645)
* TARGET_GET_PCH_VALIDITY:               PCH Target.         (line    6)
* TARGET_GET_RAW_ARG_MODE:               Aggregate Return.   (line   82)
* TARGET_GET_RAW_RESULT_MODE:            Aggregate Return.   (line   76)
* TARGET_GIMPLIFY_VA_ARG_EXPR:           Register Arguments. (line  297)
* 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_SINCOS:                     Library Calls.      (line   78)
* TARGET_HAVE_CONDITIONAL_EXECUTION:     Misc.               (line  812)
* 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  579)
* TARGET_INIT_DWARF_REG_SIZES_EXTRA:     Exception Region Output.
                                                             (line  113)
* TARGET_INIT_LIBFUNCS:                  Library Calls.      (line   15)
* TARGET_INSERT_ATTRIBUTES:              Target Attributes.  (line   80)
* TARGET_INSN_LENGTH_PARAMETERS:         Misc.               (line 1029)
* TARGET_INSTANTIATE_DECLS:              Storage Layout.     (line  532)
* TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc.              (line  898)
* TARGET_INVALID_BINARY_OP:              Misc.               (line  917)
* TARGET_INVALID_CONVERSION:             Misc.               (line  904)
* TARGET_INVALID_PARAMETER_TYPE:         Misc.               (line  923)
* TARGET_INVALID_RETURN_TYPE:            Misc.               (line  930)
* TARGET_INVALID_UNARY_OP:               Misc.               (line  910)
* TARGET_INVALID_WITHIN_DOLOOP:          Misc.               (line  659)
* TARGET_IN_SMALL_DATA_P:                Sections.           (line  293)
* TARGET_LEGITIMATE_ADDRESS_P:           Addressing Modes.   (line   48)
* TARGET_LEGITIMATE_COMBINED_INSN:       Misc.               (line  673)
* TARGET_LEGITIMATE_CONSTANT_P:          Addressing Modes.   (line  213)
* TARGET_LEGITIMIZE_ADDRESS:             Addressing Modes.   (line  129)
* TARGET_LIBCALL_VALUE:                  Scalar Return.      (line   65)
* TARGET_LIBFUNC_GNU_PREFIX:             Library Calls.      (line   24)
* TARGET_LIBGCC_CMP_RETURN_MODE:         Storage Layout.     (line  455)
* TARGET_LIBGCC_SDATA_SECTION:           Sections.           (line  131)
* TARGET_LIBGCC_SHIFT_COUNT_MODE:        Storage Layout.     (line  461)
* TARGET_LIB_INT_CMP_BIASED:             Library Calls.      (line   42)
* TARGET_LOOP_UNROLL_ADJUST:             Misc.               (line  818)
* TARGET_LRA_P:                          Register Classes.   (line  548)
* TARGET_MACHINE_DEPENDENT_REORG:        Misc.               (line  564)
* TARGET_MANGLE_ASSEMBLER_NAME:          Label Output.       (line  321)
* TARGET_MANGLE_DECL_ASSEMBLER_NAME:     Sections.           (line  241)
* TARGET_MANGLE_TYPE:                    Storage Layout.     (line  536)
* TARGET_MAX_ANCHOR_OFFSET:              Anchored Addresses. (line   38)
* TARGET_MD_ASM_CLOBBERS:                Misc.               (line  483)
* TARGET_MEMBER_TYPE_FORCES_BLK:         Storage Layout.     (line  407)
* TARGET_MEMMODEL_CHECK:                 Misc.               (line 1013)
* 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_DEPENDENT_ADDRESS_P:       Addressing Modes.   (line  196)
* TARGET_MODE_REP_EXTENDED:              Misc.               (line  175)
* TARGET_MS_BITFIELD_LAYOUT_P:           Storage Layout.     (line  490)
* TARGET_MUST_PASS_IN_STACK:             Register Arguments. (line   58)
* TARGET_MUST_PASS_IN_STACK, and TARGET_FUNCTION_ARG: Register Arguments.
                                                             (line   50)
* TARGET_NARROW_VOLATILE_BITFIELD:       Storage Layout.     (line  400)
* TARGET_N_FORMAT_TYPES:                 Misc.               (line  870)
* 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  747)
* TARGET_OBJFMT_CPP_BUILTINS:            Run-time Target.    (line   45)
* TARGET_OPTF:                           Misc.               (line  852)
* TARGET_OPTION_DEFAULT_PARAMS:          Run-time Target.    (line  160)
* TARGET_OPTION_FUNCTION_VERSIONS:       Target Attributes.  (line  149)
* TARGET_OPTION_INIT_STRUCT:             Run-time Target.    (line  156)
* TARGET_OPTION_OPTIMIZATION_TABLE:      Run-time Target.    (line  142)
* TARGET_OPTION_OVERRIDE:                Target Attributes.  (line  136)
* TARGET_OPTION_PRAGMA_PARSE:            Target Attributes.  (line  129)
* TARGET_OPTION_PRINT:                   Target Attributes.  (line  123)
* TARGET_OPTION_RESTORE:                 Target Attributes.  (line  117)
* 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  874)
* TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc.            (line  880)
* TARGET_OVERRIDES_FORMAT_INIT:          Misc.               (line  884)
* TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE:  Run-time Target.    (line  126)
* TARGET_PASS_BY_REFERENCE:              Register Arguments. (line  101)
* TARGET_PCH_VALID_P:                    PCH Target.         (line   11)
* TARGET_POSIX_IO:                       Misc.               (line  508)
* 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  123)
* TARGET_PROFILE_BEFORE_PROLOGUE:        Sections.           (line  301)
* TARGET_PROMOTED_TYPE:                  Misc.               (line  937)
* TARGET_PROMOTE_FUNCTION_MODE:          Storage Layout.     (line  114)
* TARGET_PROMOTE_PROTOTYPES:             Stack Arguments.    (line   10)
* TARGET_PTRMEMFUNC_VBIT_LOCATION:       Type Layout.        (line  293)
* TARGET_REF_MAY_ALIAS_ERRNO:            Register Arguments. (line  308)
* TARGET_REGISTER_MOVE_COST:             Costs.              (line   31)
* TARGET_REGISTER_PRIORITY:              Register Classes.   (line  553)
* TARGET_RELAXED_ORDERING:               Misc.               (line  889)
* TARGET_RESOLVE_OVERLOADED_BUILTIN:     Misc.               (line  616)
* TARGET_RETURN_IN_MEMORY:               Aggregate Return.   (line   15)
* TARGET_RETURN_IN_MSB:                  Scalar Return.      (line  117)
* TARGET_RETURN_POPS_ARGS:               Stack Arguments.    (line   98)
* TARGET_RTX_COSTS:                      Costs.              (line  269)
* TARGET_SCALAR_MODE_SUPPORTED_P:        Register Arguments. (line  315)
* TARGET_SCHED_ADJUST_COST:              Scheduling.         (line   35)
* TARGET_SCHED_ADJUST_PRIORITY:          Scheduling.         (line   50)
* TARGET_SCHED_ALLOC_SCHED_CONTEXT:      Scheduling.         (line  272)
* TARGET_SCHED_CLEAR_SCHED_CONTEXT:      Scheduling.         (line  287)
* TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling.     (line   87)
* TARGET_SCHED_DFA_NEW_CYCLE:            Scheduling.         (line  234)
* TARGET_SCHED_DFA_POST_ADVANCE_CYCLE:   Scheduling.         (line  158)
* TARGET_SCHED_DFA_POST_CYCLE_INSN:      Scheduling.         (line  142)
* TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE:    Scheduling.         (line  151)
* TARGET_SCHED_DFA_PRE_CYCLE_INSN:       Scheduling.         (line  130)
* TARGET_SCHED_DISPATCH:                 Scheduling.         (line  353)
* TARGET_SCHED_DISPATCH_DO:              Scheduling.         (line  358)
* TARGET_SCHED_EXPOSED_PIPELINE:         Scheduling.         (line  362)
* TARGET_SCHED_FINISH:                   Scheduling.         (line  108)
* TARGET_SCHED_FINISH_GLOBAL:            Scheduling.         (line  123)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK: Scheduling.  (line  214)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN: Scheduling.      (line  203)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling.
                                                             (line  165)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling.
                                                             (line  193)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC: Scheduling.
                                                             (line  324)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END: Scheduling.        (line  219)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI: Scheduling.       (line  229)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT: Scheduling.       (line  224)
* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE: Scheduling.      (line  208)
* TARGET_SCHED_FREE_SCHED_CONTEXT:       Scheduling.         (line  291)
* TARGET_SCHED_GEN_SPEC_CHECK:           Scheduling.         (line  312)
* TARGET_SCHED_H_I_D_EXTENDED:           Scheduling.         (line  267)
* TARGET_SCHED_INIT:                     Scheduling.         (line   97)
* TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling.         (line  147)
* TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN:  Scheduling.         (line  139)
* TARGET_SCHED_INIT_GLOBAL:              Scheduling.         (line  115)
* TARGET_SCHED_INIT_SCHED_CONTEXT:       Scheduling.         (line  276)
* TARGET_SCHED_ISSUE_RATE:               Scheduling.         (line   11)
* TARGET_SCHED_IS_COSTLY_DEPENDENCE:     Scheduling.         (line  245)
* TARGET_SCHED_NEEDS_BLOCK_P:            Scheduling.         (line  306)
* TARGET_SCHED_REASSOCIATION_WIDTH:      Scheduling.         (line  367)
* TARGET_SCHED_REORDER:                  Scheduling.         (line   58)
* TARGET_SCHED_REORDER2:                 Scheduling.         (line   75)
* TARGET_SCHED_SET_SCHED_CONTEXT:        Scheduling.         (line  283)
* TARGET_SCHED_SET_SCHED_FLAGS:          Scheduling.         (line  337)
* TARGET_SCHED_SMS_RES_MII:              Scheduling.         (line  344)
* TARGET_SCHED_SPECULATE_INSN:           Scheduling.         (line  294)
* 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_SET_CURRENT_FUNCTION:           Misc.               (line  729)
* 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_SMALL_REGISTER_CLASSES_FOR_MODE_P: Register Arguments.
                                                             (line  357)
* TARGET_SPILL_CLASS:                    Register Classes.   (line  571)
* TARGET_SPLIT_COMPLEX_ARG:              Register Arguments. (line  259)
* 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_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  237)
* TARGET_TERMINATE_DW2_EH_FRAME_INFO:    Exception Region Output.
                                                             (line   98)
* TARGET_TRAMPOLINE_ADJUST_ADDRESS:      Trampolines.        (line   74)
* TARGET_TRAMPOLINE_INIT:                Trampolines.        (line   54)
* TARGET_UNSPEC_MAY_TRAP_P:              Misc.               (line  720)
* TARGET_UNWIND_TABLES_DEFAULT:          Exception Region Output.
                                                             (line   72)
* TARGET_UNWIND_WORD_MODE:               Storage Layout.     (line  467)
* TARGET_UPDATE_STACK_BOUNDARY:          Misc.               (line  970)
* 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_JCR_SECTION:                Misc.               (line  952)
* TARGET_VALID_DLLIMPORT_ATTRIBUTE_P:    Target Attributes.  (line   66)
* TARGET_VALID_POINTER_MODE:             Register Arguments. (line  303)
* TARGET_VECTORIZE_ADD_STMT_COST:        Addressing Modes.   (line  367)
* TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES: Addressing Modes.
                                                             (line  350)
* TARGET_VECTORIZE_BUILTIN_CONVERSION:   Addressing Modes.   (line  312)
* TARGET_VECTORIZE_BUILTIN_GATHER:       Addressing Modes.   (line  398)
* TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes.  (line  271)
* TARGET_VECTORIZE_BUILTIN_TM_LOAD:      Addressing Modes.   (line  390)
* TARGET_VECTORIZE_BUILTIN_TM_STORE:     Addressing Modes.   (line  394)
* TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes.
                                                             (line  297)
* TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes.
                                                             (line  324)
* TARGET_VECTORIZE_DESTROY_COST_DATA:    Addressing Modes.   (line  385)
* TARGET_VECTORIZE_FINISH_COST:          Addressing Modes.   (line  378)
* TARGET_VECTORIZE_INIT_COST:            Addressing Modes.   (line  358)
* TARGET_VECTORIZE_PREFERRED_SIMD_MODE:  Addressing Modes.   (line  343)
* TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes.
                                                             (line  333)
* TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes.
                                                             (line  303)
* TARGET_VECTORIZE_VEC_PERM_CONST_OK:    Addressing Modes.   (line  308)
* TARGET_VECTOR_ALIGNMENT:               Storage Layout.     (line  260)
* TARGET_VECTOR_MODE_SUPPORTED_P:        Register Arguments. (line  327)
* TARGET_VTABLE_DATA_ENTRY_DISTANCE:     Type Layout.        (line  346)
* TARGET_VTABLE_ENTRY_ALIGN:             Type Layout.        (line  340)
* TARGET_VTABLE_USES_DESCRIPTORS:        Type Layout.        (line  329)
* 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  273)
* TCmode:                                Machine Modes.      (line  196)
* TDmode:                                Machine Modes.      (line   94)
* 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   98)
* TF_SIZE:                               Type Layout.        (line  138)
* 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  275)
* 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   62)
* TQmode:                                Machine Modes.      (line  119)
* 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 1529)
* 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_int_cst_equal:                    Constant expressions.
                                                             (line    6)
* TREE_INT_CST_HIGH:                     Constant expressions.
                                                             (line    6)
* TREE_INT_CST_LOW:                      Constant expressions.
                                                             (line    6)
* tree_int_cst_lt:                       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_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  897)
* 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)
* UDAmode:                               Machine Modes.      (line  167)
* udiv:                                  Arithmetic.         (line  131)
* udivM3 instruction pattern:            Standard Names.     (line  266)
* udivmodM4 instruction pattern:         Standard Names.     (line  501)
* udot_prodM instruction pattern:        Standard Names.     (line  332)
* UDQmode:                               Machine Modes.      (line  135)
* UHAmode:                               Machine Modes.      (line  159)
* UHQmode:                               Machine Modes.      (line  127)
* UINT16_TYPE:                           Type Layout.        (line  257)
* UINT32_TYPE:                           Type Layout.        (line  258)
* UINT64_TYPE:                           Type Layout.        (line  259)
* UINT8_TYPE:                            Type Layout.        (line  256)
* UINTMAX_TYPE:                          Type Layout.        (line  240)
* UINTPTR_TYPE:                          Type Layout.        (line  277)
* UINT_FAST16_TYPE:                      Type Layout.        (line  273)
* UINT_FAST32_TYPE:                      Type Layout.        (line  274)
* UINT_FAST64_TYPE:                      Type Layout.        (line  275)
* UINT_FAST8_TYPE:                       Type Layout.        (line  272)
* UINT_LEAST16_TYPE:                     Type Layout.        (line  265)
* UINT_LEAST32_TYPE:                     Type Layout.        (line  266)
* UINT_LEAST64_TYPE:                     Type Layout.        (line  267)
* UINT_LEAST8_TYPE:                      Type Layout.        (line  264)
* umaddMN4 instruction pattern:          Standard Names.     (line  448)
* umax:                                  Arithmetic.         (line  150)
* umaxM3 instruction pattern:            Standard Names.     (line  266)
* umin:                                  Arithmetic.         (line  150)
* uminM3 instruction pattern:            Standard Names.     (line  266)
* umod:                                  Arithmetic.         (line  137)
* umodM3 instruction pattern:            Standard Names.     (line  266)
* umsubMN4 instruction pattern:          Standard Names.     (line  472)
* umulhisi3 instruction pattern:         Standard Names.     (line  420)
* umulM3_highpart instruction pattern:   Standard Names.     (line  434)
* umulqihi3 instruction pattern:         Standard Names.     (line  420)
* umulsidi3 instruction pattern:         Standard Names.     (line  420)
* 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   65)
* 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  131)
* unsigned division with unsigned saturation: Arithmetic.    (line  131)
* 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  150)
* 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  292)
* unspec <1>:                            Constant Definitions.
                                                             (line  111)
* unspec_volatile:                       Side Effects.       (line  292)
* unspec_volatile <1>:                   Constant Definitions.
                                                             (line   99)
* untyped_call instruction pattern:      Standard Names.     (line 1139)
* untyped_return instruction pattern:    Standard Names.     (line 1202)
* UPDATE_PATH_HOST_CANONICALIZE (PATH):  Filesystem.         (line   59)
* update_ssa:                            SSA.                (line   76)
* 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  123)
* usaddM3 instruction pattern:           Standard Names.     (line  266)
* USAmode:                               Machine Modes.      (line  163)
* usashlM3 instruction pattern:          Standard Names.     (line  504)
* usdivM3 instruction pattern:           Standard Names.     (line  266)
* use:                                   Side Effects.       (line  168)
* used:                                  Flags.              (line  314)
* used, in symbol_ref:                   Flags.              (line  197)
* user:                                  GTY Options.        (line  315)
* 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  225)
* USE_LOAD_POST_INCREMENT:               Costs.              (line  220)
* USE_LOAD_PRE_DECREMENT:                Costs.              (line  235)
* USE_LOAD_PRE_INCREMENT:                Costs.              (line  230)
* use_param:                             GTY Options.        (line  115)
* use_paramN:                            GTY Options.        (line  134)
* use_params:                            GTY Options.        (line  143)
* USE_SELECT_SECTION_FOR_FUNCTIONS:      Sections.           (line  193)
* USE_STORE_POST_DECREMENT:              Costs.              (line  245)
* USE_STORE_POST_INCREMENT:              Costs.              (line  240)
* USE_STORE_PRE_DECREMENT:               Costs.              (line  255)
* USE_STORE_PRE_INCREMENT:               Costs.              (line  250)
* USING_STMT:                            Statements for C++. (line    6)
* usmaddMN4 instruction pattern:         Standard Names.     (line  456)
* usmsubMN4 instruction pattern:         Standard Names.     (line  480)
* usmulhisi3 instruction pattern:        Standard Names.     (line  424)
* usmulM3 instruction pattern:           Standard Names.     (line  266)
* usmulqihi3 instruction pattern:        Standard Names.     (line  424)
* usmulsidi3 instruction pattern:        Standard Names.     (line  424)
* usnegM2 instruction pattern:           Standard Names.     (line  526)
* USQmode:                               Machine Modes.      (line  131)
* ussubM3 instruction pattern:           Standard Names.     (line  266)
* usum_widenM3 instruction pattern:      Standard Names.     (line  341)
* us_ashift:                             Arithmetic.         (line  174)
* 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  171)
* UTQmode:                               Machine Modes.      (line  139)
* 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)
* variable_size:                         GTY Options.        (line  242)
* VAR_DECL:                              Declarations.       (line    6)
* var_location:                          Debug Information.  (line   14)
* vashlM3 instruction pattern:           Standard Names.     (line  518)
* vashrM3 instruction pattern:           Standard Names.     (line  518)
* VA_ARG_EXPR:                           Unary and Binary Expressions.
                                                             (line    6)
* vcondMN instruction pattern:           Standard Names.     (line  213)
* vector:                                Containers.         (line    6)
* vector operations:                     Vector Operations.  (line    6)
* VECTOR_CST:                            Constant expressions.
                                                             (line    6)
* VECTOR_STORE_FLAG_VALUE:               Misc.               (line  293)
* vec_concat:                            Vector Operations.  (line   28)
* vec_duplicate:                         Vector Operations.  (line   33)
* vec_extractM instruction pattern:      Standard Names.     (line  203)
* vec_initM instruction pattern:         Standard Names.     (line  208)
* 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  367)
* vec_pack_ssat_M instruction pattern:   Standard Names.     (line  360)
* VEC_PACK_TRUNC_EXPR:                   Vectors.            (line    6)
* vec_pack_trunc_M instruction pattern:  Standard Names.     (line  353)
* vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line  367)
* vec_pack_usat_M instruction pattern:   Standard Names.     (line  360)
* vec_permM instruction pattern:         Standard Names.     (line  223)
* vec_perm_constM instruction pattern:   Standard Names.     (line  239)
* VEC_RSHIFT_EXPR:                       Vectors.            (line    6)
* vec_select:                            Vector Operations.  (line   19)
* vec_setM instruction pattern:          Standard Names.     (line  198)
* vec_shl_M instruction pattern:         Standard Names.     (line  347)
* vec_shr_M instruction pattern:         Standard Names.     (line  347)
* vec_store_lanesMN instruction pattern: Standard Names.     (line  187)
* vec_unpacks_float_hi_M instruction pattern: Standard Names.
                                                             (line  388)
* vec_unpacks_float_lo_M instruction pattern: Standard Names.
                                                             (line  388)
* vec_unpacks_hi_M instruction pattern:  Standard Names.     (line  374)
* vec_unpacks_lo_M instruction pattern:  Standard Names.     (line  374)
* vec_unpacku_float_hi_M instruction pattern: Standard Names.
                                                             (line  388)
* vec_unpacku_float_lo_M instruction pattern: Standard Names.
                                                             (line  388)
* vec_unpacku_hi_M instruction pattern:  Standard Names.     (line  381)
* vec_unpacku_lo_M instruction pattern:  Standard Names.     (line  381)
* 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  397)
* vec_widen_smult_hi_M instruction pattern: Standard Names.  (line  397)
* vec_widen_smult_lo_M instruction pattern: Standard Names.  (line  397)
* vec_widen_smult_odd_M instruction pattern: Standard Names. (line  397)
* vec_widen_sshiftl_hi_M instruction pattern: Standard Names.
                                                             (line  406)
* vec_widen_sshiftl_lo_M instruction pattern: Standard Names.
                                                             (line  406)
* vec_widen_umult_even_M instruction pattern: Standard Names.
                                                             (line  397)
* vec_widen_umult_hi_M instruction pattern: Standard Names.  (line  397)
* vec_widen_umult_lo_M instruction pattern: Standard Names.  (line  397)
* vec_widen_umult_odd_M instruction pattern: Standard Names. (line  397)
* vec_widen_ushiftl_hi_M instruction pattern: Standard Names.
                                                             (line  406)
* vec_widen_ushiftl_lo_M instruction pattern: Standard Names.
                                                             (line  406)
* 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  518)
* VMS:                                   Filesystem.         (line   37)
* VMS_DEBUGGING_INFO:                    VMS Debug.          (line    8)
* VOIDmode:                              Machine Modes.      (line  189)
* VOID_TYPE:                             Types.              (line    6)
* volatil:                               Flags.              (line  328)
* volatil, in insn, call_insn, jump_insn, code_label, 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  518)
* vrotrM3 instruction pattern:           Standard Names.     (line  518)
* walk_dominator_tree:                   SSA.                (line  253)
* 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)
* walk_use_def_chains:                   SSA.                (line  229)
* WCHAR_TYPE:                            Type Layout.        (line  208)
* WCHAR_TYPE_SIZE:                       Type Layout.        (line  216)
* 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)
* WIDEST_HARDWARE_FP_SIZE:               Type Layout.        (line  153)
* window_save instruction pattern:       Standard Names.     (line 1500)
* WINT_TYPE:                             Type Layout.        (line  221)
* WORDS_BIG_ENDIAN:                      Storage Layout.     (line   28)
* WORDS_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  215)
* word_mode:                             Machine Modes.      (line  335)
* 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  196)
* XCOFF_DEBUGGING_INFO:                  DBX Options.        (line   12)
* XEXP:                                  Accessors.          (line    6)
* XFmode:                                Machine Modes.      (line   79)
* XF_SIZE:                               Type Layout.        (line  137)
* XINT:                                  Accessors.          (line    6)
* xm-MACHINE.h:                          Filesystem.         (line    6)
* xm-MACHINE.h <1>:                      Host Misc.          (line    6)
* xor:                                   Arithmetic.         (line  169)
* xor, canonicalization of:              Insn Canonicalizations.
                                                             (line   78)
* xorM3 instruction pattern:             Standard Names.     (line  266)
* 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  907)
* zero_extract:                          Bit-Fields.         (line   30)
* zero_extract, canonicalization of:     Insn Canonicalizations.
                                                             (line   87)



Tag Table:
Node: Top1789
Node: Contributing4927
Node: Portability5656
Node: Interface7444
Node: Libgcc10485
Node: Integer library routines12312
Node: Soft float library routines19154
Node: Decimal float library routines31092
Node: Fixed-point fractional library routines46850
Node: Exception handling routines147246
Node: Miscellaneous routines148353
Node: Languages150473
Node: Source Tree152020
Node: Configure Terms152602
Node: Top Level155558
Node: gcc Directory159133
Node: Subdirectories160085
Node: Configuration162253
Node: Config Fragments162973
Node: System Config164198
Node: Configuration Files165134
Node: Build167951
Node: Makefile168363
Ref: Makefile-Footnote-1175167
Ref: Makefile-Footnote-2175314
Node: Library Files175388
Node: Headers175950
Node: Documentation178033
Node: Texinfo Manuals178892
Node: Man Page Generation181221
Node: Miscellaneous Docs183134
Node: Front End184521
Node: Front End Directory188195
Node: Front End Config189511
Node: Front End Makefile192327
Node: Back End196095
Node: Testsuites199876
Node: Test Idioms200807
Node: Test Directives204205
Node: Directives204732
Node: Selectors215029
Node: Effective-Target Keywords216385
Ref: arm_neon_ok223995
Ref: arm_neonv2_ok224153
Ref: arm_neon_fp16_ok224325
Node: Add Options234700
Node: Require Support235897
Node: Final Actions238404
Node: Ada Tests243569
Node: C Tests244900
Node: libgcj Tests249295
Node: LTO Testing250422
Node: gcov Testing252070
Node: profopt Testing255060
Node: compat Testing256775
Node: Torture Tests261015
Node: Options262630
Node: Option file format263071
Node: Option properties270060
Node: Passes282936
Node: Parsing pass283676
Node: Gimplification pass287204
Node: Pass manager289037
Node: Tree SSA passes290832
Node: RTL passes313286
Node: RTL326401
Node: RTL Objects328582
Node: RTL Classes332456
Node: Accessors337453
Node: Special Accessors339847
Node: Flags345634
Node: Machine Modes360360
Node: Constants372670
Node: Regs and Memory379398
Node: Arithmetic397286
Node: Comparisons407368
Node: Bit-Fields411660
Node: Vector Operations413212
Node: Conversions415093
Node: RTL Declarations419591
Node: Side Effects420412
Node: Incdec437007
Node: Assembler440343
Node: Debug Information441888
Node: Insns443085
Node: Calls469574
Node: Sharing472167
Node: Reading RTL475278
Node: GENERIC476269
Node: Deficiencies478140
Node: Tree overview478381
Node: Macros and Functions482505
Node: Identifiers483330
Node: Containers484939
Node: Types486096
Node: Declarations498170
Node: Working with declarations498665
Node: Internal structure504269
Node: Current structure hierarchy504653
Node: Adding new DECL node types506746
Node: Attributes510818
Node: Expression trees512062
Node: Constant expressions513816
Node: Storage References518029
Node: Unary and Binary Expressions521548
Node: Vectors541400
Node: Statements546132
Node: Basic Statements546652
Node: Blocks551159
Node: Statement Sequences552563
Node: Empty Statements552896
Node: Jumps553470
Node: Cleanups554123
Node: OpenMP555890
Node: Functions561735
Node: Function Basics562206
Node: Function Properties565890
Node: Language-dependent trees568671
Node: C and C++ Trees569558
Node: Types for C++572462
Node: Namespaces577432
Node: Classes580538
Node: Functions for C++585615
Node: Statements for C++591866
Node: C++ Expressions599919
Node: Java Trees601424
Node: GIMPLE601537
Node: Tuple representation605161
Node: GIMPLE instruction set613465
Node: GIMPLE Exception Handling615081
Node: Temporaries616993
Ref: Temporaries-Footnote-1618311
Node: Operands618376
Node: Compound Expressions619137
Node: Compound Lvalues619371
Node: Conditional Expressions620133
Node: Logical Operators620792
Node: Manipulating GIMPLE statements627548
Node: Tuple specific accessors633484
Node: GIMPLE_ASM634247
Node: GIMPLE_ASSIGN636876
Node: GIMPLE_BIND640976
Node: GIMPLE_CALL642778
Node: GIMPLE_CATCH647043
Node: GIMPLE_COND648181
Node: GIMPLE_DEBUG650963
Node: GIMPLE_EH_FILTER654335
Node: GIMPLE_LABEL655817
Node: GIMPLE_NOP656786
Node: GIMPLE_OMP_ATOMIC_LOAD657149
Node: GIMPLE_OMP_ATOMIC_STORE658053
Node: GIMPLE_OMP_CONTINUE658687
Node: GIMPLE_OMP_CRITICAL660031
Node: GIMPLE_OMP_FOR660963
Node: GIMPLE_OMP_MASTER664472
Node: GIMPLE_OMP_ORDERED664850
Node: GIMPLE_OMP_PARALLEL665244
Node: GIMPLE_OMP_RETURN668010
Node: GIMPLE_OMP_SECTION668655
Node: GIMPLE_OMP_SECTIONS669315
Node: GIMPLE_OMP_SINGLE670916
Node: GIMPLE_PHI671848
Node: GIMPLE_RESX673129
Node: GIMPLE_RETURN673842
Node: GIMPLE_SWITCH674404
Node: GIMPLE_TRY676200
Node: GIMPLE_WITH_CLEANUP_EXPR677985
Node: GIMPLE sequences678864
Node: Sequence iterators682070
Node: Adding a new GIMPLE statement code690525
Node: Statement and operand traversals691801
Node: Tree SSA694393
Node: Annotations696210
Node: SSA Operands696736
Node: SSA711261
Node: Alias analysis723381
Node: Memory model727155
Node: Loop Analysis and Representation728514
Node: Loop representation729691
Node: Loop querying736608
Node: Loop manipulation739424
Node: LCSSA741785
Node: Scalar evolutions743854
Node: loop-iv747098
Node: Number of iterations749020
Node: Dependency analysis751826
Node: Lambda758191
Node: Omega759863
Node: Control Flow761428
Node: Basic Blocks763204
Node: Edges768493
Node: Profile information777122
Node: Maintaining the CFG781806
Node: Liveness information787667
Node: Machine Desc789793
Node: Overview792336
Node: Patterns794376
Node: Example797814
Node: RTL Template799248
Node: Output Template809903
Node: Output Statement813866
Node: Predicates818205
Node: Machine-Independent Predicates821123
Node: Defining Predicates826067
Node: Constraints832030
Node: Simple Constraints833512
Node: Multi-Alternative846352
Node: Class Preferences849193
Node: Modifiers850085
Node: Machine Constraints854331
Node: Disable Insn Alternatives908563
Node: Define Constraints911467
Node: C Constraint Interface918252
Node: Standard Names921903
Ref: shift patterns944447
Ref: prologue instruction pattern989350
Ref: window_save instruction pattern989843
Ref: epilogue instruction pattern990120
Node: Pattern Ordering1007706
Node: Dependent Patterns1008942
Node: Jump Patterns1010562
Ref: Jump Patterns-Footnote-11012709
Node: Looping Patterns1012757
Node: Insn Canonicalizations1017486
Node: Expander Definitions1022071
Node: Insn Splitting1030285
Node: Including Patterns1039888
Node: Peephole Definitions1041672
Node: define_peephole1042925
Node: define_peephole21049255
Node: Insn Attributes1052322
Node: Defining Attributes1053428
Ref: define_enum_attr1056643
Node: Expressions1057679
Node: Tagging Insns1064429
Node: Attr Example1068782
Node: Insn Lengths1071155
Node: Constant Attributes1074232
Node: Delay Slots1075401
Node: Processor pipeline description1078625
Ref: Processor pipeline description-Footnote-11097443
Node: Conditional Execution1097767
Node: Define Subst1100830
Node: Define Subst Example1102866
Node: Define Subst Pattern Matching1105860
Node: Define Subst Output Template1107086
Node: Constant Definitions1109156
Ref: define_enum1112938
Node: Iterators1113426
Node: Mode Iterators1114004
Node: Defining Mode Iterators1114982
Node: Substitutions1116476
Node: Examples1118718
Node: Code Iterators1120166
Node: Int Iterators1122445
Node: Subst Iterators1124906
Node: Target Macros1126598
Node: Target Structure1129686
Node: Driver1131802
Node: Run-time Target1150587
Node: Per-Function Data1159752
Node: Storage Layout1162516
Node: Type Layout1188571
Node: Registers1203894
Node: Register Basics1204868
Node: Allocation Order1210376
Node: Values in Registers1212822
Node: Leaf Functions1220300
Node: Stack Registers1223159
Node: Register Classes1224431
Node: Old Constraints1254398
Node: Stack and Calling1261538
Node: Frame Layout1262072
Node: Exception Handling1272948
Node: Stack Checking1279160
Node: Frame Registers1283974
Node: Elimination1292233
Node: Stack Arguments1296463
Node: Register Arguments1303647
Node: Scalar Return1323728
Node: Aggregate Return1329815
Node: Caller Saves1334026
Node: Function Entry1335203
Node: Profiling1346297
Node: Tail Calls1347996
Node: Stack Smashing Protection1349899
Node: Varargs1351527
Node: Trampolines1358214
Node: Library Calls1364257
Node: Addressing Modes1369196
Node: Anchored Addresses1389211
Node: Condition Code1391854
Node: CC0 Condition Codes1393913
Node: MODE_CC Condition Codes1397159
Node: Costs1404029
Node: Scheduling1420491
Node: Sections1439908
Node: PIC1455606
Node: Assembler Format1457665
Node: File Framework1458803
Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1465735
Node: Data Output1469005
Node: Uninitialized Data1476774
Node: Label Output1481785
Node: Initialization1504741
Node: Macros for Initialization1510702
Node: Instruction Output1517421
Node: Dispatch Tables1527916
Node: Exception Region Output1532294
Node: Alignment Output1538972
Node: Debugging Info1543518
Node: All Debuggers1544188
Node: DBX Options1547043
Node: DBX Hooks1552481
Node: File Names and DBX1553790
Node: SDB and DWARF1555902
Node: VMS Debug1561973
Node: Floating Point1562560
Node: Mode Switching1567036
Node: Target Attributes1571032
Node: Emulated TLS1579346
Node: MIPS Coprocessors1582736
Node: PCH Target1584033
Node: C++ ABI1585875
Node: Named Address Spaces1590669
Node: Misc1595603
Ref: TARGET_SHIFT_TRUNCATION_MASK1602345
Node: Host Config1649571
Node: Host Common1650639
Node: Filesystem1653013
Node: Host Misc1657128
Node: Fragments1659577
Node: Target Fragment1660772
Node: Host Fragment1671400
Node: Collect21671640
Node: Header Dirs1674276
Node: Type Information1675699
Node: GTY Options1678918
Node: User GC1693252
Node: GGC Roots1696983
Node: Files1697696
Node: Invoking the garbage collector1700403
Node: Troubleshooting1701908
Node: Plugins1702983
Node: Plugins loading1704101
Node: Plugin API1704971
Node: Plugins pass1711999
Node: Plugins GC1713970
Node: Plugins description1715635
Node: Plugins attr1716171
Node: Plugins recording1718058
Node: Plugins gate1718908
Node: Plugins tracking1719499
Node: Plugins building1720087
Node: LTO1721874
Node: LTO Overview1722735
Node: LTO object file layout1728567
Node: IPA1733197
Node: WHOPR1742162
Node: Internal flags1746851
Node: Funding1748063
Node: GNU Project1750547
Node: Copying1751196
Node: GNU Free Documentation License1788708
Node: Contributors1813829
Node: Option Index1851230
Node: Concept Index1852034

End Tag Table
