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

Copyright (C) 1988-2013 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-2013 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 (GCC)
version 4.8.3.  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.

'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

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

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

     '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'
          VSX vector register to hold scalar float values 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)'
     This refers to the address of the _current_ insn.  It might have
     been more consistent with other usage to make this the address of
     the _next_ insn but this would be confusing 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: 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.

 -- 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: 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.
* Cond Exec Macros::         Macros to control conditional execution.


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,  Next: Cond Exec Macros,  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 == EQ || OP == NE) ? CCFPmode : CCFPEmode)    \
             : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS    \
                 || GET_CODE (X) == NEG) \
                ? 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 always
     given 'CCFPEmode':

          #define REVERSIBLE_CC_MODE(MODE)  ((MODE) != CCFPEmode)

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


File: gccint.info,  Node: Cond Exec Macros,  Prev: MODE_CC Condition Codes,  Up: Condition Code

17.16.3 Macros to control conditional execution
-----------------------------------------------

There is one macro that may need to be defined for targets supporting
conditional execution, independent of how they represent conditional
branches.

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


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   44)
* __adddf3:                              Soft float library routines.
                                                             (line   22)
* __adddq3:                              Fixed-point fractional library routines.
                                                             (line   31)
* __addha3:                              Fixed-point fractional library routines.
                                                             (line   41)
* __addhq3:                              Fixed-point fractional library routines.
                                                             (line   29)
* __addqq3:                              Fixed-point fractional library routines.
                                                             (line   27)
* __addsa3:                              Fixed-point fractional library routines.
                                                             (line   43)
* __addsf3:                              Soft float library routines.
                                                             (line   21)
* __addsq3:                              Fixed-point fractional library routines.
                                                             (line   30)
* __addta3:                              Fixed-point fractional library routines.
                                                             (line   45)
* __addtf3:                              Soft float library routines.
                                                             (line   23)
* __adduda3:                             Fixed-point fractional library routines.
                                                             (line   51)
* __addudq3:                             Fixed-point fractional library routines.
                                                             (line   39)
* __adduha3:                             Fixed-point fractional library routines.
                                                             (line   47)
* __adduhq3:                             Fixed-point fractional library routines.
                                                             (line   35)
* __adduqq3:                             Fixed-point fractional library routines.
                                                             (line   33)
* __addusa3:                             Fixed-point fractional library routines.
                                                             (line   49)
* __addusq3:                             Fixed-point fractional library routines.
                                                             (line   37)
* __adduta3:                             Fixed-point fractional library routines.
                                                             (line   53)
* __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  350)
* __ashldi3:                             Integer library routines.
                                                             (line   13)
* __ashldq3:                             Fixed-point fractional library routines.
                                                             (line  338)
* __ashlha3:                             Fixed-point fractional library routines.
                                                             (line  348)
* __ashlhq3:                             Fixed-point fractional library routines.
                                                             (line  336)
* __ashlqq3:                             Fixed-point fractional library routines.
                                                             (line  335)
* __ashlsa3:                             Fixed-point fractional library routines.
                                                             (line  349)
* __ashlsi3:                             Integer library routines.
                                                             (line   12)
* __ashlsq3:                             Fixed-point fractional library routines.
                                                             (line  337)
* __ashlta3:                             Fixed-point fractional library routines.
                                                             (line  351)
* __ashlti3:                             Integer library routines.
                                                             (line   14)
* __ashluda3:                            Fixed-point fractional library routines.
                                                             (line  357)
* __ashludq3:                            Fixed-point fractional library routines.
                                                             (line  346)
* __ashluha3:                            Fixed-point fractional library routines.
                                                             (line  353)
* __ashluhq3:                            Fixed-point fractional library routines.
                                                             (line  342)
* __ashluqq3:                            Fixed-point fractional library routines.
                                                             (line  340)
* __ashlusa3:                            Fixed-point fractional library routines.
                                                             (line  355)
* __ashlusq3:                            Fixed-point fractional library routines.
                                                             (line  344)
* __ashluta3:                            Fixed-point fractional library routines.
                                                             (line  359)
* __ashrda3:                             Fixed-point fractional library routines.
                                                             (line  370)
* __ashrdi3:                             Integer library routines.
                                                             (line   18)
* __ashrdq3:                             Fixed-point fractional library routines.
                                                             (line  366)
* __ashrha3:                             Fixed-point fractional library routines.
                                                             (line  368)
* __ashrhq3:                             Fixed-point fractional library routines.
                                                             (line  364)
* __ashrqq3:                             Fixed-point fractional library routines.
                                                             (line  363)
* __ashrsa3:                             Fixed-point fractional library routines.
                                                             (line  369)
* __ashrsi3:                             Integer library routines.
                                                             (line   17)
* __ashrsq3:                             Fixed-point fractional library routines.
                                                             (line  365)
* __ashrta3:                             Fixed-point fractional library routines.
                                                             (line  371)
* __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  450)
* __cmpdf2:                              Soft float library routines.
                                                             (line  163)
* __cmpdi2:                              Integer library routines.
                                                             (line   86)
* __cmpdq2:                              Fixed-point fractional library routines.
                                                             (line  439)
* __cmpha2:                              Fixed-point fractional library routines.
                                                             (line  448)
* __cmphq2:                              Fixed-point fractional library routines.
                                                             (line  437)
* __cmpqq2:                              Fixed-point fractional library routines.
                                                             (line  436)
* __cmpsa2:                              Fixed-point fractional library routines.
                                                             (line  449)
* __cmpsf2:                              Soft float library routines.
                                                             (line  162)
* __cmpsq2:                              Fixed-point fractional library routines.
                                                             (line  438)
* __cmpta2:                              Fixed-point fractional library routines.
                                                             (line  451)
* __cmptf2:                              Soft float library routines.
                                                             (line  164)
* __cmpti2:                              Integer library routines.
                                                             (line   87)
* __cmpuda2:                             Fixed-point fractional library routines.
                                                             (line  456)
* __cmpudq2:                             Fixed-point fractional library routines.
                                                             (line  446)
* __cmpuha2:                             Fixed-point fractional library routines.
                                                             (line  453)
* __cmpuhq2:                             Fixed-point fractional library routines.
                                                             (line  443)
* __cmpuqq2:                             Fixed-point fractional library routines.
                                                             (line  441)
* __cmpusa2:                             Fixed-point fractional library routines.
                                                             (line  455)
* __cmpusq2:                             Fixed-point fractional library routines.
                                                             (line  444)
* __cmputa2:                             Fixed-point fractional library routines.
                                                             (line  458)
* __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  226)
* __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  221)
* __divha3:                              Fixed-point fractional library routines.
                                                             (line  223)
* __divhq3:                              Fixed-point fractional library routines.
                                                             (line  219)
* __divqq3:                              Fixed-point fractional library routines.
                                                             (line  217)
* __divsa3:                              Fixed-point fractional library routines.
                                                             (line  225)
* __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  220)
* __divta3:                              Fixed-point fractional library routines.
                                                             (line  227)
* __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  635)
* __fractdadi:                           Fixed-point fractional library routines.
                                                             (line  632)
* __fractdadq:                           Fixed-point fractional library routines.
                                                             (line  615)
* __fractdaha2:                          Fixed-point fractional library routines.
                                                             (line  616)
* __fractdahi:                           Fixed-point fractional library routines.
                                                             (line  630)
* __fractdahq:                           Fixed-point fractional library routines.
                                                             (line  613)
* __fractdaqi:                           Fixed-point fractional library routines.
                                                             (line  629)
* __fractdaqq:                           Fixed-point fractional library routines.
                                                             (line  612)
* __fractdasa2:                          Fixed-point fractional library routines.
                                                             (line  617)
* __fractdasf:                           Fixed-point fractional library routines.
                                                             (line  634)
* __fractdasi:                           Fixed-point fractional library routines.
                                                             (line  631)
* __fractdasq:                           Fixed-point fractional library routines.
                                                             (line  614)
* __fractdata2:                          Fixed-point fractional library routines.
                                                             (line  618)
* __fractdati:                           Fixed-point fractional library routines.
                                                             (line  633)
* __fractdauda:                          Fixed-point fractional library routines.
                                                             (line  626)
* __fractdaudq:                          Fixed-point fractional library routines.
                                                             (line  622)
* __fractdauha:                          Fixed-point fractional library routines.
                                                             (line  624)
* __fractdauhq:                          Fixed-point fractional library routines.
                                                             (line  620)
* __fractdauqq:                          Fixed-point fractional library routines.
                                                             (line  619)
* __fractdausa:                          Fixed-point fractional library routines.
                                                             (line  625)
* __fractdausq:                          Fixed-point fractional library routines.
                                                             (line  621)
* __fractdauta:                          Fixed-point fractional library routines.
                                                             (line  627)
* __fractdfda:                           Fixed-point fractional library routines.
                                                             (line 1024)
* __fractdfdq:                           Fixed-point fractional library routines.
                                                             (line 1021)
* __fractdfha:                           Fixed-point fractional library routines.
                                                             (line 1022)
* __fractdfhq:                           Fixed-point fractional library routines.
                                                             (line 1019)
* __fractdfqq:                           Fixed-point fractional library routines.
                                                             (line 1018)
* __fractdfsa:                           Fixed-point fractional library routines.
                                                             (line 1023)
* __fractdfsq:                           Fixed-point fractional library routines.
                                                             (line 1020)
* __fractdfta:                           Fixed-point fractional library routines.
                                                             (line 1025)
* __fractdfuda:                          Fixed-point fractional library routines.
                                                             (line 1032)
* __fractdfudq:                          Fixed-point fractional library routines.
                                                             (line 1029)
* __fractdfuha:                          Fixed-point fractional library routines.
                                                             (line 1030)
* __fractdfuhq:                          Fixed-point fractional library routines.
                                                             (line 1027)
* __fractdfuqq:                          Fixed-point fractional library routines.
                                                             (line 1026)
* __fractdfusa:                          Fixed-point fractional library routines.
                                                             (line 1031)
* __fractdfusq:                          Fixed-point fractional library routines.
                                                             (line 1028)
* __fractdfuta:                          Fixed-point fractional library routines.
                                                             (line 1033)
* __fractdida:                           Fixed-point fractional library routines.
                                                             (line  974)
* __fractdidq:                           Fixed-point fractional library routines.
                                                             (line  971)
* __fractdiha:                           Fixed-point fractional library routines.
                                                             (line  972)
* __fractdihq:                           Fixed-point fractional library routines.
                                                             (line  969)
* __fractdiqq:                           Fixed-point fractional library routines.
                                                             (line  968)
* __fractdisa:                           Fixed-point fractional library routines.
                                                             (line  973)
* __fractdisq:                           Fixed-point fractional library routines.
                                                             (line  970)
* __fractdita:                           Fixed-point fractional library routines.
                                                             (line  975)
* __fractdiuda:                          Fixed-point fractional library routines.
                                                             (line  982)
* __fractdiudq:                          Fixed-point fractional library routines.
                                                             (line  979)
* __fractdiuha:                          Fixed-point fractional library routines.
                                                             (line  980)
* __fractdiuhq:                          Fixed-point fractional library routines.
                                                             (line  977)
* __fractdiuqq:                          Fixed-point fractional library routines.
                                                             (line  976)
* __fractdiusa:                          Fixed-point fractional library routines.
                                                             (line  981)
* __fractdiusq:                          Fixed-point fractional library routines.
                                                             (line  978)
* __fractdiuta:                          Fixed-point fractional library routines.
                                                             (line  983)
* __fractdqda:                           Fixed-point fractional library routines.
                                                             (line  543)
* __fractdqdf:                           Fixed-point fractional library routines.
                                                             (line  565)
* __fractdqdi:                           Fixed-point fractional library routines.
                                                             (line  562)
* __fractdqha:                           Fixed-point fractional library routines.
                                                             (line  541)
* __fractdqhi:                           Fixed-point fractional library routines.
                                                             (line  560)
* __fractdqhq2:                          Fixed-point fractional library routines.
                                                             (line  539)
* __fractdqqi:                           Fixed-point fractional library routines.
                                                             (line  559)
* __fractdqqq2:                          Fixed-point fractional library routines.
                                                             (line  538)
* __fractdqsa:                           Fixed-point fractional library routines.
                                                             (line  542)
* __fractdqsf:                           Fixed-point fractional library routines.
                                                             (line  564)
* __fractdqsi:                           Fixed-point fractional library routines.
                                                             (line  561)
* __fractdqsq2:                          Fixed-point fractional library routines.
                                                             (line  540)
* __fractdqta:                           Fixed-point fractional library routines.
                                                             (line  544)
* __fractdqti:                           Fixed-point fractional library routines.
                                                             (line  563)
* __fractdquda:                          Fixed-point fractional library routines.
                                                             (line  555)
* __fractdqudq:                          Fixed-point fractional library routines.
                                                             (line  550)
* __fractdquha:                          Fixed-point fractional library routines.
                                                             (line  552)
* __fractdquhq:                          Fixed-point fractional library routines.
                                                             (line  547)
* __fractdquqq:                          Fixed-point fractional library routines.
                                                             (line  545)
* __fractdqusa:                          Fixed-point fractional library routines.
                                                             (line  554)
* __fractdqusq:                          Fixed-point fractional library routines.
                                                             (line  548)
* __fractdquta:                          Fixed-point fractional library routines.
                                                             (line  557)
* __fracthada2:                          Fixed-point fractional library routines.
                                                             (line  571)
* __fracthadf:                           Fixed-point fractional library routines.
                                                             (line  589)
* __fracthadi:                           Fixed-point fractional library routines.
                                                             (line  586)
* __fracthadq:                           Fixed-point fractional library routines.
                                                             (line  569)
* __fracthahi:                           Fixed-point fractional library routines.
                                                             (line  584)
* __fracthahq:                           Fixed-point fractional library routines.
                                                             (line  567)
* __fracthaqi:                           Fixed-point fractional library routines.
                                                             (line  583)
* __fracthaqq:                           Fixed-point fractional library routines.
                                                             (line  566)
* __fracthasa2:                          Fixed-point fractional library routines.
                                                             (line  570)
* __fracthasf:                           Fixed-point fractional library routines.
                                                             (line  588)
* __fracthasi:                           Fixed-point fractional library routines.
                                                             (line  585)
* __fracthasq:                           Fixed-point fractional library routines.
                                                             (line  568)
* __fracthata2:                          Fixed-point fractional library routines.
                                                             (line  572)
* __fracthati:                           Fixed-point fractional library routines.
                                                             (line  587)
* __fracthauda:                          Fixed-point fractional library routines.
                                                             (line  580)
* __fracthaudq:                          Fixed-point fractional library routines.
                                                             (line  576)
* __fracthauha:                          Fixed-point fractional library routines.
                                                             (line  578)
* __fracthauhq:                          Fixed-point fractional library routines.
                                                             (line  574)
* __fracthauqq:                          Fixed-point fractional library routines.
                                                             (line  573)
* __fracthausa:                          Fixed-point fractional library routines.
                                                             (line  579)
* __fracthausq:                          Fixed-point fractional library routines.
                                                             (line  575)
* __fracthauta:                          Fixed-point fractional library routines.
                                                             (line  581)
* __fracthida:                           Fixed-point fractional library routines.
                                                             (line  942)
* __fracthidq:                           Fixed-point fractional library routines.
                                                             (line  939)
* __fracthiha:                           Fixed-point fractional library routines.
                                                             (line  940)
* __fracthihq:                           Fixed-point fractional library routines.
                                                             (line  937)
* __fracthiqq:                           Fixed-point fractional library routines.
                                                             (line  936)
* __fracthisa:                           Fixed-point fractional library routines.
                                                             (line  941)
* __fracthisq:                           Fixed-point fractional library routines.
                                                             (line  938)
* __fracthita:                           Fixed-point fractional library routines.
                                                             (line  943)
* __fracthiuda:                          Fixed-point fractional library routines.
                                                             (line  950)
* __fracthiudq:                          Fixed-point fractional library routines.
                                                             (line  947)
* __fracthiuha:                          Fixed-point fractional library routines.
                                                             (line  948)
* __fracthiuhq:                          Fixed-point fractional library routines.
                                                             (line  945)
* __fracthiuqq:                          Fixed-point fractional library routines.
                                                             (line  944)
* __fracthiusa:                          Fixed-point fractional library routines.
                                                             (line  949)
* __fracthiusq:                          Fixed-point fractional library routines.
                                                             (line  946)
* __fracthiuta:                          Fixed-point fractional library routines.
                                                             (line  951)
* __fracthqda:                           Fixed-point fractional library routines.
                                                             (line  497)
* __fracthqdf:                           Fixed-point fractional library routines.
                                                             (line  513)
* __fracthqdi:                           Fixed-point fractional library routines.
                                                             (line  510)
* __fracthqdq2:                          Fixed-point fractional library routines.
                                                             (line  494)
* __fracthqha:                           Fixed-point fractional library routines.
                                                             (line  495)
* __fracthqhi:                           Fixed-point fractional library routines.
                                                             (line  508)
* __fracthqqi:                           Fixed-point fractional library routines.
                                                             (line  507)
* __fracthqqq2:                          Fixed-point fractional library routines.
                                                             (line  492)
* __fracthqsa:                           Fixed-point fractional library routines.
                                                             (line  496)
* __fracthqsf:                           Fixed-point fractional library routines.
                                                             (line  512)
* __fracthqsi:                           Fixed-point fractional library routines.
                                                             (line  509)
* __fracthqsq2:                          Fixed-point fractional library routines.
                                                             (line  493)
* __fracthqta:                           Fixed-point fractional library routines.
                                                             (line  498)
* __fracthqti:                           Fixed-point fractional library routines.
                                                             (line  511)
* __fracthquda:                          Fixed-point fractional library routines.
                                                             (line  505)
* __fracthqudq:                          Fixed-point fractional library routines.
                                                             (line  502)
* __fracthquha:                          Fixed-point fractional library routines.
                                                             (line  503)
* __fracthquhq:                          Fixed-point fractional library routines.
                                                             (line  500)
* __fracthquqq:                          Fixed-point fractional library routines.
                                                             (line  499)
* __fracthqusa:                          Fixed-point fractional library routines.
                                                             (line  504)
* __fracthqusq:                          Fixed-point fractional library routines.
                                                             (line  501)
* __fracthquta:                          Fixed-point fractional library routines.
                                                             (line  506)
* __fractqida:                           Fixed-point fractional library routines.
                                                             (line  924)
* __fractqidq:                           Fixed-point fractional library routines.
                                                             (line  921)
* __fractqiha:                           Fixed-point fractional library routines.
                                                             (line  922)
* __fractqihq:                           Fixed-point fractional library routines.
                                                             (line  919)
* __fractqiqq:                           Fixed-point fractional library routines.
                                                             (line  918)
* __fractqisa:                           Fixed-point fractional library routines.
                                                             (line  923)
* __fractqisq:                           Fixed-point fractional library routines.
                                                             (line  920)
* __fractqita:                           Fixed-point fractional library routines.
                                                             (line  925)
* __fractqiuda:                          Fixed-point fractional library routines.
                                                             (line  933)
* __fractqiudq:                          Fixed-point fractional library routines.
                                                             (line  929)
* __fractqiuha:                          Fixed-point fractional library routines.
                                                             (line  931)
* __fractqiuhq:                          Fixed-point fractional library routines.
                                                             (line  927)
* __fractqiuqq:                          Fixed-point fractional library routines.
                                                             (line  926)
* __fractqiusa:                          Fixed-point fractional library routines.
                                                             (line  932)
* __fractqiusq:                          Fixed-point fractional library routines.
                                                             (line  928)
* __fractqiuta:                          Fixed-point fractional library routines.
                                                             (line  934)
* __fractqqda:                           Fixed-point fractional library routines.
                                                             (line  473)
* __fractqqdf:                           Fixed-point fractional library routines.
                                                             (line  491)
* __fractqqdi:                           Fixed-point fractional library routines.
                                                             (line  488)
* __fractqqdq2:                          Fixed-point fractional library routines.
                                                             (line  470)
* __fractqqha:                           Fixed-point fractional library routines.
                                                             (line  471)
* __fractqqhi:                           Fixed-point fractional library routines.
                                                             (line  486)
* __fractqqhq2:                          Fixed-point fractional library routines.
                                                             (line  468)
* __fractqqqi:                           Fixed-point fractional library routines.
                                                             (line  485)
* __fractqqsa:                           Fixed-point fractional library routines.
                                                             (line  472)
* __fractqqsf:                           Fixed-point fractional library routines.
                                                             (line  490)
* __fractqqsi:                           Fixed-point fractional library routines.
                                                             (line  487)
* __fractqqsq2:                          Fixed-point fractional library routines.
                                                             (line  469)
* __fractqqta:                           Fixed-point fractional library routines.
                                                             (line  474)
* __fractqqti:                           Fixed-point fractional library routines.
                                                             (line  489)
* __fractqquda:                          Fixed-point fractional library routines.
                                                             (line  482)
* __fractqqudq:                          Fixed-point fractional library routines.
                                                             (line  478)
* __fractqquha:                          Fixed-point fractional library routines.
                                                             (line  480)
* __fractqquhq:                          Fixed-point fractional library routines.
                                                             (line  476)
* __fractqquqq:                          Fixed-point fractional library routines.
                                                             (line  475)
* __fractqqusa:                          Fixed-point fractional library routines.
                                                             (line  481)
* __fractqqusq:                          Fixed-point fractional library routines.
                                                             (line  477)
* __fractqquta:                          Fixed-point fractional library routines.
                                                             (line  483)
* __fractsada2:                          Fixed-point fractional library routines.
                                                             (line  595)
* __fractsadf:                           Fixed-point fractional library routines.
                                                             (line  611)
* __fractsadi:                           Fixed-point fractional library routines.
                                                             (line  608)
* __fractsadq:                           Fixed-point fractional library routines.
                                                             (line  593)
* __fractsaha2:                          Fixed-point fractional library routines.
                                                             (line  594)
* __fractsahi:                           Fixed-point fractional library routines.
                                                             (line  606)
* __fractsahq:                           Fixed-point fractional library routines.
                                                             (line  591)
* __fractsaqi:                           Fixed-point fractional library routines.
                                                             (line  605)
* __fractsaqq:                           Fixed-point fractional library routines.
                                                             (line  590)
* __fractsasf:                           Fixed-point fractional library routines.
                                                             (line  610)
* __fractsasi:                           Fixed-point fractional library routines.
                                                             (line  607)
* __fractsasq:                           Fixed-point fractional library routines.
                                                             (line  592)
* __fractsata2:                          Fixed-point fractional library routines.
                                                             (line  596)
* __fractsati:                           Fixed-point fractional library routines.
                                                             (line  609)
* __fractsauda:                          Fixed-point fractional library routines.
                                                             (line  603)
* __fractsaudq:                          Fixed-point fractional library routines.
                                                             (line  600)
* __fractsauha:                          Fixed-point fractional library routines.
                                                             (line  601)
* __fractsauhq:                          Fixed-point fractional library routines.
                                                             (line  598)
* __fractsauqq:                          Fixed-point fractional library routines.
                                                             (line  597)
* __fractsausa:                          Fixed-point fractional library routines.
                                                             (line  602)
* __fractsausq:                          Fixed-point fractional library routines.
                                                             (line  599)
* __fractsauta:                          Fixed-point fractional library routines.
                                                             (line  604)
* __fractsfda:                           Fixed-point fractional library routines.
                                                             (line 1008)
* __fractsfdq:                           Fixed-point fractional library routines.
                                                             (line 1005)
* __fractsfha:                           Fixed-point fractional library routines.
                                                             (line 1006)
* __fractsfhq:                           Fixed-point fractional library routines.
                                                             (line 1003)
* __fractsfqq:                           Fixed-point fractional library routines.
                                                             (line 1002)
* __fractsfsa:                           Fixed-point fractional library routines.
                                                             (line 1007)
* __fractsfsq:                           Fixed-point fractional library routines.
                                                             (line 1004)
* __fractsfta:                           Fixed-point fractional library routines.
                                                             (line 1009)
* __fractsfuda:                          Fixed-point fractional library routines.
                                                             (line 1016)
* __fractsfudq:                          Fixed-point fractional library routines.
                                                             (line 1013)
* __fractsfuha:                          Fixed-point fractional library routines.
                                                             (line 1014)
* __fractsfuhq:                          Fixed-point fractional library routines.
                                                             (line 1011)
* __fractsfuqq:                          Fixed-point fractional library routines.
                                                             (line 1010)
* __fractsfusa:                          Fixed-point fractional library routines.
                                                             (line 1015)
* __fractsfusq:                          Fixed-point fractional library routines.
                                                             (line 1012)
* __fractsfuta:                          Fixed-point fractional library routines.
                                                             (line 1017)
* __fractsida:                           Fixed-point fractional library routines.
                                                             (line  958)
* __fractsidq:                           Fixed-point fractional library routines.
                                                             (line  955)
* __fractsiha:                           Fixed-point fractional library routines.
                                                             (line  956)
* __fractsihq:                           Fixed-point fractional library routines.
                                                             (line  953)
* __fractsiqq:                           Fixed-point fractional library routines.
                                                             (line  952)
* __fractsisa:                           Fixed-point fractional library routines.
                                                             (line  957)
* __fractsisq:                           Fixed-point fractional library routines.
                                                             (line  954)
* __fractsita:                           Fixed-point fractional library routines.
                                                             (line  959)
* __fractsiuda:                          Fixed-point fractional library routines.
                                                             (line  966)
* __fractsiudq:                          Fixed-point fractional library routines.
                                                             (line  963)
* __fractsiuha:                          Fixed-point fractional library routines.
                                                             (line  964)
* __fractsiuhq:                          Fixed-point fractional library routines.
                                                             (line  961)
* __fractsiuqq:                          Fixed-point fractional library routines.
                                                             (line  960)
* __fractsiusa:                          Fixed-point fractional library routines.
                                                             (line  965)
* __fractsiusq:                          Fixed-point fractional library routines.
                                                             (line  962)
* __fractsiuta:                          Fixed-point fractional library routines.
                                                             (line  967)
* __fractsqda:                           Fixed-point fractional library routines.
                                                             (line  519)
* __fractsqdf:                           Fixed-point fractional library routines.
                                                             (line  537)
* __fractsqdi:                           Fixed-point fractional library routines.
                                                             (line  534)
* __fractsqdq2:                          Fixed-point fractional library routines.
                                                             (line  516)
* __fractsqha:                           Fixed-point fractional library routines.
                                                             (line  517)
* __fractsqhi:                           Fixed-point fractional library routines.
                                                             (line  532)
* __fractsqhq2:                          Fixed-point fractional library routines.
                                                             (line  515)
* __fractsqqi:                           Fixed-point fractional library routines.
                                                             (line  531)
* __fractsqqq2:                          Fixed-point fractional library routines.
                                                             (line  514)
* __fractsqsa:                           Fixed-point fractional library routines.
                                                             (line  518)
* __fractsqsf:                           Fixed-point fractional library routines.
                                                             (line  536)
* __fractsqsi:                           Fixed-point fractional library routines.
                                                             (line  533)
* __fractsqta:                           Fixed-point fractional library routines.
                                                             (line  520)
* __fractsqti:                           Fixed-point fractional library routines.
                                                             (line  535)
* __fractsquda:                          Fixed-point fractional library routines.
                                                             (line  528)
* __fractsqudq:                          Fixed-point fractional library routines.
                                                             (line  524)
* __fractsquha:                          Fixed-point fractional library routines.
                                                             (line  526)
* __fractsquhq:                          Fixed-point fractional library routines.
                                                             (line  522)
* __fractsquqq:                          Fixed-point fractional library routines.
                                                             (line  521)
* __fractsqusa:                          Fixed-point fractional library routines.
                                                             (line  527)
* __fractsqusq:                          Fixed-point fractional library routines.
                                                             (line  523)
* __fractsquta:                          Fixed-point fractional library routines.
                                                             (line  529)
* __fracttada2:                          Fixed-point fractional library routines.
                                                             (line  642)
* __fracttadf:                           Fixed-point fractional library routines.
                                                             (line  663)
* __fracttadi:                           Fixed-point fractional library routines.
                                                             (line  660)
* __fracttadq:                           Fixed-point fractional library routines.
                                                             (line  639)
* __fracttaha2:                          Fixed-point fractional library routines.
                                                             (line  640)
* __fracttahi:                           Fixed-point fractional library routines.
                                                             (line  658)
* __fracttahq:                           Fixed-point fractional library routines.
                                                             (line  637)
* __fracttaqi:                           Fixed-point fractional library routines.
                                                             (line  657)
* __fracttaqq:                           Fixed-point fractional library routines.
                                                             (line  636)
* __fracttasa2:                          Fixed-point fractional library routines.
                                                             (line  641)
* __fracttasf:                           Fixed-point fractional library routines.
                                                             (line  662)
* __fracttasi:                           Fixed-point fractional library routines.
                                                             (line  659)
* __fracttasq:                           Fixed-point fractional library routines.
                                                             (line  638)
* __fracttati:                           Fixed-point fractional library routines.
                                                             (line  661)
* __fracttauda:                          Fixed-point fractional library routines.
                                                             (line  653)
* __fracttaudq:                          Fixed-point fractional library routines.
                                                             (line  648)
* __fracttauha:                          Fixed-point fractional library routines.
                                                             (line  650)
* __fracttauhq:                          Fixed-point fractional library routines.
                                                             (line  645)
* __fracttauqq:                          Fixed-point fractional library routines.
                                                             (line  643)
* __fracttausa:                          Fixed-point fractional library routines.
                                                             (line  652)
* __fracttausq:                          Fixed-point fractional library routines.
                                                             (line  646)
* __fracttauta:                          Fixed-point fractional library routines.
                                                             (line  655)
* __fracttida:                           Fixed-point fractional library routines.
                                                             (line  990)
* __fracttidq:                           Fixed-point fractional library routines.
                                                             (line  987)
* __fracttiha:                           Fixed-point fractional library routines.
                                                             (line  988)
* __fracttihq:                           Fixed-point fractional library routines.
                                                             (line  985)
* __fracttiqq:                           Fixed-point fractional library routines.
                                                             (line  984)
* __fracttisa:                           Fixed-point fractional library routines.
                                                             (line  989)
* __fracttisq:                           Fixed-point fractional library routines.
                                                             (line  986)
* __fracttita:                           Fixed-point fractional library routines.
                                                             (line  991)
* __fracttiuda:                          Fixed-point fractional library routines.
                                                             (line  999)
* __fracttiudq:                          Fixed-point fractional library routines.
                                                             (line  995)
* __fracttiuha:                          Fixed-point fractional library routines.
                                                             (line  997)
* __fracttiuhq:                          Fixed-point fractional library routines.
                                                             (line  993)
* __fracttiuqq:                          Fixed-point fractional library routines.
                                                             (line  992)
* __fracttiusa:                          Fixed-point fractional library routines.
                                                             (line  998)
* __fracttiusq:                          Fixed-point fractional library routines.
                                                             (line  994)
* __fracttiuta:                          Fixed-point fractional library routines.
                                                             (line 1000)
* __fractudada:                          Fixed-point fractional library routines.
                                                             (line  857)
* __fractudadf:                          Fixed-point fractional library routines.
                                                             (line  880)
* __fractudadi:                          Fixed-point fractional library routines.
                                                             (line  877)
* __fractudadq:                          Fixed-point fractional library routines.
                                                             (line  853)
* __fractudaha:                          Fixed-point fractional library routines.
                                                             (line  855)
* __fractudahi:                          Fixed-point fractional library routines.
                                                             (line  875)
* __fractudahq:                          Fixed-point fractional library routines.
                                                             (line  851)
* __fractudaqi:                          Fixed-point fractional library routines.
                                                             (line  874)
* __fractudaqq:                          Fixed-point fractional library routines.
                                                             (line  850)
* __fractudasa:                          Fixed-point fractional library routines.
                                                             (line  856)
* __fractudasf:                          Fixed-point fractional library routines.
                                                             (line  879)
* __fractudasi:                          Fixed-point fractional library routines.
                                                             (line  876)
* __fractudasq:                          Fixed-point fractional library routines.
                                                             (line  852)
* __fractudata:                          Fixed-point fractional library routines.
                                                             (line  858)
* __fractudati:                          Fixed-point fractional library routines.
                                                             (line  878)
* __fractudaudq:                         Fixed-point fractional library routines.
                                                             (line  866)
* __fractudauha2:                        Fixed-point fractional library routines.
                                                             (line  868)
* __fractudauhq:                         Fixed-point fractional library routines.
                                                             (line  862)
* __fractudauqq:                         Fixed-point fractional library routines.
                                                             (line  860)
* __fractudausa2:                        Fixed-point fractional library routines.
                                                             (line  870)
* __fractudausq:                         Fixed-point fractional library routines.
                                                             (line  864)
* __fractudauta2:                        Fixed-point fractional library routines.
                                                             (line  872)
* __fractudqda:                          Fixed-point fractional library routines.
                                                             (line  764)
* __fractudqdf:                          Fixed-point fractional library routines.
                                                             (line  790)
* __fractudqdi:                          Fixed-point fractional library routines.
                                                             (line  786)
* __fractudqdq:                          Fixed-point fractional library routines.
                                                             (line  759)
* __fractudqha:                          Fixed-point fractional library routines.
                                                             (line  761)
* __fractudqhi:                          Fixed-point fractional library routines.
                                                             (line  784)
* __fractudqhq:                          Fixed-point fractional library routines.
                                                             (line  756)
* __fractudqqi:                          Fixed-point fractional library routines.
                                                             (line  782)
* __fractudqqq:                          Fixed-point fractional library routines.
                                                             (line  754)
* __fractudqsa:                          Fixed-point fractional library routines.
                                                             (line  763)
* __fractudqsf:                          Fixed-point fractional library routines.
                                                             (line  789)
* __fractudqsi:                          Fixed-point fractional library routines.
                                                             (line  785)
* __fractudqsq:                          Fixed-point fractional library routines.
                                                             (line  757)
* __fractudqta:                          Fixed-point fractional library routines.
                                                             (line  766)
* __fractudqti:                          Fixed-point fractional library routines.
                                                             (line  787)
* __fractudquda:                         Fixed-point fractional library routines.
                                                             (line  778)
* __fractudquha:                         Fixed-point fractional library routines.
                                                             (line  774)
* __fractudquhq2:                        Fixed-point fractional library routines.
                                                             (line  770)
* __fractudquqq2:                        Fixed-point fractional library routines.
                                                             (line  768)
* __fractudqusa:                         Fixed-point fractional library routines.
                                                             (line  776)
* __fractudqusq2:                        Fixed-point fractional library routines.
                                                             (line  772)
* __fractudquta:                         Fixed-point fractional library routines.
                                                             (line  780)
* __fractuhada:                          Fixed-point fractional library routines.
                                                             (line  798)
* __fractuhadf:                          Fixed-point fractional library routines.
                                                             (line  821)
* __fractuhadi:                          Fixed-point fractional library routines.
                                                             (line  818)
* __fractuhadq:                          Fixed-point fractional library routines.
                                                             (line  794)
* __fractuhaha:                          Fixed-point fractional library routines.
                                                             (line  796)
* __fractuhahi:                          Fixed-point fractional library routines.
                                                             (line  816)
* __fractuhahq:                          Fixed-point fractional library routines.
                                                             (line  792)
* __fractuhaqi:                          Fixed-point fractional library routines.
                                                             (line  815)
* __fractuhaqq:                          Fixed-point fractional library routines.
                                                             (line  791)
* __fractuhasa:                          Fixed-point fractional library routines.
                                                             (line  797)
* __fractuhasf:                          Fixed-point fractional library routines.
                                                             (line  820)
* __fractuhasi:                          Fixed-point fractional library routines.
                                                             (line  817)
* __fractuhasq:                          Fixed-point fractional library routines.
                                                             (line  793)
* __fractuhata:                          Fixed-point fractional library routines.
                                                             (line  799)
* __fractuhati:                          Fixed-point fractional library routines.
                                                             (line  819)
* __fractuhauda2:                        Fixed-point fractional library routines.
                                                             (line  811)
* __fractuhaudq:                         Fixed-point fractional library routines.
                                                             (line  807)
* __fractuhauhq:                         Fixed-point fractional library routines.
                                                             (line  803)
* __fractuhauqq:                         Fixed-point fractional library routines.
                                                             (line  801)
* __fractuhausa2:                        Fixed-point fractional library routines.
                                                             (line  809)
* __fractuhausq:                         Fixed-point fractional library routines.
                                                             (line  805)
* __fractuhauta2:                        Fixed-point fractional library routines.
                                                             (line  813)
* __fractuhqda:                          Fixed-point fractional library routines.
                                                             (line  701)
* __fractuhqdf:                          Fixed-point fractional library routines.
                                                             (line  722)
* __fractuhqdi:                          Fixed-point fractional library routines.
                                                             (line  719)
* __fractuhqdq:                          Fixed-point fractional library routines.
                                                             (line  698)
* __fractuhqha:                          Fixed-point fractional library routines.
                                                             (line  699)
* __fractuhqhi:                          Fixed-point fractional library routines.
                                                             (line  717)
* __fractuhqhq:                          Fixed-point fractional library routines.
                                                             (line  696)
* __fractuhqqi:                          Fixed-point fractional library routines.
                                                             (line  716)
* __fractuhqqq:                          Fixed-point fractional library routines.
                                                             (line  695)
* __fractuhqsa:                          Fixed-point fractional library routines.
                                                             (line  700)
* __fractuhqsf:                          Fixed-point fractional library routines.
                                                             (line  721)
* __fractuhqsi:                          Fixed-point fractional library routines.
                                                             (line  718)
* __fractuhqsq:                          Fixed-point fractional library routines.
                                                             (line  697)
* __fractuhqta:                          Fixed-point fractional library routines.
                                                             (line  702)
* __fractuhqti:                          Fixed-point fractional library routines.
                                                             (line  720)
* __fractuhquda:                         Fixed-point fractional library routines.
                                                             (line  712)
* __fractuhqudq2:                        Fixed-point fractional library routines.
                                                             (line  707)
* __fractuhquha:                         Fixed-point fractional library routines.
                                                             (line  709)
* __fractuhquqq2:                        Fixed-point fractional library routines.
                                                             (line  703)
* __fractuhqusa:                         Fixed-point fractional library routines.
                                                             (line  711)
* __fractuhqusq2:                        Fixed-point fractional library routines.
                                                             (line  705)
* __fractuhquta:                         Fixed-point fractional library routines.
                                                             (line  714)
* __fractunsdadi:                        Fixed-point fractional library routines.
                                                             (line 1554)
* __fractunsdahi:                        Fixed-point fractional library routines.
                                                             (line 1552)
* __fractunsdaqi:                        Fixed-point fractional library routines.
                                                             (line 1551)
* __fractunsdasi:                        Fixed-point fractional library routines.
                                                             (line 1553)
* __fractunsdati:                        Fixed-point fractional library routines.
                                                             (line 1555)
* __fractunsdida:                        Fixed-point fractional library routines.
                                                             (line 1706)
* __fractunsdidq:                        Fixed-point fractional library routines.
                                                             (line 1703)
* __fractunsdiha:                        Fixed-point fractional library routines.
                                                             (line 1704)
* __fractunsdihq:                        Fixed-point fractional library routines.
                                                             (line 1701)
* __fractunsdiqq:                        Fixed-point fractional library routines.
                                                             (line 1700)
* __fractunsdisa:                        Fixed-point fractional library routines.
                                                             (line 1705)
* __fractunsdisq:                        Fixed-point fractional library routines.
                                                             (line 1702)
* __fractunsdita:                        Fixed-point fractional library routines.
                                                             (line 1707)
* __fractunsdiuda:                       Fixed-point fractional library routines.
                                                             (line 1718)
* __fractunsdiudq:                       Fixed-point fractional library routines.
                                                             (line 1713)
* __fractunsdiuha:                       Fixed-point fractional library routines.
                                                             (line 1715)
* __fractunsdiuhq:                       Fixed-point fractional library routines.
                                                             (line 1710)
* __fractunsdiuqq:                       Fixed-point fractional library routines.
                                                             (line 1708)
* __fractunsdiusa:                       Fixed-point fractional library routines.
                                                             (line 1717)
* __fractunsdiusq:                       Fixed-point fractional library routines.
                                                             (line 1711)
* __fractunsdiuta:                       Fixed-point fractional library routines.
                                                             (line 1720)
* __fractunsdqdi:                        Fixed-point fractional library routines.
                                                             (line 1538)
* __fractunsdqhi:                        Fixed-point fractional library routines.
                                                             (line 1536)
* __fractunsdqqi:                        Fixed-point fractional library routines.
                                                             (line 1535)
* __fractunsdqsi:                        Fixed-point fractional library routines.
                                                             (line 1537)
* __fractunsdqti:                        Fixed-point fractional library routines.
                                                             (line 1539)
* __fractunshadi:                        Fixed-point fractional library routines.
                                                             (line 1544)
* __fractunshahi:                        Fixed-point fractional library routines.
                                                             (line 1542)
* __fractunshaqi:                        Fixed-point fractional library routines.
                                                             (line 1541)
* __fractunshasi:                        Fixed-point fractional library routines.
                                                             (line 1543)
* __fractunshati:                        Fixed-point fractional library routines.
                                                             (line 1545)
* __fractunshida:                        Fixed-point fractional library routines.
                                                             (line 1662)
* __fractunshidq:                        Fixed-point fractional library routines.
                                                             (line 1659)
* __fractunshiha:                        Fixed-point fractional library routines.
                                                             (line 1660)
* __fractunshihq:                        Fixed-point fractional library routines.
                                                             (line 1657)
* __fractunshiqq:                        Fixed-point fractional library routines.
                                                             (line 1656)
* __fractunshisa:                        Fixed-point fractional library routines.
                                                             (line 1661)
* __fractunshisq:                        Fixed-point fractional library routines.
                                                             (line 1658)
* __fractunshita:                        Fixed-point fractional library routines.
                                                             (line 1663)
* __fractunshiuda:                       Fixed-point fractional library routines.
                                                             (line 1674)
* __fractunshiudq:                       Fixed-point fractional library routines.
                                                             (line 1669)
* __fractunshiuha:                       Fixed-point fractional library routines.
                                                             (line 1671)
* __fractunshiuhq:                       Fixed-point fractional library routines.
                                                             (line 1666)
* __fractunshiuqq:                       Fixed-point fractional library routines.
                                                             (line 1664)
* __fractunshiusa:                       Fixed-point fractional library routines.
                                                             (line 1673)
* __fractunshiusq:                       Fixed-point fractional library routines.
                                                             (line 1667)
* __fractunshiuta:                       Fixed-point fractional library routines.
                                                             (line 1676)
* __fractunshqdi:                        Fixed-point fractional library routines.
                                                             (line 1528)
* __fractunshqhi:                        Fixed-point fractional library routines.
                                                             (line 1526)
* __fractunshqqi:                        Fixed-point fractional library routines.
                                                             (line 1525)
* __fractunshqsi:                        Fixed-point fractional library routines.
                                                             (line 1527)
* __fractunshqti:                        Fixed-point fractional library routines.
                                                             (line 1529)
* __fractunsqida:                        Fixed-point fractional library routines.
                                                             (line 1640)
* __fractunsqidq:                        Fixed-point fractional library routines.
                                                             (line 1637)
* __fractunsqiha:                        Fixed-point fractional library routines.
                                                             (line 1638)
* __fractunsqihq:                        Fixed-point fractional library routines.
                                                             (line 1635)
* __fractunsqiqq:                        Fixed-point fractional library routines.
                                                             (line 1634)
* __fractunsqisa:                        Fixed-point fractional library routines.
                                                             (line 1639)
* __fractunsqisq:                        Fixed-point fractional library routines.
                                                             (line 1636)
* __fractunsqita:                        Fixed-point fractional library routines.
                                                             (line 1641)
* __fractunsqiuda:                       Fixed-point fractional library routines.
                                                             (line 1652)
* __fractunsqiudq:                       Fixed-point fractional library routines.
                                                             (line 1647)
* __fractunsqiuha:                       Fixed-point fractional library routines.
                                                             (line 1649)
* __fractunsqiuhq:                       Fixed-point fractional library routines.
                                                             (line 1644)
* __fractunsqiuqq:                       Fixed-point fractional library routines.
                                                             (line 1642)
* __fractunsqiusa:                       Fixed-point fractional library routines.
                                                             (line 1651)
* __fractunsqiusq:                       Fixed-point fractional library routines.
                                                             (line 1645)
* __fractunsqiuta:                       Fixed-point fractional library routines.
                                                             (line 1654)
* __fractunsqqdi:                        Fixed-point fractional library routines.
                                                             (line 1523)
* __fractunsqqhi:                        Fixed-point fractional library routines.
                                                             (line 1521)
* __fractunsqqqi:                        Fixed-point fractional library routines.
                                                             (line 1520)
* __fractunsqqsi:                        Fixed-point fractional library routines.
                                                             (line 1522)
* __fractunsqqti:                        Fixed-point fractional library routines.
                                                             (line 1524)
* __fractunssadi:                        Fixed-point fractional library routines.
                                                             (line 1549)
* __fractunssahi:                        Fixed-point fractional library routines.
                                                             (line 1547)
* __fractunssaqi:                        Fixed-point fractional library routines.
                                                             (line 1546)
* __fractunssasi:                        Fixed-point fractional library routines.
                                                             (line 1548)
* __fractunssati:                        Fixed-point fractional library routines.
                                                             (line 1550)
* __fractunssida:                        Fixed-point fractional library routines.
                                                             (line 1684)
* __fractunssidq:                        Fixed-point fractional library routines.
                                                             (line 1681)
* __fractunssiha:                        Fixed-point fractional library routines.
                                                             (line 1682)
* __fractunssihq:                        Fixed-point fractional library routines.
                                                             (line 1679)
* __fractunssiqq:                        Fixed-point fractional library routines.
                                                             (line 1678)
* __fractunssisa:                        Fixed-point fractional library routines.
                                                             (line 1683)
* __fractunssisq:                        Fixed-point fractional library routines.
                                                             (line 1680)
* __fractunssita:                        Fixed-point fractional library routines.
                                                             (line 1685)
* __fractunssiuda:                       Fixed-point fractional library routines.
                                                             (line 1696)
* __fractunssiudq:                       Fixed-point fractional library routines.
                                                             (line 1691)
* __fractunssiuha:                       Fixed-point fractional library routines.
                                                             (line 1693)
* __fractunssiuhq:                       Fixed-point fractional library routines.
                                                             (line 1688)
* __fractunssiuqq:                       Fixed-point fractional library routines.
                                                             (line 1686)
* __fractunssiusa:                       Fixed-point fractional library routines.
                                                             (line 1695)
* __fractunssiusq:                       Fixed-point fractional library routines.
                                                             (line 1689)
* __fractunssiuta:                       Fixed-point fractional library routines.
                                                             (line 1698)
* __fractunssqdi:                        Fixed-point fractional library routines.
                                                             (line 1533)
* __fractunssqhi:                        Fixed-point fractional library routines.
                                                             (line 1531)
* __fractunssqqi:                        Fixed-point fractional library routines.
                                                             (line 1530)
* __fractunssqsi:                        Fixed-point fractional library routines.
                                                             (line 1532)
* __fractunssqti:                        Fixed-point fractional library routines.
                                                             (line 1534)
* __fractunstadi:                        Fixed-point fractional library routines.
                                                             (line 1559)
* __fractunstahi:                        Fixed-point fractional library routines.
                                                             (line 1557)
* __fractunstaqi:                        Fixed-point fractional library routines.
                                                             (line 1556)
* __fractunstasi:                        Fixed-point fractional library routines.
                                                             (line 1558)
* __fractunstati:                        Fixed-point fractional library routines.
                                                             (line 1560)
* __fractunstida:                        Fixed-point fractional library routines.
                                                             (line 1729)
* __fractunstidq:                        Fixed-point fractional library routines.
                                                             (line 1725)
* __fractunstiha:                        Fixed-point fractional library routines.
                                                             (line 1727)
* __fractunstihq:                        Fixed-point fractional library routines.
                                                             (line 1723)
* __fractunstiqq:                        Fixed-point fractional library routines.
                                                             (line 1722)
* __fractunstisa:                        Fixed-point fractional library routines.
                                                             (line 1728)
* __fractunstisq:                        Fixed-point fractional library routines.
                                                             (line 1724)
* __fractunstita:                        Fixed-point fractional library routines.
                                                             (line 1730)
* __fractunstiuda:                       Fixed-point fractional library routines.
                                                             (line 1744)
* __fractunstiudq:                       Fixed-point fractional library routines.
                                                             (line 1738)
* __fractunstiuha:                       Fixed-point fractional library routines.
                                                             (line 1740)
* __fractunstiuhq:                       Fixed-point fractional library routines.
                                                             (line 1734)
* __fractunstiuqq:                       Fixed-point fractional library routines.
                                                             (line 1732)
* __fractunstiusa:                       Fixed-point fractional library routines.
                                                             (line 1742)
* __fractunstiusq:                       Fixed-point fractional library routines.
                                                             (line 1736)
* __fractunstiuta:                       Fixed-point fractional library routines.
                                                             (line 1746)
* __fractunsudadi:                       Fixed-point fractional library routines.
                                                             (line 1620)
* __fractunsudahi:                       Fixed-point fractional library routines.
                                                             (line 1616)
* __fractunsudaqi:                       Fixed-point fractional library routines.
                                                             (line 1614)
* __fractunsudasi:                       Fixed-point fractional library routines.
                                                             (line 1618)
* __fractunsudati:                       Fixed-point fractional library routines.
                                                             (line 1622)
* __fractunsudqdi:                       Fixed-point fractional library routines.
                                                             (line 1594)
* __fractunsudqhi:                       Fixed-point fractional library routines.
                                                             (line 1590)
* __fractunsudqqi:                       Fixed-point fractional library routines.
                                                             (line 1588)
* __fractunsudqsi:                       Fixed-point fractional library routines.
                                                             (line 1592)
* __fractunsudqti:                       Fixed-point fractional library routines.
                                                             (line 1596)
* __fractunsuhadi:                       Fixed-point fractional library routines.
                                                             (line 1604)
* __fractunsuhahi:                       Fixed-point fractional library routines.
                                                             (line 1600)
* __fractunsuhaqi:                       Fixed-point fractional library routines.
                                                             (line 1598)
* __fractunsuhasi:                       Fixed-point fractional library routines.
                                                             (line 1602)
* __fractunsuhati:                       Fixed-point fractional library routines.
                                                             (line 1606)
* __fractunsuhqdi:                       Fixed-point fractional library routines.
                                                             (line 1575)
* __fractunsuhqhi:                       Fixed-point fractional library routines.
                                                             (line 1573)
* __fractunsuhqqi:                       Fixed-point fractional library routines.
                                                             (line 1572)
* __fractunsuhqsi:                       Fixed-point fractional library routines.
                                                             (line 1574)
* __fractunsuhqti:                       Fixed-point fractional library routines.
                                                             (line 1576)
* __fractunsuqqdi:                       Fixed-point fractional library routines.
                                                             (line 1568)
* __fractunsuqqhi:                       Fixed-point fractional library routines.
                                                             (line 1564)
* __fractunsuqqqi:                       Fixed-point fractional library routines.
                                                             (line 1562)
* __fractunsuqqsi:                       Fixed-point fractional library routines.
                                                             (line 1566)
* __fractunsuqqti:                       Fixed-point fractional library routines.
                                                             (line 1570)
* __fractunsusadi:                       Fixed-point fractional library routines.
                                                             (line 1611)
* __fractunsusahi:                       Fixed-point fractional library routines.
                                                             (line 1609)
* __fractunsusaqi:                       Fixed-point fractional library routines.
                                                             (line 1608)
* __fractunsusasi:                       Fixed-point fractional library routines.
                                                             (line 1610)
* __fractunsusati:                       Fixed-point fractional library routines.
                                                             (line 1612)
* __fractunsusqdi:                       Fixed-point fractional library routines.
                                                             (line 1584)
* __fractunsusqhi:                       Fixed-point fractional library routines.
                                                             (line 1580)
* __fractunsusqqi:                       Fixed-point fractional library routines.
                                                             (line 1578)
* __fractunsusqsi:                       Fixed-point fractional library routines.
                                                             (line 1582)
* __fractunsusqti:                       Fixed-point fractional library routines.
                                                             (line 1586)
* __fractunsutadi:                       Fixed-point fractional library routines.
                                                             (line 1630)
* __fractunsutahi:                       Fixed-point fractional library routines.
                                                             (line 1626)
* __fractunsutaqi:                       Fixed-point fractional library routines.
                                                             (line 1624)
* __fractunsutasi:                       Fixed-point fractional library routines.
                                                             (line 1628)
* __fractunsutati:                       Fixed-point fractional library routines.
                                                             (line 1632)
* __fractuqqda:                          Fixed-point fractional library routines.
                                                             (line  671)
* __fractuqqdf:                          Fixed-point fractional library routines.
                                                             (line  694)
* __fractuqqdi:                          Fixed-point fractional library routines.
                                                             (line  691)
* __fractuqqdq:                          Fixed-point fractional library routines.
                                                             (line  667)
* __fractuqqha:                          Fixed-point fractional library routines.
                                                             (line  669)
* __fractuqqhi:                          Fixed-point fractional library routines.
                                                             (line  689)
* __fractuqqhq:                          Fixed-point fractional library routines.
                                                             (line  665)
* __fractuqqqi:                          Fixed-point fractional library routines.
                                                             (line  688)
* __fractuqqqq:                          Fixed-point fractional library routines.
                                                             (line  664)
* __fractuqqsa:                          Fixed-point fractional library routines.
                                                             (line  670)
* __fractuqqsf:                          Fixed-point fractional library routines.
                                                             (line  693)
* __fractuqqsi:                          Fixed-point fractional library routines.
                                                             (line  690)
* __fractuqqsq:                          Fixed-point fractional library routines.
                                                             (line  666)
* __fractuqqta:                          Fixed-point fractional library routines.
                                                             (line  672)
* __fractuqqti:                          Fixed-point fractional library routines.
                                                             (line  692)
* __fractuqquda:                         Fixed-point fractional library routines.
                                                             (line  684)
* __fractuqqudq2:                        Fixed-point fractional library routines.
                                                             (line  678)
* __fractuqquha:                         Fixed-point fractional library routines.
                                                             (line  680)
* __fractuqquhq2:                        Fixed-point fractional library routines.
                                                             (line  674)
* __fractuqqusa:                         Fixed-point fractional library routines.
                                                             (line  682)
* __fractuqqusq2:                        Fixed-point fractional library routines.
                                                             (line  676)
* __fractuqquta:                         Fixed-point fractional library routines.
                                                             (line  686)
* __fractusada:                          Fixed-point fractional library routines.
                                                             (line  828)
* __fractusadf:                          Fixed-point fractional library routines.
                                                             (line  849)
* __fractusadi:                          Fixed-point fractional library routines.
                                                             (line  846)
* __fractusadq:                          Fixed-point fractional library routines.
                                                             (line  825)
* __fractusaha:                          Fixed-point fractional library routines.
                                                             (line  826)
* __fractusahi:                          Fixed-point fractional library routines.
                                                             (line  844)
* __fractusahq:                          Fixed-point fractional library routines.
                                                             (line  823)
* __fractusaqi:                          Fixed-point fractional library routines.
                                                             (line  843)
* __fractusaqq:                          Fixed-point fractional library routines.
                                                             (line  822)
* __fractusasa:                          Fixed-point fractional library routines.
                                                             (line  827)
* __fractusasf:                          Fixed-point fractional library routines.
                                                             (line  848)
* __fractusasi:                          Fixed-point fractional library routines.
                                                             (line  845)
* __fractusasq:                          Fixed-point fractional library routines.
                                                             (line  824)
* __fractusata:                          Fixed-point fractional library routines.
                                                             (line  829)
* __fractusati:                          Fixed-point fractional library routines.
                                                             (line  847)
* __fractusauda2:                        Fixed-point fractional library routines.
                                                             (line  839)
* __fractusaudq:                         Fixed-point fractional library routines.
                                                             (line  835)
* __fractusauha2:                        Fixed-point fractional library routines.
                                                             (line  837)
* __fractusauhq:                         Fixed-point fractional library routines.
                                                             (line  832)
* __fractusauqq:                         Fixed-point fractional library routines.
                                                             (line  830)
* __fractusausq:                         Fixed-point fractional library routines.
                                                             (line  833)
* __fractusauta2:                        Fixed-point fractional library routines.
                                                             (line  841)
* __fractusqda:                          Fixed-point fractional library routines.
                                                             (line  730)
* __fractusqdf:                          Fixed-point fractional library routines.
                                                             (line  753)
* __fractusqdi:                          Fixed-point fractional library routines.
                                                             (line  750)
* __fractusqdq:                          Fixed-point fractional library routines.
                                                             (line  726)
* __fractusqha:                          Fixed-point fractional library routines.
                                                             (line  728)
* __fractusqhi:                          Fixed-point fractional library routines.
                                                             (line  748)
* __fractusqhq:                          Fixed-point fractional library routines.
                                                             (line  724)
* __fractusqqi:                          Fixed-point fractional library routines.
                                                             (line  747)
* __fractusqqq:                          Fixed-point fractional library routines.
                                                             (line  723)
* __fractusqsa:                          Fixed-point fractional library routines.
                                                             (line  729)
* __fractusqsf:                          Fixed-point fractional library routines.
                                                             (line  752)
* __fractusqsi:                          Fixed-point fractional library routines.
                                                             (line  749)
* __fractusqsq:                          Fixed-point fractional library routines.
                                                             (line  725)
* __fractusqta:                          Fixed-point fractional library routines.
                                                             (line  731)
* __fractusqti:                          Fixed-point fractional library routines.
                                                             (line  751)
* __fractusquda:                         Fixed-point fractional library routines.
                                                             (line  743)
* __fractusqudq2:                        Fixed-point fractional library routines.
                                                             (line  737)
* __fractusquha:                         Fixed-point fractional library routines.
                                                             (line  739)
* __fractusquhq2:                        Fixed-point fractional library routines.
                                                             (line  735)
* __fractusquqq2:                        Fixed-point fractional library routines.
                                                             (line  733)
* __fractusqusa:                         Fixed-point fractional library routines.
                                                             (line  741)
* __fractusquta:                         Fixed-point fractional library routines.
                                                             (line  745)
* __fractutada:                          Fixed-point fractional library routines.
                                                             (line  891)
* __fractutadf:                          Fixed-point fractional library routines.
                                                             (line  917)
* __fractutadi:                          Fixed-point fractional library routines.
                                                             (line  913)
* __fractutadq:                          Fixed-point fractional library routines.
                                                             (line  886)
* __fractutaha:                          Fixed-point fractional library routines.
                                                             (line  888)
* __fractutahi:                          Fixed-point fractional library routines.
                                                             (line  911)
* __fractutahq:                          Fixed-point fractional library routines.
                                                             (line  883)
* __fractutaqi:                          Fixed-point fractional library routines.
                                                             (line  909)
* __fractutaqq:                          Fixed-point fractional library routines.
                                                             (line  881)
* __fractutasa:                          Fixed-point fractional library routines.
                                                             (line  890)
* __fractutasf:                          Fixed-point fractional library routines.
                                                             (line  916)
* __fractutasi:                          Fixed-point fractional library routines.
                                                             (line  912)
* __fractutasq:                          Fixed-point fractional library routines.
                                                             (line  884)
* __fractutata:                          Fixed-point fractional library routines.
                                                             (line  893)
* __fractutati:                          Fixed-point fractional library routines.
                                                             (line  914)
* __fractutauda2:                        Fixed-point fractional library routines.
                                                             (line  907)
* __fractutaudq:                         Fixed-point fractional library routines.
                                                             (line  901)
* __fractutauha2:                        Fixed-point fractional library routines.
                                                             (line  903)
* __fractutauhq:                         Fixed-point fractional library routines.
                                                             (line  897)
* __fractutauqq:                         Fixed-point fractional library routines.
                                                             (line  895)
* __fractutausa2:                        Fixed-point fractional library routines.
                                                             (line  905)
* __fractutausq:                         Fixed-point fractional library routines.
                                                             (line  899)
* __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  388)
* __lshrudq3:                            Fixed-point fractional library routines.
                                                             (line  382)
* __lshruha3:                            Fixed-point fractional library routines.
                                                             (line  384)
* __lshruhq3:                            Fixed-point fractional library routines.
                                                             (line  378)
* __lshruqq3:                            Fixed-point fractional library routines.
                                                             (line  376)
* __lshrusa3:                            Fixed-point fractional library routines.
                                                             (line  386)
* __lshrusq3:                            Fixed-point fractional library routines.
                                                             (line  380)
* __lshruta3:                            Fixed-point fractional library routines.
                                                             (line  390)
* __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  170)
* __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  157)
* __mulha3:                              Fixed-point fractional library routines.
                                                             (line  167)
* __mulhq3:                              Fixed-point fractional library routines.
                                                             (line  155)
* __mulqq3:                              Fixed-point fractional library routines.
                                                             (line  153)
* __mulsa3:                              Fixed-point fractional library routines.
                                                             (line  169)
* __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  156)
* __multa3:                              Fixed-point fractional library routines.
                                                             (line  171)
* __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  177)
* __muludq3:                             Fixed-point fractional library routines.
                                                             (line  165)
* __muluha3:                             Fixed-point fractional library routines.
                                                             (line  173)
* __muluhq3:                             Fixed-point fractional library routines.
                                                             (line  161)
* __muluqq3:                             Fixed-point fractional library routines.
                                                             (line  159)
* __mulusa3:                             Fixed-point fractional library routines.
                                                             (line  175)
* __mulusq3:                             Fixed-point fractional library routines.
                                                             (line  163)
* __muluta3:                             Fixed-point fractional library routines.
                                                             (line  179)
* __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  298)
* __negdf2:                              Soft float library routines.
                                                             (line   55)
* __negdi2:                              Integer library routines.
                                                             (line   46)
* __negdq2:                              Fixed-point fractional library routines.
                                                             (line  288)
* __negha2:                              Fixed-point fractional library routines.
                                                             (line  296)
* __neghq2:                              Fixed-point fractional library routines.
                                                             (line  286)
* __negqq2:                              Fixed-point fractional library routines.
                                                             (line  285)
* __negsa2:                              Fixed-point fractional library routines.
                                                             (line  297)
* __negsf2:                              Soft float library routines.
                                                             (line   54)
* __negsq2:                              Fixed-point fractional library routines.
                                                             (line  287)
* __negta2:                              Fixed-point fractional library routines.
                                                             (line  299)
* __negtf2:                              Soft float library routines.
                                                             (line   56)
* __negti2:                              Integer library routines.
                                                             (line   47)
* __neguda2:                             Fixed-point fractional library routines.
                                                             (line  303)
* __negudq2:                             Fixed-point fractional library routines.
                                                             (line  294)
* __neguha2:                             Fixed-point fractional library routines.
                                                             (line  300)
* __neguhq2:                             Fixed-point fractional library routines.
                                                             (line  291)
* __neguqq2:                             Fixed-point fractional library routines.
                                                             (line  289)
* __negusa2:                             Fixed-point fractional library routines.
                                                             (line  302)
* __negusq2:                             Fixed-point fractional library routines.
                                                             (line  292)
* __neguta2:                             Fixed-point fractional library routines.
                                                             (line  305)
* __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 1152)
* __satfractdaha2:                       Fixed-point fractional library routines.
                                                             (line 1153)
* __satfractdahq:                        Fixed-point fractional library routines.
                                                             (line 1150)
* __satfractdaqq:                        Fixed-point fractional library routines.
                                                             (line 1149)
* __satfractdasa2:                       Fixed-point fractional library routines.
                                                             (line 1154)
* __satfractdasq:                        Fixed-point fractional library routines.
                                                             (line 1151)
* __satfractdata2:                       Fixed-point fractional library routines.
                                                             (line 1155)
* __satfractdauda:                       Fixed-point fractional library routines.
                                                             (line 1165)
* __satfractdaudq:                       Fixed-point fractional library routines.
                                                             (line 1160)
* __satfractdauha:                       Fixed-point fractional library routines.
                                                             (line 1162)
* __satfractdauhq:                       Fixed-point fractional library routines.
                                                             (line 1158)
* __satfractdauqq:                       Fixed-point fractional library routines.
                                                             (line 1156)
* __satfractdausa:                       Fixed-point fractional library routines.
                                                             (line 1164)
* __satfractdausq:                       Fixed-point fractional library routines.
                                                             (line 1159)
* __satfractdauta:                       Fixed-point fractional library routines.
                                                             (line 1166)
* __satfractdfda:                        Fixed-point fractional library routines.
                                                             (line 1505)
* __satfractdfdq:                        Fixed-point fractional library routines.
                                                             (line 1502)
* __satfractdfha:                        Fixed-point fractional library routines.
                                                             (line 1503)
* __satfractdfhq:                        Fixed-point fractional library routines.
                                                             (line 1500)
* __satfractdfqq:                        Fixed-point fractional library routines.
                                                             (line 1499)
* __satfractdfsa:                        Fixed-point fractional library routines.
                                                             (line 1504)
* __satfractdfsq:                        Fixed-point fractional library routines.
                                                             (line 1501)
* __satfractdfta:                        Fixed-point fractional library routines.
                                                             (line 1506)
* __satfractdfuda:                       Fixed-point fractional library routines.
                                                             (line 1514)
* __satfractdfudq:                       Fixed-point fractional library routines.
                                                             (line 1510)
* __satfractdfuha:                       Fixed-point fractional library routines.
                                                             (line 1512)
* __satfractdfuhq:                       Fixed-point fractional library routines.
                                                             (line 1508)
* __satfractdfuqq:                       Fixed-point fractional library routines.
                                                             (line 1507)
* __satfractdfusa:                       Fixed-point fractional library routines.
                                                             (line 1513)
* __satfractdfusq:                       Fixed-point fractional library routines.
                                                             (line 1509)
* __satfractdfuta:                       Fixed-point fractional library routines.
                                                             (line 1515)
* __satfractdida:                        Fixed-point fractional library routines.
                                                             (line 1455)
* __satfractdidq:                        Fixed-point fractional library routines.
                                                             (line 1452)
* __satfractdiha:                        Fixed-point fractional library routines.
                                                             (line 1453)
* __satfractdihq:                        Fixed-point fractional library routines.
                                                             (line 1450)
* __satfractdiqq:                        Fixed-point fractional library routines.
                                                             (line 1449)
* __satfractdisa:                        Fixed-point fractional library routines.
                                                             (line 1454)
* __satfractdisq:                        Fixed-point fractional library routines.
                                                             (line 1451)
* __satfractdita:                        Fixed-point fractional library routines.
                                                             (line 1456)
* __satfractdiuda:                       Fixed-point fractional library routines.
                                                             (line 1463)
* __satfractdiudq:                       Fixed-point fractional library routines.
                                                             (line 1460)
* __satfractdiuha:                       Fixed-point fractional library routines.
                                                             (line 1461)
* __satfractdiuhq:                       Fixed-point fractional library routines.
                                                             (line 1458)
* __satfractdiuqq:                       Fixed-point fractional library routines.
                                                             (line 1457)
* __satfractdiusa:                       Fixed-point fractional library routines.
                                                             (line 1462)
* __satfractdiusq:                       Fixed-point fractional library routines.
                                                             (line 1459)
* __satfractdiuta:                       Fixed-point fractional library routines.
                                                             (line 1464)
* __satfractdqda:                        Fixed-point fractional library routines.
                                                             (line 1097)
* __satfractdqha:                        Fixed-point fractional library routines.
                                                             (line 1095)
* __satfractdqhq2:                       Fixed-point fractional library routines.
                                                             (line 1093)
* __satfractdqqq2:                       Fixed-point fractional library routines.
                                                             (line 1092)
* __satfractdqsa:                        Fixed-point fractional library routines.
                                                             (line 1096)
* __satfractdqsq2:                       Fixed-point fractional library routines.
                                                             (line 1094)
* __satfractdqta:                        Fixed-point fractional library routines.
                                                             (line 1098)
* __satfractdquda:                       Fixed-point fractional library routines.
                                                             (line 1109)
* __satfractdqudq:                       Fixed-point fractional library routines.
                                                             (line 1104)
* __satfractdquha:                       Fixed-point fractional library routines.
                                                             (line 1106)
* __satfractdquhq:                       Fixed-point fractional library routines.
                                                             (line 1101)
* __satfractdquqq:                       Fixed-point fractional library routines.
                                                             (line 1099)
* __satfractdqusa:                       Fixed-point fractional library routines.
                                                             (line 1108)
* __satfractdqusq:                       Fixed-point fractional library routines.
                                                             (line 1102)
* __satfractdquta:                       Fixed-point fractional library routines.
                                                             (line 1111)
* __satfracthada2:                       Fixed-point fractional library routines.
                                                             (line 1118)
* __satfracthadq:                        Fixed-point fractional library routines.
                                                             (line 1116)
* __satfracthahq:                        Fixed-point fractional library routines.
                                                             (line 1114)
* __satfracthaqq:                        Fixed-point fractional library routines.
                                                             (line 1113)
* __satfracthasa2:                       Fixed-point fractional library routines.
                                                             (line 1117)
* __satfracthasq:                        Fixed-point fractional library routines.
                                                             (line 1115)
* __satfracthata2:                       Fixed-point fractional library routines.
                                                             (line 1119)
* __satfracthauda:                       Fixed-point fractional library routines.
                                                             (line 1130)
* __satfracthaudq:                       Fixed-point fractional library routines.
                                                             (line 1125)
* __satfracthauha:                       Fixed-point fractional library routines.
                                                             (line 1127)
* __satfracthauhq:                       Fixed-point fractional library routines.
                                                             (line 1122)
* __satfracthauqq:                       Fixed-point fractional library routines.
                                                             (line 1120)
* __satfracthausa:                       Fixed-point fractional library routines.
                                                             (line 1129)
* __satfracthausq:                       Fixed-point fractional library routines.
                                                             (line 1123)
* __satfracthauta:                       Fixed-point fractional library routines.
                                                             (line 1132)
* __satfracthida:                        Fixed-point fractional library routines.
                                                             (line 1423)
* __satfracthidq:                        Fixed-point fractional library routines.
                                                             (line 1420)
* __satfracthiha:                        Fixed-point fractional library routines.
                                                             (line 1421)
* __satfracthihq:                        Fixed-point fractional library routines.
                                                             (line 1418)
* __satfracthiqq:                        Fixed-point fractional library routines.
                                                             (line 1417)
* __satfracthisa:                        Fixed-point fractional library routines.
                                                             (line 1422)
* __satfracthisq:                        Fixed-point fractional library routines.
                                                             (line 1419)
* __satfracthita:                        Fixed-point fractional library routines.
                                                             (line 1424)
* __satfracthiuda:                       Fixed-point fractional library routines.
                                                             (line 1431)
* __satfracthiudq:                       Fixed-point fractional library routines.
                                                             (line 1428)
* __satfracthiuha:                       Fixed-point fractional library routines.
                                                             (line 1429)
* __satfracthiuhq:                       Fixed-point fractional library routines.
                                                             (line 1426)
* __satfracthiuqq:                       Fixed-point fractional library routines.
                                                             (line 1425)
* __satfracthiusa:                       Fixed-point fractional library routines.
                                                             (line 1430)
* __satfracthiusq:                       Fixed-point fractional library routines.
                                                             (line 1427)
* __satfracthiuta:                       Fixed-point fractional library routines.
                                                             (line 1432)
* __satfracthqda:                        Fixed-point fractional library routines.
                                                             (line 1063)
* __satfracthqdq2:                       Fixed-point fractional library routines.
                                                             (line 1060)
* __satfracthqha:                        Fixed-point fractional library routines.
                                                             (line 1061)
* __satfracthqqq2:                       Fixed-point fractional library routines.
                                                             (line 1058)
* __satfracthqsa:                        Fixed-point fractional library routines.
                                                             (line 1062)
* __satfracthqsq2:                       Fixed-point fractional library routines.
                                                             (line 1059)
* __satfracthqta:                        Fixed-point fractional library routines.
                                                             (line 1064)
* __satfracthquda:                       Fixed-point fractional library routines.
                                                             (line 1071)
* __satfracthqudq:                       Fixed-point fractional library routines.
                                                             (line 1068)
* __satfracthquha:                       Fixed-point fractional library routines.
                                                             (line 1069)
* __satfracthquhq:                       Fixed-point fractional library routines.
                                                             (line 1066)
* __satfracthquqq:                       Fixed-point fractional library routines.
                                                             (line 1065)
* __satfracthqusa:                       Fixed-point fractional library routines.
                                                             (line 1070)
* __satfracthqusq:                       Fixed-point fractional library routines.
                                                             (line 1067)
* __satfracthquta:                       Fixed-point fractional library routines.
                                                             (line 1072)
* __satfractqida:                        Fixed-point fractional library routines.
                                                             (line 1401)
* __satfractqidq:                        Fixed-point fractional library routines.
                                                             (line 1398)
* __satfractqiha:                        Fixed-point fractional library routines.
                                                             (line 1399)
* __satfractqihq:                        Fixed-point fractional library routines.
                                                             (line 1396)
* __satfractqiqq:                        Fixed-point fractional library routines.
                                                             (line 1395)
* __satfractqisa:                        Fixed-point fractional library routines.
                                                             (line 1400)
* __satfractqisq:                        Fixed-point fractional library routines.
                                                             (line 1397)
* __satfractqita:                        Fixed-point fractional library routines.
                                                             (line 1402)
* __satfractqiuda:                       Fixed-point fractional library routines.
                                                             (line 1413)
* __satfractqiudq:                       Fixed-point fractional library routines.
                                                             (line 1408)
* __satfractqiuha:                       Fixed-point fractional library routines.
                                                             (line 1410)
* __satfractqiuhq:                       Fixed-point fractional library routines.
                                                             (line 1405)
* __satfractqiuqq:                       Fixed-point fractional library routines.
                                                             (line 1403)
* __satfractqiusa:                       Fixed-point fractional library routines.
                                                             (line 1412)
* __satfractqiusq:                       Fixed-point fractional library routines.
                                                             (line 1406)
* __satfractqiuta:                       Fixed-point fractional library routines.
                                                             (line 1415)
* __satfractqqda:                        Fixed-point fractional library routines.
                                                             (line 1042)
* __satfractqqdq2:                       Fixed-point fractional library routines.
                                                             (line 1039)
* __satfractqqha:                        Fixed-point fractional library routines.
                                                             (line 1040)
* __satfractqqhq2:                       Fixed-point fractional library routines.
                                                             (line 1037)
* __satfractqqsa:                        Fixed-point fractional library routines.
                                                             (line 1041)
* __satfractqqsq2:                       Fixed-point fractional library routines.
                                                             (line 1038)
* __satfractqqta:                        Fixed-point fractional library routines.
                                                             (line 1043)
* __satfractqquda:                       Fixed-point fractional library routines.
                                                             (line 1054)
* __satfractqqudq:                       Fixed-point fractional library routines.
                                                             (line 1049)
* __satfractqquha:                       Fixed-point fractional library routines.
                                                             (line 1051)
* __satfractqquhq:                       Fixed-point fractional library routines.
                                                             (line 1046)
* __satfractqquqq:                       Fixed-point fractional library routines.
                                                             (line 1044)
* __satfractqqusa:                       Fixed-point fractional library routines.
                                                             (line 1053)
* __satfractqqusq:                       Fixed-point fractional library routines.
                                                             (line 1047)
* __satfractqquta:                       Fixed-point fractional library routines.
                                                             (line 1056)
* __satfractsada2:                       Fixed-point fractional library routines.
                                                             (line 1139)
* __satfractsadq:                        Fixed-point fractional library routines.
                                                             (line 1137)
* __satfractsaha2:                       Fixed-point fractional library routines.
                                                             (line 1138)
* __satfractsahq:                        Fixed-point fractional library routines.
                                                             (line 1135)
* __satfractsaqq:                        Fixed-point fractional library routines.
                                                             (line 1134)
* __satfractsasq:                        Fixed-point fractional library routines.
                                                             (line 1136)
* __satfractsata2:                       Fixed-point fractional library routines.
                                                             (line 1140)
* __satfractsauda:                       Fixed-point fractional library routines.
                                                             (line 1147)
* __satfractsaudq:                       Fixed-point fractional library routines.
                                                             (line 1144)
* __satfractsauha:                       Fixed-point fractional library routines.
                                                             (line 1145)
* __satfractsauhq:                       Fixed-point fractional library routines.
                                                             (line 1142)
* __satfractsauqq:                       Fixed-point fractional library routines.
                                                             (line 1141)
* __satfractsausa:                       Fixed-point fractional library routines.
                                                             (line 1146)
* __satfractsausq:                       Fixed-point fractional library routines.
                                                             (line 1143)
* __satfractsauta:                       Fixed-point fractional library routines.
                                                             (line 1148)
* __satfractsfda:                        Fixed-point fractional library routines.
                                                             (line 1489)
* __satfractsfdq:                        Fixed-point fractional library routines.
                                                             (line 1486)
* __satfractsfha:                        Fixed-point fractional library routines.
                                                             (line 1487)
* __satfractsfhq:                        Fixed-point fractional library routines.
                                                             (line 1484)
* __satfractsfqq:                        Fixed-point fractional library routines.
                                                             (line 1483)
* __satfractsfsa:                        Fixed-point fractional library routines.
                                                             (line 1488)
* __satfractsfsq:                        Fixed-point fractional library routines.
                                                             (line 1485)
* __satfractsfta:                        Fixed-point fractional library routines.
                                                             (line 1490)
* __satfractsfuda:                       Fixed-point fractional library routines.
                                                             (line 1497)
* __satfractsfudq:                       Fixed-point fractional library routines.
                                                             (line 1494)
* __satfractsfuha:                       Fixed-point fractional library routines.
                                                             (line 1495)
* __satfractsfuhq:                       Fixed-point fractional library routines.
                                                             (line 1492)
* __satfractsfuqq:                       Fixed-point fractional library routines.
                                                             (line 1491)
* __satfractsfusa:                       Fixed-point fractional library routines.
                                                             (line 1496)
* __satfractsfusq:                       Fixed-point fractional library routines.
                                                             (line 1493)
* __satfractsfuta:                       Fixed-point fractional library routines.
                                                             (line 1498)
* __satfractsida:                        Fixed-point fractional library routines.
                                                             (line 1439)
* __satfractsidq:                        Fixed-point fractional library routines.
                                                             (line 1436)
* __satfractsiha:                        Fixed-point fractional library routines.
                                                             (line 1437)
* __satfractsihq:                        Fixed-point fractional library routines.
                                                             (line 1434)
* __satfractsiqq:                        Fixed-point fractional library routines.
                                                             (line 1433)
* __satfractsisa:                        Fixed-point fractional library routines.
                                                             (line 1438)
* __satfractsisq:                        Fixed-point fractional library routines.
                                                             (line 1435)
* __satfractsita:                        Fixed-point fractional library routines.
                                                             (line 1440)
* __satfractsiuda:                       Fixed-point fractional library routines.
                                                             (line 1447)
* __satfractsiudq:                       Fixed-point fractional library routines.
                                                             (line 1444)
* __satfractsiuha:                       Fixed-point fractional library routines.
                                                             (line 1445)
* __satfractsiuhq:                       Fixed-point fractional library routines.
                                                             (line 1442)
* __satfractsiuqq:                       Fixed-point fractional library routines.
                                                             (line 1441)
* __satfractsiusa:                       Fixed-point fractional library routines.
                                                             (line 1446)
* __satfractsiusq:                       Fixed-point fractional library routines.
                                                             (line 1443)
* __satfractsiuta:                       Fixed-point fractional library routines.
                                                             (line 1448)
* __satfractsqda:                        Fixed-point fractional library routines.
                                                             (line 1078)
* __satfractsqdq2:                       Fixed-point fractional library routines.
                                                             (line 1075)
* __satfractsqha:                        Fixed-point fractional library routines.
                                                             (line 1076)
* __satfractsqhq2:                       Fixed-point fractional library routines.
                                                             (line 1074)
* __satfractsqqq2:                       Fixed-point fractional library routines.
                                                             (line 1073)
* __satfractsqsa:                        Fixed-point fractional library routines.
                                                             (line 1077)
* __satfractsqta:                        Fixed-point fractional library routines.
                                                             (line 1079)
* __satfractsquda:                       Fixed-point fractional library routines.
                                                             (line 1089)
* __satfractsqudq:                       Fixed-point fractional library routines.
                                                             (line 1084)
* __satfractsquha:                       Fixed-point fractional library routines.
                                                             (line 1086)
* __satfractsquhq:                       Fixed-point fractional library routines.
                                                             (line 1082)
* __satfractsquqq:                       Fixed-point fractional library routines.
                                                             (line 1080)
* __satfractsqusa:                       Fixed-point fractional library routines.
                                                             (line 1088)
* __satfractsqusq:                       Fixed-point fractional library routines.
                                                             (line 1083)
* __satfractsquta:                       Fixed-point fractional library routines.
                                                             (line 1090)
* __satfracttada2:                       Fixed-point fractional library routines.
                                                             (line 1174)
* __satfracttadq:                        Fixed-point fractional library routines.
                                                             (line 1171)
* __satfracttaha2:                       Fixed-point fractional library routines.
                                                             (line 1172)
* __satfracttahq:                        Fixed-point fractional library routines.
                                                             (line 1169)
* __satfracttaqq:                        Fixed-point fractional library routines.
                                                             (line 1168)
* __satfracttasa2:                       Fixed-point fractional library routines.
                                                             (line 1173)
* __satfracttasq:                        Fixed-point fractional library routines.
                                                             (line 1170)
* __satfracttauda:                       Fixed-point fractional library routines.
                                                             (line 1185)
* __satfracttaudq:                       Fixed-point fractional library routines.
                                                             (line 1180)
* __satfracttauha:                       Fixed-point fractional library routines.
                                                             (line 1182)
* __satfracttauhq:                       Fixed-point fractional library routines.
                                                             (line 1177)
* __satfracttauqq:                       Fixed-point fractional library routines.
                                                             (line 1175)
* __satfracttausa:                       Fixed-point fractional library routines.
                                                             (line 1184)
* __satfracttausq:                       Fixed-point fractional library routines.
                                                             (line 1178)
* __satfracttauta:                       Fixed-point fractional library routines.
                                                             (line 1187)
* __satfracttida:                        Fixed-point fractional library routines.
                                                             (line 1471)
* __satfracttidq:                        Fixed-point fractional library routines.
                                                             (line 1468)
* __satfracttiha:                        Fixed-point fractional library routines.
                                                             (line 1469)
* __satfracttihq:                        Fixed-point fractional library routines.
                                                             (line 1466)
* __satfracttiqq:                        Fixed-point fractional library routines.
                                                             (line 1465)
* __satfracttisa:                        Fixed-point fractional library routines.
                                                             (line 1470)
* __satfracttisq:                        Fixed-point fractional library routines.
                                                             (line 1467)
* __satfracttita:                        Fixed-point fractional library routines.
                                                             (line 1472)
* __satfracttiuda:                       Fixed-point fractional library routines.
                                                             (line 1480)
* __satfracttiudq:                       Fixed-point fractional library routines.
                                                             (line 1476)
* __satfracttiuha:                       Fixed-point fractional library routines.
                                                             (line 1478)
* __satfracttiuhq:                       Fixed-point fractional library routines.
                                                             (line 1474)
* __satfracttiuqq:                       Fixed-point fractional library routines.
                                                             (line 1473)
* __satfracttiusa:                       Fixed-point fractional library routines.
                                                             (line 1479)
* __satfracttiusq:                       Fixed-point fractional library routines.
                                                             (line 1475)
* __satfracttiuta:                       Fixed-point fractional library routines.
                                                             (line 1481)
* __satfractudada:                       Fixed-point fractional library routines.
                                                             (line 1350)
* __satfractudadq:                       Fixed-point fractional library routines.
                                                             (line 1345)
* __satfractudaha:                       Fixed-point fractional library routines.
                                                             (line 1347)
* __satfractudahq:                       Fixed-point fractional library routines.
                                                             (line 1343)
* __satfractudaqq:                       Fixed-point fractional library routines.
                                                             (line 1341)
* __satfractudasa:                       Fixed-point fractional library routines.
                                                             (line 1349)
* __satfractudasq:                       Fixed-point fractional library routines.
                                                             (line 1344)
* __satfractudata:                       Fixed-point fractional library routines.
                                                             (line 1351)
* __satfractudaudq:                      Fixed-point fractional library routines.
                                                             (line 1359)
* __satfractudauha2:                     Fixed-point fractional library routines.
                                                             (line 1361)
* __satfractudauhq:                      Fixed-point fractional library routines.
                                                             (line 1355)
* __satfractudauqq:                      Fixed-point fractional library routines.
                                                             (line 1353)
* __satfractudausa2:                     Fixed-point fractional library routines.
                                                             (line 1363)
* __satfractudausq:                      Fixed-point fractional library routines.
                                                             (line 1357)
* __satfractudauta2:                     Fixed-point fractional library routines.
                                                             (line 1365)
* __satfractudqda:                       Fixed-point fractional library routines.
                                                             (line 1274)
* __satfractudqdq:                       Fixed-point fractional library routines.
                                                             (line 1269)
* __satfractudqha:                       Fixed-point fractional library routines.
                                                             (line 1271)
* __satfractudqhq:                       Fixed-point fractional library routines.
                                                             (line 1266)
* __satfractudqqq:                       Fixed-point fractional library routines.
                                                             (line 1264)
* __satfractudqsa:                       Fixed-point fractional library routines.
                                                             (line 1273)
* __satfractudqsq:                       Fixed-point fractional library routines.
                                                             (line 1267)
* __satfractudqta:                       Fixed-point fractional library routines.
                                                             (line 1276)
* __satfractudquda:                      Fixed-point fractional library routines.
                                                             (line 1288)
* __satfractudquha:                      Fixed-point fractional library routines.
                                                             (line 1284)
* __satfractudquhq2:                     Fixed-point fractional library routines.
                                                             (line 1280)
* __satfractudquqq2:                     Fixed-point fractional library routines.
                                                             (line 1278)
* __satfractudqusa:                      Fixed-point fractional library routines.
                                                             (line 1286)
* __satfractudqusq2:                     Fixed-point fractional library routines.
                                                             (line 1282)
* __satfractudquta:                      Fixed-point fractional library routines.
                                                             (line 1290)
* __satfractuhada:                       Fixed-point fractional library routines.
                                                             (line 1302)
* __satfractuhadq:                       Fixed-point fractional library routines.
                                                             (line 1297)
* __satfractuhaha:                       Fixed-point fractional library routines.
                                                             (line 1299)
* __satfractuhahq:                       Fixed-point fractional library routines.
                                                             (line 1294)
* __satfractuhaqq:                       Fixed-point fractional library routines.
                                                             (line 1292)
* __satfractuhasa:                       Fixed-point fractional library routines.
                                                             (line 1301)
* __satfractuhasq:                       Fixed-point fractional library routines.
                                                             (line 1295)
* __satfractuhata:                       Fixed-point fractional library routines.
                                                             (line 1304)
* __satfractuhauda2:                     Fixed-point fractional library routines.
                                                             (line 1316)
* __satfractuhaudq:                      Fixed-point fractional library routines.
                                                             (line 1312)
* __satfractuhauhq:                      Fixed-point fractional library routines.
                                                             (line 1308)
* __satfractuhauqq:                      Fixed-point fractional library routines.
                                                             (line 1306)
* __satfractuhausa2:                     Fixed-point fractional library routines.
                                                             (line 1314)
* __satfractuhausq:                      Fixed-point fractional library routines.
                                                             (line 1310)
* __satfractuhauta2:                     Fixed-point fractional library routines.
                                                             (line 1318)
* __satfractuhqda:                       Fixed-point fractional library routines.
                                                             (line 1223)
* __satfractuhqdq:                       Fixed-point fractional library routines.
                                                             (line 1220)
* __satfractuhqha:                       Fixed-point fractional library routines.
                                                             (line 1221)
* __satfractuhqhq:                       Fixed-point fractional library routines.
                                                             (line 1218)
* __satfractuhqqq:                       Fixed-point fractional library routines.
                                                             (line 1217)
* __satfractuhqsa:                       Fixed-point fractional library routines.
                                                             (line 1222)
* __satfractuhqsq:                       Fixed-point fractional library routines.
                                                             (line 1219)
* __satfractuhqta:                       Fixed-point fractional library routines.
                                                             (line 1224)
* __satfractuhquda:                      Fixed-point fractional library routines.
                                                             (line 1234)
* __satfractuhqudq2:                     Fixed-point fractional library routines.
                                                             (line 1229)
* __satfractuhquha:                      Fixed-point fractional library routines.
                                                             (line 1231)
* __satfractuhquqq2:                     Fixed-point fractional library routines.
                                                             (line 1225)
* __satfractuhqusa:                      Fixed-point fractional library routines.
                                                             (line 1233)
* __satfractuhqusq2:                     Fixed-point fractional library routines.
                                                             (line 1227)
* __satfractuhquta:                      Fixed-point fractional library routines.
                                                             (line 1236)
* __satfractunsdida:                     Fixed-point fractional library routines.
                                                             (line 1833)
* __satfractunsdidq:                     Fixed-point fractional library routines.
                                                             (line 1829)
* __satfractunsdiha:                     Fixed-point fractional library routines.
                                                             (line 1831)
* __satfractunsdihq:                     Fixed-point fractional library routines.
                                                             (line 1827)
* __satfractunsdiqq:                     Fixed-point fractional library routines.
                                                             (line 1826)
* __satfractunsdisa:                     Fixed-point fractional library routines.
                                                             (line 1832)
* __satfractunsdisq:                     Fixed-point fractional library routines.
                                                             (line 1828)
* __satfractunsdita:                     Fixed-point fractional library routines.
                                                             (line 1834)
* __satfractunsdiuda:                    Fixed-point fractional library routines.
                                                             (line 1848)
* __satfractunsdiudq:                    Fixed-point fractional library routines.
                                                             (line 1842)
* __satfractunsdiuha:                    Fixed-point fractional library routines.
                                                             (line 1844)
* __satfractunsdiuhq:                    Fixed-point fractional library routines.
                                                             (line 1838)
* __satfractunsdiuqq:                    Fixed-point fractional library routines.
                                                             (line 1836)
* __satfractunsdiusa:                    Fixed-point fractional library routines.
                                                             (line 1846)
* __satfractunsdiusq:                    Fixed-point fractional library routines.
                                                             (line 1840)
* __satfractunsdiuta:                    Fixed-point fractional library routines.
                                                             (line 1850)
* __satfractunshida:                     Fixed-point fractional library routines.
                                                             (line 1785)
* __satfractunshidq:                     Fixed-point fractional library routines.
                                                             (line 1781)
* __satfractunshiha:                     Fixed-point fractional library routines.
                                                             (line 1783)
* __satfractunshihq:                     Fixed-point fractional library routines.
                                                             (line 1779)
* __satfractunshiqq:                     Fixed-point fractional library routines.
                                                             (line 1778)
* __satfractunshisa:                     Fixed-point fractional library routines.
                                                             (line 1784)
* __satfractunshisq:                     Fixed-point fractional library routines.
                                                             (line 1780)
* __satfractunshita:                     Fixed-point fractional library routines.
                                                             (line 1786)
* __satfractunshiuda:                    Fixed-point fractional library routines.
                                                             (line 1800)
* __satfractunshiudq:                    Fixed-point fractional library routines.
                                                             (line 1794)
* __satfractunshiuha:                    Fixed-point fractional library routines.
                                                             (line 1796)
* __satfractunshiuhq:                    Fixed-point fractional library routines.
                                                             (line 1790)
* __satfractunshiuqq:                    Fixed-point fractional library routines.
                                                             (line 1788)
* __satfractunshiusa:                    Fixed-point fractional library routines.
                                                             (line 1798)
* __satfractunshiusq:                    Fixed-point fractional library routines.
                                                             (line 1792)
* __satfractunshiuta:                    Fixed-point fractional library routines.
                                                             (line 1802)
* __satfractunsqida:                     Fixed-point fractional library routines.
                                                             (line 1759)
* __satfractunsqidq:                     Fixed-point fractional library routines.
                                                             (line 1755)
* __satfractunsqiha:                     Fixed-point fractional library routines.
                                                             (line 1757)
* __satfractunsqihq:                     Fixed-point fractional library routines.
                                                             (line 1753)
* __satfractunsqiqq:                     Fixed-point fractional library routines.
                                                             (line 1752)
* __satfractunsqisa:                     Fixed-point fractional library routines.
                                                             (line 1758)
* __satfractunsqisq:                     Fixed-point fractional library routines.
                                                             (line 1754)
* __satfractunsqita:                     Fixed-point fractional library routines.
                                                             (line 1760)
* __satfractunsqiuda:                    Fixed-point fractional library routines.
                                                             (line 1774)
* __satfractunsqiudq:                    Fixed-point fractional library routines.
                                                             (line 1768)
* __satfractunsqiuha:                    Fixed-point fractional library routines.
                                                             (line 1770)
* __satfractunsqiuhq:                    Fixed-point fractional library routines.
                                                             (line 1764)
* __satfractunsqiuqq:                    Fixed-point fractional library routines.
                                                             (line 1762)
* __satfractunsqiusa:                    Fixed-point fractional library routines.
                                                             (line 1772)
* __satfractunsqiusq:                    Fixed-point fractional library routines.
                                                             (line 1766)
* __satfractunsqiuta:                    Fixed-point fractional library routines.
                                                             (line 1776)
* __satfractunssida:                     Fixed-point fractional library routines.
                                                             (line 1810)
* __satfractunssidq:                     Fixed-point fractional library routines.
                                                             (line 1807)
* __satfractunssiha:                     Fixed-point fractional library routines.
                                                             (line 1808)
* __satfractunssihq:                     Fixed-point fractional library routines.
                                                             (line 1805)
* __satfractunssiqq:                     Fixed-point fractional library routines.
                                                             (line 1804)
* __satfractunssisa:                     Fixed-point fractional library routines.
                                                             (line 1809)
* __satfractunssisq:                     Fixed-point fractional library routines.
                                                             (line 1806)
* __satfractunssita:                     Fixed-point fractional library routines.
                                                             (line 1811)
* __satfractunssiuda:                    Fixed-point fractional library routines.
                                                             (line 1822)
* __satfractunssiudq:                    Fixed-point fractional library routines.
                                                             (line 1817)
* __satfractunssiuha:                    Fixed-point fractional library routines.
                                                             (line 1819)
* __satfractunssiuhq:                    Fixed-point fractional library routines.
                                                             (line 1814)
* __satfractunssiuqq:                    Fixed-point fractional library routines.
                                                             (line 1812)
* __satfractunssiusa:                    Fixed-point fractional library routines.
                                                             (line 1821)
* __satfractunssiusq:                    Fixed-point fractional library routines.
                                                             (line 1815)
* __satfractunssiuta:                    Fixed-point fractional library routines.
                                                             (line 1824)
* __satfractunstida:                     Fixed-point fractional library routines.
                                                             (line 1862)
* __satfractunstidq:                     Fixed-point fractional library routines.
                                                             (line 1857)
* __satfractunstiha:                     Fixed-point fractional library routines.
                                                             (line 1859)
* __satfractunstihq:                     Fixed-point fractional library routines.
                                                             (line 1854)
* __satfractunstiqq:                     Fixed-point fractional library routines.
                                                             (line 1852)
* __satfractunstisa:                     Fixed-point fractional library routines.
                                                             (line 1861)
* __satfractunstisq:                     Fixed-point fractional library routines.
                                                             (line 1855)
* __satfractunstita:                     Fixed-point fractional library routines.
                                                             (line 1864)
* __satfractunstiuda:                    Fixed-point fractional library routines.
                                                             (line 1878)
* __satfractunstiudq:                    Fixed-point fractional library routines.
                                                             (line 1872)
* __satfractunstiuha:                    Fixed-point fractional library routines.
                                                             (line 1874)
* __satfractunstiuhq:                    Fixed-point fractional library routines.
                                                             (line 1868)
* __satfractunstiuqq:                    Fixed-point fractional library routines.
                                                             (line 1866)
* __satfractunstiusa:                    Fixed-point fractional library routines.
                                                             (line 1876)
* __satfractunstiusq:                    Fixed-point fractional library routines.
                                                             (line 1870)
* __satfractunstiuta:                    Fixed-point fractional library routines.
                                                             (line 1880)
* __satfractuqqda:                       Fixed-point fractional library routines.
                                                             (line 1199)
* __satfractuqqdq:                       Fixed-point fractional library routines.
                                                             (line 1194)
* __satfractuqqha:                       Fixed-point fractional library routines.
                                                             (line 1196)
* __satfractuqqhq:                       Fixed-point fractional library routines.
                                                             (line 1191)
* __satfractuqqqq:                       Fixed-point fractional library routines.
                                                             (line 1189)
* __satfractuqqsa:                       Fixed-point fractional library routines.
                                                             (line 1198)
* __satfractuqqsq:                       Fixed-point fractional library routines.
                                                             (line 1192)
* __satfractuqqta:                       Fixed-point fractional library routines.
                                                             (line 1201)
* __satfractuqquda:                      Fixed-point fractional library routines.
                                                             (line 1213)
* __satfractuqqudq2:                     Fixed-point fractional library routines.
                                                             (line 1207)
* __satfractuqquha:                      Fixed-point fractional library routines.
                                                             (line 1209)
* __satfractuqquhq2:                     Fixed-point fractional library routines.
                                                             (line 1203)
* __satfractuqqusa:                      Fixed-point fractional library routines.
                                                             (line 1211)
* __satfractuqqusq2:                     Fixed-point fractional library routines.
                                                             (line 1205)
* __satfractuqquta:                      Fixed-point fractional library routines.
                                                             (line 1215)
* __satfractusada:                       Fixed-point fractional library routines.
                                                             (line 1326)
* __satfractusadq:                       Fixed-point fractional library routines.
                                                             (line 1323)
* __satfractusaha:                       Fixed-point fractional library routines.
                                                             (line 1324)
* __satfractusahq:                       Fixed-point fractional library routines.
                                                             (line 1321)
* __satfractusaqq:                       Fixed-point fractional library routines.
                                                             (line 1320)
* __satfractusasa:                       Fixed-point fractional library routines.
                                                             (line 1325)
* __satfractusasq:                       Fixed-point fractional library routines.
                                                             (line 1322)
* __satfractusata:                       Fixed-point fractional library routines.
                                                             (line 1327)
* __satfractusauda2:                     Fixed-point fractional library routines.
                                                             (line 1337)
* __satfractusaudq:                      Fixed-point fractional library routines.
                                                             (line 1333)
* __satfractusauha2:                     Fixed-point fractional library routines.
                                                             (line 1335)
* __satfractusauhq:                      Fixed-point fractional library routines.
                                                             (line 1330)
* __satfractusauqq:                      Fixed-point fractional library routines.
                                                             (line 1328)
* __satfractusausq:                      Fixed-point fractional library routines.
                                                             (line 1331)
* __satfractusauta2:                     Fixed-point fractional library routines.
                                                             (line 1339)
* __satfractusqda:                       Fixed-point fractional library routines.
                                                             (line 1247)
* __satfractusqdq:                       Fixed-point fractional library routines.
                                                             (line 1242)
* __satfractusqha:                       Fixed-point fractional library routines.
                                                             (line 1244)
* __satfractusqhq:                       Fixed-point fractional library routines.
                                                             (line 1240)
* __satfractusqqq:                       Fixed-point fractional library routines.
                                                             (line 1238)
* __satfractusqsa:                       Fixed-point fractional library routines.
                                                             (line 1246)
* __satfractusqsq:                       Fixed-point fractional library routines.
                                                             (line 1241)
* __satfractusqta:                       Fixed-point fractional library routines.
                                                             (line 1248)
* __satfractusquda:                      Fixed-point fractional library routines.
                                                             (line 1260)
* __satfractusqudq2:                     Fixed-point fractional library routines.
                                                             (line 1254)
* __satfractusquha:                      Fixed-point fractional library routines.
                                                             (line 1256)
* __satfractusquhq2:                     Fixed-point fractional library routines.
                                                             (line 1252)
* __satfractusquqq2:                     Fixed-point fractional library routines.
                                                             (line 1250)
* __satfractusqusa:                      Fixed-point fractional library routines.
                                                             (line 1258)
* __satfractusquta:                      Fixed-point fractional library routines.
                                                             (line 1262)
* __satfractutada:                       Fixed-point fractional library routines.
                                                             (line 1377)
* __satfractutadq:                       Fixed-point fractional library routines.
                                                             (line 1372)
* __satfractutaha:                       Fixed-point fractional library routines.
                                                             (line 1374)
* __satfractutahq:                       Fixed-point fractional library routines.
                                                             (line 1369)
* __satfractutaqq:                       Fixed-point fractional library routines.
                                                             (line 1367)
* __satfractutasa:                       Fixed-point fractional library routines.
                                                             (line 1376)
* __satfractutasq:                       Fixed-point fractional library routines.
                                                             (line 1370)
* __satfractutata:                       Fixed-point fractional library routines.
                                                             (line 1379)
* __satfractutauda2:                     Fixed-point fractional library routines.
                                                             (line 1393)
* __satfractutaudq:                      Fixed-point fractional library routines.
                                                             (line 1387)
* __satfractutauha2:                     Fixed-point fractional library routines.
                                                             (line 1389)
* __satfractutauhq:                      Fixed-point fractional library routines.
                                                             (line 1383)
* __satfractutauqq:                      Fixed-point fractional library routines.
                                                             (line 1381)
* __satfractutausa2:                     Fixed-point fractional library routines.
                                                             (line 1391)
* __satfractutausq:                      Fixed-point fractional library routines.
                                                             (line 1385)
* __splitstack_find:                     Miscellaneous routines.
                                                             (line   15)
* __ssaddda3:                            Fixed-point fractional library routines.
                                                             (line   66)
* __ssadddq3:                            Fixed-point fractional library routines.
                                                             (line   61)
* __ssaddha3:                            Fixed-point fractional library routines.
                                                             (line   63)
* __ssaddhq3:                            Fixed-point fractional library routines.
                                                             (line   59)
* __ssaddqq3:                            Fixed-point fractional library routines.
                                                             (line   57)
* __ssaddsa3:                            Fixed-point fractional library routines.
                                                             (line   65)
* __ssaddsq3:                            Fixed-point fractional library routines.
                                                             (line   60)
* __ssaddta3:                            Fixed-point fractional library routines.
                                                             (line   67)
* __ssashlda3:                           Fixed-point fractional library routines.
                                                             (line  401)
* __ssashldq3:                           Fixed-point fractional library routines.
                                                             (line  397)
* __ssashlha3:                           Fixed-point fractional library routines.
                                                             (line  399)
* __ssashlhq3:                           Fixed-point fractional library routines.
                                                             (line  395)
* __ssashlsa3:                           Fixed-point fractional library routines.
                                                             (line  400)
* __ssashlsq3:                           Fixed-point fractional library routines.
                                                             (line  396)
* __ssashlta3:                           Fixed-point fractional library routines.
                                                             (line  402)
* __ssdivda3:                            Fixed-point fractional library routines.
                                                             (line  260)
* __ssdivdq3:                            Fixed-point fractional library routines.
                                                             (line  255)
* __ssdivha3:                            Fixed-point fractional library routines.
                                                             (line  257)
* __ssdivhq3:                            Fixed-point fractional library routines.
                                                             (line  253)
* __ssdivqq3:                            Fixed-point fractional library routines.
                                                             (line  251)
* __ssdivsa3:                            Fixed-point fractional library routines.
                                                             (line  259)
* __ssdivsq3:                            Fixed-point fractional library routines.
                                                             (line  254)
* __ssdivta3:                            Fixed-point fractional library routines.
                                                             (line  261)
* __ssmulda3:                            Fixed-point fractional library routines.
                                                             (line  192)
* __ssmuldq3:                            Fixed-point fractional library routines.
                                                             (line  187)
* __ssmulha3:                            Fixed-point fractional library routines.
                                                             (line  189)
* __ssmulhq3:                            Fixed-point fractional library routines.
                                                             (line  185)
* __ssmulqq3:                            Fixed-point fractional library routines.
                                                             (line  183)
* __ssmulsa3:                            Fixed-point fractional library routines.
                                                             (line  191)
* __ssmulsq3:                            Fixed-point fractional library routines.
                                                             (line  186)
* __ssmulta3:                            Fixed-point fractional library routines.
                                                             (line  193)
* __ssnegda2:                            Fixed-point fractional library routines.
                                                             (line  315)
* __ssnegdq2:                            Fixed-point fractional library routines.
                                                             (line  312)
* __ssnegha2:                            Fixed-point fractional library routines.
                                                             (line  313)
* __ssneghq2:                            Fixed-point fractional library routines.
                                                             (line  310)
* __ssnegqq2:                            Fixed-point fractional library routines.
                                                             (line  309)
* __ssnegsa2:                            Fixed-point fractional library routines.
                                                             (line  314)
* __ssnegsq2:                            Fixed-point fractional library routines.
                                                             (line  311)
* __ssnegta2:                            Fixed-point fractional library routines.
                                                             (line  316)
* __sssubda3:                            Fixed-point fractional library routines.
                                                             (line  128)
* __sssubdq3:                            Fixed-point fractional library routines.
                                                             (line  123)
* __sssubha3:                            Fixed-point fractional library routines.
                                                             (line  125)
* __sssubhq3:                            Fixed-point fractional library routines.
                                                             (line  121)
* __sssubqq3:                            Fixed-point fractional library routines.
                                                             (line  119)
* __sssubsa3:                            Fixed-point fractional library routines.
                                                             (line  127)
* __sssubsq3:                            Fixed-point fractional library routines.
                                                             (line  122)
* __sssubta3:                            Fixed-point fractional library routines.
                                                             (line  129)
* __subda3:                              Fixed-point fractional library routines.
                                                             (line  106)
* __subdf3:                              Soft float library routines.
                                                             (line   30)
* __subdq3:                              Fixed-point fractional library routines.
                                                             (line   93)
* __subha3:                              Fixed-point fractional library routines.
                                                             (line  103)
* __subhq3:                              Fixed-point fractional library routines.
                                                             (line   91)
* __subqq3:                              Fixed-point fractional library routines.
                                                             (line   89)
* __subsa3:                              Fixed-point fractional library routines.
                                                             (line  105)
* __subsf3:                              Soft float library routines.
                                                             (line   29)
* __subsq3:                              Fixed-point fractional library routines.
                                                             (line   92)
* __subta3:                              Fixed-point fractional library routines.
                                                             (line  107)
* __subtf3:                              Soft float library routines.
                                                             (line   31)
* __subuda3:                             Fixed-point fractional library routines.
                                                             (line  113)
* __subudq3:                             Fixed-point fractional library routines.
                                                             (line  101)
* __subuha3:                             Fixed-point fractional library routines.
                                                             (line  109)
* __subuhq3:                             Fixed-point fractional library routines.
                                                             (line   97)
* __subuqq3:                             Fixed-point fractional library routines.
                                                             (line   95)
* __subusa3:                             Fixed-point fractional library routines.
                                                             (line  111)
* __subusq3:                             Fixed-point fractional library routines.
                                                             (line   99)
* __subuta3:                             Fixed-point fractional library routines.
                                                             (line  115)
* __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  244)
* __udivudq3:                            Fixed-point fractional library routines.
                                                             (line  238)
* __udivuha3:                            Fixed-point fractional library routines.
                                                             (line  240)
* __udivuhq3:                            Fixed-point fractional library routines.
                                                             (line  234)
* __udivuqq3:                            Fixed-point fractional library routines.
                                                             (line  232)
* __udivusa3:                            Fixed-point fractional library routines.
                                                             (line  242)
* __udivusq3:                            Fixed-point fractional library routines.
                                                             (line  236)
* __udivuta3:                            Fixed-point fractional library routines.
                                                             (line  246)
* __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   83)
* __usaddudq3:                           Fixed-point fractional library routines.
                                                             (line   77)
* __usadduha3:                           Fixed-point fractional library routines.
                                                             (line   79)
* __usadduhq3:                           Fixed-point fractional library routines.
                                                             (line   73)
* __usadduqq3:                           Fixed-point fractional library routines.
                                                             (line   71)
* __usaddusa3:                           Fixed-point fractional library routines.
                                                             (line   81)
* __usaddusq3:                           Fixed-point fractional library routines.
                                                             (line   75)
* __usadduta3:                           Fixed-point fractional library routines.
                                                             (line   85)
* __usashluda3:                          Fixed-point fractional library routines.
                                                             (line  419)
* __usashludq3:                          Fixed-point fractional library routines.
                                                             (line  413)
* __usashluha3:                          Fixed-point fractional library routines.
                                                             (line  415)
* __usashluhq3:                          Fixed-point fractional library routines.
                                                             (line  409)
* __usashluqq3:                          Fixed-point fractional library routines.
                                                             (line  407)
* __usashlusa3:                          Fixed-point fractional library routines.
                                                             (line  417)
* __usashlusq3:                          Fixed-point fractional library routines.
                                                             (line  411)
* __usashluta3:                          Fixed-point fractional library routines.
                                                             (line  421)
* __usdivuda3:                           Fixed-point fractional library routines.
                                                             (line  278)
* __usdivudq3:                           Fixed-point fractional library routines.
                                                             (line  272)
* __usdivuha3:                           Fixed-point fractional library routines.
                                                             (line  274)
* __usdivuhq3:                           Fixed-point fractional library routines.
                                                             (line  268)
* __usdivuqq3:                           Fixed-point fractional library routines.
                                                             (line  266)
* __usdivusa3:                           Fixed-point fractional library routines.
                                                             (line  276)
* __usdivusq3:                           Fixed-point fractional library routines.
                                                             (line  270)
* __usdivuta3:                           Fixed-point fractional library routines.
                                                             (line  280)
* __usmuluda3:                           Fixed-point fractional library routines.
                                                             (line  210)
* __usmuludq3:                           Fixed-point fractional library routines.
                                                             (line  204)
* __usmuluha3:                           Fixed-point fractional library routines.
                                                             (line  206)
* __usmuluhq3:                           Fixed-point fractional library routines.
                                                             (line  200)
* __usmuluqq3:                           Fixed-point fractional library routines.
                                                             (line  198)
* __usmulusa3:                           Fixed-point fractional library routines.
                                                             (line  208)
* __usmulusq3:                           Fixed-point fractional library routines.
                                                             (line  202)
* __usmuluta3:                           Fixed-point fractional library routines.
                                                             (line  212)
* __usneguda2:                           Fixed-point fractional library routines.
                                                             (line  329)
* __usnegudq2:                           Fixed-point fractional library routines.
                                                             (line  324)
* __usneguha2:                           Fixed-point fractional library routines.
                                                             (line  326)
* __usneguhq2:                           Fixed-point fractional library routines.
                                                             (line  321)
* __usneguqq2:                           Fixed-point fractional library routines.
                                                             (line  319)
* __usnegusa2:                           Fixed-point fractional library routines.
                                                             (line  328)
* __usnegusq2:                           Fixed-point fractional library routines.
                                                             (line  322)
* __usneguta2:                           Fixed-point fractional library routines.
                                                             (line  331)
* __ussubuda3:                           Fixed-point fractional library routines.
                                                             (line  146)
* __ussubudq3:                           Fixed-point fractional library routines.
                                                             (line  140)
* __ussubuha3:                           Fixed-point fractional library routines.
                                                             (line  142)
* __ussubuhq3:                           Fixed-point fractional library routines.
                                                             (line  136)
* __ussubuqq3:                           Fixed-point fractional library routines.
                                                             (line  134)
* __ussubusa3:                           Fixed-point fractional library routines.
                                                             (line  144)
* __ussubusq3:                           Fixed-point fractional library routines.
                                                             (line  138)
* __ussubuta3:                           Fixed-point fractional library routines.
                                                             (line  148)
* 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  306)
* 'addr_diff_vec', length of:            Insn Lengths.       (line   26)
* ADDR_EXPR:                             Storage References. (line    6)
* addr_vec:                              Side Effects.       (line  301)
* '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  288)
* '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  266)
* '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  132)
* 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 execution <1>:             Cond Exec Macros.   (line    6)
* Conditional Expressions:               Conditional Expressions.
                                                             (line    6)
* conditions, in patterns:               Patterns.           (line   43)
* cond_exec:                             Side Effects.       (line  253)
* 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_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   73)
* 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  209)
* 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  243)
* 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)
* predication <1>:                       Cond Exec Macros.   (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  316)
* '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   91)
* REVERSIBLE_CC_MODE:                    MODE_CC Condition Codes.
                                                             (line   77)
* 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_:                 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  258)
* 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  307)
* 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   83)
* 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_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   54)
* 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  119)
* 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  104)
* TARGET_FIXED_POINT_SUPPORTED_P:        Storage Layout.     (line  521)
* target_flags:                          Run-time Target.    (line   51)
* TARGET_FLAGS_REGNUM:                   Register Arguments. (line  391)
* 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_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   92)
* 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  291)
* unspec <1>:                            Constant Definitions.
                                                             (line  111)
* unspec_volatile:                       Side Effects.       (line  291)
* 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  314)
* 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  241)
* 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4877
Node: Portability5606
Node: Interface7394
Node: Libgcc10435
Node: Integer library routines12262
Node: Soft float library routines19104
Node: Decimal float library routines31042
Node: Fixed-point fractional library routines46800
Node: Exception handling routines147196
Node: Miscellaneous routines148303
Node: Languages150423
Node: Source Tree151970
Node: Configure Terms152552
Node: Top Level155508
Node: gcc Directory159083
Node: Subdirectories160035
Node: Configuration162203
Node: Config Fragments162923
Node: System Config164148
Node: Configuration Files165084
Node: Build167901
Node: Makefile168313
Ref: Makefile-Footnote-1175117
Ref: Makefile-Footnote-2175264
Node: Library Files175338
Node: Headers175900
Node: Documentation177983
Node: Texinfo Manuals178842
Node: Man Page Generation181171
Node: Miscellaneous Docs183084
Node: Front End184471
Node: Front End Directory188145
Node: Front End Config189461
Node: Front End Makefile192277
Node: Back End196045
Node: Testsuites199826
Node: Test Idioms200757
Node: Test Directives204155
Node: Directives204682
Node: Selectors214979
Node: Effective-Target Keywords216335
Ref: arm_neon_ok223889
Ref: arm_neonv2_ok224047
Ref: arm_neon_fp16_ok224219
Node: Add Options234594
Node: Require Support235791
Node: Final Actions238298
Node: Ada Tests243463
Node: C Tests244794
Node: libgcj Tests249189
Node: LTO Testing250316
Node: gcov Testing251964
Node: profopt Testing254954
Node: compat Testing256669
Node: Torture Tests260909
Node: Options262524
Node: Option file format262965
Node: Option properties269954
Node: Passes282830
Node: Parsing pass283570
Node: Gimplification pass287098
Node: Pass manager288931
Node: Tree SSA passes290726
Node: RTL passes313180
Node: RTL326295
Node: RTL Objects328476
Node: RTL Classes332350
Node: Accessors337347
Node: Special Accessors339741
Node: Flags345528
Node: Machine Modes360254
Node: Constants372564
Node: Regs and Memory379292
Node: Arithmetic397180
Node: Comparisons407262
Node: Bit-Fields411554
Node: Vector Operations413106
Node: Conversions414987
Node: RTL Declarations419485
Node: Side Effects420306
Node: Incdec436900
Node: Assembler440236
Node: Debug Information441781
Node: Insns442978
Node: Calls469469
Node: Sharing472062
Node: Reading RTL475173
Node: GENERIC476164
Node: Deficiencies478035
Node: Tree overview478276
Node: Macros and Functions482400
Node: Identifiers483225
Node: Containers484834
Node: Types485991
Node: Declarations498065
Node: Working with declarations498560
Node: Internal structure504164
Node: Current structure hierarchy504548
Node: Adding new DECL node types506641
Node: Attributes510713
Node: Expression trees511957
Node: Constant expressions513711
Node: Storage References517924
Node: Unary and Binary Expressions521443
Node: Vectors541295
Node: Statements546027
Node: Basic Statements546547
Node: Blocks551054
Node: Statement Sequences552458
Node: Empty Statements552791
Node: Jumps553365
Node: Cleanups554018
Node: OpenMP555785
Node: Functions561630
Node: Function Basics562101
Node: Function Properties565785
Node: Language-dependent trees568566
Node: C and C++ Trees569453
Node: Types for C++572357
Node: Namespaces577327
Node: Classes580433
Node: Functions for C++585510
Node: Statements for C++591761
Node: C++ Expressions599814
Node: Java Trees601319
Node: GIMPLE601432
Node: Tuple representation605056
Node: GIMPLE instruction set613360
Node: GIMPLE Exception Handling614976
Node: Temporaries616888
Ref: Temporaries-Footnote-1618206
Node: Operands618271
Node: Compound Expressions619032
Node: Compound Lvalues619266
Node: Conditional Expressions620028
Node: Logical Operators620687
Node: Manipulating GIMPLE statements627443
Node: Tuple specific accessors633379
Node: 'GIMPLE_ASM'634198
Node: 'GIMPLE_ASSIGN'636831
Node: 'GIMPLE_BIND'640937
Node: 'GIMPLE_CALL'642745
Node: 'GIMPLE_CATCH'647016
Node: 'GIMPLE_COND'648160
Node: 'GIMPLE_DEBUG'650948
Node: 'GIMPLE_EH_FILTER'654326
Node: 'GIMPLE_LABEL'655814
Node: 'GIMPLE_NOP'656789
Node: 'GIMPLE_OMP_ATOMIC_LOAD'657158
Node: 'GIMPLE_OMP_ATOMIC_STORE'658068
Node: 'GIMPLE_OMP_CONTINUE'658708
Node: 'GIMPLE_OMP_CRITICAL'660058
Node: 'GIMPLE_OMP_FOR'660996
Node: 'GIMPLE_OMP_MASTER'664511
Node: 'GIMPLE_OMP_ORDERED'664895
Node: 'GIMPLE_OMP_PARALLEL'665295
Node: 'GIMPLE_OMP_RETURN'668067
Node: 'GIMPLE_OMP_SECTION'668718
Node: 'GIMPLE_OMP_SECTIONS'669384
Node: 'GIMPLE_OMP_SINGLE'670991
Node: 'GIMPLE_PHI'671929
Node: 'GIMPLE_RESX'673216
Node: 'GIMPLE_RETURN'673935
Node: 'GIMPLE_SWITCH'674503
Node: 'GIMPLE_TRY'676305
Node: 'GIMPLE_WITH_CLEANUP_EXPR'678096
Node: GIMPLE sequences678979
Node: Sequence iterators682185
Node: Adding a new GIMPLE statement code690640
Node: Statement and operand traversals691916
Node: Tree SSA694508
Node: Annotations696325
Node: SSA Operands696851
Node: SSA711376
Node: Alias analysis723496
Node: Memory model727270
Node: Loop Analysis and Representation728629
Node: Loop representation729806
Node: Loop querying736723
Node: Loop manipulation739539
Node: LCSSA741900
Node: Scalar evolutions743969
Node: loop-iv747213
Node: Number of iterations749135
Node: Dependency analysis751941
Node: Lambda758306
Node: Omega759978
Node: Control Flow761543
Node: Basic Blocks763319
Node: Edges768608
Node: Profile information777237
Node: Maintaining the CFG781921
Node: Liveness information787782
Node: Machine Desc789908
Node: Overview792451
Node: Patterns794491
Node: Example797929
Node: RTL Template799363
Node: Output Template810018
Node: Output Statement813981
Node: Predicates818320
Node: Machine-Independent Predicates821238
Node: Defining Predicates826182
Node: Constraints832145
Node: Simple Constraints833627
Node: Multi-Alternative846467
Node: Class Preferences849308
Node: Modifiers850200
Node: Machine Constraints854446
Node: Disable Insn Alternatives906312
Node: Define Constraints909216
Node: C Constraint Interface916001
Node: Standard Names919653
Ref: shift patterns942197
Ref: prologue instruction pattern987100
Ref: window_save instruction pattern987593
Ref: epilogue instruction pattern987870
Node: Pattern Ordering1005456
Node: Dependent Patterns1006692
Node: Jump Patterns1008312
Ref: Jump Patterns-Footnote-11010459
Node: Looping Patterns1010507
Node: Insn Canonicalizations1015236
Node: Expander Definitions1019821
Node: Insn Splitting1028035
Node: Including Patterns1037638
Node: Peephole Definitions1039422
Node: define_peephole1040675
Node: define_peephole21047005
Node: Insn Attributes1050072
Node: Defining Attributes1051178
Ref: define_enum_attr1054393
Node: Expressions1055429
Node: Tagging Insns1062179
Node: Attr Example1066532
Node: Insn Lengths1068905
Node: Constant Attributes1071964
Node: Delay Slots1073133
Node: Processor pipeline description1076357
Ref: Processor pipeline description-Footnote-11095175
Node: Conditional Execution1095499
Node: Define Subst1098562
Node: Define Subst Example1100598
Node: Define Subst Pattern Matching1103592
Node: Define Subst Output Template1104818
Node: Constant Definitions1106888
Ref: define_enum1110670
Node: Iterators1111158
Node: Mode Iterators1111736
Node: Defining Mode Iterators1112714
Node: Substitutions1114208
Node: Examples1116450
Node: Code Iterators1117898
Node: Int Iterators1120177
Node: Subst Iterators1122638
Node: Target Macros1124330
Node: Target Structure1127418
Node: Driver1129534
Node: Run-time Target1148319
Node: Per-Function Data1157484
Node: Storage Layout1160248
Node: Type Layout1186303
Node: Registers1201626
Node: Register Basics1202600
Node: Allocation Order1208108
Node: Values in Registers1210554
Node: Leaf Functions1218032
Node: Stack Registers1220891
Node: Register Classes1222163
Node: Old Constraints1252130
Node: Stack and Calling1259270
Node: Frame Layout1259804
Node: Exception Handling1270680
Node: Stack Checking1276892
Node: Frame Registers1281706
Node: Elimination1289965
Node: Stack Arguments1294195
Node: Register Arguments1301058
Node: Scalar Return1321361
Node: Aggregate Return1327448
Node: Caller Saves1331659
Node: Function Entry1332836
Node: Profiling1343930
Node: Tail Calls1345629
Node: Stack Smashing Protection1347532
Node: Varargs1349160
Node: Trampolines1355847
Node: Library Calls1361890
Node: Addressing Modes1366829
Node: Anchored Addresses1386844
Node: Condition Code1389487
Node: CC0 Condition Codes1391616
Node: MODE_CC Condition Codes1394862
Node: Cond Exec Macros1401386
Node: Costs1401732
Node: Scheduling1418194
Node: Sections1437611
Node: PIC1453309
Node: Assembler Format1455368
Node: File Framework1456506
Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1463438
Node: Data Output1466708
Node: Uninitialized Data1474477
Node: Label Output1479488
Node: Initialization1502444
Node: Macros for Initialization1508405
Node: Instruction Output1515124
Node: Dispatch Tables1525619
Node: Exception Region Output1529997
Node: Alignment Output1536675
Node: Debugging Info1541221
Node: All Debuggers1541891
Node: DBX Options1544746
Node: DBX Hooks1550184
Node: File Names and DBX1551493
Node: SDB and DWARF1553605
Node: VMS Debug1559677
Node: Floating Point1560264
Node: Mode Switching1564740
Node: Target Attributes1568736
Node: Emulated TLS1577050
Node: MIPS Coprocessors1580440
Node: PCH Target1581737
Node: C++ ABI1583579
Node: Named Address Spaces1588373
Node: Misc1593307
Ref: TARGET_SHIFT_TRUNCATION_MASK1600049
Node: Host Config1645205
Node: Host Common1646273
Node: Filesystem1648647
Node: Host Misc1652762
Node: Fragments1655211
Node: Target Fragment1656406
Node: Host Fragment1667034
Node: Collect21667274
Node: Header Dirs1669910
Node: Type Information1671333
Node: GTY Options1674552
Node: User GC1688886
Node: GGC Roots1692617
Node: Files1693330
Node: Invoking the garbage collector1696037
Node: Troubleshooting1697542
Node: Plugins1698617
Node: Plugins loading1699735
Node: Plugin API1700605
Node: Plugins pass1707633
Node: Plugins GC1709604
Node: Plugins description1711269
Node: Plugins attr1711805
Node: Plugins recording1713692
Node: Plugins gate1714542
Node: Plugins tracking1715133
Node: Plugins building1715721
Node: LTO1717508
Node: LTO Overview1718369
Node: LTO object file layout1724201
Node: IPA1728831
Node: WHOPR1737796
Node: Internal flags1742485
Node: Funding1743697
Node: GNU Project1746181
Node: Copying1746830
Node: GNU Free Documentation License1784342
Node: Contributors1809463
Node: Option Index1846864
Node: Concept Index1847668

End Tag Table
